@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
|
@@ -32,7 +32,7 @@ export function getDocumentTypeFromId(id: string): DocumentType | null {
|
|
|
32
32
|
if (id.startsWith("est_")) return "estimate";
|
|
33
33
|
if (id.startsWith("cn_")) return "credit_note";
|
|
34
34
|
if (id.startsWith("adv_")) return "advance_invoice";
|
|
35
|
-
if (id.startsWith("
|
|
35
|
+
if (id.startsWith("del_")) return "delivery_note";
|
|
36
36
|
return null;
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -50,7 +50,7 @@ export function getAllowedDuplicateTargets(sourceType: DocumentType): DocumentTy
|
|
|
50
50
|
case "advance_invoice":
|
|
51
51
|
return ["advance_invoice", "invoice"];
|
|
52
52
|
case "delivery_note":
|
|
53
|
-
return ["delivery_note"];
|
|
53
|
+
return ["delivery_note", "invoice"];
|
|
54
54
|
default:
|
|
55
55
|
return [];
|
|
56
56
|
}
|
|
@@ -60,10 +60,11 @@ export function getAllowedDuplicateTargets(sourceType: DocumentType): DocumentTy
|
|
|
60
60
|
* Transform a source document into form-compatible initial values
|
|
61
61
|
* Copies relevant fields and resets computed/generated ones
|
|
62
62
|
*/
|
|
63
|
-
function transformDocumentForDuplication(source: Document,
|
|
63
|
+
function transformDocumentForDuplication(source: Document, targetType: DocumentType): Partial<CreateRequest> {
|
|
64
64
|
// Transform items - copy only the fields needed for creation
|
|
65
65
|
// Use type assertion for items since all document item types share the same shape
|
|
66
66
|
const sourceItems = source.items as Array<{
|
|
67
|
+
type?: string | null;
|
|
67
68
|
name: string;
|
|
68
69
|
description: string | null;
|
|
69
70
|
quantity: number;
|
|
@@ -72,15 +73,21 @@ function transformDocumentForDuplication(source: Document, _targetType: Document
|
|
|
72
73
|
taxes: Array<{ tax_id?: string }>;
|
|
73
74
|
}>;
|
|
74
75
|
const items = sourceItems?.map((item) => ({
|
|
76
|
+
type: item.type ?? undefined,
|
|
75
77
|
name: item.name,
|
|
76
78
|
description: item.description,
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
// Separator items skip financial fields
|
|
80
|
+
...(item.type !== "separator"
|
|
81
|
+
? {
|
|
82
|
+
quantity: item.quantity,
|
|
83
|
+
// Use gross_price if set, otherwise use price. The form uses is_gross_price as a UI toggle.
|
|
84
|
+
price: item.gross_price ?? item.price,
|
|
85
|
+
// Copy tax references (tax_id), not computed tax data
|
|
86
|
+
taxes: item.taxes?.map((tax) => ({ tax_id: tax.tax_id })),
|
|
87
|
+
// Derive is_gross_price from whether gross_price is set
|
|
88
|
+
gross_price: item.gross_price ?? undefined,
|
|
89
|
+
}
|
|
90
|
+
: {}),
|
|
84
91
|
}));
|
|
85
92
|
|
|
86
93
|
// Build customer data - always copy if available (form needs this for display)
|
|
@@ -98,14 +105,18 @@ function transformDocumentForDuplication(source: Document, _targetType: Document
|
|
|
98
105
|
}
|
|
99
106
|
: undefined;
|
|
100
107
|
|
|
108
|
+
// When converting to a different type, link back to the source document
|
|
109
|
+
const sourceType = getDocumentTypeFromId(source.id);
|
|
110
|
+
const isConversion = sourceType && sourceType !== targetType;
|
|
111
|
+
|
|
101
112
|
// Build base duplicate data
|
|
102
113
|
const baseData: Partial<CreateRequest> = {
|
|
103
114
|
// Customer - always pass both customer_id AND customer data when available
|
|
104
115
|
// The form needs customer data for display, even when customer_id is set
|
|
105
116
|
...(source.customer_id ? { customer_id: source.customer_id } : {}),
|
|
106
117
|
...(customerData ? { customer: customerData } : {}),
|
|
107
|
-
// Items
|
|
108
|
-
items,
|
|
118
|
+
// Items (cast needed: separator items omit financial fields like quantity)
|
|
119
|
+
items: items as any,
|
|
109
120
|
// Currency
|
|
110
121
|
currency_code: source.currency_code,
|
|
111
122
|
// Notes
|
|
@@ -115,6 +126,8 @@ function transformDocumentForDuplication(source: Document, _targetType: Document
|
|
|
115
126
|
date: new Date().toISOString(),
|
|
116
127
|
// Number - leave empty for auto-generation
|
|
117
128
|
// Do NOT copy: number, totals, taxes, payments, furs, eslog, vies, shareable_id
|
|
129
|
+
// Link back to source document when converting (e.g., delivery note → invoice)
|
|
130
|
+
...(isConversion ? { linked_documents: [source.id] } : {}),
|
|
118
131
|
};
|
|
119
132
|
|
|
120
133
|
return baseData;
|
|
@@ -129,9 +142,20 @@ export type UseDuplicateDocumentOptions = {
|
|
|
129
142
|
enabled?: boolean;
|
|
130
143
|
};
|
|
131
144
|
|
|
145
|
+
export type LinkedDocumentSummary = {
|
|
146
|
+
id: string;
|
|
147
|
+
type: string;
|
|
148
|
+
number: string;
|
|
149
|
+
date: string;
|
|
150
|
+
total_with_tax: number;
|
|
151
|
+
currency_code: string;
|
|
152
|
+
};
|
|
153
|
+
|
|
132
154
|
export type UseDuplicateDocumentResult = {
|
|
133
155
|
/** Transformed initial values for the form */
|
|
134
156
|
initialValues: Partial<CreateRequest> | undefined;
|
|
157
|
+
/** Source documents linked to this document (populated for conversions) */
|
|
158
|
+
sourceDocuments: LinkedDocumentSummary[];
|
|
135
159
|
/** Loading state */
|
|
136
160
|
isLoading: boolean;
|
|
137
161
|
/** Error if fetch failed */
|
|
@@ -187,13 +211,31 @@ export function useDuplicateDocument({
|
|
|
187
211
|
throw new Error("Source document not found");
|
|
188
212
|
}
|
|
189
213
|
|
|
190
|
-
|
|
214
|
+
const initialValues = transformDocumentForDuplication(source, targetType);
|
|
215
|
+
|
|
216
|
+
// Build source document summaries for conversions (different source → target type)
|
|
217
|
+
const isConversion = sourceType !== targetType;
|
|
218
|
+
const sourceDocuments: LinkedDocumentSummary[] = isConversion
|
|
219
|
+
? [
|
|
220
|
+
{
|
|
221
|
+
id: source.id,
|
|
222
|
+
type: sourceType,
|
|
223
|
+
number: (source as any).number || "",
|
|
224
|
+
date: (source as any).date || "",
|
|
225
|
+
total_with_tax: (source as any).total_with_tax ?? 0,
|
|
226
|
+
currency_code: (source as any).currency_code || "",
|
|
227
|
+
},
|
|
228
|
+
]
|
|
229
|
+
: [];
|
|
230
|
+
|
|
231
|
+
return { initialValues, sourceDocuments };
|
|
191
232
|
},
|
|
192
233
|
enabled: enabled && !!sourceId && !!activeEntity?.id && !!sourceType,
|
|
193
234
|
});
|
|
194
235
|
|
|
195
236
|
return {
|
|
196
|
-
initialValues: query.data,
|
|
237
|
+
initialValues: query.data?.initialValues,
|
|
238
|
+
sourceDocuments: query.data?.sourceDocuments ?? [],
|
|
197
239
|
isLoading: query.isLoading,
|
|
198
240
|
error: query.error,
|
|
199
241
|
sourceType,
|
|
@@ -42,6 +42,8 @@ export interface UseViesCheckResult {
|
|
|
42
42
|
reverseChargeApplies: boolean;
|
|
43
43
|
/** Transaction type determined by VIES check */
|
|
44
44
|
transactionType: ViesCheckResponse["transaction_type"] | undefined;
|
|
45
|
+
/** Customer country code returned by VIES check */
|
|
46
|
+
customerCountryCode: string | null;
|
|
45
47
|
/** Warning message from VIES validation */
|
|
46
48
|
warning: string | null;
|
|
47
49
|
/** Whether VIES validation was successful */
|
|
@@ -124,6 +126,7 @@ export function useViesCheck({
|
|
|
124
126
|
error: query.error,
|
|
125
127
|
reverseChargeApplies: query.data?.reverse_charge_applies ?? false,
|
|
126
128
|
transactionType: query.data?.transaction_type,
|
|
129
|
+
customerCountryCode: query.data?.customer_country_code ?? null,
|
|
127
130
|
warning: query.data?.warning ?? null,
|
|
128
131
|
viesValid: query.data?.vies_valid ?? null,
|
|
129
132
|
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if a document has a failed fiscalization status.
|
|
3
|
+
* Returns the provider type that failed, or null if no failure.
|
|
4
|
+
*/
|
|
5
|
+
export function getFiscalizationFailureType(doc: {
|
|
6
|
+
furs?: { status?: string } | null;
|
|
7
|
+
fina?: { status?: string } | null;
|
|
8
|
+
}): "furs" | "fina" | null {
|
|
9
|
+
if (doc.furs?.status === "failed") return "furs";
|
|
10
|
+
if (doc.fina?.status === "failed") return "fina";
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
@@ -11,7 +11,6 @@ import { customerSchema, lineItemSchema, transformItemsForApi } from "./shared";
|
|
|
11
11
|
export const advanceInvoiceFormSchema = z.object({
|
|
12
12
|
number: z.string().max(100).optional(),
|
|
13
13
|
date: z.string().optional(),
|
|
14
|
-
date_due: z.string().optional(),
|
|
15
14
|
customer_id: z.string().nullish(),
|
|
16
15
|
customer: customerSchema,
|
|
17
16
|
items: z.array(lineItemSchema).min(1),
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { ArrowDown, ArrowUp, ArrowUpDown } from "lucide-react";
|
|
2
|
-
|
|
3
|
-
import { Button } from "@/ui/components/ui/button";
|
|
4
|
-
import { cn } from "@/ui/lib/utils";
|
|
5
|
-
|
|
6
|
-
type SortableHeaderProps = {
|
|
7
|
-
children: React.ReactNode;
|
|
8
|
-
field: string;
|
|
9
|
-
currentOrder?: string;
|
|
10
|
-
align?: "left" | "center" | "right";
|
|
11
|
-
onSort?: (order: string | null) => void;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Sortable column header with visual indicators
|
|
16
|
-
* Cycles through: none -> asc -> desc -> none
|
|
17
|
-
*/
|
|
18
|
-
export function SortableHeader({ children, field, currentOrder, align = "left", onSort }: SortableHeaderProps) {
|
|
19
|
-
const isActive = currentOrder?.replace(/^-/, "") === field;
|
|
20
|
-
const isDesc = currentOrder?.startsWith("-");
|
|
21
|
-
|
|
22
|
-
// Determine next sort state
|
|
23
|
-
const getNextOrder = () => {
|
|
24
|
-
if (!isActive) return field; // Not active -> ascending
|
|
25
|
-
if (!isDesc) return `-${field}`; // Ascending -> descending
|
|
26
|
-
return null; // Descending -> none
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
const nextOrder = getNextOrder();
|
|
30
|
-
|
|
31
|
-
return (
|
|
32
|
-
<Button
|
|
33
|
-
variant="ghost"
|
|
34
|
-
size="sm"
|
|
35
|
-
onClick={() => onSort?.(nextOrder)}
|
|
36
|
-
className={cn(
|
|
37
|
-
"h-8 gap-1",
|
|
38
|
-
isActive && "font-semibold",
|
|
39
|
-
align === "left" && "-ml-3",
|
|
40
|
-
align === "right" && "-mr-3",
|
|
41
|
-
)}
|
|
42
|
-
aria-label={`Sort by ${field}${isActive ? (isDesc ? " descending" : " ascending") : ""}`}
|
|
43
|
-
>
|
|
44
|
-
{children}
|
|
45
|
-
{isActive ? (
|
|
46
|
-
isDesc ? (
|
|
47
|
-
<ArrowDown className="h-4 w-4" aria-hidden="true" />
|
|
48
|
-
) : (
|
|
49
|
-
<ArrowUp className="h-4 w-4" aria-hidden="true" />
|
|
50
|
-
)
|
|
51
|
-
) : (
|
|
52
|
-
<ArrowUpDown className="h-4 w-4 opacity-50" aria-hidden="true" />
|
|
53
|
-
)}
|
|
54
|
-
</Button>
|
|
55
|
-
);
|
|
56
|
-
}
|