@spaceinvoices/react-ui 0.4.3 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/common/autocomplete.tsx +18 -2
- package/src/components/advance-invoices/create/create-advance-invoice-form.tsx +61 -12
- package/src/components/advance-invoices/create/locales/de.ts +17 -0
- package/src/components/advance-invoices/create/locales/es.ts +17 -0
- package/src/components/advance-invoices/create/locales/fr.ts +17 -0
- package/src/components/advance-invoices/create/locales/hr.ts +16 -0
- package/src/components/advance-invoices/create/locales/it.ts +17 -0
- package/src/components/advance-invoices/create/locales/nl.ts +17 -0
- package/src/components/advance-invoices/create/locales/pl.ts +16 -0
- package/src/components/advance-invoices/create/locales/pt.ts +16 -0
- package/src/components/advance-invoices/create/locales/sl.ts +16 -0
- package/src/components/advance-invoices/create/prepare-advance-invoice-submission.ts +0 -1
- package/src/components/advance-invoices/list/list-row-actions.tsx +48 -1
- package/src/components/advance-invoices/list/list-table.tsx +100 -50
- package/src/components/advance-invoices/list/locales/de.ts +9 -0
- package/src/components/advance-invoices/list/locales/en.ts +7 -0
- package/src/components/advance-invoices/list/locales/es.ts +9 -0
- package/src/components/advance-invoices/list/locales/fr.ts +9 -0
- package/src/components/advance-invoices/list/locales/hr.ts +8 -0
- package/src/components/advance-invoices/list/locales/it.ts +9 -0
- package/src/components/advance-invoices/list/locales/nl.ts +9 -0
- package/src/components/advance-invoices/list/locales/pl.ts +8 -0
- package/src/components/advance-invoices/list/locales/pt.ts +9 -0
- package/src/components/advance-invoices/list/locales/sl.ts +8 -0
- package/src/components/credit-notes/create/create-credit-note-form.tsx +185 -11
- package/src/components/credit-notes/create/locales/de.ts +18 -0
- package/src/components/credit-notes/create/locales/es.ts +18 -0
- package/src/components/credit-notes/create/locales/fr.ts +18 -0
- package/src/components/credit-notes/create/locales/hr.ts +17 -0
- package/src/components/credit-notes/create/locales/it.ts +18 -0
- package/src/components/credit-notes/create/locales/nl.ts +18 -0
- package/src/components/credit-notes/create/locales/pl.ts +17 -0
- package/src/components/credit-notes/create/locales/pt.ts +17 -0
- package/src/components/credit-notes/create/locales/sl.ts +18 -1
- package/src/components/credit-notes/credit-notes.hooks.ts +30 -0
- package/src/components/credit-notes/list/list-row-actions.tsx +44 -1
- package/src/components/credit-notes/list/list-table.tsx +93 -32
- package/src/components/credit-notes/list/locales/de.ts +7 -0
- package/src/components/credit-notes/list/locales/en.ts +6 -0
- package/src/components/credit-notes/list/locales/es.ts +7 -0
- package/src/components/credit-notes/list/locales/fr.ts +7 -0
- package/src/components/credit-notes/list/locales/hr.ts +7 -0
- package/src/components/credit-notes/list/locales/it.ts +7 -0
- package/src/components/credit-notes/list/locales/nl.ts +7 -0
- package/src/components/credit-notes/list/locales/pl.ts +7 -0
- package/src/components/credit-notes/list/locales/pt.ts +7 -0
- package/src/components/credit-notes/list/locales/sl.ts +7 -0
- package/src/components/customers/customer-list-table/customer-list-table.tsx +0 -3
- package/src/components/customers/customer-list-table/locales/de.ts +1 -0
- package/src/components/customers/customer-list-table/locales/es.ts +1 -0
- package/src/components/customers/customer-list-table/locales/fr.ts +1 -0
- package/src/components/customers/customer-list-table/locales/hr.ts +1 -0
- package/src/components/customers/customer-list-table/locales/it.ts +1 -0
- package/src/components/customers/customer-list-table/locales/nl.ts +1 -0
- package/src/components/customers/customer-list-table/locales/pl.ts +1 -0
- package/src/components/customers/customer-list-table/locales/pt.ts +1 -0
- package/src/components/customers/customer-list-table/locales/sl.ts +1 -0
- package/src/components/dashboard/collection-rate-card/use-collection-rate.ts +48 -9
- package/src/components/dashboard/revenue-trend-chart/use-revenue-trend.ts +77 -48
- package/src/components/dashboard/shared/use-revenue-data.ts +77 -9
- package/src/components/delivery-notes/create/create-delivery-note-form.tsx +67 -7
- package/src/components/delivery-notes/create/locales/de.ts +16 -0
- package/src/components/delivery-notes/create/locales/es.ts +16 -0
- package/src/components/delivery-notes/create/locales/fr.ts +16 -0
- package/src/components/delivery-notes/create/locales/hr.ts +16 -0
- package/src/components/delivery-notes/create/locales/it.ts +16 -0
- package/src/components/delivery-notes/create/locales/nl.ts +16 -0
- package/src/components/delivery-notes/create/locales/pl.ts +16 -0
- package/src/components/delivery-notes/create/locales/pt.ts +16 -0
- package/src/components/delivery-notes/create/locales/sl.ts +17 -1
- package/src/components/delivery-notes/list/list-row-actions.tsx +20 -1
- package/src/components/delivery-notes/list/list-table.tsx +50 -8
- package/src/components/delivery-notes/list/locales/de.ts +35 -0
- package/src/components/delivery-notes/list/locales/en.ts +33 -0
- package/src/components/delivery-notes/list/locales/es.ts +35 -0
- package/src/components/delivery-notes/list/locales/fr.ts +35 -0
- package/src/components/delivery-notes/list/locales/hr.ts +35 -0
- package/src/components/delivery-notes/list/locales/it.ts +35 -0
- package/src/components/delivery-notes/list/locales/nl.ts +35 -0
- package/src/components/delivery-notes/list/locales/pl.ts +35 -0
- package/src/components/delivery-notes/list/locales/pt.ts +35 -0
- package/src/components/delivery-notes/list/locales/sl.ts +35 -0
- package/src/components/documents/create/document-add-item-form.tsx +70 -0
- package/src/components/documents/create/document-details-section.tsx +163 -29
- package/src/components/documents/create/document-items-section.tsx +21 -4
- package/src/components/documents/create/linked-documents-info.tsx +82 -0
- package/src/components/documents/create/live-preview.tsx +25 -5
- package/src/components/documents/create/mark-as-paid-section.tsx +29 -20
- package/src/components/documents/create/prepare-document-submission.ts +19 -7
- package/src/components/documents/shared/document-preview-display.tsx +3 -4
- package/src/components/documents/types.ts +2 -2
- package/src/components/documents/view/document-actions-bar.tsx +7 -27
- package/src/components/documents/view/document-activities-list.tsx +65 -47
- package/src/components/documents/view/document-details-card.tsx +118 -76
- package/src/components/documents/view/document-payments-list.tsx +99 -65
- package/src/components/documents/view/document-relations-list.tsx +43 -28
- package/src/components/documents/view/document-sidebar.tsx +151 -0
- package/src/components/documents/view/index.ts +2 -0
- package/src/components/documents/view/locales/de.ts +4 -0
- package/src/components/documents/view/locales/es.ts +4 -0
- package/src/components/documents/view/locales/fr.ts +4 -0
- package/src/components/documents/view/locales/hr.ts +4 -0
- package/src/components/documents/view/locales/it.ts +4 -0
- package/src/components/documents/view/locales/nl.ts +4 -0
- package/src/components/documents/view/locales/pl.ts +4 -0
- package/src/components/documents/view/locales/pt.ts +4 -0
- package/src/components/documents/view/locales/sl.ts +5 -1
- package/src/components/documents/view/use-document-download.ts +7 -3
- package/src/components/entities/create-entity-form.tsx +166 -13
- package/src/components/entities/entity-settings-form/entity-settings-form.tsx +101 -1
- package/src/components/entities/entity-settings-form/input-with-preview.tsx +30 -2
- package/src/components/entities/entity-settings-form/locales/de.ts +10 -0
- package/src/components/entities/entity-settings-form/locales/es.ts +10 -0
- package/src/components/entities/entity-settings-form/locales/fr.ts +10 -0
- package/src/components/entities/entity-settings-form/locales/hr.ts +10 -0
- package/src/components/entities/entity-settings-form/locales/it.ts +10 -0
- package/src/components/entities/entity-settings-form/locales/nl.ts +10 -0
- package/src/components/entities/entity-settings-form/locales/pl.ts +10 -0
- package/src/components/entities/entity-settings-form/locales/pt.ts +10 -0
- package/src/components/entities/entity-settings-form/locales/sl.ts +10 -0
- package/src/components/entities/fina-settings-form/fina-settings-form.tsx +6 -6
- package/src/components/entities/fina-settings-form/locales/de.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/en.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/es.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/fr.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/hr.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/it.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/nl.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/pl.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/pt.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/sl.ts +2 -2
- package/src/components/entities/furs-settings-form/locales/en.ts +0 -1
- package/src/components/entities/settings/company-settings-form.tsx +173 -20
- package/src/components/entities/settings/pdf-template-selector/locales/de.ts +3 -1
- package/src/components/entities/settings/pdf-template-selector/locales/es.ts +3 -1
- package/src/components/entities/settings/pdf-template-selector/locales/fr.ts +4 -1
- package/src/components/entities/settings/pdf-template-selector/locales/hr.ts +4 -1
- package/src/components/entities/settings/pdf-template-selector/locales/it.ts +3 -1
- package/src/components/entities/settings/pdf-template-selector/locales/nl.ts +3 -1
- package/src/components/entities/settings/pdf-template-selector/locales/pl.ts +3 -1
- package/src/components/entities/settings/pdf-template-selector/locales/pt.ts +3 -1
- package/src/components/entities/settings/pdf-template-selector/locales/sl.ts +3 -1
- package/src/components/entities/settings/pdf-template-selector/pdf-template-cards.tsx +1 -0
- package/src/components/estimates/create/create-estimate-form.tsx +93 -8
- package/src/components/estimates/create/locales/de.ts +16 -0
- package/src/components/estimates/create/locales/es.ts +16 -0
- package/src/components/estimates/create/locales/fr.ts +16 -0
- package/src/components/estimates/create/locales/hr.ts +16 -0
- package/src/components/estimates/create/locales/it.ts +16 -0
- package/src/components/estimates/create/locales/nl.ts +16 -0
- package/src/components/estimates/create/locales/pl.ts +16 -0
- package/src/components/estimates/create/locales/pt.ts +16 -0
- package/src/components/estimates/create/locales/sl.ts +17 -1
- package/src/components/estimates/list/list-table.tsx +14 -8
- package/src/components/estimates/list/locales/de.ts +2 -0
- package/src/components/estimates/list/locales/en.ts +1 -0
- package/src/components/estimates/list/locales/es.ts +2 -0
- package/src/components/estimates/list/locales/fr.ts +2 -0
- package/src/components/estimates/list/locales/hr.ts +2 -0
- package/src/components/estimates/list/locales/it.ts +2 -0
- package/src/components/estimates/list/locales/nl.ts +2 -0
- package/src/components/estimates/list/locales/pl.ts +2 -0
- package/src/components/estimates/list/locales/pt.ts +2 -0
- package/src/components/estimates/list/locales/sl.ts +2 -0
- package/src/components/export/document-export-form.tsx +55 -14
- package/src/components/export/index.ts +2 -0
- package/src/components/export/sales-per-item-export-form.tsx +223 -0
- package/src/components/invoices/create/create-invoice-form.tsx +106 -11
- package/src/components/invoices/create/locales/de.ts +26 -0
- package/src/components/invoices/create/locales/es.ts +26 -0
- package/src/components/invoices/create/locales/fr.ts +26 -0
- package/src/components/invoices/create/locales/hr.ts +25 -0
- package/src/components/invoices/create/locales/it.ts +26 -0
- package/src/components/invoices/create/locales/nl.ts +26 -0
- package/src/components/invoices/create/locales/pl.ts +25 -0
- package/src/components/invoices/create/locales/pt.ts +25 -0
- package/src/components/invoices/create/locales/sl.ts +26 -1
- package/src/components/invoices/invoices-furs.hooks.ts +4 -1
- package/src/components/invoices/list/list-table.tsx +77 -31
- package/src/components/invoices/list/locales/de.ts +5 -0
- package/src/components/invoices/list/locales/en.ts +4 -0
- package/src/components/invoices/list/locales/es.ts +5 -0
- package/src/components/invoices/list/locales/fr.ts +5 -0
- package/src/components/invoices/list/locales/hr.ts +5 -0
- package/src/components/invoices/list/locales/it.ts +5 -0
- package/src/components/invoices/list/locales/nl.ts +5 -0
- package/src/components/invoices/list/locales/pl.ts +5 -0
- package/src/components/invoices/list/locales/pt.ts +5 -0
- package/src/components/invoices/list/locales/sl.ts +5 -0
- package/src/components/invoices/view/fiscalization-status-card.tsx +44 -24
- package/src/components/items/item-combobox.tsx +5 -3
- package/src/components/items/item-list-table/item-list-header.tsx +4 -17
- package/src/components/items/item-list-table/item-list-table.tsx +3 -3
- package/src/components/items/item-list-table/locales/de.ts +1 -0
- package/src/components/items/item-list-table/locales/es.ts +1 -0
- package/src/components/items/item-list-table/locales/fr.ts +1 -0
- package/src/components/items/item-list-table/locales/hr.ts +1 -0
- package/src/components/items/item-list-table/locales/it.ts +1 -0
- package/src/components/items/item-list-table/locales/nl.ts +1 -0
- package/src/components/items/item-list-table/locales/pl.ts +1 -0
- package/src/components/items/item-list-table/locales/pt.ts +1 -0
- package/src/components/items/item-list-table/locales/sl.ts +1 -0
- package/src/components/payments/list/list-table.tsx +0 -4
- package/src/components/payments/list/locales/de.ts +1 -0
- package/src/components/payments/list/locales/es.ts +1 -0
- package/src/components/payments/list/locales/fr.ts +1 -0
- package/src/components/payments/list/locales/hr.ts +1 -0
- package/src/components/payments/list/locales/it.ts +1 -0
- package/src/components/payments/list/locales/nl.ts +1 -0
- package/src/components/payments/list/locales/pl.ts +1 -0
- package/src/components/payments/list/locales/pt.ts +1 -0
- package/src/components/payments/list/locales/sl.ts +1 -0
- package/src/components/recurring-invoices/list/list-table.tsx +0 -7
- package/src/components/recurring-invoices/list/locales/de.ts +1 -0
- package/src/components/recurring-invoices/list/locales/es.ts +1 -0
- package/src/components/recurring-invoices/list/locales/fr.ts +1 -0
- package/src/components/recurring-invoices/list/locales/hr.ts +1 -0
- package/src/components/recurring-invoices/list/locales/it.ts +1 -0
- package/src/components/recurring-invoices/list/locales/nl.ts +1 -0
- package/src/components/recurring-invoices/list/locales/pl.ts +1 -0
- package/src/components/recurring-invoices/list/locales/pt.ts +1 -0
- package/src/components/recurring-invoices/list/locales/sl.ts +1 -0
- package/src/components/request-logs/request-log-list-table.tsx +0 -3
- package/src/components/table/README.md +14 -121
- package/src/components/table/data-table.tsx +22 -37
- package/src/components/table/hooks/use-table-state.ts +3 -27
- package/src/components/table/index.ts +0 -2
- package/src/components/table/search-input.tsx +17 -0
- package/src/components/table/selection-toolbar.tsx +35 -1
- package/src/components/table/table-empty-state.tsx +6 -3
- package/src/components/table/table-no-results.tsx +10 -5
- package/src/components/table/types.ts +0 -5
- package/src/components/taxes/tax-list-table/locales/de.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/es.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/fr.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/hr.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/it.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/nl.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/pl.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/pt.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/sl.ts +1 -0
- package/src/components/taxes/tax-list-table/tax-list-header.tsx +3 -14
- package/src/components/taxes/tax-list-table/tax-list-table.tsx +3 -3
- package/src/components/ui/popover.tsx +3 -1
- package/src/components/ui/tooltip.tsx +3 -1
- package/src/generated/schemas/advanceinvoice.ts +4 -2
- package/src/generated/schemas/creditnote.ts +2 -1
- package/src/generated/schemas/deliverynote.ts +2 -1
- package/src/generated/schemas/estimate.ts +4 -2
- package/src/generated/schemas/index.ts +1 -1
- package/src/generated/schemas/invoice.ts +2 -1
- package/src/generated/schemas/renderadvanceinvoicepreview_body.ts +17 -23
- package/src/generated/schemas/rendercreditnotepreview_body.ts +17 -23
- package/src/generated/schemas/renderdeliverynotepreview_body.ts +17 -23
- package/src/generated/schemas/renderestimatepreview_body.ts +17 -23
- package/src/generated/schemas/renderinvoicepreview_body.ts +19 -23
- package/src/hooks/use-duplicate-document.ts +56 -14
- package/src/hooks/use-vies-check.ts +3 -0
- package/src/lib/fiscalization.ts +12 -0
- package/src/lib/schemas/advance-invoice.ts +0 -1
- package/src/components/table/sortable-header.tsx +0 -56
|
@@ -11,6 +11,7 @@ import { Form } from "@/ui/components/ui/form";
|
|
|
11
11
|
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/ui/components/ui/tooltip";
|
|
12
12
|
import { createEstimateSchema } from "@/ui/generated/schemas";
|
|
13
13
|
import { useNextDocumentNumber } from "@/ui/hooks/use-next-document-number";
|
|
14
|
+
import { useViesCheck } from "@/ui/hooks/use-vies-check";
|
|
14
15
|
import type { ComponentTranslationProps } from "@/ui/lib/translation";
|
|
15
16
|
import { createTranslation } from "@/ui/lib/translation";
|
|
16
17
|
import { useEntities } from "@/ui/providers/entities-context";
|
|
@@ -20,6 +21,7 @@ import {
|
|
|
20
21
|
DocumentDetailsSection,
|
|
21
22
|
DocumentNoteField,
|
|
22
23
|
DocumentPaymentTermsField,
|
|
24
|
+
DocumentTaxClauseField,
|
|
23
25
|
} from "../../documents/create/document-details-section";
|
|
24
26
|
import { DocumentItemsSection, type PriceModesMap } from "../../documents/create/document-items-section";
|
|
25
27
|
import { DocumentRecipientSection } from "../../documents/create/document-recipient-section";
|
|
@@ -37,6 +39,12 @@ import sl from "./locales/sl";
|
|
|
37
39
|
import { prepareEstimateSubmission } from "./prepare-estimate-submission";
|
|
38
40
|
import { useEstimateCustomerForm } from "./use-estimate-customer-form";
|
|
39
41
|
|
|
42
|
+
function calculateDueDate(dateIso: string, days: number): string {
|
|
43
|
+
const date = new Date(dateIso);
|
|
44
|
+
date.setDate(date.getDate() + days);
|
|
45
|
+
return date.toISOString();
|
|
46
|
+
}
|
|
47
|
+
|
|
40
48
|
const translations = {
|
|
41
49
|
sl,
|
|
42
50
|
de,
|
|
@@ -101,6 +109,7 @@ export default function CreateEstimateForm({
|
|
|
101
109
|
|
|
102
110
|
// Get default estimate note from entity settings
|
|
103
111
|
const defaultEstimateNote = (activeEntity?.settings as any)?.default_estimate_note || "";
|
|
112
|
+
const defaultEstimateValidDays = (activeEntity?.settings as any)?.default_estimate_valid_days ?? 30;
|
|
104
113
|
|
|
105
114
|
// Fetch next estimate number
|
|
106
115
|
const { data: nextNumberData } = useNextDocumentNumber(entityId, "estimate", {
|
|
@@ -119,13 +128,18 @@ export default function CreateEstimateForm({
|
|
|
119
128
|
// Cast customer to form schema type (API type may have additional fields)
|
|
120
129
|
customer: (initialValues?.customer as CreateEstimateFormValues["customer"]) ?? undefined,
|
|
121
130
|
items: initialValues?.items?.length
|
|
122
|
-
? initialValues.items.map((item) => ({
|
|
131
|
+
? initialValues.items.map((item: any) => ({
|
|
132
|
+
type: item.type,
|
|
123
133
|
name: item.name || "",
|
|
124
134
|
description: item.description || "",
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
135
|
+
...(item.type !== "separator"
|
|
136
|
+
? {
|
|
137
|
+
quantity: item.quantity ?? 1,
|
|
138
|
+
// Use gross_price if set, otherwise use price
|
|
139
|
+
price: item.gross_price ?? item.price,
|
|
140
|
+
taxes: item.taxes || [],
|
|
141
|
+
}
|
|
142
|
+
: {}),
|
|
129
143
|
}))
|
|
130
144
|
: [
|
|
131
145
|
{
|
|
@@ -138,7 +152,11 @@ export default function CreateEstimateForm({
|
|
|
138
152
|
],
|
|
139
153
|
currency_code: initialValues?.currency_code || activeEntity?.currency_code || "EUR",
|
|
140
154
|
note: initialValues?.note ?? defaultEstimateNote,
|
|
155
|
+
tax_clause: (initialValues as any)?.tax_clause ?? "",
|
|
141
156
|
payment_terms: initialValues?.payment_terms ?? defaultPaymentTerms,
|
|
157
|
+
date_valid_till:
|
|
158
|
+
initialValues?.date_valid_till ||
|
|
159
|
+
calculateDueDate(initialValues?.date || new Date().toISOString(), defaultEstimateValidDays),
|
|
142
160
|
},
|
|
143
161
|
});
|
|
144
162
|
|
|
@@ -165,13 +183,20 @@ export default function CreateEstimateForm({
|
|
|
165
183
|
}
|
|
166
184
|
}, [nextNumberData?.number, form]);
|
|
167
185
|
|
|
168
|
-
// Update default note when entity loads
|
|
186
|
+
// Update default note and valid-till date when entity loads
|
|
169
187
|
useEffect(() => {
|
|
170
188
|
const entityDefaultNote = (activeEntity?.settings as any)?.default_estimate_note;
|
|
171
189
|
if (entityDefaultNote && !form.getValues("note")) {
|
|
172
190
|
form.setValue("note", entityDefaultNote);
|
|
173
191
|
}
|
|
174
|
-
|
|
192
|
+
if (!initialValues?.date_valid_till) {
|
|
193
|
+
const validDays = (activeEntity?.settings as any)?.default_estimate_valid_days ?? 30;
|
|
194
|
+
const currentDate = form.getValues("date");
|
|
195
|
+
if (currentDate) {
|
|
196
|
+
form.setValue("date_valid_till", calculateDueDate(currentDate, validDays));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}, [activeEntity, form, initialValues?.date_valid_till]);
|
|
175
200
|
|
|
176
201
|
// Auto-add tax field for tax subject entities
|
|
177
202
|
useEffect(() => {
|
|
@@ -217,6 +242,37 @@ export default function CreateEstimateForm({
|
|
|
217
242
|
control: form.control,
|
|
218
243
|
});
|
|
219
244
|
|
|
245
|
+
// ============================================================================
|
|
246
|
+
// VIES Check - determine if reverse charge applies
|
|
247
|
+
// ============================================================================
|
|
248
|
+
const {
|
|
249
|
+
reverseChargeApplies,
|
|
250
|
+
transactionType,
|
|
251
|
+
isFetching: isViesFetching,
|
|
252
|
+
warning: viesWarning,
|
|
253
|
+
} = useViesCheck({
|
|
254
|
+
issuerCountryCode: activeEntity?.country_code,
|
|
255
|
+
isTaxSubject: activeEntity?.is_tax_subject ?? true,
|
|
256
|
+
customerCountry: formValues.customer?.country,
|
|
257
|
+
customerCountryCode: formValues.customer?.country_code,
|
|
258
|
+
customerTaxNumber: formValues.customer?.tax_number,
|
|
259
|
+
enabled: !!activeEntity,
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
// Auto-populate tax_clause from entity settings when transaction type changes
|
|
263
|
+
const effectiveTransactionType = transactionType ?? "domestic";
|
|
264
|
+
const prevTransactionTypeRef = useRef<string | undefined>(undefined);
|
|
265
|
+
useEffect(() => {
|
|
266
|
+
if (effectiveTransactionType === prevTransactionTypeRef.current) return;
|
|
267
|
+
prevTransactionTypeRef.current = effectiveTransactionType;
|
|
268
|
+
|
|
269
|
+
const taxClauseDefaults = (activeEntity?.settings as any)?.tax_clause_defaults;
|
|
270
|
+
if (!taxClauseDefaults) return;
|
|
271
|
+
|
|
272
|
+
const clause = taxClauseDefaults[effectiveTransactionType] ?? "";
|
|
273
|
+
form.setValue("tax_clause", clause);
|
|
274
|
+
}, [effectiveTransactionType, activeEntity, form]);
|
|
275
|
+
|
|
220
276
|
// Extract customer management logic into a custom hook
|
|
221
277
|
const {
|
|
222
278
|
originalCustomer,
|
|
@@ -287,7 +343,7 @@ export default function CreateEstimateForm({
|
|
|
287
343
|
useFormFooterRegistration({
|
|
288
344
|
formId: "create-estimate-form",
|
|
289
345
|
isPending,
|
|
290
|
-
isDirty: form.formState.isDirty,
|
|
346
|
+
isDirty: form.formState.isDirty || !!initialValues,
|
|
291
347
|
label: titleType === "estimate" ? t("Create Estimate") : t("Create Quote"),
|
|
292
348
|
secondaryAction,
|
|
293
349
|
});
|
|
@@ -300,6 +356,16 @@ export default function CreateEstimateForm({
|
|
|
300
356
|
}
|
|
301
357
|
}, [activeEntity, form]);
|
|
302
358
|
|
|
359
|
+
// Recalculate valid-till date when document date changes
|
|
360
|
+
const prevDateRef = useRef(form.getValues("date"));
|
|
361
|
+
useEffect(() => {
|
|
362
|
+
const currentDate = formValues.date;
|
|
363
|
+
if (!currentDate || currentDate === prevDateRef.current) return;
|
|
364
|
+
prevDateRef.current = currentDate;
|
|
365
|
+
const validDays = (activeEntity?.settings as any)?.default_estimate_valid_days ?? 30;
|
|
366
|
+
form.setValue("date_valid_till", calculateDueDate(currentDate, validDays));
|
|
367
|
+
}, [formValues.date, activeEntity, form]);
|
|
368
|
+
|
|
303
369
|
useEffect(() => {
|
|
304
370
|
const callback = onChangeRef.current;
|
|
305
371
|
if (!callback) return;
|
|
@@ -365,6 +431,10 @@ export default function CreateEstimateForm({
|
|
|
365
431
|
maxTaxesPerItem={activeEntity?.country_rules?.max_taxes_per_item}
|
|
366
432
|
priceModesRef={priceModesRef}
|
|
367
433
|
initialPriceModes={initialPriceModes}
|
|
434
|
+
taxesDisabled={reverseChargeApplies}
|
|
435
|
+
taxesDisabledMessage={
|
|
436
|
+
reverseChargeApplies ? t("Reverse charge - tax exempt EU B2B sale") : viesWarning ? viesWarning : undefined
|
|
437
|
+
}
|
|
368
438
|
/>
|
|
369
439
|
|
|
370
440
|
<DocumentNoteField
|
|
@@ -380,6 +450,21 @@ export default function CreateEstimateForm({
|
|
|
380
450
|
}}
|
|
381
451
|
/>
|
|
382
452
|
|
|
453
|
+
<DocumentTaxClauseField
|
|
454
|
+
control={form.control}
|
|
455
|
+
t={t}
|
|
456
|
+
entity={activeEntity}
|
|
457
|
+
document={{
|
|
458
|
+
number: formValues.number,
|
|
459
|
+
date: formValues.date,
|
|
460
|
+
date_valid_till: formValues.date_valid_till,
|
|
461
|
+
currency_code: formValues.currency_code,
|
|
462
|
+
customer: formValues.customer as any,
|
|
463
|
+
}}
|
|
464
|
+
transactionType={transactionType}
|
|
465
|
+
isTransactionTypeFetching={isViesFetching}
|
|
466
|
+
/>
|
|
467
|
+
|
|
383
468
|
<DocumentPaymentTermsField
|
|
384
469
|
control={form.control}
|
|
385
470
|
t={t}
|
|
@@ -61,4 +61,20 @@ export default {
|
|
|
61
61
|
"Net price": "Nettopreis",
|
|
62
62
|
"Gross price (tax included)": "Bruttopreis (inkl. MwSt.)",
|
|
63
63
|
"Net price (before tax)": "Nettopreis (exkl. MwSt.)",
|
|
64
|
+
// Separator items
|
|
65
|
+
"Add separator": "Trennzeile hinzufügen",
|
|
66
|
+
"Section header": "Abschnittsüberschrift",
|
|
67
|
+
"Section title...": "Abschnittstitel...",
|
|
68
|
+
// Transaction type
|
|
69
|
+
"Transaction type": "Transaktionstyp",
|
|
70
|
+
Domestic: "Inland",
|
|
71
|
+
"EU B2B": "EU B2B",
|
|
72
|
+
"EU B2C": "EU B2C",
|
|
73
|
+
Export: "Export",
|
|
74
|
+
"Determining transaction type...": "Transaktionstyp wird ermittelt...",
|
|
75
|
+
"This invoice will not be fiscalized (non-domestic transaction)":
|
|
76
|
+
"Diese Rechnung wird nicht fiskalisiert (nicht-inländische Transaktion)",
|
|
77
|
+
"Tax Clause": "Steuerklausel",
|
|
78
|
+
"Add tax clause...": "Steuerklausel hinzufügen...",
|
|
79
|
+
"Reverse charge - tax exempt EU B2B sale": "Umkehrung der Steuerschuldnerschaft - steuerbefreiter EU B2B Verkauf",
|
|
64
80
|
} as const;
|
|
@@ -54,4 +54,20 @@ export default {
|
|
|
54
54
|
"Net price": "Precio neto",
|
|
55
55
|
"Gross price (tax included)": "Precio bruto (impuestos incluidos)",
|
|
56
56
|
"Net price (before tax)": "Precio neto (antes de impuestos)",
|
|
57
|
+
// Separator items
|
|
58
|
+
"Add separator": "Añadir separador",
|
|
59
|
+
"Section header": "Encabezado de sección",
|
|
60
|
+
"Section title...": "Título de sección...",
|
|
61
|
+
// Transaction type
|
|
62
|
+
"Transaction type": "Tipo de transacción",
|
|
63
|
+
Domestic: "Nacional",
|
|
64
|
+
"EU B2B": "EU B2B",
|
|
65
|
+
"EU B2C": "EU B2C",
|
|
66
|
+
Export: "Exportación",
|
|
67
|
+
"Determining transaction type...": "Determinando tipo de transacción...",
|
|
68
|
+
"This invoice will not be fiscalized (non-domestic transaction)":
|
|
69
|
+
"Esta factura no será fiscalizada (transacción no nacional)",
|
|
70
|
+
"Tax Clause": "Cláusula fiscal",
|
|
71
|
+
"Add tax clause...": "Agregar cláusula fiscal...",
|
|
72
|
+
"Reverse charge - tax exempt EU B2B sale": "Inversión del sujeto pasivo - venta EU B2B exenta de impuestos",
|
|
57
73
|
} as const;
|
|
@@ -55,4 +55,20 @@ export default {
|
|
|
55
55
|
"Net price": "Prix net",
|
|
56
56
|
"Gross price (tax included)": "Prix brut (taxes incluses)",
|
|
57
57
|
"Net price (before tax)": "Prix net (avant taxes)",
|
|
58
|
+
// Separator items
|
|
59
|
+
"Add separator": "Ajouter un séparateur",
|
|
60
|
+
"Section header": "En-tête de section",
|
|
61
|
+
"Section title...": "Titre de section...",
|
|
62
|
+
// Transaction type
|
|
63
|
+
"Transaction type": "Type de transaction",
|
|
64
|
+
Domestic: "Nationale",
|
|
65
|
+
"EU B2B": "EU B2B",
|
|
66
|
+
"EU B2C": "EU B2C",
|
|
67
|
+
Export: "Exportation",
|
|
68
|
+
"Determining transaction type...": "Détermination du type de transaction...",
|
|
69
|
+
"This invoice will not be fiscalized (non-domestic transaction)":
|
|
70
|
+
"Cette facture ne sera pas fiscalisée (transaction non nationale)",
|
|
71
|
+
"Tax Clause": "Clause fiscale",
|
|
72
|
+
"Add tax clause...": "Ajouter une clause fiscale...",
|
|
73
|
+
"Reverse charge - tax exempt EU B2B sale": "Autoliquidation - vente B2B UE exonérée de taxe",
|
|
58
74
|
} as const;
|
|
@@ -54,4 +54,20 @@ export default {
|
|
|
54
54
|
"Net price": "Neto cijena",
|
|
55
55
|
"Gross price (tax included)": "Bruto cijena (s porezom)",
|
|
56
56
|
"Net price (before tax)": "Neto cijena (prije poreza)",
|
|
57
|
+
// Separator items
|
|
58
|
+
"Add separator": "Dodaj separator",
|
|
59
|
+
"Section header": "Naslov odjeljka",
|
|
60
|
+
"Section title...": "Naslov odjeljka...",
|
|
61
|
+
// Transaction type
|
|
62
|
+
"Transaction type": "Vrsta transakcije",
|
|
63
|
+
Domestic: "Domaća",
|
|
64
|
+
"EU B2B": "EU B2B",
|
|
65
|
+
"EU B2C": "EU B2C",
|
|
66
|
+
Export: "Izvoz",
|
|
67
|
+
"Determining transaction type...": "Određivanje vrste transakcije...",
|
|
68
|
+
"This invoice will not be fiscalized (non-domestic transaction)":
|
|
69
|
+
"Ovaj račun neće biti fiskaliziran (nedomaća transakcija)",
|
|
70
|
+
"Tax Clause": "Porezna klauzula",
|
|
71
|
+
"Add tax clause...": "Dodajte poreznu klauzulu...",
|
|
72
|
+
"Reverse charge - tax exempt EU B2B sale": "Prijenos porezne obveze - porezno oslobođena EU B2B prodaja",
|
|
57
73
|
} as const;
|
|
@@ -54,4 +54,20 @@ export default {
|
|
|
54
54
|
"Net price": "Prezzo netto",
|
|
55
55
|
"Gross price (tax included)": "Prezzo lordo (imposte incluse)",
|
|
56
56
|
"Net price (before tax)": "Prezzo netto (prima delle imposte)",
|
|
57
|
+
// Separator items
|
|
58
|
+
"Add separator": "Aggiungi separatore",
|
|
59
|
+
"Section header": "Intestazione sezione",
|
|
60
|
+
"Section title...": "Titolo sezione...",
|
|
61
|
+
// Transaction type
|
|
62
|
+
"Transaction type": "Tipo di transazione",
|
|
63
|
+
Domestic: "Nazionale",
|
|
64
|
+
"EU B2B": "EU B2B",
|
|
65
|
+
"EU B2C": "EU B2C",
|
|
66
|
+
Export: "Esportazione",
|
|
67
|
+
"Determining transaction type...": "Determinazione tipo di transazione...",
|
|
68
|
+
"This invoice will not be fiscalized (non-domestic transaction)":
|
|
69
|
+
"Questa fattura non sarà fiscalizzata (transazione non nazionale)",
|
|
70
|
+
"Tax Clause": "Clausola fiscale",
|
|
71
|
+
"Add tax clause...": "Aggiungi clausola fiscale...",
|
|
72
|
+
"Reverse charge - tax exempt EU B2B sale": "Inversione contabile - vendita B2B UE esente da imposta",
|
|
57
73
|
} as const;
|
|
@@ -55,4 +55,20 @@ export default {
|
|
|
55
55
|
"Net price": "Nettoprijs",
|
|
56
56
|
"Gross price (tax included)": "Brutoprijs (inclusief belasting)",
|
|
57
57
|
"Net price (before tax)": "Nettoprijs (exclusief belasting)",
|
|
58
|
+
// Separator items
|
|
59
|
+
"Add separator": "Scheidingslijn toevoegen",
|
|
60
|
+
"Section header": "Sectiekop",
|
|
61
|
+
"Section title...": "Sectietitel...",
|
|
62
|
+
// Transaction type
|
|
63
|
+
"Transaction type": "Transactietype",
|
|
64
|
+
Domestic: "Binnenland",
|
|
65
|
+
"EU B2B": "EU B2B",
|
|
66
|
+
"EU B2C": "EU B2C",
|
|
67
|
+
Export: "Export",
|
|
68
|
+
"Determining transaction type...": "Transactietype bepalen...",
|
|
69
|
+
"This invoice will not be fiscalized (non-domestic transaction)":
|
|
70
|
+
"Deze factuur wordt niet gefiscaliseerd (niet-binnenlandse transactie)",
|
|
71
|
+
"Tax Clause": "Belastingclausule",
|
|
72
|
+
"Add tax clause...": "Belastingclausule toevoegen...",
|
|
73
|
+
"Reverse charge - tax exempt EU B2B sale": "Verlegging - belastingvrijgestelde EU B2B verkoop",
|
|
58
74
|
} as const;
|
|
@@ -54,4 +54,20 @@ export default {
|
|
|
54
54
|
"Net price": "Cena netto",
|
|
55
55
|
"Gross price (tax included)": "Cena brutto (z podatkiem)",
|
|
56
56
|
"Net price (before tax)": "Cena netto (przed podatkiem)",
|
|
57
|
+
// Separator items
|
|
58
|
+
"Add separator": "Dodaj separator",
|
|
59
|
+
"Section header": "Nagłówek sekcji",
|
|
60
|
+
"Section title...": "Tytuł sekcji...",
|
|
61
|
+
// Transaction type
|
|
62
|
+
"Transaction type": "Typ transakcji",
|
|
63
|
+
Domestic: "Krajowa",
|
|
64
|
+
"EU B2B": "EU B2B",
|
|
65
|
+
"EU B2C": "EU B2C",
|
|
66
|
+
Export: "Eksport",
|
|
67
|
+
"Determining transaction type...": "Określanie typu transakcji...",
|
|
68
|
+
"This invoice will not be fiscalized (non-domestic transaction)":
|
|
69
|
+
"Ta faktura nie będzie fiskalizowana (transakcja niekrajowa)",
|
|
70
|
+
"Tax Clause": "Klauzula podatkowa",
|
|
71
|
+
"Add tax clause...": "Dodaj klauzulę podatkową...",
|
|
72
|
+
"Reverse charge - tax exempt EU B2B sale": "Odwrotne obciążenie - zwolniona z podatku sprzedaż EU B2B",
|
|
57
73
|
} as const;
|
|
@@ -55,4 +55,20 @@ export default {
|
|
|
55
55
|
"Net price": "Preço líquido",
|
|
56
56
|
"Gross price (tax included)": "Preço bruto (impostos incluídos)",
|
|
57
57
|
"Net price (before tax)": "Preço líquido (antes de impostos)",
|
|
58
|
+
// Separator items
|
|
59
|
+
"Add separator": "Adicionar separador",
|
|
60
|
+
"Section header": "Cabeçalho da secção",
|
|
61
|
+
"Section title...": "Título da secção...",
|
|
62
|
+
// Transaction type
|
|
63
|
+
"Transaction type": "Tipo de transação",
|
|
64
|
+
Domestic: "Nacional",
|
|
65
|
+
"EU B2B": "EU B2B",
|
|
66
|
+
"EU B2C": "EU B2C",
|
|
67
|
+
Export: "Exportação",
|
|
68
|
+
"Determining transaction type...": "Determinando tipo de transação...",
|
|
69
|
+
"This invoice will not be fiscalized (non-domestic transaction)":
|
|
70
|
+
"Esta fatura não será fiscalizada (transação não nacional)",
|
|
71
|
+
"Tax Clause": "Cláusula fiscal",
|
|
72
|
+
"Add tax clause...": "Adicionar cláusula fiscal...",
|
|
73
|
+
"Reverse charge - tax exempt EU B2B sale": "Autoliquidação - venda B2B UE isenta de imposto",
|
|
58
74
|
} as const;
|
|
@@ -23,7 +23,7 @@ export default {
|
|
|
23
23
|
"Tax Number": "Davčna številka",
|
|
24
24
|
Items: "Postavke",
|
|
25
25
|
"Add item": "Dodaj postavko",
|
|
26
|
-
Tax: "
|
|
26
|
+
Tax: "DDV",
|
|
27
27
|
"Tax rate": "Davčna stopnja",
|
|
28
28
|
"Add tax": "Dodaj davek",
|
|
29
29
|
"Select tax...": "Izberi davek...",
|
|
@@ -60,4 +60,20 @@ export default {
|
|
|
60
60
|
"Net price": "Neto cena",
|
|
61
61
|
"Gross price (tax included)": "Bruto cena (z davkom)",
|
|
62
62
|
"Net price (before tax)": "Neto cena (brez davka)",
|
|
63
|
+
// Separator items
|
|
64
|
+
"Add separator": "Dodaj ločilnik",
|
|
65
|
+
"Section header": "Naslov razdelka",
|
|
66
|
+
"Section title...": "Naslov razdelka...",
|
|
67
|
+
// Transaction type
|
|
68
|
+
"Transaction type": "Vrsta transakcije",
|
|
69
|
+
Domestic: "Domača",
|
|
70
|
+
"EU B2B": "EU B2B",
|
|
71
|
+
"EU B2C": "EU B2C",
|
|
72
|
+
Export: "Izvoz",
|
|
73
|
+
"Determining transaction type...": "Določanje vrste transakcije...",
|
|
74
|
+
"This invoice will not be fiscalized (non-domestic transaction)":
|
|
75
|
+
"Ta račun ne bo fiskaliziran (nedomača transakcija)",
|
|
76
|
+
"Tax Clause": "Davčna klavzula",
|
|
77
|
+
"Add tax clause...": "Dodajte davčno klavzulo...",
|
|
78
|
+
"Reverse charge - tax exempt EU B2B sale": "Obrnjena davčna obveznost - davka oproščena EU B2B prodaja",
|
|
63
79
|
} as const;
|
|
@@ -52,6 +52,8 @@ type EstimateListTableProps = {
|
|
|
52
52
|
onDownloadSuccess?: (fileName: string) => void;
|
|
53
53
|
onDownloadError?: (error: string) => void;
|
|
54
54
|
onExportSelected?: (documentIds: string[]) => void;
|
|
55
|
+
onCopyToInvoice?: (documentIds: string[]) => void;
|
|
56
|
+
onCreateNew?: () => void;
|
|
55
57
|
} & ListTableProps<Estimate>;
|
|
56
58
|
|
|
57
59
|
export default function EstimateListTable({
|
|
@@ -65,6 +67,8 @@ export default function EstimateListTable({
|
|
|
65
67
|
onDownloadSuccess,
|
|
66
68
|
onDownloadError,
|
|
67
69
|
onExportSelected,
|
|
70
|
+
onCopyToInvoice,
|
|
71
|
+
onCreateNew,
|
|
68
72
|
...i18nProps
|
|
69
73
|
}: EstimateListTableProps) {
|
|
70
74
|
const t = createTranslation({
|
|
@@ -84,7 +88,6 @@ export default function EstimateListTable({
|
|
|
84
88
|
limit: params.limit,
|
|
85
89
|
next_cursor: params.next_cursor,
|
|
86
90
|
prev_cursor: params.prev_cursor,
|
|
87
|
-
order_by: params.order_by,
|
|
88
91
|
search: params.search,
|
|
89
92
|
query: params.query,
|
|
90
93
|
});
|
|
@@ -109,6 +112,12 @@ export default function EstimateListTable({
|
|
|
109
112
|
}
|
|
110
113
|
}, [selectedIds, onExportSelected]);
|
|
111
114
|
|
|
115
|
+
const handleCopyToInvoice = useCallback(() => {
|
|
116
|
+
if (selectedIds.size > 0 && onCopyToInvoice) {
|
|
117
|
+
onCopyToInvoice(Array.from(selectedIds));
|
|
118
|
+
}
|
|
119
|
+
}, [selectedIds, onCopyToInvoice]);
|
|
120
|
+
|
|
112
121
|
const handleDeselectAll = useCallback(() => {
|
|
113
122
|
setSelectedIds(new Set());
|
|
114
123
|
}, []);
|
|
@@ -118,11 +127,12 @@ export default function EstimateListTable({
|
|
|
118
127
|
<SelectionToolbar
|
|
119
128
|
selectedCount={count}
|
|
120
129
|
onExportPdfs={onExportSelected ? handleExportPdfs : undefined}
|
|
130
|
+
onCopyToInvoice={onCopyToInvoice ? handleCopyToInvoice : undefined}
|
|
121
131
|
onDeselectAll={handleDeselectAll}
|
|
122
132
|
t={t}
|
|
123
133
|
/>
|
|
124
134
|
),
|
|
125
|
-
[handleExportPdfs, handleDeselectAll, onExportSelected, t],
|
|
135
|
+
[handleExportPdfs, handleCopyToInvoice, handleDeselectAll, onExportSelected, onCopyToInvoice, t],
|
|
126
136
|
);
|
|
127
137
|
|
|
128
138
|
const columns: Column<Estimate>[] = useMemo(
|
|
@@ -130,7 +140,6 @@ export default function EstimateListTable({
|
|
|
130
140
|
{
|
|
131
141
|
id: "number",
|
|
132
142
|
header: t("Number"),
|
|
133
|
-
sortable: true,
|
|
134
143
|
cell: (estimate) => (
|
|
135
144
|
<div className="flex items-center gap-2">
|
|
136
145
|
<Button variant="link" className="cursor-pointer py-0 underline" onClick={() => onRowClick?.(estimate)}>
|
|
@@ -155,26 +164,22 @@ export default function EstimateListTable({
|
|
|
155
164
|
{
|
|
156
165
|
id: "date",
|
|
157
166
|
header: t("Date"),
|
|
158
|
-
sortable: true,
|
|
159
167
|
cell: (estimate) => <FormattedDate date={estimate.date} />,
|
|
160
168
|
},
|
|
161
169
|
{
|
|
162
170
|
id: "date_valid_till",
|
|
163
171
|
header: t("Valid Until"),
|
|
164
|
-
sortable: true,
|
|
165
172
|
cell: (estimate) => <FormattedDate date={estimate.date_valid_till} />,
|
|
166
173
|
},
|
|
167
174
|
{
|
|
168
175
|
id: "total",
|
|
169
176
|
header: t("Total"),
|
|
170
|
-
sortable: true,
|
|
171
177
|
align: "right",
|
|
172
178
|
cell: (estimate) => estimate.total,
|
|
173
179
|
},
|
|
174
180
|
{
|
|
175
181
|
id: "total_with_tax",
|
|
176
182
|
header: t("Total with Tax"),
|
|
177
|
-
sortable: true,
|
|
178
183
|
align: "right",
|
|
179
184
|
cell: (estimate) => estimate.total_with_tax,
|
|
180
185
|
},
|
|
@@ -208,11 +213,12 @@ export default function EstimateListTable({
|
|
|
208
213
|
cacheKey="estimates"
|
|
209
214
|
resourceName="estimate"
|
|
210
215
|
createNewLink={entityId ? `/app/${entityId}/documents/add/estimate` : undefined}
|
|
216
|
+
onCreateNew={onCreateNew}
|
|
211
217
|
entityId={entityId}
|
|
212
218
|
filterConfig={filterConfig}
|
|
213
219
|
t={t}
|
|
214
220
|
locale={i18nProps.locale}
|
|
215
|
-
selectable={!!onExportSelected}
|
|
221
|
+
selectable={!!(onExportSelected || onCopyToInvoice)}
|
|
216
222
|
selectedIds={selectedIds}
|
|
217
223
|
onSelectionChange={setSelectedIds}
|
|
218
224
|
selectionToolbar={selectionToolbar}
|
|
@@ -32,7 +32,9 @@ export default {
|
|
|
32
32
|
"No results found": "Keine Angebote gefunden",
|
|
33
33
|
"Try adjusting your search criteria": "Versuchen Sie, Ihre Suchkriterien anzupassen",
|
|
34
34
|
"Clear search": "Suche zurücksetzen",
|
|
35
|
+
"Clear all": "Alles zurücksetzen",
|
|
35
36
|
selected: "ausgewählt",
|
|
36
37
|
"Export PDFs": "PDFs exportieren",
|
|
37
38
|
"Deselect all": "Auswahl aufheben",
|
|
39
|
+
"Copy to Invoice": "In Rechnung kopieren",
|
|
38
40
|
} as const;
|
|
@@ -29,7 +29,9 @@ export default {
|
|
|
29
29
|
"No results found": "No se encontraron presupuestos",
|
|
30
30
|
"Try adjusting your search criteria": "Intente ajustar sus criterios de búsqueda",
|
|
31
31
|
"Clear search": "Limpiar búsqueda",
|
|
32
|
+
"Clear all": "Borrar todo",
|
|
32
33
|
selected: "seleccionados",
|
|
33
34
|
"Export PDFs": "Exportar PDFs",
|
|
34
35
|
"Deselect all": "Deseleccionar todo",
|
|
36
|
+
"Copy to Invoice": "Copiar a factura",
|
|
35
37
|
} as const;
|
|
@@ -29,7 +29,9 @@ export default {
|
|
|
29
29
|
"No results found": "Aucun devis trouvé",
|
|
30
30
|
"Try adjusting your search criteria": "Essayez d'ajuster vos critères de recherche",
|
|
31
31
|
"Clear search": "Effacer la recherche",
|
|
32
|
+
"Clear all": "Tout effacer",
|
|
32
33
|
selected: "sélectionnés",
|
|
33
34
|
"Export PDFs": "Exporter les PDF",
|
|
34
35
|
"Deselect all": "Tout désélectionner",
|
|
36
|
+
"Copy to Invoice": "Copier vers facture",
|
|
35
37
|
} as const;
|
|
@@ -29,7 +29,9 @@ export default {
|
|
|
29
29
|
"No results found": "Nisu pronađeni predračuni",
|
|
30
30
|
"Try adjusting your search criteria": "Pokušajte prilagoditi kriterije pretraživanja",
|
|
31
31
|
"Clear search": "Očisti pretraživanje",
|
|
32
|
+
"Clear all": "Očisti sve",
|
|
32
33
|
selected: "odabranih",
|
|
33
34
|
"Export PDFs": "Izvezi PDF-ove",
|
|
34
35
|
"Deselect all": "Poništi odabir",
|
|
36
|
+
"Copy to Invoice": "Kopiraj u račun",
|
|
35
37
|
} as const;
|
|
@@ -29,7 +29,9 @@ export default {
|
|
|
29
29
|
"No results found": "Nessun preventivo trovato",
|
|
30
30
|
"Try adjusting your search criteria": "Prova a modificare i criteri di ricerca",
|
|
31
31
|
"Clear search": "Cancella ricerca",
|
|
32
|
+
"Clear all": "Cancella tutto",
|
|
32
33
|
selected: "selezionati",
|
|
33
34
|
"Export PDFs": "Esporta PDF",
|
|
34
35
|
"Deselect all": "Deseleziona tutto",
|
|
36
|
+
"Copy to Invoice": "Copia in fattura",
|
|
35
37
|
} as const;
|
|
@@ -29,7 +29,9 @@ export default {
|
|
|
29
29
|
"No results found": "Geen offertes gevonden",
|
|
30
30
|
"Try adjusting your search criteria": "Probeer uw zoekcriteria aan te passen",
|
|
31
31
|
"Clear search": "Zoekopdracht wissen",
|
|
32
|
+
"Clear all": "Alles wissen",
|
|
32
33
|
selected: "geselecteerd",
|
|
33
34
|
"Export PDFs": "PDFs exporteren",
|
|
34
35
|
"Deselect all": "Alles deselecteren",
|
|
36
|
+
"Copy to Invoice": "Kopieer naar factuur",
|
|
35
37
|
} as const;
|
|
@@ -29,7 +29,9 @@ export default {
|
|
|
29
29
|
"No results found": "Nie znaleziono kosztorysów",
|
|
30
30
|
"Try adjusting your search criteria": "Spróbuj dostosować kryteria wyszukiwania",
|
|
31
31
|
"Clear search": "Wyczyść wyszukiwanie",
|
|
32
|
+
"Clear all": "Wyczyść wszystko",
|
|
32
33
|
selected: "wybranych",
|
|
33
34
|
"Export PDFs": "Eksportuj PDF-y",
|
|
34
35
|
"Deselect all": "Odznacz wszystko",
|
|
36
|
+
"Copy to Invoice": "Kopiuj do faktury",
|
|
35
37
|
} as const;
|
|
@@ -29,7 +29,9 @@ export default {
|
|
|
29
29
|
"No results found": "Nenhum orçamento encontrado",
|
|
30
30
|
"Try adjusting your search criteria": "Tente ajustar os seus critérios de pesquisa",
|
|
31
31
|
"Clear search": "Limpar pesquisa",
|
|
32
|
+
"Clear all": "Limpar tudo",
|
|
32
33
|
selected: "selecionados",
|
|
33
34
|
"Export PDFs": "Exportar PDFs",
|
|
34
35
|
"Deselect all": "Desselecionar tudo",
|
|
36
|
+
"Copy to Invoice": "Copiar para fatura",
|
|
35
37
|
} as const;
|
|
@@ -32,7 +32,9 @@ export default {
|
|
|
32
32
|
"No results found": "Ni najdenih predračunov",
|
|
33
33
|
"Try adjusting your search criteria": "Poskusite prilagoditi iskalne kriterije",
|
|
34
34
|
"Clear search": "Počisti iskanje",
|
|
35
|
+
"Clear all": "Počisti vse",
|
|
35
36
|
selected: "izbranih",
|
|
36
37
|
"Export PDFs": "Izvozi PDF-je",
|
|
37
38
|
"Deselect all": "Počisti izbiro",
|
|
39
|
+
"Copy to Invoice": "Kopiraj v račun",
|
|
38
40
|
} as const;
|