@spaceinvoices/react-ui 0.4.1 → 0.4.2
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/registry.json +25 -0
- package/src/components/advance-invoices/advance-invoices.hooks.ts +32 -2
- package/src/components/advance-invoices/create/create-advance-invoice-form.tsx +109 -4
- package/src/components/advance-invoices/create/locales/de.ts +2 -0
- package/src/components/advance-invoices/create/locales/es.ts +2 -0
- package/src/components/advance-invoices/create/locales/fr.ts +2 -0
- package/src/components/advance-invoices/create/locales/hr.ts +2 -0
- package/src/components/advance-invoices/create/locales/it.ts +2 -0
- package/src/components/advance-invoices/create/locales/nl.ts +2 -0
- package/src/components/advance-invoices/create/locales/pl.ts +2 -0
- package/src/components/advance-invoices/create/locales/pt.ts +2 -0
- package/src/components/advance-invoices/create/locales/sl.ts +2 -0
- package/src/components/advance-invoices/create/prepare-advance-invoice-submission.ts +17 -0
- package/src/components/advance-invoices/list/list-row-actions.tsx +3 -6
- package/src/components/advance-invoices/list/list-table.tsx +45 -2
- package/src/components/advance-invoices/list/locales/de.ts +3 -0
- package/src/components/advance-invoices/list/locales/en.ts +3 -0
- package/src/components/advance-invoices/list/locales/es.ts +3 -0
- package/src/components/advance-invoices/list/locales/fr.ts +3 -0
- package/src/components/advance-invoices/list/locales/hr.ts +3 -0
- package/src/components/advance-invoices/list/locales/it.ts +3 -0
- package/src/components/advance-invoices/list/locales/nl.ts +3 -0
- package/src/components/advance-invoices/list/locales/pl.ts +3 -0
- package/src/components/advance-invoices/list/locales/pt.ts +3 -0
- package/src/components/advance-invoices/list/locales/sl.ts +3 -0
- package/src/components/credit-notes/create/create-credit-note-form.tsx +177 -6
- package/src/components/credit-notes/create/locales/de.ts +8 -0
- package/src/components/credit-notes/create/locales/es.ts +8 -0
- package/src/components/credit-notes/create/locales/fr.ts +7 -0
- package/src/components/credit-notes/create/locales/hr.ts +7 -0
- package/src/components/credit-notes/create/locales/it.ts +9 -0
- package/src/components/credit-notes/create/locales/nl.ts +7 -0
- package/src/components/credit-notes/create/locales/pl.ts +7 -0
- package/src/components/credit-notes/create/locales/pt.ts +7 -0
- package/src/components/credit-notes/create/locales/sl.ts +7 -0
- package/src/components/credit-notes/credit-notes.hooks.ts +30 -0
- package/src/components/credit-notes/list/list-row-actions.tsx +3 -6
- package/src/components/credit-notes/list/list-table.tsx +45 -2
- package/src/components/credit-notes/list/locales/de.ts +3 -0
- package/src/components/credit-notes/list/locales/en.ts +3 -0
- package/src/components/credit-notes/list/locales/es.ts +3 -0
- package/src/components/credit-notes/list/locales/fr.ts +3 -0
- package/src/components/credit-notes/list/locales/hr.ts +3 -0
- package/src/components/credit-notes/list/locales/it.ts +3 -0
- package/src/components/credit-notes/list/locales/nl.ts +3 -0
- package/src/components/credit-notes/list/locales/pl.ts +3 -0
- package/src/components/credit-notes/list/locales/pt.ts +3 -0
- package/src/components/credit-notes/list/locales/sl.ts +3 -0
- package/src/components/customers/create-customer-form/create-customer-form.tsx +0 -1
- package/src/components/documents/create/document-details-section.tsx +67 -1
- package/src/components/documents/create/mark-as-paid-section.tsx +11 -2
- package/src/components/documents/view/document-actions-bar.tsx +30 -0
- package/src/components/documents/view/locales/de.ts +5 -0
- package/src/components/documents/view/locales/es.ts +5 -0
- package/src/components/documents/view/locales/fr.ts +5 -0
- package/src/components/documents/view/locales/hr.ts +5 -0
- package/src/components/documents/view/locales/it.ts +5 -0
- package/src/components/documents/view/locales/nl.ts +5 -0
- package/src/components/documents/view/locales/pl.ts +5 -0
- package/src/components/documents/view/locales/pt.ts +5 -0
- package/src/components/documents/view/locales/sl.ts +5 -0
- package/src/components/entities/create-entity-form.tsx +1 -1
- package/src/components/entities/entity-settings-form/entity-settings-form.tsx +2 -3
- package/src/components/entities/entity-settings-form/locales/es.ts +2 -0
- package/src/components/entities/entity-settings-form/locales/fr.ts +2 -0
- package/src/components/entities/entity-settings-form/locales/hr.ts +2 -0
- package/src/components/entities/entity-settings-form/locales/it.ts +2 -0
- package/src/components/entities/entity-settings-form/locales/nl.ts +2 -0
- package/src/components/entities/entity-settings-form/locales/pl.ts +2 -0
- package/src/components/entities/entity-settings-form/locales/pt.ts +2 -0
- package/src/components/entities/fina-settings-form/fina-operator-required-dialog.tsx +109 -0
- package/src/components/entities/fina-settings-form/fina-settings-form.tsx +365 -35
- package/src/components/entities/fina-settings-form/fina-settings.hooks.ts +101 -20
- package/src/components/entities/fina-settings-form/index.ts +1 -0
- package/src/components/entities/fina-settings-form/locales/de.ts +54 -34
- package/src/components/entities/fina-settings-form/locales/en.ts +51 -34
- package/src/components/entities/fina-settings-form/locales/es.ts +50 -34
- package/src/components/entities/fina-settings-form/locales/fr.ts +50 -34
- package/src/components/entities/fina-settings-form/locales/hr.ts +50 -34
- package/src/components/entities/fina-settings-form/locales/it.ts +50 -34
- package/src/components/entities/fina-settings-form/locales/nl.ts +50 -34
- package/src/components/entities/fina-settings-form/locales/pl.ts +50 -34
- package/src/components/entities/fina-settings-form/locales/pt.ts +50 -34
- package/src/components/entities/fina-settings-form/locales/sl.ts +50 -34
- package/src/components/entities/fina-settings-form/sections/certificate-settings-section.tsx +18 -0
- package/src/components/entities/fina-settings-form/sections/premises-management-section.tsx +64 -89
- package/src/components/entities/fina-settings-form/sections/register-premise-dialog.tsx +51 -323
- package/src/components/entities/furs-settings-form/furs-operator-required-dialog.tsx +106 -0
- package/src/components/entities/furs-settings-form/furs-settings-form.tsx +24 -10
- package/src/components/entities/furs-settings-form/furs-settings.hooks.ts +5 -9
- package/src/components/entities/furs-settings-form/index.ts +1 -0
- package/src/components/entities/furs-settings-form/locales/de.ts +27 -3
- package/src/components/entities/furs-settings-form/locales/en.ts +17 -3
- package/src/components/entities/furs-settings-form/locales/es.ts +26 -3
- package/src/components/entities/furs-settings-form/locales/fr.ts +26 -3
- package/src/components/entities/furs-settings-form/locales/hr.ts +26 -3
- package/src/components/entities/furs-settings-form/locales/it.ts +26 -3
- package/src/components/entities/furs-settings-form/locales/nl.ts +26 -3
- package/src/components/entities/furs-settings-form/locales/pl.ts +26 -3
- package/src/components/entities/furs-settings-form/locales/pt.ts +26 -3
- package/src/components/entities/furs-settings-form/locales/sl.ts +16 -3
- package/src/components/entities/furs-settings-form/sections/certificate-settings-section.tsx +22 -0
- package/src/components/entities/furs-settings-form/sections/general-settings-section.tsx +15 -2
- package/src/components/entities/furs-settings-form/sections/register-premise-dialog.tsx +14 -2
- package/src/components/entities/settings/tax-rules-settings-form.tsx +4 -4
- package/src/components/estimates/list/list-row-actions.tsx +3 -7
- package/src/components/estimates/list/list-table.tsx +35 -2
- package/src/components/estimates/list/locales/de.ts +3 -0
- package/src/components/estimates/list/locales/en.ts +3 -0
- package/src/components/estimates/list/locales/es.ts +3 -0
- package/src/components/estimates/list/locales/fr.ts +3 -0
- package/src/components/estimates/list/locales/hr.ts +3 -0
- package/src/components/estimates/list/locales/it.ts +3 -0
- package/src/components/estimates/list/locales/nl.ts +3 -0
- package/src/components/estimates/list/locales/pl.ts +3 -0
- package/src/components/estimates/list/locales/pt.ts +3 -0
- package/src/components/estimates/list/locales/sl.ts +3 -0
- package/src/components/export/document-export-form.tsx +34 -34
- package/src/components/invoices/create/create-invoice-form.tsx +107 -5
- package/src/components/invoices/create/prepare-invoice-submission.ts +17 -0
- package/src/components/invoices/invoices.hooks.ts +32 -2
- package/src/components/invoices/list/list-row-actions.tsx +23 -8
- package/src/components/invoices/list/list-table.tsx +53 -2
- package/src/components/invoices/list/locales/de.ts +4 -0
- package/src/components/invoices/list/locales/en.ts +4 -0
- package/src/components/invoices/list/locales/es.ts +4 -0
- package/src/components/invoices/list/locales/fr.ts +4 -0
- package/src/components/invoices/list/locales/hr.ts +4 -0
- package/src/components/invoices/list/locales/it.ts +4 -0
- package/src/components/invoices/list/locales/nl.ts +4 -0
- package/src/components/invoices/list/locales/pl.ts +4 -0
- package/src/components/invoices/list/locales/pt.ts +4 -0
- package/src/components/invoices/list/locales/sl.ts +4 -0
- package/src/components/invoices/view/fiscalization-status-card.tsx +4 -1
- package/src/components/items/item-list-table/item-list-row-actions.tsx +3 -7
- package/src/components/items/item-list-table/item-list-row.tsx +3 -2
- package/src/components/items/item-list-table/item-list-table.tsx +5 -1
- package/src/components/recurring-invoices/create-recurring-invoice-form/create-recurring-invoice-form.tsx +418 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/de.ts +45 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/es.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/fr.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/hr.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/it.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/nl.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/pl.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/pt.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/sl.ts +44 -0
- package/src/components/recurring-invoices/index.ts +3 -0
- package/src/components/recurring-invoices/list/index.ts +2 -0
- package/src/components/recurring-invoices/list/list-row-actions.tsx +139 -0
- package/src/components/recurring-invoices/list/list-table.tsx +179 -0
- package/src/components/recurring-invoices/list/locales/de.ts +27 -0
- package/src/components/recurring-invoices/list/locales/en.ts +5 -0
- package/src/components/recurring-invoices/list/locales/es.ts +27 -0
- package/src/components/recurring-invoices/list/locales/fr.ts +27 -0
- package/src/components/recurring-invoices/list/locales/hr.ts +27 -0
- package/src/components/recurring-invoices/list/locales/it.ts +27 -0
- package/src/components/recurring-invoices/list/locales/nl.ts +27 -0
- package/src/components/recurring-invoices/list/locales/pl.ts +27 -0
- package/src/components/recurring-invoices/list/locales/pt.ts +27 -0
- package/src/components/recurring-invoices/list/locales/sl.ts +27 -0
- package/src/components/recurring-invoices/recurring-invoices.hooks.ts +28 -0
- package/src/components/table/data-table.tsx +122 -5
- package/src/components/table/selection-toolbar.tsx +36 -0
- package/src/components/tax-reports/kir-export-form.tsx +75 -55
- package/src/components/taxes/tax-list-table/tax-list-row-actions.tsx +3 -6
- package/src/components/taxes/tax-list-table/tax-list-row.tsx +3 -2
- package/src/components/taxes/tax-list-table/tax-list-table.tsx +5 -1
- package/src/components/ui/checkbox.tsx +5 -5
- package/src/generate-schemas.ts +45 -18
- package/src/generated/schemas/authorizeshopify_body.ts +22 -0
- package/src/generated/schemas/creditnote.ts +0 -2
- package/src/generated/schemas/entity.ts +1 -1
- package/src/generated/schemas/index.ts +39 -28
- package/src/generated/schemas/order.ts +127 -0
- package/src/generated/schemas/orderintegration.ts +51 -0
- package/src/generated/schemas/payment.ts +2 -0
- package/src/generated/schemas/recurringinvoice.ts +61 -0
- package/src/generated/schemas/renderadvanceinvoicepreview_body.ts +107 -140
- package/src/generated/schemas/rendercreditnotepreview_body.ts +108 -141
- package/src/generated/schemas/renderestimatepreview_body.ts +78 -82
- package/src/generated/schemas/renderinvoicepreview_body.ts +108 -141
- package/src/generated/schemas/webhook.ts +42 -0
- package/src/lib/furs-error-utils.ts +36 -0
- package/src/lib/schemas/advance-invoice.ts +3 -3
- package/src/lib/schemas/credit-note.ts +3 -3
- package/src/lib/schemas/estimate.ts +3 -3
- package/src/lib/schemas/invoice.ts +3 -3
- package/src/providers/white-label-provider.tsx +3 -0
|
@@ -8,25 +8,6 @@ import { z } from 'zod';
|
|
|
8
8
|
|
|
9
9
|
// Schemas for renderestimatepreview_body endpoints
|
|
10
10
|
|
|
11
|
-
// Dependency schema for renderestimatepreview_body
|
|
12
|
-
const LineDiscount = z.object({
|
|
13
|
-
value: z.number().gte(0),
|
|
14
|
-
type: z.enum(["percent", "amount"]).optional().default("percent"),
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
// Dependency schema for renderestimatepreview_body
|
|
19
|
-
const DocumentItemTax = z
|
|
20
|
-
.object({
|
|
21
|
-
rate: z.number(),
|
|
22
|
-
tax_id: z.string(),
|
|
23
|
-
classification: z.string(),
|
|
24
|
-
reverse_charge: z.boolean(),
|
|
25
|
-
amount: z.number(),
|
|
26
|
-
})
|
|
27
|
-
.partial();
|
|
28
|
-
|
|
29
|
-
|
|
30
11
|
// Dependency schema for renderestimatepreview_body
|
|
31
12
|
const DocumentEntity = z
|
|
32
13
|
.object({
|
|
@@ -66,7 +47,19 @@ const DocumentEntity = z
|
|
|
66
47
|
|
|
67
48
|
|
|
68
49
|
// Dependency schema for renderestimatepreview_body
|
|
69
|
-
const
|
|
50
|
+
const CreateDocumentCustomer = DocumentEntity.and(
|
|
51
|
+
z.union([
|
|
52
|
+
z
|
|
53
|
+
.object({ save_customer: z.boolean().default(true) })
|
|
54
|
+
.partial()
|
|
55
|
+
.passthrough(),
|
|
56
|
+
z.null(),
|
|
57
|
+
])
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
// Dependency schema for renderestimatepreview_body
|
|
62
|
+
const PartialEstimatePreview = z.object({
|
|
70
63
|
is_draft: z.boolean().optional(),
|
|
71
64
|
date: z
|
|
72
65
|
.string()
|
|
@@ -74,15 +67,7 @@ const CompleteEstimatePreview = z.object({
|
|
|
74
67
|
.optional(),
|
|
75
68
|
issuer: DocumentEntity.optional(),
|
|
76
69
|
customer_id: z.union([z.string(), z.null()]).optional(),
|
|
77
|
-
customer:
|
|
78
|
-
z.union([
|
|
79
|
-
z
|
|
80
|
-
.object({ save_customer: z.boolean().default(true) })
|
|
81
|
-
.partial()
|
|
82
|
-
.passthrough(),
|
|
83
|
-
z.null(),
|
|
84
|
-
])
|
|
85
|
-
).optional(),
|
|
70
|
+
customer: CreateDocumentCustomer.optional(),
|
|
86
71
|
note: z.union([z.string(), z.null()]).optional(),
|
|
87
72
|
payment_terms: z.union([z.string(), z.null()]).optional(),
|
|
88
73
|
tax_clause: z.union([z.string(), z.null()]).optional(),
|
|
@@ -95,28 +80,23 @@ const CompleteEstimatePreview = z.object({
|
|
|
95
80
|
date_service_to: z.union([z.string(), z.null()]).optional(),
|
|
96
81
|
items: z
|
|
97
82
|
.array(
|
|
98
|
-
z
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
z.null(),
|
|
116
|
-
])
|
|
117
|
-
.optional(),
|
|
118
|
-
item_id: z.string().optional(),
|
|
119
|
-
})
|
|
83
|
+
z
|
|
84
|
+
.object({
|
|
85
|
+
name: z.string(),
|
|
86
|
+
quantity: z.number(),
|
|
87
|
+
price: z.number(),
|
|
88
|
+
gross_price: z.number(),
|
|
89
|
+
description: z.string(),
|
|
90
|
+
taxes: z.array(
|
|
91
|
+
z
|
|
92
|
+
.object({ rate: z.number(), tax_id: z.string() })
|
|
93
|
+
.partial()
|
|
94
|
+
.passthrough()
|
|
95
|
+
),
|
|
96
|
+
metadata: z.record(z.string(), z.any()),
|
|
97
|
+
})
|
|
98
|
+
.partial()
|
|
99
|
+
.passthrough()
|
|
120
100
|
)
|
|
121
101
|
.min(1),
|
|
122
102
|
expected_total_with_tax: z.number().gt(0).optional(),
|
|
@@ -124,7 +104,51 @@ const CompleteEstimatePreview = z.object({
|
|
|
124
104
|
|
|
125
105
|
|
|
126
106
|
// Dependency schema for renderestimatepreview_body
|
|
127
|
-
const
|
|
107
|
+
const DocumentItemTax = z
|
|
108
|
+
.object({
|
|
109
|
+
rate: z.number(),
|
|
110
|
+
tax_id: z.string(),
|
|
111
|
+
classification: z.string(),
|
|
112
|
+
reverse_charge: z.boolean(),
|
|
113
|
+
amount: z.number(),
|
|
114
|
+
})
|
|
115
|
+
.partial();
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
// Dependency schema for renderestimatepreview_body
|
|
119
|
+
const LineDiscount = z.object({
|
|
120
|
+
value: z.number().gte(0),
|
|
121
|
+
type: z.enum(["percent", "amount"]).optional().default("percent"),
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
// Dependency schema for renderestimatepreview_body
|
|
126
|
+
const CreateDocumentItem = z.object({
|
|
127
|
+
name: z.string().min(1).optional(),
|
|
128
|
+
description: z.union([z.string(), z.null()]).optional(),
|
|
129
|
+
price: z.number().optional(),
|
|
130
|
+
gross_price: z.number().optional(),
|
|
131
|
+
quantity: z.number().gte(-140737488355328).lte(140737488355327),
|
|
132
|
+
unit: z.union([z.string(), z.null()]).optional(),
|
|
133
|
+
taxes: z.array(DocumentItemTax).optional(),
|
|
134
|
+
discounts: z.array(LineDiscount).max(5).optional(),
|
|
135
|
+
metadata: z
|
|
136
|
+
.union([
|
|
137
|
+
z.string(),
|
|
138
|
+
z.number(),
|
|
139
|
+
z.boolean(),
|
|
140
|
+
z.null(),
|
|
141
|
+
z.object({}).partial().passthrough(),
|
|
142
|
+
z.array(z.unknown()),
|
|
143
|
+
z.null(),
|
|
144
|
+
])
|
|
145
|
+
.optional(),
|
|
146
|
+
item_id: z.string().optional(),
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
// Dependency schema for renderestimatepreview_body
|
|
151
|
+
const CompleteEstimatePreview = z.object({
|
|
128
152
|
is_draft: z.boolean().optional(),
|
|
129
153
|
date: z
|
|
130
154
|
.string()
|
|
@@ -132,15 +156,7 @@ const PartialEstimatePreview = z.object({
|
|
|
132
156
|
.optional(),
|
|
133
157
|
issuer: DocumentEntity.optional(),
|
|
134
158
|
customer_id: z.union([z.string(), z.null()]).optional(),
|
|
135
|
-
customer:
|
|
136
|
-
z.union([
|
|
137
|
-
z
|
|
138
|
-
.object({ save_customer: z.boolean().default(true) })
|
|
139
|
-
.partial()
|
|
140
|
-
.passthrough(),
|
|
141
|
-
z.null(),
|
|
142
|
-
])
|
|
143
|
-
).optional(),
|
|
159
|
+
customer: CreateDocumentCustomer.optional(),
|
|
144
160
|
note: z.union([z.string(), z.null()]).optional(),
|
|
145
161
|
payment_terms: z.union([z.string(), z.null()]).optional(),
|
|
146
162
|
tax_clause: z.union([z.string(), z.null()]).optional(),
|
|
@@ -151,27 +167,7 @@ const PartialEstimatePreview = z.object({
|
|
|
151
167
|
date_due: z.union([z.string(), z.null()]).optional(),
|
|
152
168
|
date_service: z.union([z.string(), z.null()]).optional(),
|
|
153
169
|
date_service_to: z.union([z.string(), z.null()]).optional(),
|
|
154
|
-
items: z
|
|
155
|
-
.array(
|
|
156
|
-
z
|
|
157
|
-
.object({
|
|
158
|
-
name: z.string(),
|
|
159
|
-
quantity: z.number(),
|
|
160
|
-
price: z.number(),
|
|
161
|
-
gross_price: z.number(),
|
|
162
|
-
description: z.string(),
|
|
163
|
-
taxes: z.array(
|
|
164
|
-
z
|
|
165
|
-
.object({ rate: z.number(), tax_id: z.string() })
|
|
166
|
-
.partial()
|
|
167
|
-
.passthrough()
|
|
168
|
-
),
|
|
169
|
-
metadata: z.record(z.string(), z.any()),
|
|
170
|
-
})
|
|
171
|
-
.partial()
|
|
172
|
-
.passthrough()
|
|
173
|
-
)
|
|
174
|
-
.min(1),
|
|
170
|
+
items: z.array(CreateDocumentItem).min(1),
|
|
175
171
|
expected_total_with_tax: z.number().gt(0).optional(),
|
|
176
172
|
});
|
|
177
173
|
|
|
@@ -8,25 +8,6 @@ import { z } from 'zod';
|
|
|
8
8
|
|
|
9
9
|
// Schemas for renderinvoicepreview_body endpoints
|
|
10
10
|
|
|
11
|
-
// Dependency schema for renderinvoicepreview_body
|
|
12
|
-
const LineDiscount = z.object({
|
|
13
|
-
value: z.number().gte(0),
|
|
14
|
-
type: z.enum(["percent", "amount"]).optional().default("percent"),
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
// Dependency schema for renderinvoicepreview_body
|
|
19
|
-
const DocumentItemTax = z
|
|
20
|
-
.object({
|
|
21
|
-
rate: z.number(),
|
|
22
|
-
tax_id: z.string(),
|
|
23
|
-
classification: z.string(),
|
|
24
|
-
reverse_charge: z.boolean(),
|
|
25
|
-
amount: z.number(),
|
|
26
|
-
})
|
|
27
|
-
.partial();
|
|
28
|
-
|
|
29
|
-
|
|
30
11
|
// Dependency schema for renderinvoicepreview_body
|
|
31
12
|
const DocumentEntity = z
|
|
32
13
|
.object({
|
|
@@ -66,91 +47,48 @@ const DocumentEntity = z
|
|
|
66
47
|
|
|
67
48
|
|
|
68
49
|
// Dependency schema for renderinvoicepreview_body
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
z.
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
z.object({}).partial().passthrough(),
|
|
112
|
-
z.array(z.unknown()),
|
|
113
|
-
z.null(),
|
|
114
|
-
])
|
|
115
|
-
.optional(),
|
|
116
|
-
item_id: z.string().optional(),
|
|
117
|
-
})
|
|
118
|
-
)
|
|
119
|
-
.min(1),
|
|
120
|
-
fina: z
|
|
121
|
-
.union([
|
|
122
|
-
z
|
|
123
|
-
.object({
|
|
124
|
-
premise_id: z
|
|
125
|
-
.string()
|
|
126
|
-
.min(1)
|
|
127
|
-
.max(20)
|
|
128
|
-
.regex(/^[0-9a-zA-Z]{1,20}$/),
|
|
129
|
-
device_id: z
|
|
130
|
-
.string()
|
|
131
|
-
.min(1)
|
|
132
|
-
.max(20)
|
|
133
|
-
.regex(/^\d{1,20}$/),
|
|
134
|
-
operator_oib: z.string().min(11).max(11),
|
|
135
|
-
is_end_consumer: z.boolean(),
|
|
136
|
-
payment_type: z.enum([
|
|
137
|
-
"cash",
|
|
138
|
-
"card",
|
|
139
|
-
"online",
|
|
140
|
-
"bank_transfer",
|
|
141
|
-
"paypal",
|
|
142
|
-
"crypto",
|
|
143
|
-
"coupon",
|
|
144
|
-
"other",
|
|
145
|
-
]),
|
|
146
|
-
subsequent_submit: z.boolean(),
|
|
147
|
-
})
|
|
148
|
-
.partial(),
|
|
149
|
-
z.null(),
|
|
150
|
-
])
|
|
151
|
-
.optional(),
|
|
152
|
-
expected_total_with_tax: z.number().gt(0).optional(),
|
|
153
|
-
});
|
|
50
|
+
const CreateDocumentCustomer = DocumentEntity.and(
|
|
51
|
+
z.union([
|
|
52
|
+
z
|
|
53
|
+
.object({ save_customer: z.boolean().default(true) })
|
|
54
|
+
.partial()
|
|
55
|
+
.passthrough(),
|
|
56
|
+
z.null(),
|
|
57
|
+
])
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
// Dependency schema for renderinvoicepreview_body
|
|
62
|
+
const CreateFinaInvoiceData = z.union([
|
|
63
|
+
z
|
|
64
|
+
.object({
|
|
65
|
+
premise_id: z
|
|
66
|
+
.string()
|
|
67
|
+
.min(1)
|
|
68
|
+
.max(20)
|
|
69
|
+
.regex(/^[0-9a-zA-Z]{1,20}$/),
|
|
70
|
+
device_id: z
|
|
71
|
+
.string()
|
|
72
|
+
.min(1)
|
|
73
|
+
.max(20)
|
|
74
|
+
.regex(/^\d{1,20}$/),
|
|
75
|
+
operator_oib: z.string().min(11).max(11),
|
|
76
|
+
is_end_consumer: z.boolean(),
|
|
77
|
+
payment_type: z.enum([
|
|
78
|
+
"cash",
|
|
79
|
+
"card",
|
|
80
|
+
"online",
|
|
81
|
+
"bank_transfer",
|
|
82
|
+
"paypal",
|
|
83
|
+
"crypto",
|
|
84
|
+
"coupon",
|
|
85
|
+
"other",
|
|
86
|
+
]),
|
|
87
|
+
subsequent_submit: z.boolean(),
|
|
88
|
+
})
|
|
89
|
+
.partial(),
|
|
90
|
+
z.null(),
|
|
91
|
+
]);
|
|
154
92
|
|
|
155
93
|
|
|
156
94
|
// Dependency schema for renderinvoicepreview_body
|
|
@@ -162,15 +100,7 @@ const PartialInvoicePreview = z.object({
|
|
|
162
100
|
.optional(),
|
|
163
101
|
issuer: DocumentEntity.optional(),
|
|
164
102
|
customer_id: z.union([z.string(), z.null()]).optional(),
|
|
165
|
-
customer:
|
|
166
|
-
z.union([
|
|
167
|
-
z
|
|
168
|
-
.object({ save_customer: z.boolean().default(true) })
|
|
169
|
-
.partial()
|
|
170
|
-
.passthrough(),
|
|
171
|
-
z.null(),
|
|
172
|
-
])
|
|
173
|
-
).optional(),
|
|
103
|
+
customer: CreateDocumentCustomer.optional(),
|
|
174
104
|
note: z.union([z.string(), z.null()]).optional(),
|
|
175
105
|
payment_terms: z.union([z.string(), z.null()]).optional(),
|
|
176
106
|
tax_clause: z.union([z.string(), z.null()]).optional(),
|
|
@@ -200,38 +130,75 @@ const PartialInvoicePreview = z.object({
|
|
|
200
130
|
.passthrough()
|
|
201
131
|
)
|
|
202
132
|
.min(1),
|
|
203
|
-
fina:
|
|
133
|
+
fina: CreateFinaInvoiceData.optional(),
|
|
134
|
+
expected_total_with_tax: z.number().gt(0).optional(),
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
// Dependency schema for renderinvoicepreview_body
|
|
139
|
+
const DocumentItemTax = z
|
|
140
|
+
.object({
|
|
141
|
+
rate: z.number(),
|
|
142
|
+
tax_id: z.string(),
|
|
143
|
+
classification: z.string(),
|
|
144
|
+
reverse_charge: z.boolean(),
|
|
145
|
+
amount: z.number(),
|
|
146
|
+
})
|
|
147
|
+
.partial();
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
// Dependency schema for renderinvoicepreview_body
|
|
151
|
+
const LineDiscount = z.object({
|
|
152
|
+
value: z.number().gte(0),
|
|
153
|
+
type: z.enum(["percent", "amount"]).optional().default("percent"),
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
// Dependency schema for renderinvoicepreview_body
|
|
158
|
+
const CreateDocumentItem = z.object({
|
|
159
|
+
name: z.string().min(1).optional(),
|
|
160
|
+
description: z.union([z.string(), z.null()]).optional(),
|
|
161
|
+
price: z.number().optional(),
|
|
162
|
+
gross_price: z.number().optional(),
|
|
163
|
+
quantity: z.number().gte(-140737488355328).lte(140737488355327),
|
|
164
|
+
unit: z.union([z.string(), z.null()]).optional(),
|
|
165
|
+
taxes: z.array(DocumentItemTax).optional(),
|
|
166
|
+
discounts: z.array(LineDiscount).max(5).optional(),
|
|
167
|
+
metadata: z
|
|
204
168
|
.union([
|
|
205
|
-
z
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
.regex(/^[0-9a-zA-Z]{1,20}$/),
|
|
212
|
-
device_id: z
|
|
213
|
-
.string()
|
|
214
|
-
.min(1)
|
|
215
|
-
.max(20)
|
|
216
|
-
.regex(/^\d{1,20}$/),
|
|
217
|
-
operator_oib: z.string().min(11).max(11),
|
|
218
|
-
is_end_consumer: z.boolean(),
|
|
219
|
-
payment_type: z.enum([
|
|
220
|
-
"cash",
|
|
221
|
-
"card",
|
|
222
|
-
"online",
|
|
223
|
-
"bank_transfer",
|
|
224
|
-
"paypal",
|
|
225
|
-
"crypto",
|
|
226
|
-
"coupon",
|
|
227
|
-
"other",
|
|
228
|
-
]),
|
|
229
|
-
subsequent_submit: z.boolean(),
|
|
230
|
-
})
|
|
231
|
-
.partial(),
|
|
169
|
+
z.string(),
|
|
170
|
+
z.number(),
|
|
171
|
+
z.boolean(),
|
|
172
|
+
z.null(),
|
|
173
|
+
z.object({}).partial().passthrough(),
|
|
174
|
+
z.array(z.unknown()),
|
|
232
175
|
z.null(),
|
|
233
176
|
])
|
|
234
177
|
.optional(),
|
|
178
|
+
item_id: z.string().optional(),
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
// Dependency schema for renderinvoicepreview_body
|
|
183
|
+
const CompleteInvoicePreview = z.object({
|
|
184
|
+
is_draft: z.boolean().optional(),
|
|
185
|
+
date: z
|
|
186
|
+
.string()
|
|
187
|
+
.regex(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?)?$/)
|
|
188
|
+
.optional(),
|
|
189
|
+
issuer: DocumentEntity.optional(),
|
|
190
|
+
customer_id: z.union([z.string(), z.null()]).optional(),
|
|
191
|
+
customer: CreateDocumentCustomer.optional(),
|
|
192
|
+
note: z.union([z.string(), z.null()]).optional(),
|
|
193
|
+
payment_terms: z.union([z.string(), z.null()]).optional(),
|
|
194
|
+
tax_clause: z.union([z.string(), z.null()]).optional(),
|
|
195
|
+
currency_code: z.string().max(3).optional(),
|
|
196
|
+
metadata: z.union([z.record(z.string(), z.any()), z.null()]).optional(),
|
|
197
|
+
date_due: z.union([z.string(), z.null()]).optional(),
|
|
198
|
+
date_service: z.union([z.string(), z.null()]).optional(),
|
|
199
|
+
date_service_to: z.union([z.string(), z.null()]).optional(),
|
|
200
|
+
items: z.array(CreateDocumentItem).min(1),
|
|
201
|
+
fina: CreateFinaInvoiceData.optional(),
|
|
235
202
|
expected_total_with_tax: z.number().gt(0).optional(),
|
|
236
203
|
});
|
|
237
204
|
|
|
@@ -59,9 +59,30 @@ const createWebhookSchemaDefinition = z.object({
|
|
|
59
59
|
"tax.deleted",
|
|
60
60
|
"tax.restored",
|
|
61
61
|
"tax.permanently_deleted",
|
|
62
|
+
"recurring_invoice.created",
|
|
63
|
+
"recurring_invoice.updated",
|
|
64
|
+
"recurring_invoice.deleted",
|
|
65
|
+
"recurring_invoice.restored",
|
|
66
|
+
"recurring_invoice.permanently_deleted",
|
|
67
|
+
"recurring_invoice.paused",
|
|
68
|
+
"recurring_invoice.resumed",
|
|
69
|
+
"recurring_invoice.invoice_generated",
|
|
70
|
+
"recurring_invoice.generation_failed",
|
|
71
|
+
"recurring_invoice.completed",
|
|
62
72
|
"stripe_app.connected",
|
|
63
73
|
"stripe_app.disconnected",
|
|
64
74
|
"stripe_app.settings_updated",
|
|
75
|
+
"order.created",
|
|
76
|
+
"order.updated",
|
|
77
|
+
"order.deleted",
|
|
78
|
+
"order.restored",
|
|
79
|
+
"order.permanently_deleted",
|
|
80
|
+
"order.processed",
|
|
81
|
+
"order.cancelled",
|
|
82
|
+
"order.failed",
|
|
83
|
+
"order_integration.created",
|
|
84
|
+
"order_integration.updated",
|
|
85
|
+
"order_integration.deleted",
|
|
65
86
|
])
|
|
66
87
|
)
|
|
67
88
|
.min(1),
|
|
@@ -125,9 +146,30 @@ const updateWebhookSchemaDefinition = z
|
|
|
125
146
|
"tax.deleted",
|
|
126
147
|
"tax.restored",
|
|
127
148
|
"tax.permanently_deleted",
|
|
149
|
+
"recurring_invoice.created",
|
|
150
|
+
"recurring_invoice.updated",
|
|
151
|
+
"recurring_invoice.deleted",
|
|
152
|
+
"recurring_invoice.restored",
|
|
153
|
+
"recurring_invoice.permanently_deleted",
|
|
154
|
+
"recurring_invoice.paused",
|
|
155
|
+
"recurring_invoice.resumed",
|
|
156
|
+
"recurring_invoice.invoice_generated",
|
|
157
|
+
"recurring_invoice.generation_failed",
|
|
158
|
+
"recurring_invoice.completed",
|
|
128
159
|
"stripe_app.connected",
|
|
129
160
|
"stripe_app.disconnected",
|
|
130
161
|
"stripe_app.settings_updated",
|
|
162
|
+
"order.created",
|
|
163
|
+
"order.updated",
|
|
164
|
+
"order.deleted",
|
|
165
|
+
"order.restored",
|
|
166
|
+
"order.permanently_deleted",
|
|
167
|
+
"order.processed",
|
|
168
|
+
"order.cancelled",
|
|
169
|
+
"order.failed",
|
|
170
|
+
"order_integration.created",
|
|
171
|
+
"order_integration.updated",
|
|
172
|
+
"order_integration.deleted",
|
|
131
173
|
])
|
|
132
174
|
)
|
|
133
175
|
.min(1),
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect if an error is a FURS operator settings validation error (422).
|
|
3
|
+
* The API returns a ZodError with paths like ["furs", "operator_tax_number"]
|
|
4
|
+
* when operator settings are missing during document creation.
|
|
5
|
+
*/
|
|
6
|
+
export function isFursOperatorError(error: unknown): boolean {
|
|
7
|
+
const data = (error as any)?.data;
|
|
8
|
+
if (!data?.cause?.issues) return false;
|
|
9
|
+
return data.cause.issues.some(
|
|
10
|
+
(issue: any) =>
|
|
11
|
+
issue.path?.[0] === "furs" && (issue.path?.[1] === "operator_tax_number" || issue.path?.[1] === "operator_label"),
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Detect if an error is a FINA operator settings error.
|
|
17
|
+
* CIS requires OibOper (minOccurs="1" in FiskalizacijaSchema.xsd).
|
|
18
|
+
* Checks for Zod validation errors with paths like ["fina", "operator_oib"]
|
|
19
|
+
* or CIS XML validation errors mentioning OibOper.
|
|
20
|
+
*/
|
|
21
|
+
export function isFinaOperatorError(error: unknown): boolean {
|
|
22
|
+
const data = (error as any)?.data;
|
|
23
|
+
// Check for Zod-style validation error
|
|
24
|
+
if (data?.cause?.issues) {
|
|
25
|
+
return data.cause.issues.some(
|
|
26
|
+
(issue: any) =>
|
|
27
|
+
issue.path?.[0] === "fina" && (issue.path?.[1] === "operator_oib" || issue.path?.[1] === "operator_label"),
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
// Check for CIS error message mentioning OibOper
|
|
31
|
+
const message = data?.message || (error as any)?.message || "";
|
|
32
|
+
if (typeof message === "string" && message.includes("OibOper")) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Requires: ./shared.ts
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
6
|
+
import type { CreateAdvanceInvoice } from "@spaceinvoices/js-sdk";
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
import { customerSchema, lineItemSchema, transformItemsForApi } from "./shared";
|
|
9
9
|
|
|
@@ -35,9 +35,9 @@ export const advanceInvoiceFormSchema = z.object({
|
|
|
35
35
|
export type AdvanceInvoiceFormValues = z.infer<typeof advanceInvoiceFormSchema>;
|
|
36
36
|
|
|
37
37
|
/** Convert form values to API request */
|
|
38
|
-
export function toCreateAdvanceInvoiceRequest(values: AdvanceInvoiceFormValues):
|
|
38
|
+
export function toCreateAdvanceInvoiceRequest(values: AdvanceInvoiceFormValues): CreateAdvanceInvoice {
|
|
39
39
|
return {
|
|
40
40
|
...values,
|
|
41
41
|
items: transformItemsForApi(values.items ?? []),
|
|
42
|
-
} as
|
|
42
|
+
} as CreateAdvanceInvoice;
|
|
43
43
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Requires: ./shared.ts
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
6
|
+
import type { CreateCreditNote } from "@spaceinvoices/js-sdk";
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
import { customerSchema, lineItemSchema, transformItemsForApi } from "./shared";
|
|
9
9
|
|
|
@@ -24,9 +24,9 @@ export const creditNoteFormSchema = z.object({
|
|
|
24
24
|
export type CreditNoteFormValues = z.infer<typeof creditNoteFormSchema>;
|
|
25
25
|
|
|
26
26
|
/** Convert form values to API request */
|
|
27
|
-
export function toCreateCreditNoteRequest(values: CreditNoteFormValues):
|
|
27
|
+
export function toCreateCreditNoteRequest(values: CreditNoteFormValues): CreateCreditNote {
|
|
28
28
|
return {
|
|
29
29
|
...values,
|
|
30
30
|
items: transformItemsForApi(values.items ?? []),
|
|
31
|
-
} as
|
|
31
|
+
} as CreateCreditNote;
|
|
32
32
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Requires: ./shared.ts
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
6
|
+
import type { CreateEstimate } from "@spaceinvoices/js-sdk";
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
import { customerSchema, lineItemSchema, transformItemsForApi } from "./shared";
|
|
9
9
|
|
|
@@ -23,9 +23,9 @@ export const estimateFormSchema = z.object({
|
|
|
23
23
|
export type EstimateFormValues = z.infer<typeof estimateFormSchema>;
|
|
24
24
|
|
|
25
25
|
/** Convert form values to API request */
|
|
26
|
-
export function toCreateEstimateRequest(values: EstimateFormValues):
|
|
26
|
+
export function toCreateEstimateRequest(values: EstimateFormValues): CreateEstimate {
|
|
27
27
|
return {
|
|
28
28
|
...values,
|
|
29
29
|
items: transformItemsForApi(values.items ?? []),
|
|
30
|
-
} as
|
|
30
|
+
} as CreateEstimate;
|
|
31
31
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Requires: ./shared.ts
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
6
|
+
import type { CreateInvoice } from "@spaceinvoices/js-sdk";
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
import { customerSchema, lineItemSchema, transformItemsForApi } from "./shared";
|
|
9
9
|
|
|
@@ -35,9 +35,9 @@ export const invoiceFormSchema = z.object({
|
|
|
35
35
|
export type InvoiceFormValues = z.infer<typeof invoiceFormSchema>;
|
|
36
36
|
|
|
37
37
|
/** Convert form values to API request */
|
|
38
|
-
export function toCreateInvoiceRequest(values: InvoiceFormValues):
|
|
38
|
+
export function toCreateInvoiceRequest(values: InvoiceFormValues): CreateInvoice {
|
|
39
39
|
return {
|
|
40
40
|
...values,
|
|
41
41
|
items: transformItemsForApi(values.items ?? []),
|
|
42
|
-
} as
|
|
42
|
+
} as CreateInvoice;
|
|
43
43
|
}
|