@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.
Files changed (263) hide show
  1. package/cli/dist/index.js +1 -1
  2. package/package.json +1 -1
  3. package/src/common/autocomplete.tsx +18 -2
  4. package/src/components/advance-invoices/create/create-advance-invoice-form.tsx +61 -12
  5. package/src/components/advance-invoices/create/locales/de.ts +17 -0
  6. package/src/components/advance-invoices/create/locales/es.ts +17 -0
  7. package/src/components/advance-invoices/create/locales/fr.ts +17 -0
  8. package/src/components/advance-invoices/create/locales/hr.ts +16 -0
  9. package/src/components/advance-invoices/create/locales/it.ts +17 -0
  10. package/src/components/advance-invoices/create/locales/nl.ts +17 -0
  11. package/src/components/advance-invoices/create/locales/pl.ts +16 -0
  12. package/src/components/advance-invoices/create/locales/pt.ts +16 -0
  13. package/src/components/advance-invoices/create/locales/sl.ts +16 -0
  14. package/src/components/advance-invoices/create/prepare-advance-invoice-submission.ts +0 -1
  15. package/src/components/advance-invoices/list/list-row-actions.tsx +48 -1
  16. package/src/components/advance-invoices/list/list-table.tsx +100 -50
  17. package/src/components/advance-invoices/list/locales/de.ts +9 -0
  18. package/src/components/advance-invoices/list/locales/en.ts +7 -0
  19. package/src/components/advance-invoices/list/locales/es.ts +9 -0
  20. package/src/components/advance-invoices/list/locales/fr.ts +9 -0
  21. package/src/components/advance-invoices/list/locales/hr.ts +8 -0
  22. package/src/components/advance-invoices/list/locales/it.ts +9 -0
  23. package/src/components/advance-invoices/list/locales/nl.ts +9 -0
  24. package/src/components/advance-invoices/list/locales/pl.ts +8 -0
  25. package/src/components/advance-invoices/list/locales/pt.ts +9 -0
  26. package/src/components/advance-invoices/list/locales/sl.ts +8 -0
  27. package/src/components/credit-notes/create/create-credit-note-form.tsx +185 -11
  28. package/src/components/credit-notes/create/locales/de.ts +18 -0
  29. package/src/components/credit-notes/create/locales/es.ts +18 -0
  30. package/src/components/credit-notes/create/locales/fr.ts +18 -0
  31. package/src/components/credit-notes/create/locales/hr.ts +17 -0
  32. package/src/components/credit-notes/create/locales/it.ts +18 -0
  33. package/src/components/credit-notes/create/locales/nl.ts +18 -0
  34. package/src/components/credit-notes/create/locales/pl.ts +17 -0
  35. package/src/components/credit-notes/create/locales/pt.ts +17 -0
  36. package/src/components/credit-notes/create/locales/sl.ts +18 -1
  37. package/src/components/credit-notes/credit-notes.hooks.ts +30 -0
  38. package/src/components/credit-notes/list/list-row-actions.tsx +44 -1
  39. package/src/components/credit-notes/list/list-table.tsx +93 -32
  40. package/src/components/credit-notes/list/locales/de.ts +7 -0
  41. package/src/components/credit-notes/list/locales/en.ts +6 -0
  42. package/src/components/credit-notes/list/locales/es.ts +7 -0
  43. package/src/components/credit-notes/list/locales/fr.ts +7 -0
  44. package/src/components/credit-notes/list/locales/hr.ts +7 -0
  45. package/src/components/credit-notes/list/locales/it.ts +7 -0
  46. package/src/components/credit-notes/list/locales/nl.ts +7 -0
  47. package/src/components/credit-notes/list/locales/pl.ts +7 -0
  48. package/src/components/credit-notes/list/locales/pt.ts +7 -0
  49. package/src/components/credit-notes/list/locales/sl.ts +7 -0
  50. package/src/components/customers/customer-list-table/customer-list-table.tsx +0 -3
  51. package/src/components/customers/customer-list-table/locales/de.ts +1 -0
  52. package/src/components/customers/customer-list-table/locales/es.ts +1 -0
  53. package/src/components/customers/customer-list-table/locales/fr.ts +1 -0
  54. package/src/components/customers/customer-list-table/locales/hr.ts +1 -0
  55. package/src/components/customers/customer-list-table/locales/it.ts +1 -0
  56. package/src/components/customers/customer-list-table/locales/nl.ts +1 -0
  57. package/src/components/customers/customer-list-table/locales/pl.ts +1 -0
  58. package/src/components/customers/customer-list-table/locales/pt.ts +1 -0
  59. package/src/components/customers/customer-list-table/locales/sl.ts +1 -0
  60. package/src/components/dashboard/collection-rate-card/use-collection-rate.ts +48 -9
  61. package/src/components/dashboard/revenue-trend-chart/use-revenue-trend.ts +77 -48
  62. package/src/components/dashboard/shared/use-revenue-data.ts +77 -9
  63. package/src/components/delivery-notes/create/create-delivery-note-form.tsx +67 -7
  64. package/src/components/delivery-notes/create/locales/de.ts +16 -0
  65. package/src/components/delivery-notes/create/locales/es.ts +16 -0
  66. package/src/components/delivery-notes/create/locales/fr.ts +16 -0
  67. package/src/components/delivery-notes/create/locales/hr.ts +16 -0
  68. package/src/components/delivery-notes/create/locales/it.ts +16 -0
  69. package/src/components/delivery-notes/create/locales/nl.ts +16 -0
  70. package/src/components/delivery-notes/create/locales/pl.ts +16 -0
  71. package/src/components/delivery-notes/create/locales/pt.ts +16 -0
  72. package/src/components/delivery-notes/create/locales/sl.ts +17 -1
  73. package/src/components/delivery-notes/list/list-row-actions.tsx +20 -1
  74. package/src/components/delivery-notes/list/list-table.tsx +50 -8
  75. package/src/components/delivery-notes/list/locales/de.ts +35 -0
  76. package/src/components/delivery-notes/list/locales/en.ts +33 -0
  77. package/src/components/delivery-notes/list/locales/es.ts +35 -0
  78. package/src/components/delivery-notes/list/locales/fr.ts +35 -0
  79. package/src/components/delivery-notes/list/locales/hr.ts +35 -0
  80. package/src/components/delivery-notes/list/locales/it.ts +35 -0
  81. package/src/components/delivery-notes/list/locales/nl.ts +35 -0
  82. package/src/components/delivery-notes/list/locales/pl.ts +35 -0
  83. package/src/components/delivery-notes/list/locales/pt.ts +35 -0
  84. package/src/components/delivery-notes/list/locales/sl.ts +35 -0
  85. package/src/components/documents/create/document-add-item-form.tsx +70 -0
  86. package/src/components/documents/create/document-details-section.tsx +163 -29
  87. package/src/components/documents/create/document-items-section.tsx +21 -4
  88. package/src/components/documents/create/linked-documents-info.tsx +82 -0
  89. package/src/components/documents/create/live-preview.tsx +25 -5
  90. package/src/components/documents/create/mark-as-paid-section.tsx +29 -20
  91. package/src/components/documents/create/prepare-document-submission.ts +19 -7
  92. package/src/components/documents/shared/document-preview-display.tsx +3 -4
  93. package/src/components/documents/types.ts +2 -2
  94. package/src/components/documents/view/document-actions-bar.tsx +7 -27
  95. package/src/components/documents/view/document-activities-list.tsx +65 -47
  96. package/src/components/documents/view/document-details-card.tsx +118 -76
  97. package/src/components/documents/view/document-payments-list.tsx +99 -65
  98. package/src/components/documents/view/document-relations-list.tsx +43 -28
  99. package/src/components/documents/view/document-sidebar.tsx +151 -0
  100. package/src/components/documents/view/index.ts +2 -0
  101. package/src/components/documents/view/locales/de.ts +4 -0
  102. package/src/components/documents/view/locales/es.ts +4 -0
  103. package/src/components/documents/view/locales/fr.ts +4 -0
  104. package/src/components/documents/view/locales/hr.ts +4 -0
  105. package/src/components/documents/view/locales/it.ts +4 -0
  106. package/src/components/documents/view/locales/nl.ts +4 -0
  107. package/src/components/documents/view/locales/pl.ts +4 -0
  108. package/src/components/documents/view/locales/pt.ts +4 -0
  109. package/src/components/documents/view/locales/sl.ts +5 -1
  110. package/src/components/documents/view/use-document-download.ts +7 -3
  111. package/src/components/entities/create-entity-form.tsx +166 -13
  112. package/src/components/entities/entity-settings-form/entity-settings-form.tsx +101 -1
  113. package/src/components/entities/entity-settings-form/input-with-preview.tsx +30 -2
  114. package/src/components/entities/entity-settings-form/locales/de.ts +10 -0
  115. package/src/components/entities/entity-settings-form/locales/es.ts +10 -0
  116. package/src/components/entities/entity-settings-form/locales/fr.ts +10 -0
  117. package/src/components/entities/entity-settings-form/locales/hr.ts +10 -0
  118. package/src/components/entities/entity-settings-form/locales/it.ts +10 -0
  119. package/src/components/entities/entity-settings-form/locales/nl.ts +10 -0
  120. package/src/components/entities/entity-settings-form/locales/pl.ts +10 -0
  121. package/src/components/entities/entity-settings-form/locales/pt.ts +10 -0
  122. package/src/components/entities/entity-settings-form/locales/sl.ts +10 -0
  123. package/src/components/entities/fina-settings-form/fina-settings-form.tsx +6 -6
  124. package/src/components/entities/fina-settings-form/locales/de.ts +2 -2
  125. package/src/components/entities/fina-settings-form/locales/en.ts +2 -2
  126. package/src/components/entities/fina-settings-form/locales/es.ts +2 -2
  127. package/src/components/entities/fina-settings-form/locales/fr.ts +2 -2
  128. package/src/components/entities/fina-settings-form/locales/hr.ts +2 -2
  129. package/src/components/entities/fina-settings-form/locales/it.ts +2 -2
  130. package/src/components/entities/fina-settings-form/locales/nl.ts +2 -2
  131. package/src/components/entities/fina-settings-form/locales/pl.ts +2 -2
  132. package/src/components/entities/fina-settings-form/locales/pt.ts +2 -2
  133. package/src/components/entities/fina-settings-form/locales/sl.ts +2 -2
  134. package/src/components/entities/furs-settings-form/locales/en.ts +0 -1
  135. package/src/components/entities/settings/company-settings-form.tsx +173 -20
  136. package/src/components/entities/settings/pdf-template-selector/locales/de.ts +3 -1
  137. package/src/components/entities/settings/pdf-template-selector/locales/es.ts +3 -1
  138. package/src/components/entities/settings/pdf-template-selector/locales/fr.ts +4 -1
  139. package/src/components/entities/settings/pdf-template-selector/locales/hr.ts +4 -1
  140. package/src/components/entities/settings/pdf-template-selector/locales/it.ts +3 -1
  141. package/src/components/entities/settings/pdf-template-selector/locales/nl.ts +3 -1
  142. package/src/components/entities/settings/pdf-template-selector/locales/pl.ts +3 -1
  143. package/src/components/entities/settings/pdf-template-selector/locales/pt.ts +3 -1
  144. package/src/components/entities/settings/pdf-template-selector/locales/sl.ts +3 -1
  145. package/src/components/entities/settings/pdf-template-selector/pdf-template-cards.tsx +1 -0
  146. package/src/components/estimates/create/create-estimate-form.tsx +93 -8
  147. package/src/components/estimates/create/locales/de.ts +16 -0
  148. package/src/components/estimates/create/locales/es.ts +16 -0
  149. package/src/components/estimates/create/locales/fr.ts +16 -0
  150. package/src/components/estimates/create/locales/hr.ts +16 -0
  151. package/src/components/estimates/create/locales/it.ts +16 -0
  152. package/src/components/estimates/create/locales/nl.ts +16 -0
  153. package/src/components/estimates/create/locales/pl.ts +16 -0
  154. package/src/components/estimates/create/locales/pt.ts +16 -0
  155. package/src/components/estimates/create/locales/sl.ts +17 -1
  156. package/src/components/estimates/list/list-table.tsx +14 -8
  157. package/src/components/estimates/list/locales/de.ts +2 -0
  158. package/src/components/estimates/list/locales/en.ts +1 -0
  159. package/src/components/estimates/list/locales/es.ts +2 -0
  160. package/src/components/estimates/list/locales/fr.ts +2 -0
  161. package/src/components/estimates/list/locales/hr.ts +2 -0
  162. package/src/components/estimates/list/locales/it.ts +2 -0
  163. package/src/components/estimates/list/locales/nl.ts +2 -0
  164. package/src/components/estimates/list/locales/pl.ts +2 -0
  165. package/src/components/estimates/list/locales/pt.ts +2 -0
  166. package/src/components/estimates/list/locales/sl.ts +2 -0
  167. package/src/components/export/document-export-form.tsx +55 -14
  168. package/src/components/export/index.ts +2 -0
  169. package/src/components/export/sales-per-item-export-form.tsx +223 -0
  170. package/src/components/invoices/create/create-invoice-form.tsx +106 -11
  171. package/src/components/invoices/create/locales/de.ts +26 -0
  172. package/src/components/invoices/create/locales/es.ts +26 -0
  173. package/src/components/invoices/create/locales/fr.ts +26 -0
  174. package/src/components/invoices/create/locales/hr.ts +25 -0
  175. package/src/components/invoices/create/locales/it.ts +26 -0
  176. package/src/components/invoices/create/locales/nl.ts +26 -0
  177. package/src/components/invoices/create/locales/pl.ts +25 -0
  178. package/src/components/invoices/create/locales/pt.ts +25 -0
  179. package/src/components/invoices/create/locales/sl.ts +26 -1
  180. package/src/components/invoices/invoices-furs.hooks.ts +4 -1
  181. package/src/components/invoices/list/list-table.tsx +77 -31
  182. package/src/components/invoices/list/locales/de.ts +5 -0
  183. package/src/components/invoices/list/locales/en.ts +4 -0
  184. package/src/components/invoices/list/locales/es.ts +5 -0
  185. package/src/components/invoices/list/locales/fr.ts +5 -0
  186. package/src/components/invoices/list/locales/hr.ts +5 -0
  187. package/src/components/invoices/list/locales/it.ts +5 -0
  188. package/src/components/invoices/list/locales/nl.ts +5 -0
  189. package/src/components/invoices/list/locales/pl.ts +5 -0
  190. package/src/components/invoices/list/locales/pt.ts +5 -0
  191. package/src/components/invoices/list/locales/sl.ts +5 -0
  192. package/src/components/invoices/view/fiscalization-status-card.tsx +44 -24
  193. package/src/components/items/item-combobox.tsx +5 -3
  194. package/src/components/items/item-list-table/item-list-header.tsx +4 -17
  195. package/src/components/items/item-list-table/item-list-table.tsx +3 -3
  196. package/src/components/items/item-list-table/locales/de.ts +1 -0
  197. package/src/components/items/item-list-table/locales/es.ts +1 -0
  198. package/src/components/items/item-list-table/locales/fr.ts +1 -0
  199. package/src/components/items/item-list-table/locales/hr.ts +1 -0
  200. package/src/components/items/item-list-table/locales/it.ts +1 -0
  201. package/src/components/items/item-list-table/locales/nl.ts +1 -0
  202. package/src/components/items/item-list-table/locales/pl.ts +1 -0
  203. package/src/components/items/item-list-table/locales/pt.ts +1 -0
  204. package/src/components/items/item-list-table/locales/sl.ts +1 -0
  205. package/src/components/payments/list/list-table.tsx +0 -4
  206. package/src/components/payments/list/locales/de.ts +1 -0
  207. package/src/components/payments/list/locales/es.ts +1 -0
  208. package/src/components/payments/list/locales/fr.ts +1 -0
  209. package/src/components/payments/list/locales/hr.ts +1 -0
  210. package/src/components/payments/list/locales/it.ts +1 -0
  211. package/src/components/payments/list/locales/nl.ts +1 -0
  212. package/src/components/payments/list/locales/pl.ts +1 -0
  213. package/src/components/payments/list/locales/pt.ts +1 -0
  214. package/src/components/payments/list/locales/sl.ts +1 -0
  215. package/src/components/recurring-invoices/list/list-table.tsx +0 -7
  216. package/src/components/recurring-invoices/list/locales/de.ts +1 -0
  217. package/src/components/recurring-invoices/list/locales/es.ts +1 -0
  218. package/src/components/recurring-invoices/list/locales/fr.ts +1 -0
  219. package/src/components/recurring-invoices/list/locales/hr.ts +1 -0
  220. package/src/components/recurring-invoices/list/locales/it.ts +1 -0
  221. package/src/components/recurring-invoices/list/locales/nl.ts +1 -0
  222. package/src/components/recurring-invoices/list/locales/pl.ts +1 -0
  223. package/src/components/recurring-invoices/list/locales/pt.ts +1 -0
  224. package/src/components/recurring-invoices/list/locales/sl.ts +1 -0
  225. package/src/components/request-logs/request-log-list-table.tsx +0 -3
  226. package/src/components/table/README.md +14 -121
  227. package/src/components/table/data-table.tsx +22 -37
  228. package/src/components/table/hooks/use-table-state.ts +3 -27
  229. package/src/components/table/index.ts +0 -2
  230. package/src/components/table/search-input.tsx +17 -0
  231. package/src/components/table/selection-toolbar.tsx +35 -1
  232. package/src/components/table/table-empty-state.tsx +6 -3
  233. package/src/components/table/table-no-results.tsx +10 -5
  234. package/src/components/table/types.ts +0 -5
  235. package/src/components/taxes/tax-list-table/locales/de.ts +1 -0
  236. package/src/components/taxes/tax-list-table/locales/es.ts +1 -0
  237. package/src/components/taxes/tax-list-table/locales/fr.ts +1 -0
  238. package/src/components/taxes/tax-list-table/locales/hr.ts +1 -0
  239. package/src/components/taxes/tax-list-table/locales/it.ts +1 -0
  240. package/src/components/taxes/tax-list-table/locales/nl.ts +1 -0
  241. package/src/components/taxes/tax-list-table/locales/pl.ts +1 -0
  242. package/src/components/taxes/tax-list-table/locales/pt.ts +1 -0
  243. package/src/components/taxes/tax-list-table/locales/sl.ts +1 -0
  244. package/src/components/taxes/tax-list-table/tax-list-header.tsx +3 -14
  245. package/src/components/taxes/tax-list-table/tax-list-table.tsx +3 -3
  246. package/src/components/ui/popover.tsx +3 -1
  247. package/src/components/ui/tooltip.tsx +3 -1
  248. package/src/generated/schemas/advanceinvoice.ts +4 -2
  249. package/src/generated/schemas/creditnote.ts +2 -1
  250. package/src/generated/schemas/deliverynote.ts +2 -1
  251. package/src/generated/schemas/estimate.ts +4 -2
  252. package/src/generated/schemas/index.ts +1 -1
  253. package/src/generated/schemas/invoice.ts +2 -1
  254. package/src/generated/schemas/renderadvanceinvoicepreview_body.ts +17 -23
  255. package/src/generated/schemas/rendercreditnotepreview_body.ts +17 -23
  256. package/src/generated/schemas/renderdeliverynotepreview_body.ts +17 -23
  257. package/src/generated/schemas/renderestimatepreview_body.ts +17 -23
  258. package/src/generated/schemas/renderinvoicepreview_body.ts +19 -23
  259. package/src/hooks/use-duplicate-document.ts +56 -14
  260. package/src/hooks/use-vies-check.ts +3 -0
  261. package/src/lib/fiscalization.ts +12 -0
  262. package/src/lib/schemas/advance-invoice.ts +0 -1
  263. package/src/components/table/sortable-header.tsx +0 -56
@@ -177,7 +177,7 @@ export const FinaSettingsForm: FC<FinaSettingsFormProps> = ({
177
177
  const [isAdvancedOpen, setIsAdvancedOpen] = useState(!!hideUserOperatorSection);
178
178
  const [formData, setFormData] = useState({
179
179
  enabled: false,
180
- numbering_sequence: "N" as "N" | "P",
180
+ numbering_sequence: "P" as "N" | "P",
181
181
  operator_oib: "",
182
182
  operator_label: "",
183
183
  u_sust_pdv: true,
@@ -188,7 +188,7 @@ export const FinaSettingsForm: FC<FinaSettingsFormProps> = ({
188
188
  if (finaSettings) {
189
189
  setFormData({
190
190
  enabled: finaSettings.enabled || false,
191
- numbering_sequence: finaSettings.numbering_sequence || "N",
191
+ numbering_sequence: finaSettings.numbering_sequence || "P",
192
192
  operator_oib: finaSettings.operator_oib || "",
193
193
  operator_label: finaSettings.operator_label || "",
194
194
  u_sust_pdv: finaSettings.u_sust_pdv ?? true,
@@ -523,12 +523,12 @@ export const FinaSettingsForm: FC<FinaSettingsFormProps> = ({
523
523
  className="space-y-2"
524
524
  >
525
525
  <div className="flex items-center space-x-2">
526
- <RadioGroupItem value="N" id="seq-n" />
527
- <Label htmlFor="seq-n">{translate("Per Premise (N)")}</Label>
526
+ <RadioGroupItem value="P" id="seq-p" />
527
+ <Label htmlFor="seq-p">{translate("Per Premise (P)")}</Label>
528
528
  </div>
529
529
  <div className="flex items-center space-x-2">
530
- <RadioGroupItem value="P" id="seq-p" />
531
- <Label htmlFor="seq-p">{translate("Per Device (P)")}</Label>
530
+ <RadioGroupItem value="N" id="seq-n" />
531
+ <Label htmlFor="seq-n">{translate("Per Device (N)")}</Label>
532
532
  </div>
533
533
  </RadioGroup>
534
534
  </div>,
@@ -19,8 +19,8 @@ export default {
19
19
  "Registrieren Sie mindestens einen Geschäftsraum, bevor Sie Rechnungen fiskalisieren",
20
20
  "Numbering Sequence": "Nummerierungsfolge",
21
21
  "Choose how invoice numbers are sequenced": "Wählen Sie, wie Rechnungsnummern sequenziert werden",
22
- "Per Premise (N)": "Pro Raum (N)",
23
- "Per Device (P)": "Pro Gerät (P)",
22
+ "Per Device (N)": "Pro Gerät (N)",
23
+ "Per Premise (P)": "Pro Raum (P)",
24
24
  Recommended: "Empfohlen",
25
25
  "One sequence per business premise. Simpler to manage.": "Eine Sequenz pro Geschäftsraum. Einfacher zu verwalten.",
26
26
  "Separate sequence per electronic device. For multi-device setups.":
@@ -18,8 +18,8 @@ export default {
18
18
  "Register at least one business premise before fiscalizing invoices",
19
19
  "Numbering Sequence": "Numbering Sequence",
20
20
  "Choose how invoice numbers are sequenced": "Choose how invoice numbers are sequenced",
21
- "Per Premise (N)": "Per Premise (N)",
22
- "Per Device (P)": "Per Device (P)",
21
+ "Per Device (N)": "Per Device (N)",
22
+ "Per Premise (P)": "Per Premise (P)",
23
23
  Recommended: "Recommended",
24
24
  "One sequence per business premise. Simpler to manage.": "One sequence per business premise. Simpler to manage.",
25
25
  "Separate sequence per electronic device. For multi-device setups.":
@@ -18,8 +18,8 @@ export default {
18
18
  "Registre al menos un local comercial antes de fiscalizar facturas",
19
19
  "Numbering Sequence": "Secuencia de numeración",
20
20
  "Choose how invoice numbers are sequenced": "Elija cómo se secuencian los números de factura",
21
- "Per Premise (N)": "Por local (N)",
22
- "Per Device (P)": "Por dispositivo (P)",
21
+ "Per Device (N)": "Por dispositivo (N)",
22
+ "Per Premise (P)": "Por local (P)",
23
23
  Recommended: "Recomendado",
24
24
  "One sequence per business premise. Simpler to manage.":
25
25
  "Una secuencia por local comercial. Más simple de gestionar.",
@@ -18,8 +18,8 @@ export default {
18
18
  "Enregistrez au moins un local commercial avant de fiscaliser les factures",
19
19
  "Numbering Sequence": "Séquence de numérotation",
20
20
  "Choose how invoice numbers are sequenced": "Choisissez comment les numéros de factures sont séquencés",
21
- "Per Premise (N)": "Par local (N)",
22
- "Per Device (P)": "Par appareil (P)",
21
+ "Per Device (N)": "Par appareil (N)",
22
+ "Per Premise (P)": "Par local (P)",
23
23
  Recommended: "Recommandé",
24
24
  "One sequence per business premise. Simpler to manage.": "Une séquence par local commercial. Plus simple à gérer.",
25
25
  "Separate sequence per electronic device. For multi-device setups.":
@@ -18,8 +18,8 @@ export default {
18
18
  "Registrirajte barem jedan poslovni prostor prije fiskalizacije računa",
19
19
  "Numbering Sequence": "Redoslijed numeriranja",
20
20
  "Choose how invoice numbers are sequenced": "Odaberite način numeriranja računa",
21
- "Per Premise (N)": "Po prostoru (N)",
22
- "Per Device (P)": "Po uređaju (P)",
21
+ "Per Device (N)": "Po uređaju (N)",
22
+ "Per Premise (P)": "Po prostoru (P)",
23
23
  Recommended: "Preporučeno",
24
24
  "One sequence per business premise. Simpler to manage.":
25
25
  "Jedan redoslijed po poslovnom prostoru. Jednostavnije za upravljanje.",
@@ -18,8 +18,8 @@ export default {
18
18
  "Registra almeno un locale commerciale prima di fiscalizzare le fatture",
19
19
  "Numbering Sequence": "Sequenza di numerazione",
20
20
  "Choose how invoice numbers are sequenced": "Scegli come vengono numerati i documenti",
21
- "Per Premise (N)": "Per locale (N)",
22
- "Per Device (P)": "Per dispositivo (P)",
21
+ "Per Device (N)": "Per dispositivo (N)",
22
+ "Per Premise (P)": "Per locale (P)",
23
23
  Recommended: "Consigliato",
24
24
  "One sequence per business premise. Simpler to manage.":
25
25
  "Una sequenza per locale commerciale. Più semplice da gestire.",
@@ -18,8 +18,8 @@ export default {
18
18
  "Registreer ten minste één bedrijfsruimte voordat u facturen fiscaliseert",
19
19
  "Numbering Sequence": "Nummeringsreeks",
20
20
  "Choose how invoice numbers are sequenced": "Kies hoe factuurnummers worden gesequenst",
21
- "Per Premise (N)": "Per ruimte (N)",
22
- "Per Device (P)": "Per apparaat (P)",
21
+ "Per Device (N)": "Per apparaat (N)",
22
+ "Per Premise (P)": "Per ruimte (P)",
23
23
  Recommended: "Aanbevolen",
24
24
  "One sequence per business premise. Simpler to manage.": "Eén reeks per bedrijfsruimte. Eenvoudiger te beheren.",
25
25
  "Separate sequence per electronic device. For multi-device setups.":
@@ -18,8 +18,8 @@ export default {
18
18
  "Zarejestruj co najmniej jeden lokal użytkowy przed fiskalizacją faktur",
19
19
  "Numbering Sequence": "Sekwencja numeracji",
20
20
  "Choose how invoice numbers are sequenced": "Wybierz sposób numeracji faktur",
21
- "Per Premise (N)": "Na lokal (N)",
22
- "Per Device (P)": "Na urządzenie (P)",
21
+ "Per Device (N)": "Na urządzenie (N)",
22
+ "Per Premise (P)": "Na lokal (P)",
23
23
  Recommended: "Zalecane",
24
24
  "One sequence per business premise. Simpler to manage.": "Jedna sekwencja na lokal użytkowy. Łatwiejsze zarządzanie.",
25
25
  "Separate sequence per electronic device. For multi-device setups.":
@@ -18,8 +18,8 @@ export default {
18
18
  "Registe pelo menos uma instalação comercial antes de fiscalizar faturas",
19
19
  "Numbering Sequence": "Sequência de numeração",
20
20
  "Choose how invoice numbers are sequenced": "Escolha como os números de fatura são sequenciados",
21
- "Per Premise (N)": "Por instalação (N)",
22
- "Per Device (P)": "Por dispositivo (P)",
21
+ "Per Device (N)": "Por dispositivo (N)",
22
+ "Per Premise (P)": "Por instalação (P)",
23
23
  Recommended: "Recomendado",
24
24
  "One sequence per business premise. Simpler to manage.":
25
25
  "Uma sequência por instalação comercial. Mais simples de gerir.",
@@ -18,8 +18,8 @@ export default {
18
18
  "Registrirajte vsaj en poslovni prostor, preden fiskalizirate račune",
19
19
  "Numbering Sequence": "Zaporedje številčenja",
20
20
  "Choose how invoice numbers are sequenced": "Izberite način številčenja računov",
21
- "Per Premise (N)": "Po prostoru (N)",
22
- "Per Device (P)": "Po napravi (P)",
21
+ "Per Device (N)": "Po napravi (N)",
22
+ "Per Premise (P)": "Po prostoru (P)",
23
23
  Recommended: "Priporočeno",
24
24
  "One sequence per business premise. Simpler to manage.":
25
25
  "Eno zaporedje na poslovni prostor. Enostavnejše za upravljanje.",
@@ -183,7 +183,6 @@ export default {
183
183
  "Save Operator Settings": "Save Operator Settings",
184
184
  "Your tax number for FURS fiscalization": "Your tax number for FURS fiscalization",
185
185
  "Descriptive label for the operator (e.g. Cashier 1)": "Descriptive label for the operator (e.g. Cashier 1)",
186
- "e.g. Cashier 1": "e.g. Cashier 1",
187
186
  "Fiscalization Settings": "Fiscalization Settings",
188
187
  "Advanced Settings": "Advanced Settings",
189
188
  "API Default Operator": "API Default Operator",
@@ -2,6 +2,7 @@ import { zodResolver } from "@hookform/resolvers/zod";
2
2
  import type { Entity } from "@spaceinvoices/js-sdk";
3
3
  import { useForm } from "react-hook-form";
4
4
  import { z } from "zod";
5
+ import { Checkbox } from "@/ui/components/ui/checkbox";
5
6
  import {
6
7
  Form,
7
8
  FormControl,
@@ -24,12 +25,23 @@ const translations = { sl, de } as const;
24
25
  const companySettingsSchema = z.object({
25
26
  name: z.string().min(1, "Name is required"),
26
27
  tax_number: z.union([z.string(), z.null()]).optional(),
28
+ is_tax_subject: z.boolean(),
27
29
  tax_number_2: z.union([z.string(), z.null()]).optional(),
28
30
  address: z.union([z.string(), z.null()]).optional(),
29
31
  address_2: z.union([z.string(), z.null()]).optional(),
30
32
  post_code: z.union([z.string(), z.null()]).optional(),
31
33
  city: z.union([z.string(), z.null()]).optional(),
32
34
  state: z.union([z.string(), z.null()]).optional(),
35
+ // Bank account fields (stored in settings.bank_accounts array)
36
+ bank_account_iban: z
37
+ .union([z.string(), z.null()])
38
+ .refine((val) => !val || /^[A-Z]{2}[0-9A-Z]{2,32}$/.test(val.replace(/\s/g, "")), {
39
+ message: "Must be a valid IBAN",
40
+ })
41
+ .optional(),
42
+ bank_account_name: z.union([z.string(), z.null()]).optional(),
43
+ bank_account_bank_name: z.union([z.string(), z.null()]).optional(),
44
+ bank_account_bic: z.union([z.string(), z.null()]).optional(),
33
45
  });
34
46
 
35
47
  type CompanySettingsSchema = z.infer<typeof companySettingsSchema>;
@@ -50,17 +62,24 @@ export function CompanySettingsForm({
50
62
  }: CompanySettingsFormProps) {
51
63
  const t = createTranslation({ t: translateProp, namespace, locale, translations });
52
64
 
65
+ const currentSettings = (entity.settings as any) || {};
66
+
53
67
  const form = useForm<CompanySettingsSchema>({
54
68
  resolver: zodResolver(companySettingsSchema),
55
69
  defaultValues: {
56
70
  name: entity.name || "",
57
71
  tax_number: (entity as any).tax_number || null,
72
+ is_tax_subject: entity.is_tax_subject ?? true,
58
73
  tax_number_2: (entity as any).tax_number_2 || null,
59
74
  address: (entity as any).address || null,
60
75
  address_2: (entity as any).address_2 || null,
61
76
  post_code: (entity as any).post_code || null,
62
77
  city: (entity as any).city || null,
63
78
  state: (entity as any).state || null,
79
+ bank_account_iban: currentSettings.bank_accounts?.[0]?.iban || null,
80
+ bank_account_name: currentSettings.bank_accounts?.[0]?.name || null,
81
+ bank_account_bank_name: currentSettings.bank_accounts?.[0]?.bank_name || null,
82
+ bank_account_bic: currentSettings.bank_accounts?.[0]?.bic || null,
64
83
  },
65
84
  });
66
85
 
@@ -85,6 +104,7 @@ export function CompanySettingsForm({
85
104
 
86
105
  if (values.name !== entity.name) updatePayload.name = values.name;
87
106
  if (values.tax_number !== (entity as any).tax_number) updatePayload.tax_number = values.tax_number;
107
+ if (values.is_tax_subject !== entity.is_tax_subject) updatePayload.is_tax_subject = values.is_tax_subject;
88
108
  if (values.tax_number_2 !== (entity as any).tax_number_2) updatePayload.tax_number_2 = values.tax_number_2;
89
109
  if (values.address !== (entity as any).address) updatePayload.address = values.address;
90
110
  if (values.address_2 !== (entity as any).address_2) updatePayload.address_2 = values.address_2;
@@ -92,6 +112,37 @@ export function CompanySettingsForm({
92
112
  if (values.city !== (entity as any).city) updatePayload.city = values.city;
93
113
  if (values.state !== (entity as any).state) updatePayload.state = values.state;
94
114
 
115
+ // Check if bank account fields changed
116
+ const currentIban = currentSettings.bank_accounts?.[0]?.iban || null;
117
+ const currentBankName = currentSettings.bank_accounts?.[0]?.name || null;
118
+ const currentBankBankName = currentSettings.bank_accounts?.[0]?.bank_name || null;
119
+ const currentBic = currentSettings.bank_accounts?.[0]?.bic || null;
120
+
121
+ const bankChanged =
122
+ values.bank_account_iban !== currentIban ||
123
+ values.bank_account_name !== currentBankName ||
124
+ values.bank_account_bank_name !== currentBankBankName ||
125
+ values.bank_account_bic !== currentBic;
126
+
127
+ if (bankChanged) {
128
+ updatePayload.settings = {
129
+ ...currentSettings,
130
+ bank_accounts: values.bank_account_iban
131
+ ? [
132
+ {
133
+ type: "iban" as const,
134
+ iban: values.bank_account_iban,
135
+ name: values.bank_account_name || undefined,
136
+ bank_name: values.bank_account_bank_name || undefined,
137
+ bic: values.bank_account_bic || undefined,
138
+ is_default: true,
139
+ },
140
+ ...(currentSettings.bank_accounts?.slice(1) || []),
141
+ ]
142
+ : currentSettings.bank_accounts || undefined,
143
+ };
144
+ }
145
+
95
146
  if (Object.keys(updatePayload).length > 0) {
96
147
  updateEntity({ id: entity.id, data: updatePayload });
97
148
  } else {
@@ -117,26 +168,40 @@ export function CompanySettingsForm({
117
168
  )}
118
169
  />
119
170
 
120
- <FormField
121
- control={form.control}
122
- name="tax_number"
123
- render={({ field }) => (
124
- <FormItem className="max-w-xs">
125
- <FormLabel className="font-medium text-base">{t("Tax ID")}</FormLabel>
126
- <FormControl>
127
- <Input
128
- {...field}
129
- value={field.value || ""}
130
- onChange={(e) => field.onChange(e.target.value || null)}
131
- placeholder="12-3456789"
132
- className="h-10"
133
- />
134
- </FormControl>
135
- <FormDescription className="text-xs">{t("Tax identification number (optional)")}</FormDescription>
136
- <FormMessage />
137
- </FormItem>
138
- )}
139
- />
171
+ <div className="grid grid-cols-[1fr_auto] items-end gap-4">
172
+ <FormField
173
+ control={form.control}
174
+ name="tax_number"
175
+ render={({ field }) => (
176
+ <FormItem className="max-w-xs">
177
+ <FormLabel className="font-medium text-base">{t("Tax ID")}</FormLabel>
178
+ <FormControl>
179
+ <Input
180
+ {...field}
181
+ value={field.value || ""}
182
+ onChange={(e) => field.onChange(e.target.value || null)}
183
+ placeholder="12-3456789"
184
+ className="h-10"
185
+ />
186
+ </FormControl>
187
+ <FormDescription className="text-xs">{t("Tax identification number (optional)")}</FormDescription>
188
+ <FormMessage />
189
+ </FormItem>
190
+ )}
191
+ />
192
+ <FormField
193
+ control={form.control}
194
+ name="is_tax_subject"
195
+ render={({ field }) => (
196
+ <FormItem className="flex flex-row items-center space-x-2 space-y-0 pb-7">
197
+ <FormControl>
198
+ <Checkbox checked={field.value} onCheckedChange={field.onChange} />
199
+ </FormControl>
200
+ <FormLabel className="font-normal">{t("Tax subject")}</FormLabel>
201
+ </FormItem>
202
+ )}
203
+ />
204
+ </div>
140
205
 
141
206
  {(entity as any).country_rules?.features?.includes("tax_number_2") && (
142
207
  <FormField
@@ -278,6 +343,94 @@ export function CompanySettingsForm({
278
343
  <FormDescription className="text-xs">{t("Country cannot be changed")}</FormDescription>
279
344
  </FormItem>
280
345
  </div>
346
+
347
+ <div className="border-t pt-6">
348
+ <p className="mb-4 font-medium text-base">{t("Bank Account")}</p>
349
+
350
+ <div className="space-y-4">
351
+ <FormField
352
+ control={form.control}
353
+ name="bank_account_iban"
354
+ render={({ field }) => (
355
+ <FormItem>
356
+ <FormLabel>{t("IBAN")}</FormLabel>
357
+ <FormControl>
358
+ <Input
359
+ {...field}
360
+ value={field.value || ""}
361
+ onChange={(e) => field.onChange(e.target.value.toUpperCase().replace(/\s/g, "") || null)}
362
+ placeholder="SI56 0123 4567 8901 234"
363
+ className="h-10 font-mono"
364
+ />
365
+ </FormControl>
366
+ <FormMessage />
367
+ </FormItem>
368
+ )}
369
+ />
370
+
371
+ <FormField
372
+ control={form.control}
373
+ name="bank_account_name"
374
+ render={({ field }) => (
375
+ <FormItem>
376
+ <FormLabel>{t("Account Name")}</FormLabel>
377
+ <FormControl>
378
+ <Input
379
+ {...field}
380
+ value={field.value || ""}
381
+ onChange={(e) => field.onChange(e.target.value || null)}
382
+ placeholder={t("Main Business Account")}
383
+ className="h-10"
384
+ />
385
+ </FormControl>
386
+ <FormMessage />
387
+ </FormItem>
388
+ )}
389
+ />
390
+
391
+ <div className="grid gap-4 md:grid-cols-2">
392
+ <FormField
393
+ control={form.control}
394
+ name="bank_account_bank_name"
395
+ render={({ field }) => (
396
+ <FormItem>
397
+ <FormLabel>{t("Bank Name")}</FormLabel>
398
+ <FormControl>
399
+ <Input
400
+ {...field}
401
+ value={field.value || ""}
402
+ onChange={(e) => field.onChange(e.target.value || null)}
403
+ placeholder="NLB d.d."
404
+ className="h-10"
405
+ />
406
+ </FormControl>
407
+ <FormMessage />
408
+ </FormItem>
409
+ )}
410
+ />
411
+
412
+ <FormField
413
+ control={form.control}
414
+ name="bank_account_bic"
415
+ render={({ field }) => (
416
+ <FormItem>
417
+ <FormLabel>{t("BIC/SWIFT")}</FormLabel>
418
+ <FormControl>
419
+ <Input
420
+ {...field}
421
+ value={field.value || ""}
422
+ onChange={(e) => field.onChange(e.target.value.toUpperCase() || null)}
423
+ placeholder="LJBASI2X"
424
+ className="h-10 font-mono"
425
+ />
426
+ </FormControl>
427
+ <FormMessage />
428
+ </FormItem>
429
+ )}
430
+ />
431
+ </div>
432
+ </div>
433
+ </div>
281
434
  </form>
282
435
  </Form>
283
436
  );
@@ -7,7 +7,9 @@ export default {
7
7
  Modern: "Modern",
8
8
  "Modern template description": "Klares, professionelles Design für die meisten Unternehmen geeignet",
9
9
  Classic: "Klassisch",
10
- "Classic template description": "Traditioneller Rechnungsstil mit Serifenschriften und Rahmen",
10
+ "Classic template description": "Lato-Schrift-Design mit farbiger Datenbox und abwechselnden Zeilenhintergründen",
11
+ Condensed: "Kompakt",
12
+ "Condensed template description": "Traditioneller Rechnungsstil mit Rahmen und kompaktem Layout",
11
13
  Minimal: "Minimal",
12
14
  "Minimal template description": "Typografie-fokussiertes Design mit klarer Ästhetik",
13
15
  Fashion: "Mode",
@@ -7,7 +7,9 @@ export default {
7
7
  Modern: "Moderna",
8
8
  "Modern template description": "Diseño limpio y profesional adecuado para la mayoría de las empresas",
9
9
  Classic: "Clásica",
10
- "Classic template description": "Diseño tradicional de factura con fuentes serif y bordes",
10
+ "Classic template description": "Diseño con fuente Lato, caja de datos con color y fondos de filas alternos",
11
+ Condensed: "Compacta",
12
+ "Condensed template description": "Diseño tradicional de factura con bordes y disposición compacta",
11
13
  Minimal: "Minimalista",
12
14
  "Minimal template description": "Diseño centrado en la tipografía con una estética limpia",
13
15
  Fashion: "Fashion",
@@ -7,7 +7,10 @@ export default {
7
7
  Modern: "Moderne",
8
8
  "Modern template description": "Design épuré et professionnel adapté à la plupart des entreprises",
9
9
  Classic: "Classique",
10
- "Classic template description": "Mise en page traditionnelle avec polices à empattements et bordures",
10
+ "Classic template description":
11
+ "Design avec police Lato, boîte de données colorée et arrière-plans de lignes alternés",
12
+ Condensed: "Condensé",
13
+ "Condensed template description": "Mise en page traditionnelle avec bordures et disposition compacte",
11
14
  Minimal: "Minimaliste",
12
15
  "Minimal template description": "Design axé sur la typographie avec une esthétique épurée",
13
16
  Fashion: "Fashion",
@@ -7,7 +7,10 @@ export default {
7
7
  Modern: "Moderan",
8
8
  "Modern template description": "Čist, profesionalan dizajn prikladan za većinu tvrtki",
9
9
  Classic: "Klasičan",
10
- "Classic template description": "Tradicionalni raspored računa sa serifnim fontovima i okvirima",
10
+ "Classic template description":
11
+ "Dizajn s Lato fontom, obojenom podatkovnom kutijom i izmjenjujućim pozadinama redaka",
12
+ Condensed: "Kompaktan",
13
+ "Condensed template description": "Tradicionalni raspored računa s okvirima i kompaktnim rasporedom",
11
14
  Minimal: "Minimalistički",
12
15
  "Minimal template description": "Tipografski usmjeren dizajn s čistom estetikom",
13
16
  Fashion: "Fashion",
@@ -7,7 +7,9 @@ export default {
7
7
  Modern: "Moderno",
8
8
  "Modern template description": "Design pulito e professionale adatto alla maggior parte delle aziende",
9
9
  Classic: "Classico",
10
- "Classic template description": "Layout tradizionale per fatture con caratteri serif e bordi",
10
+ "Classic template description": "Design con font Lato, riquadro dati colorato e sfondi di riga alternati",
11
+ Condensed: "Compatto",
12
+ "Condensed template description": "Layout tradizionale per fatture con bordi e disposizione compatta",
11
13
  Minimal: "Minimale",
12
14
  "Minimal template description": "Design incentrato sulla tipografia con un'estetica pulita",
13
15
  Fashion: "Fashion",
@@ -6,7 +6,9 @@ export default {
6
6
  Modern: "Modern",
7
7
  "Modern template description": "Strak, professioneel ontwerp geschikt voor de meeste bedrijven",
8
8
  Classic: "Klassiek",
9
- "Classic template description": "Traditionele factuurindeling met schreeflettertypen en kaders",
9
+ "Classic template description": "Ontwerp met Lato-lettertype, gekleurd gegevensvak en afwisselende rijachtergronden",
10
+ Condensed: "Compact",
11
+ "Condensed template description": "Traditionele factuurindeling met kaders en compacte weergave",
10
12
  Minimal: "Minimalistisch",
11
13
  "Minimal template description": "Typografisch gericht ontwerp met een strakke esthetiek",
12
14
  Fashion: "Fashion",
@@ -7,7 +7,9 @@ export default {
7
7
  Modern: "Nowoczesny",
8
8
  "Modern template description": "Czysty, profesjonalny design odpowiedni dla większości firm",
9
9
  Classic: "Klasyczny",
10
- "Classic template description": "Tradycyjny układ faktury z czcionkami szeryfowymi i ramkami",
10
+ "Classic template description": "Design z czcionką Lato, kolorowym polem danych i naprzemiennymi tłami wierszy",
11
+ Condensed: "Kompaktowy",
12
+ "Condensed template description": "Tradycyjny układ faktury z ramkami i kompaktowym rozmieszczeniem",
11
13
  Minimal: "Minimalistyczny",
12
14
  "Minimal template description": "Design skoncentrowany na typografii z czystą estetyką",
13
15
  Fashion: "Fashion",
@@ -7,7 +7,9 @@ export default {
7
7
  Modern: "Moderno",
8
8
  "Modern template description": "Design limpo e profissional adequado para a maioria das empresas",
9
9
  Classic: "Clássico",
10
- "Classic template description": "Layout tradicional de fatura com fontes serifadas e bordas",
10
+ "Classic template description": "Design com fonte Lato, caixa de dados colorida e fundos de linhas alternados",
11
+ Condensed: "Compacto",
12
+ "Condensed template description": "Layout tradicional de fatura com bordas e disposição compacta",
11
13
  Minimal: "Minimalista",
12
14
  "Minimal template description": "Design focado na tipografia com uma estética limpa",
13
15
  Fashion: "Fashion",
@@ -7,7 +7,9 @@ export default {
7
7
  Modern: "Moderna",
8
8
  "Modern template description": "Čista, profesionalna oblika primerna za večino podjetij",
9
9
  Classic: "Klasična",
10
- "Classic template description": "Tradicionalna oblika računa s serifnimi pisavami in okvirji",
10
+ "Classic template description": "Oblika z Lato pisavo, barvnim okvirjem podatkov in izmenjujočimi ozadji vrstic",
11
+ Condensed: "Kompaktna",
12
+ "Condensed template description": "Tradicionalna oblika računa z okvirji in kompaktno postavitvijo",
11
13
  Minimal: "Minimalistična",
12
14
  "Minimal template description": "Tipografsko osredotočena oblika s čisto estetiko",
13
15
  Fashion: "Modna",
@@ -9,6 +9,7 @@ const TEMPLATES: Array<{
9
9
  }> = [
10
10
  { id: "modern", nameKey: "Modern", descriptionKey: "Modern template description" },
11
11
  { id: "classic", nameKey: "Classic", descriptionKey: "Classic template description" },
12
+ { id: "condensed", nameKey: "Condensed", descriptionKey: "Condensed template description" },
12
13
  { id: "minimal", nameKey: "Minimal", descriptionKey: "Minimal template description" },
13
14
  { id: "fashion", nameKey: "Fashion", descriptionKey: "Fashion template description" },
14
15
  ];