@spaceinvoices/react-ui 0.4.11 → 0.4.31

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 (738) hide show
  1. package/cli/dist/index.js +1 -1
  2. package/package.json +3 -2
  3. package/registry.json +30 -31
  4. package/src/common/autocomplete.tsx +48 -26
  5. package/src/components/activities/locales/bg.ts +21 -0
  6. package/src/components/activities/locales/cs.ts +21 -0
  7. package/src/components/activities/locales/en.ts +21 -0
  8. package/src/components/activities/locales/et.ts +21 -0
  9. package/src/components/activities/locales/fi.ts +21 -0
  10. package/src/components/activities/locales/is.ts +21 -0
  11. package/src/components/activities/locales/nb.ts +21 -0
  12. package/src/components/activities/locales/sk.ts +21 -0
  13. package/src/components/activities/locales/sv.ts +21 -0
  14. package/src/components/advance-invoices/advance-invoices.hooks.ts +36 -46
  15. package/src/components/advance-invoices/create/create-advance-invoice-form.tsx +452 -115
  16. package/src/components/advance-invoices/create/locales/bg.ts +56 -0
  17. package/src/components/advance-invoices/create/locales/cs.ts +56 -0
  18. package/src/components/advance-invoices/create/locales/de.ts +15 -7
  19. package/src/components/advance-invoices/create/locales/en.ts +56 -0
  20. package/src/components/advance-invoices/create/locales/es.ts +15 -7
  21. package/src/components/advance-invoices/create/locales/et.ts +56 -0
  22. package/src/components/advance-invoices/create/locales/fi.ts +56 -0
  23. package/src/components/advance-invoices/create/locales/fr.ts +16 -8
  24. package/src/components/advance-invoices/create/locales/hr.ts +29 -21
  25. package/src/components/advance-invoices/create/locales/is.ts +56 -0
  26. package/src/components/advance-invoices/create/locales/it.ts +15 -7
  27. package/src/components/advance-invoices/create/locales/nb.ts +56 -0
  28. package/src/components/advance-invoices/create/locales/nl.ts +15 -7
  29. package/src/components/advance-invoices/create/locales/pl.ts +17 -9
  30. package/src/components/advance-invoices/create/locales/pt.ts +16 -8
  31. package/src/components/advance-invoices/create/locales/sk.ts +56 -0
  32. package/src/components/advance-invoices/create/locales/sl.ts +23 -12
  33. package/src/components/advance-invoices/create/locales/sv.ts +56 -0
  34. package/src/components/advance-invoices/create/prepare-advance-invoice-submission.ts +62 -2
  35. package/src/components/advance-invoices/list/list-row-actions.tsx +48 -16
  36. package/src/components/advance-invoices/list/list-table.tsx +35 -9
  37. package/src/components/advance-invoices/list/locales/bg.ts +51 -0
  38. package/src/components/advance-invoices/list/locales/cs.ts +51 -0
  39. package/src/components/advance-invoices/list/locales/en.ts +33 -2
  40. package/src/components/advance-invoices/list/locales/et.ts +51 -0
  41. package/src/components/advance-invoices/list/locales/fi.ts +51 -0
  42. package/src/components/advance-invoices/list/locales/hr.ts +15 -15
  43. package/src/components/advance-invoices/list/locales/is.ts +51 -0
  44. package/src/components/advance-invoices/list/locales/nb.ts +51 -0
  45. package/src/components/advance-invoices/list/locales/sk.ts +51 -0
  46. package/src/components/advance-invoices/list/locales/sv.ts +51 -0
  47. package/src/components/advance-invoices/list/use-advance-invoice-download.ts +3 -5
  48. package/src/components/common/autocomplete-locales.ts +101 -0
  49. package/src/components/company-registry/company-registry.hooks.ts +3 -7
  50. package/src/components/credit-notes/create/create-credit-note-form.tsx +437 -80
  51. package/src/components/credit-notes/create/locales/bg.ts +101 -0
  52. package/src/components/credit-notes/create/locales/cs.ts +101 -0
  53. package/src/components/credit-notes/create/locales/de.ts +20 -7
  54. package/src/components/credit-notes/create/locales/en.ts +101 -0
  55. package/src/components/credit-notes/create/locales/es.ts +20 -7
  56. package/src/components/credit-notes/create/locales/et.ts +101 -0
  57. package/src/components/credit-notes/create/locales/fi.ts +101 -0
  58. package/src/components/credit-notes/create/locales/fr.ts +21 -8
  59. package/src/components/credit-notes/create/locales/hr.ts +41 -28
  60. package/src/components/credit-notes/create/locales/is.ts +101 -0
  61. package/src/components/credit-notes/create/locales/it.ts +20 -7
  62. package/src/components/credit-notes/create/locales/nb.ts +101 -0
  63. package/src/components/credit-notes/create/locales/nl.ts +20 -7
  64. package/src/components/credit-notes/create/locales/pl.ts +22 -9
  65. package/src/components/credit-notes/create/locales/pt.ts +21 -8
  66. package/src/components/credit-notes/create/locales/sk.ts +101 -0
  67. package/src/components/credit-notes/create/locales/sl.ts +28 -14
  68. package/src/components/credit-notes/create/locales/sv.ts +101 -0
  69. package/src/components/credit-notes/create/prepare-credit-note-submission.ts +66 -0
  70. package/src/components/credit-notes/credit-notes.hooks.ts +34 -3
  71. package/src/components/credit-notes/list/list-row-actions.tsx +19 -7
  72. package/src/components/credit-notes/list/list-table.tsx +60 -8
  73. package/src/components/credit-notes/list/locales/bg.ts +48 -0
  74. package/src/components/credit-notes/list/locales/cs.ts +48 -0
  75. package/src/components/credit-notes/list/locales/en.ts +31 -2
  76. package/src/components/credit-notes/list/locales/et.ts +48 -0
  77. package/src/components/credit-notes/list/locales/fi.ts +48 -0
  78. package/src/components/credit-notes/list/locales/hr.ts +12 -12
  79. package/src/components/credit-notes/list/locales/is.ts +48 -0
  80. package/src/components/credit-notes/list/locales/nb.ts +48 -0
  81. package/src/components/credit-notes/list/locales/sk.ts +48 -0
  82. package/src/components/credit-notes/list/locales/sv.ts +48 -0
  83. package/src/components/credit-notes/list/use-credit-note-download.ts +3 -5
  84. package/src/components/customers/create-customer-form/locales/bg.ts +21 -0
  85. package/src/components/customers/create-customer-form/locales/cs.ts +21 -0
  86. package/src/components/customers/create-customer-form/locales/en.ts +21 -0
  87. package/src/components/customers/create-customer-form/locales/et.ts +21 -0
  88. package/src/components/customers/create-customer-form/locales/fi.ts +21 -0
  89. package/src/components/customers/create-customer-form/locales/hr.ts +11 -11
  90. package/src/components/customers/create-customer-form/locales/is.ts +21 -0
  91. package/src/components/customers/create-customer-form/locales/nb.ts +21 -0
  92. package/src/components/customers/create-customer-form/locales/sk.ts +21 -0
  93. package/src/components/customers/create-customer-form/locales/sv.ts +21 -0
  94. package/src/components/customers/customer-autocomplete.tsx +32 -4
  95. package/src/components/customers/customer-list-table/customer-list-table.tsx +8 -6
  96. package/src/components/customers/customer-list-table/locales/bg.ts +25 -0
  97. package/src/components/customers/customer-list-table/locales/cs.ts +25 -0
  98. package/src/components/customers/customer-list-table/locales/en.ts +17 -2
  99. package/src/components/customers/customer-list-table/locales/et.ts +25 -0
  100. package/src/components/customers/customer-list-table/locales/fi.ts +25 -0
  101. package/src/components/customers/customer-list-table/locales/hr.ts +11 -11
  102. package/src/components/customers/customer-list-table/locales/is.ts +25 -0
  103. package/src/components/customers/customer-list-table/locales/nb.ts +25 -0
  104. package/src/components/customers/customer-list-table/locales/sk.ts +25 -0
  105. package/src/components/customers/customer-list-table/locales/sv.ts +25 -0
  106. package/src/components/customers/customers.hooks.ts +14 -17
  107. package/src/components/customers/edit-customer-form/locales/bg.ts +13 -0
  108. package/src/components/customers/edit-customer-form/locales/cs.ts +13 -0
  109. package/src/components/customers/edit-customer-form/locales/en.ts +13 -0
  110. package/src/components/customers/edit-customer-form/locales/et.ts +13 -0
  111. package/src/components/customers/edit-customer-form/locales/fi.ts +13 -0
  112. package/src/components/customers/edit-customer-form/locales/hr.ts +5 -5
  113. package/src/components/customers/edit-customer-form/locales/is.ts +13 -0
  114. package/src/components/customers/edit-customer-form/locales/nb.ts +13 -0
  115. package/src/components/customers/edit-customer-form/locales/sk.ts +13 -0
  116. package/src/components/customers/edit-customer-form/locales/sv.ts +13 -0
  117. package/src/components/dashboard/collection-rate-card/collection-rate-card.tsx +7 -6
  118. package/src/components/dashboard/collection-rate-card/locales/en.ts +3 -0
  119. package/src/components/dashboard/collection-rate-card/use-collection-rate.ts +8 -7
  120. package/src/components/dashboard/invoice-status-chart/invoice-status-chart.tsx +7 -4
  121. package/src/components/dashboard/invoice-status-chart/locales/bg.ts +5 -5
  122. package/src/components/dashboard/invoice-status-chart/locales/cs.ts +5 -5
  123. package/src/components/dashboard/invoice-status-chart/locales/de.ts +1 -1
  124. package/src/components/dashboard/invoice-status-chart/locales/en.ts +10 -0
  125. package/src/components/dashboard/invoice-status-chart/locales/es.ts +1 -1
  126. package/src/components/dashboard/invoice-status-chart/locales/et.ts +5 -5
  127. package/src/components/dashboard/invoice-status-chart/locales/fi.ts +5 -5
  128. package/src/components/dashboard/invoice-status-chart/locales/fr.ts +1 -1
  129. package/src/components/dashboard/invoice-status-chart/locales/hr.ts +5 -5
  130. package/src/components/dashboard/invoice-status-chart/locales/is.ts +5 -5
  131. package/src/components/dashboard/invoice-status-chart/locales/it.ts +1 -1
  132. package/src/components/dashboard/invoice-status-chart/locales/nb.ts +5 -5
  133. package/src/components/dashboard/invoice-status-chart/locales/nl.ts +1 -1
  134. package/src/components/dashboard/invoice-status-chart/locales/pl.ts +1 -1
  135. package/src/components/dashboard/invoice-status-chart/locales/pt.ts +1 -1
  136. package/src/components/dashboard/invoice-status-chart/locales/sk.ts +5 -5
  137. package/src/components/dashboard/invoice-status-chart/locales/sl.ts +1 -1
  138. package/src/components/dashboard/invoice-status-chart/locales/sv.ts +5 -5
  139. package/src/components/dashboard/payment-methods-chart/locales/bg.ts +5 -5
  140. package/src/components/dashboard/payment-methods-chart/locales/cs.ts +5 -5
  141. package/src/components/dashboard/payment-methods-chart/locales/en.ts +12 -0
  142. package/src/components/dashboard/payment-methods-chart/locales/et.ts +5 -5
  143. package/src/components/dashboard/payment-methods-chart/locales/fi.ts +6 -6
  144. package/src/components/dashboard/payment-methods-chart/locales/hr.ts +3 -3
  145. package/src/components/dashboard/payment-methods-chart/locales/is.ts +5 -5
  146. package/src/components/dashboard/payment-methods-chart/locales/nb.ts +5 -5
  147. package/src/components/dashboard/payment-methods-chart/locales/sk.ts +5 -5
  148. package/src/components/dashboard/payment-methods-chart/locales/sv.ts +5 -5
  149. package/src/components/dashboard/payment-methods-chart/payment-methods-chart.tsx +4 -3
  150. package/src/components/dashboard/payment-trend-chart/locales/bg.ts +1 -1
  151. package/src/components/dashboard/payment-trend-chart/locales/cs.ts +1 -1
  152. package/src/components/dashboard/payment-trend-chart/locales/en.ts +6 -0
  153. package/src/components/dashboard/payment-trend-chart/locales/et.ts +1 -1
  154. package/src/components/dashboard/payment-trend-chart/locales/fi.ts +1 -1
  155. package/src/components/dashboard/payment-trend-chart/locales/is.ts +1 -1
  156. package/src/components/dashboard/payment-trend-chart/locales/nb.ts +1 -1
  157. package/src/components/dashboard/payment-trend-chart/locales/sk.ts +1 -1
  158. package/src/components/dashboard/payment-trend-chart/locales/sv.ts +1 -1
  159. package/src/components/dashboard/payment-trend-chart/payment-trend-chart.tsx +4 -3
  160. package/src/components/dashboard/payment-trend-chart/use-payment-trend.ts +12 -9
  161. package/src/components/dashboard/revenue-card.tsx +3 -3
  162. package/src/components/dashboard/revenue-trend-chart/locales/bg.ts +1 -1
  163. package/src/components/dashboard/revenue-trend-chart/locales/cs.ts +1 -1
  164. package/src/components/dashboard/revenue-trend-chart/locales/en.ts +6 -0
  165. package/src/components/dashboard/revenue-trend-chart/locales/et.ts +1 -1
  166. package/src/components/dashboard/revenue-trend-chart/locales/fi.ts +1 -1
  167. package/src/components/dashboard/revenue-trend-chart/locales/is.ts +1 -1
  168. package/src/components/dashboard/revenue-trend-chart/locales/nb.ts +1 -1
  169. package/src/components/dashboard/revenue-trend-chart/locales/sk.ts +1 -1
  170. package/src/components/dashboard/revenue-trend-chart/locales/sv.ts +1 -1
  171. package/src/components/dashboard/revenue-trend-chart/revenue-trend-chart.tsx +4 -3
  172. package/src/components/dashboard/revenue-trend-chart/use-revenue-trend.ts +4 -3
  173. package/src/components/dashboard/shared/local-date.ts +11 -0
  174. package/src/components/dashboard/shared/use-revenue-data.ts +6 -5
  175. package/src/components/dashboard/shared/use-stats-query.ts +7 -11
  176. package/src/components/dashboard/stat-card.tsx +3 -3
  177. package/src/components/dashboard/tax-collected-card/tax-collected-card.tsx +11 -9
  178. package/src/components/dashboard/tax-collected-card/use-tax-collected.ts +3 -2
  179. package/src/components/dashboard/top-customers-chart/locales/bg.ts +2 -2
  180. package/src/components/dashboard/top-customers-chart/locales/cs.ts +2 -2
  181. package/src/components/dashboard/top-customers-chart/locales/en.ts +7 -0
  182. package/src/components/dashboard/top-customers-chart/locales/et.ts +2 -2
  183. package/src/components/dashboard/top-customers-chart/locales/fi.ts +2 -2
  184. package/src/components/dashboard/top-customers-chart/locales/is.ts +2 -2
  185. package/src/components/dashboard/top-customers-chart/locales/nb.ts +2 -2
  186. package/src/components/dashboard/top-customers-chart/locales/sk.ts +2 -2
  187. package/src/components/dashboard/top-customers-chart/locales/sv.ts +2 -2
  188. package/src/components/dashboard/top-customers-chart/top-customers-chart.tsx +4 -3
  189. package/src/components/dashboard/top-customers-chart/use-top-customers.ts +7 -20
  190. package/src/components/delivery-notes/create/create-delivery-note-form.tsx +179 -47
  191. package/src/components/delivery-notes/create/locales/bg.ts +69 -0
  192. package/src/components/delivery-notes/create/locales/cs.ts +69 -0
  193. package/src/components/delivery-notes/create/locales/de.ts +1 -0
  194. package/src/components/delivery-notes/create/locales/en.ts +69 -0
  195. package/src/components/delivery-notes/create/locales/es.ts +1 -0
  196. package/src/components/delivery-notes/create/locales/et.ts +69 -0
  197. package/src/components/delivery-notes/create/locales/fi.ts +69 -0
  198. package/src/components/delivery-notes/create/locales/fr.ts +1 -0
  199. package/src/components/delivery-notes/create/locales/hr.ts +7 -6
  200. package/src/components/delivery-notes/create/locales/is.ts +69 -0
  201. package/src/components/delivery-notes/create/locales/it.ts +1 -0
  202. package/src/components/delivery-notes/create/locales/nb.ts +69 -0
  203. package/src/components/delivery-notes/create/locales/nl.ts +1 -0
  204. package/src/components/delivery-notes/create/locales/pl.ts +1 -0
  205. package/src/components/delivery-notes/create/locales/pt.ts +1 -0
  206. package/src/components/delivery-notes/create/locales/sk.ts +69 -0
  207. package/src/components/delivery-notes/create/locales/sl.ts +6 -5
  208. package/src/components/delivery-notes/create/locales/sv.ts +69 -0
  209. package/src/components/delivery-notes/create/prepare-delivery-note-submission.ts +34 -1
  210. package/src/components/delivery-notes/delivery-notes.hooks.ts +34 -3
  211. package/src/components/delivery-notes/list/list-row-actions.tsx +62 -16
  212. package/src/components/delivery-notes/list/list-table.tsx +44 -10
  213. package/src/components/delivery-notes/list/locales/bg.ts +40 -0
  214. package/src/components/delivery-notes/list/locales/cs.ts +40 -0
  215. package/src/components/delivery-notes/list/locales/et.ts +40 -0
  216. package/src/components/delivery-notes/list/locales/fi.ts +40 -0
  217. package/src/components/delivery-notes/list/locales/is.ts +40 -0
  218. package/src/components/delivery-notes/list/locales/nb.ts +40 -0
  219. package/src/components/delivery-notes/list/locales/sk.ts +40 -0
  220. package/src/components/delivery-notes/list/locales/sv.ts +40 -0
  221. package/src/components/delivery-notes/list/use-delivery-note-download.ts +3 -5
  222. package/src/components/documents/create/custom-create-template.ts +114 -0
  223. package/src/components/documents/create/document-add-item-form.tsx +266 -153
  224. package/src/components/documents/create/document-add-item-tax-rate-field.tsx +3 -3
  225. package/src/components/documents/create/document-date-validation.ts +111 -0
  226. package/src/components/documents/create/document-details-section.tsx +117 -54
  227. package/src/components/documents/create/document-form-item.ts +67 -0
  228. package/src/components/documents/create/document-item-validation.ts +54 -0
  229. package/src/components/documents/create/document-items-section.tsx +44 -6
  230. package/src/components/documents/create/document-recipient-section.tsx +10 -2
  231. package/src/components/documents/create/form-types.ts +2 -2
  232. package/src/components/documents/create/linked-documents-info.tsx +6 -14
  233. package/src/components/documents/create/live-preview.tsx +22 -18
  234. package/src/components/documents/create/mark-as-paid-section.tsx +80 -20
  235. package/src/components/documents/create/payment-rows.ts +321 -0
  236. package/src/components/documents/create/prepare-document-submission.ts +160 -109
  237. package/src/components/documents/create/prepare-preview-data.ts +12 -0
  238. package/src/components/documents/create/preserved-expected-total.ts +90 -0
  239. package/src/components/documents/create/scroll-to-first-invalid-field.ts +27 -0
  240. package/src/components/documents/create/smart-code-insert-button.tsx +5 -53
  241. package/src/components/documents/create/use-document-customer-form.ts +74 -25
  242. package/src/components/documents/documents.hooks.ts +3 -5
  243. package/src/components/documents/index.ts +1 -0
  244. package/src/components/documents/public/index.ts +1 -0
  245. package/src/components/documents/public/public-document-summary.tsx +336 -0
  246. package/src/components/documents/shared/document-preview-display.tsx +65 -39
  247. package/src/components/documents/shared/index.ts +6 -1
  248. package/src/components/documents/shared/scaled-document-preview.tsx +33 -19
  249. package/src/components/documents/types.ts +24 -0
  250. package/src/components/documents/view/document-actions-bar.tsx +251 -63
  251. package/src/components/documents/view/document-activities-list.tsx +23 -11
  252. package/src/components/documents/view/document-details-card.tsx +11 -39
  253. package/src/components/documents/view/document-payments-list.tsx +114 -57
  254. package/src/components/documents/view/document-relations-list.tsx +26 -6
  255. package/src/components/documents/view/document-sidebar.tsx +25 -3
  256. package/src/components/documents/view/document-version-history.tsx +137 -0
  257. package/src/components/documents/view/index.ts +1 -0
  258. package/src/components/documents/view/locales/bg.ts +143 -0
  259. package/src/components/documents/view/locales/cs.ts +143 -0
  260. package/src/components/documents/view/locales/de.ts +13 -0
  261. package/src/components/documents/view/locales/en.ts +143 -0
  262. package/src/components/documents/view/locales/es.ts +13 -0
  263. package/src/components/documents/view/locales/et.ts +143 -0
  264. package/src/components/documents/view/locales/fi.ts +143 -0
  265. package/src/components/documents/view/locales/fr.ts +13 -0
  266. package/src/components/documents/view/locales/hr.ts +18 -5
  267. package/src/components/documents/view/locales/is.ts +143 -0
  268. package/src/components/documents/view/locales/it.ts +13 -0
  269. package/src/components/documents/view/locales/nb.ts +143 -0
  270. package/src/components/documents/view/locales/nl.ts +13 -0
  271. package/src/components/documents/view/locales/pl.ts +13 -0
  272. package/src/components/documents/view/locales/pt.ts +13 -0
  273. package/src/components/documents/view/locales/sk.ts +143 -0
  274. package/src/components/documents/view/locales/sl.ts +21 -8
  275. package/src/components/documents/view/locales/sv.ts +143 -0
  276. package/src/components/documents/view/use-document-download.ts +18 -17
  277. package/src/components/entities/create-entity-form.tsx +200 -12
  278. package/src/components/entities/entities.hooks.ts +15 -7
  279. package/src/components/entities/entity-settings-form/entity-settings-form.tsx +121 -65
  280. package/src/components/entities/entity-settings-form/input-with-preview.tsx +28 -4
  281. package/src/components/entities/entity-settings-form/locales/bg.ts +206 -0
  282. package/src/components/entities/entity-settings-form/locales/cs.ts +206 -0
  283. package/src/components/entities/entity-settings-form/locales/de.ts +17 -3
  284. package/src/components/entities/entity-settings-form/locales/en.ts +206 -0
  285. package/src/components/entities/entity-settings-form/locales/es.ts +15 -3
  286. package/src/components/entities/entity-settings-form/locales/et.ts +205 -0
  287. package/src/components/entities/entity-settings-form/locales/fi.ts +206 -0
  288. package/src/components/entities/entity-settings-form/locales/fr.ts +15 -3
  289. package/src/components/entities/entity-settings-form/locales/hr.ts +23 -11
  290. package/src/components/entities/entity-settings-form/locales/is.ts +206 -0
  291. package/src/components/entities/entity-settings-form/locales/it.ts +15 -3
  292. package/src/components/entities/entity-settings-form/locales/nb.ts +206 -0
  293. package/src/components/entities/entity-settings-form/locales/nl.ts +15 -3
  294. package/src/components/entities/entity-settings-form/locales/pl.ts +15 -3
  295. package/src/components/entities/entity-settings-form/locales/pt.ts +15 -3
  296. package/src/components/entities/entity-settings-form/locales/sk.ts +206 -0
  297. package/src/components/entities/entity-settings-form/locales/sl.ts +31 -18
  298. package/src/components/entities/entity-settings-form/locales/sv.ts +212 -0
  299. package/src/components/entities/fina-settings-form/fina-operator-required-dialog.tsx +34 -9
  300. package/src/components/entities/fina-settings-form/fina-settings-form.tsx +2 -0
  301. package/src/components/entities/fina-settings-form/fina-settings.hooks.ts +14 -45
  302. package/src/components/entities/fina-settings-form/locales/bg.ts +163 -0
  303. package/src/components/entities/fina-settings-form/locales/cs.ts +163 -0
  304. package/src/components/entities/fina-settings-form/locales/et.ts +163 -0
  305. package/src/components/entities/fina-settings-form/locales/fi.ts +163 -0
  306. package/src/components/entities/fina-settings-form/locales/hr.ts +11 -10
  307. package/src/components/entities/fina-settings-form/locales/is.ts +164 -0
  308. package/src/components/entities/fina-settings-form/locales/nb.ts +163 -0
  309. package/src/components/entities/fina-settings-form/locales/sk.ts +163 -0
  310. package/src/components/entities/fina-settings-form/locales/sl.ts +8 -7
  311. package/src/components/entities/fina-settings-form/locales/sv.ts +165 -0
  312. package/src/components/entities/furs-settings-form/furs-operator-required-dialog.tsx +34 -9
  313. package/src/components/entities/furs-settings-form/furs-settings-form.tsx +13 -1
  314. package/src/components/entities/furs-settings-form/furs-settings.hooks.ts +141 -42
  315. package/src/components/entities/furs-settings-form/locales/bg.ts +242 -0
  316. package/src/components/entities/furs-settings-form/locales/cs.ts +241 -0
  317. package/src/components/entities/furs-settings-form/locales/de.ts +42 -15
  318. package/src/components/entities/furs-settings-form/locales/en.ts +24 -0
  319. package/src/components/entities/furs-settings-form/locales/es.ts +42 -15
  320. package/src/components/entities/furs-settings-form/locales/et.ts +242 -0
  321. package/src/components/entities/furs-settings-form/locales/fi.ts +243 -0
  322. package/src/components/entities/furs-settings-form/locales/fr.ts +43 -15
  323. package/src/components/entities/furs-settings-form/locales/hr.ts +44 -19
  324. package/src/components/entities/furs-settings-form/locales/is.ts +242 -0
  325. package/src/components/entities/furs-settings-form/locales/it.ts +42 -15
  326. package/src/components/entities/furs-settings-form/locales/nb.ts +242 -0
  327. package/src/components/entities/furs-settings-form/locales/nl.ts +42 -15
  328. package/src/components/entities/furs-settings-form/locales/pl.ts +40 -15
  329. package/src/components/entities/furs-settings-form/locales/pt.ts +42 -15
  330. package/src/components/entities/furs-settings-form/locales/sk.ts +243 -0
  331. package/src/components/entities/furs-settings-form/locales/sl.ts +34 -10
  332. package/src/components/entities/furs-settings-form/locales/sv.ts +242 -0
  333. package/src/components/entities/furs-settings-form/sections/enable-fiscalization-section.tsx +11 -0
  334. package/src/components/entities/furs-settings-form/sections/furs-internal-act-download-card.tsx +111 -0
  335. package/src/components/entities/furs-settings-form/sections/general-settings-section.tsx +27 -0
  336. package/src/components/entities/furs-settings-form/sections/premises-management-section.tsx +23 -16
  337. package/src/components/entities/furs-settings-form/sections/register-premise-dialog.tsx +89 -31
  338. package/src/components/entities/settings/branding-settings-form.tsx +11 -30
  339. package/src/components/entities/settings/company-settings-form.tsx +2 -1
  340. package/src/components/entities/settings/defaults-settings-form.tsx +106 -3
  341. package/src/components/entities/settings/email-settings-form.tsx +245 -3
  342. package/src/components/entities/settings/eslog-settings-form.tsx +2 -1
  343. package/src/components/entities/settings/number-format-settings-form.tsx +2 -1
  344. package/src/components/entities/settings/pdf-template-selector/locales/bg.ts +20 -0
  345. package/src/components/entities/settings/pdf-template-selector/locales/cs.ts +20 -0
  346. package/src/components/entities/settings/pdf-template-selector/locales/en.ts +20 -0
  347. package/src/components/entities/settings/pdf-template-selector/locales/et.ts +19 -0
  348. package/src/components/entities/settings/pdf-template-selector/locales/fi.ts +20 -0
  349. package/src/components/entities/settings/pdf-template-selector/locales/is.ts +19 -0
  350. package/src/components/entities/settings/pdf-template-selector/locales/nb.ts +19 -0
  351. package/src/components/entities/settings/pdf-template-selector/locales/sk.ts +20 -0
  352. package/src/components/entities/settings/pdf-template-selector/locales/sv.ts +19 -0
  353. package/src/components/entities/settings/tax-rules-settings-form.tsx +57 -6
  354. package/src/components/estimates/create/create-estimate-form.tsx +250 -66
  355. package/src/components/estimates/create/locales/bg.ts +77 -0
  356. package/src/components/estimates/create/locales/cs.ts +77 -0
  357. package/src/components/estimates/create/locales/de.ts +4 -3
  358. package/src/components/estimates/create/locales/en.ts +77 -0
  359. package/src/components/estimates/create/locales/es.ts +4 -3
  360. package/src/components/estimates/create/locales/et.ts +77 -0
  361. package/src/components/estimates/create/locales/fi.ts +77 -0
  362. package/src/components/estimates/create/locales/fr.ts +4 -3
  363. package/src/components/estimates/create/locales/hr.ts +13 -12
  364. package/src/components/estimates/create/locales/is.ts +77 -0
  365. package/src/components/estimates/create/locales/it.ts +4 -3
  366. package/src/components/estimates/create/locales/nb.ts +77 -0
  367. package/src/components/estimates/create/locales/nl.ts +4 -3
  368. package/src/components/estimates/create/locales/pl.ts +4 -3
  369. package/src/components/estimates/create/locales/pt.ts +4 -3
  370. package/src/components/estimates/create/locales/sk.ts +77 -0
  371. package/src/components/estimates/create/locales/sl.ts +13 -12
  372. package/src/components/estimates/create/locales/sv.ts +77 -0
  373. package/src/components/estimates/create/prepare-estimate-submission.ts +41 -4
  374. package/src/components/estimates/estimates.hooks.ts +24 -3
  375. package/src/components/estimates/list/list-row-actions.tsx +34 -7
  376. package/src/components/estimates/list/list-table.tsx +89 -11
  377. package/src/components/estimates/list/locales/bg.ts +40 -0
  378. package/src/components/estimates/list/locales/cs.ts +40 -0
  379. package/src/components/estimates/list/locales/de.ts +2 -0
  380. package/src/components/estimates/list/locales/en.ts +29 -2
  381. package/src/components/estimates/list/locales/es.ts +2 -0
  382. package/src/components/estimates/list/locales/et.ts +40 -0
  383. package/src/components/estimates/list/locales/fi.ts +40 -0
  384. package/src/components/estimates/list/locales/fr.ts +2 -0
  385. package/src/components/estimates/list/locales/hr.ts +9 -7
  386. package/src/components/estimates/list/locales/is.ts +40 -0
  387. package/src/components/estimates/list/locales/it.ts +2 -0
  388. package/src/components/estimates/list/locales/nb.ts +40 -0
  389. package/src/components/estimates/list/locales/nl.ts +2 -0
  390. package/src/components/estimates/list/locales/pl.ts +2 -0
  391. package/src/components/estimates/list/locales/pt.ts +2 -0
  392. package/src/components/estimates/list/locales/sk.ts +40 -0
  393. package/src/components/estimates/list/locales/sl.ts +9 -7
  394. package/src/components/estimates/list/locales/sv.ts +40 -0
  395. package/src/components/estimates/list/use-estimate-download.ts +3 -5
  396. package/src/components/export/document-export-form.tsx +72 -15
  397. package/src/components/export/sales-per-item-export-form.tsx +3 -2
  398. package/src/components/invoices/create/create-invoice-form.tsx +500 -112
  399. package/src/components/invoices/create/eslog-validation.ts +97 -8
  400. package/src/components/invoices/create/locales/bg.ts +173 -0
  401. package/src/components/invoices/create/locales/cs.ts +173 -0
  402. package/src/components/invoices/create/locales/de.ts +41 -9
  403. package/src/components/invoices/create/locales/en.ts +173 -0
  404. package/src/components/invoices/create/locales/es.ts +42 -9
  405. package/src/components/invoices/create/locales/et.ts +173 -0
  406. package/src/components/invoices/create/locales/fi.ts +173 -0
  407. package/src/components/invoices/create/locales/fr.ts +42 -11
  408. package/src/components/invoices/create/locales/hr.ts +50 -18
  409. package/src/components/invoices/create/locales/is.ts +173 -0
  410. package/src/components/invoices/create/locales/it.ts +43 -11
  411. package/src/components/invoices/create/locales/nb.ts +173 -0
  412. package/src/components/invoices/create/locales/nl.ts +42 -10
  413. package/src/components/invoices/create/locales/pl.ts +42 -11
  414. package/src/components/invoices/create/locales/pt.ts +43 -10
  415. package/src/components/invoices/create/locales/sk.ts +173 -0
  416. package/src/components/invoices/create/locales/sl.ts +49 -18
  417. package/src/components/invoices/create/locales/sv.ts +175 -0
  418. package/src/components/invoices/create/prepare-invoice-submission.ts +73 -2
  419. package/src/components/invoices/invoices-furs.hooks.ts +11 -8
  420. package/src/components/invoices/invoices.hooks.ts +36 -10
  421. package/src/components/invoices/list/list-row-actions.tsx +54 -21
  422. package/src/components/invoices/list/list-table.tsx +94 -12
  423. package/src/components/invoices/list/locales/bg.ts +49 -0
  424. package/src/components/invoices/list/locales/cs.ts +49 -0
  425. package/src/components/invoices/list/locales/en.ts +34 -2
  426. package/src/components/invoices/list/locales/et.ts +49 -0
  427. package/src/components/invoices/list/locales/fi.ts +49 -0
  428. package/src/components/invoices/list/locales/is.ts +49 -0
  429. package/src/components/invoices/list/locales/nb.ts +49 -0
  430. package/src/components/invoices/list/locales/sk.ts +49 -0
  431. package/src/components/invoices/list/locales/sv.ts +49 -0
  432. package/src/components/invoices/list/use-invoice-download.ts +3 -5
  433. package/src/components/invoices/send-email-dialog/locales/bg.ts +63 -0
  434. package/src/components/invoices/send-email-dialog/locales/cs.ts +63 -0
  435. package/src/components/invoices/send-email-dialog/locales/de.ts +26 -0
  436. package/src/components/invoices/send-email-dialog/locales/en.ts +63 -0
  437. package/src/components/invoices/send-email-dialog/locales/es.ts +26 -0
  438. package/src/components/invoices/send-email-dialog/locales/et.ts +63 -0
  439. package/src/components/invoices/send-email-dialog/locales/fi.ts +63 -0
  440. package/src/components/invoices/send-email-dialog/locales/fr.ts +26 -0
  441. package/src/components/invoices/send-email-dialog/locales/hr.ts +26 -0
  442. package/src/components/invoices/send-email-dialog/locales/is.ts +63 -0
  443. package/src/components/invoices/send-email-dialog/locales/it.ts +26 -0
  444. package/src/components/invoices/send-email-dialog/locales/nb.ts +63 -0
  445. package/src/components/invoices/send-email-dialog/locales/nl.ts +26 -0
  446. package/src/components/invoices/send-email-dialog/locales/pl.ts +26 -0
  447. package/src/components/invoices/send-email-dialog/locales/pt.ts +26 -0
  448. package/src/components/invoices/send-email-dialog/locales/sk.ts +63 -0
  449. package/src/components/invoices/send-email-dialog/locales/sl.ts +26 -0
  450. package/src/components/invoices/send-email-dialog/locales/sv.ts +63 -0
  451. package/src/components/invoices/send-email-dialog/send-email-dialog.tsx +189 -93
  452. package/src/components/invoices/view/eslog-info-display.tsx +2 -0
  453. package/src/components/invoices/view/fiscalization-status-card.tsx +2 -0
  454. package/src/components/items/create-item-form/create-item-form.tsx +29 -0
  455. package/src/components/items/create-item-form/locales/bg.ts +13 -0
  456. package/src/components/items/create-item-form/locales/cs.ts +13 -0
  457. package/src/components/items/create-item-form/locales/et.ts +13 -0
  458. package/src/components/items/create-item-form/locales/fi.ts +13 -0
  459. package/src/components/items/create-item-form/locales/is.ts +13 -0
  460. package/src/components/items/create-item-form/locales/nb.ts +13 -0
  461. package/src/components/items/create-item-form/locales/sk.ts +13 -0
  462. package/src/components/items/create-item-form/locales/sv.ts +13 -0
  463. package/src/components/items/edit-item-form/edit-item-form.tsx +39 -1
  464. package/src/components/items/edit-item-form/locales/bg.ts +12 -0
  465. package/src/components/items/edit-item-form/locales/cs.ts +12 -0
  466. package/src/components/items/edit-item-form/locales/en.ts +12 -0
  467. package/src/components/items/edit-item-form/locales/et.ts +12 -0
  468. package/src/components/items/edit-item-form/locales/fi.ts +12 -0
  469. package/src/components/items/edit-item-form/locales/is.ts +12 -0
  470. package/src/components/items/edit-item-form/locales/nb.ts +12 -0
  471. package/src/components/items/edit-item-form/locales/sk.ts +12 -0
  472. package/src/components/items/edit-item-form/locales/sv.ts +12 -0
  473. package/src/components/items/item-combobox.tsx +55 -22
  474. package/src/components/items/item-list-table/item-list-table.tsx +47 -23
  475. package/src/components/items/item-list-table/locales/bg.ts +16 -0
  476. package/src/components/items/item-list-table/locales/cs.ts +16 -0
  477. package/src/components/items/item-list-table/locales/en.ts +4 -3
  478. package/src/components/items/item-list-table/locales/et.ts +16 -0
  479. package/src/components/items/item-list-table/locales/fi.ts +16 -0
  480. package/src/components/items/item-list-table/locales/is.ts +16 -0
  481. package/src/components/items/item-list-table/locales/nb.ts +16 -0
  482. package/src/components/items/item-list-table/locales/sk.ts +16 -0
  483. package/src/components/items/item-list-table/locales/sv.ts +16 -0
  484. package/src/components/items/items.hooks.ts +15 -15
  485. package/src/components/payments/create-payment-form/create-payment-form.tsx +16 -9
  486. package/src/components/payments/create-payment-form/locales/bg.ts +20 -0
  487. package/src/components/payments/create-payment-form/locales/cs.ts +20 -0
  488. package/src/components/payments/create-payment-form/locales/en.ts +20 -0
  489. package/src/components/payments/create-payment-form/locales/et.ts +20 -0
  490. package/src/components/payments/create-payment-form/locales/fi.ts +20 -0
  491. package/src/components/payments/create-payment-form/locales/hr.ts +2 -2
  492. package/src/components/payments/create-payment-form/locales/is.ts +20 -0
  493. package/src/components/payments/create-payment-form/locales/nb.ts +20 -0
  494. package/src/components/payments/create-payment-form/locales/sk.ts +20 -0
  495. package/src/components/payments/create-payment-form/locales/sl.ts +4 -4
  496. package/src/components/payments/create-payment-form/locales/sv.ts +20 -0
  497. package/src/components/payments/edit-payment-form/edit-payment-form.tsx +10 -2
  498. package/src/components/payments/edit-payment-form/locales/bg.ts +20 -0
  499. package/src/components/payments/edit-payment-form/locales/cs.ts +20 -0
  500. package/src/components/payments/edit-payment-form/locales/en.ts +20 -0
  501. package/src/components/payments/edit-payment-form/locales/et.ts +20 -0
  502. package/src/components/payments/edit-payment-form/locales/fi.ts +20 -0
  503. package/src/components/payments/edit-payment-form/locales/hr.ts +2 -2
  504. package/src/components/payments/edit-payment-form/locales/is.ts +20 -0
  505. package/src/components/payments/edit-payment-form/locales/nb.ts +20 -0
  506. package/src/components/payments/edit-payment-form/locales/sk.ts +20 -0
  507. package/src/components/payments/edit-payment-form/locales/sl.ts +4 -4
  508. package/src/components/payments/edit-payment-form/locales/sv.ts +20 -0
  509. package/src/components/payments/list/list-row-actions.tsx +10 -2
  510. package/src/components/payments/list/list-table.tsx +51 -45
  511. package/src/components/payments/list/locales/bg.ts +42 -0
  512. package/src/components/payments/list/locales/cs.ts +42 -0
  513. package/src/components/payments/list/locales/de.ts +18 -0
  514. package/src/components/payments/list/locales/en.ts +37 -2
  515. package/src/components/payments/list/locales/es.ts +18 -0
  516. package/src/components/payments/list/locales/et.ts +42 -0
  517. package/src/components/payments/list/locales/fi.ts +42 -0
  518. package/src/components/payments/list/locales/fr.ts +18 -0
  519. package/src/components/payments/list/locales/hr.ts +18 -0
  520. package/src/components/payments/list/locales/is.ts +42 -0
  521. package/src/components/payments/list/locales/it.ts +18 -0
  522. package/src/components/payments/list/locales/nb.ts +42 -0
  523. package/src/components/payments/list/locales/nl.ts +18 -0
  524. package/src/components/payments/list/locales/pl.ts +18 -0
  525. package/src/components/payments/list/locales/pt.ts +18 -0
  526. package/src/components/payments/list/locales/sk.ts +42 -0
  527. package/src/components/payments/list/locales/sl.ts +18 -1
  528. package/src/components/payments/list/locales/sv.ts +42 -0
  529. package/src/components/payments/payments.hooks.ts +13 -6
  530. package/src/components/recurring-invoices/create-recurring-invoice-form/create-recurring-invoice-form.tsx +121 -39
  531. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/bg.ts +44 -0
  532. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/cs.ts +44 -0
  533. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/en.ts +44 -0
  534. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/et.ts +44 -0
  535. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/fi.ts +44 -0
  536. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/hr.ts +6 -6
  537. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/is.ts +44 -0
  538. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/nb.ts +44 -0
  539. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/sk.ts +44 -0
  540. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/sl.ts +4 -4
  541. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/sv.ts +44 -0
  542. package/src/components/recurring-invoices/list/list-row-actions.tsx +12 -6
  543. package/src/components/recurring-invoices/list/list-table.tsx +63 -12
  544. package/src/components/recurring-invoices/list/locales/bg.ts +32 -0
  545. package/src/components/recurring-invoices/list/locales/cs.ts +32 -0
  546. package/src/components/recurring-invoices/list/locales/de.ts +4 -0
  547. package/src/components/recurring-invoices/list/locales/en.ts +27 -0
  548. package/src/components/recurring-invoices/list/locales/es.ts +4 -0
  549. package/src/components/recurring-invoices/list/locales/et.ts +32 -0
  550. package/src/components/recurring-invoices/list/locales/fi.ts +32 -0
  551. package/src/components/recurring-invoices/list/locales/fr.ts +4 -0
  552. package/src/components/recurring-invoices/list/locales/hr.ts +4 -0
  553. package/src/components/recurring-invoices/list/locales/is.ts +32 -0
  554. package/src/components/recurring-invoices/list/locales/it.ts +4 -0
  555. package/src/components/recurring-invoices/list/locales/nb.ts +32 -0
  556. package/src/components/recurring-invoices/list/locales/nl.ts +4 -0
  557. package/src/components/recurring-invoices/list/locales/pl.ts +4 -0
  558. package/src/components/recurring-invoices/list/locales/pt.ts +4 -0
  559. package/src/components/recurring-invoices/list/locales/sk.ts +32 -0
  560. package/src/components/recurring-invoices/list/locales/sl.ts +4 -0
  561. package/src/components/recurring-invoices/list/locales/sv.ts +32 -0
  562. package/src/components/recurring-invoices/recurring-invoices.hooks.ts +11 -8
  563. package/src/components/request-logs/request-log-detail.tsx +30 -23
  564. package/src/components/request-logs/request-log-list-table.tsx +88 -45
  565. package/src/components/table/README.md +47 -9
  566. package/src/components/table/data-table.tsx +232 -92
  567. package/src/components/table/filter-bar.tsx +1 -1
  568. package/src/components/table/filter-panel.tsx +51 -22
  569. package/src/components/table/hooks/use-table-state.ts +64 -11
  570. package/src/components/table/index.ts +3 -0
  571. package/src/components/table/locales.ts +119 -4
  572. package/src/components/table/selection-toolbar.tsx +65 -9
  573. package/src/components/table/sorting.ts +80 -0
  574. package/src/components/table/table-skeleton.tsx +15 -9
  575. package/src/components/table/types.ts +17 -0
  576. package/src/components/tax-reports/index.ts +8 -0
  577. package/src/components/tax-reports/kir-export-form.tsx +4 -5
  578. package/src/components/tax-reports/slovenia-accounting-mappings-fields.tsx +271 -0
  579. package/src/components/tax-reports/slovenia-tax-profile-step.tsx +25 -11
  580. package/src/components/tax-reports/slovenia-vod-export-form.tsx +452 -0
  581. package/src/components/tax-reports/slovenia-yearly-export-form.tsx +20 -16
  582. package/src/components/tax-reports/slovenia-yearly-review-step.tsx +42 -19
  583. package/src/components/taxes/create-tax-form/create-tax-form.tsx +48 -2
  584. package/src/components/taxes/create-tax-form/locales/bg.ts +8 -0
  585. package/src/components/taxes/create-tax-form/locales/cs.ts +8 -0
  586. package/src/components/taxes/create-tax-form/locales/et.ts +8 -0
  587. package/src/components/taxes/create-tax-form/locales/fi.ts +8 -0
  588. package/src/components/taxes/create-tax-form/locales/is.ts +8 -0
  589. package/src/components/taxes/create-tax-form/locales/nb.ts +8 -0
  590. package/src/components/taxes/create-tax-form/locales/sk.ts +8 -0
  591. package/src/components/taxes/create-tax-form/locales/sv.ts +8 -0
  592. package/src/components/taxes/edit-tax-form/edit-tax-form.tsx +80 -11
  593. package/src/components/taxes/edit-tax-form/locales/bg.ts +6 -0
  594. package/src/components/taxes/edit-tax-form/locales/cs.ts +6 -0
  595. package/src/components/taxes/edit-tax-form/locales/en.ts +6 -0
  596. package/src/components/taxes/edit-tax-form/locales/et.ts +6 -0
  597. package/src/components/taxes/edit-tax-form/locales/fi.ts +6 -0
  598. package/src/components/taxes/edit-tax-form/locales/is.ts +6 -0
  599. package/src/components/taxes/edit-tax-form/locales/nb.ts +6 -0
  600. package/src/components/taxes/edit-tax-form/locales/sk.ts +6 -0
  601. package/src/components/taxes/edit-tax-form/locales/sv.ts +6 -0
  602. package/src/components/taxes/tax-list-table/locales/bg.ts +17 -0
  603. package/src/components/taxes/tax-list-table/locales/cs.ts +17 -0
  604. package/src/components/taxes/tax-list-table/locales/en.ts +4 -3
  605. package/src/components/taxes/tax-list-table/locales/et.ts +17 -0
  606. package/src/components/taxes/tax-list-table/locales/fi.ts +17 -0
  607. package/src/components/taxes/tax-list-table/locales/is.ts +17 -0
  608. package/src/components/taxes/tax-list-table/locales/nb.ts +17 -0
  609. package/src/components/taxes/tax-list-table/locales/sk.ts +17 -0
  610. package/src/components/taxes/tax-list-table/locales/sv.ts +17 -0
  611. package/src/components/taxes/tax-list-table/tax-list-table.tsx +53 -19
  612. package/src/components/taxes/taxes.hooks.ts +53 -12
  613. package/src/components/ui/badge.tsx +1 -1
  614. package/src/components/ui/button.tsx +1 -1
  615. package/src/components/ui/drawer.tsx +2 -2
  616. package/src/components/ui/form.tsx +118 -10
  617. package/src/components/ui/progress.tsx +6 -4
  618. package/src/components/ui/select.tsx +118 -2
  619. package/src/components/ui/sidebar.tsx +2 -2
  620. package/src/components/ui/sonner.tsx +17 -36
  621. package/src/components/ui/sticky-form-footer.tsx +6 -1
  622. package/src/components/ui/tooltip.tsx +15 -2
  623. package/src/components/webhook-logs/webhook-delivery-detail.tsx +22 -22
  624. package/src/components/webhook-logs/webhook-delivery-list-table.tsx +92 -17
  625. package/src/components/wl-subscription/locked-feature.tsx +11 -10
  626. package/src/components/wl-subscription/paywall.tsx +184 -72
  627. package/src/components/wl-subscription/upgrade-modal.tsx +28 -31
  628. package/src/generate-schemas.ts +146 -103
  629. package/src/generated/schemas/acceptentityinvitation_body.ts +4 -3
  630. package/src/generated/schemas/accountwebhook.ts +63 -0
  631. package/src/generated/schemas/addentityuser_body.ts +4 -3
  632. package/src/generated/schemas/advanceinvoice.ts +167 -168
  633. package/src/generated/schemas/authorizeshopify_body.ts +4 -3
  634. package/src/generated/schemas/calculatedocumentpreview.ts +120 -0
  635. package/src/generated/schemas/checktransactiontype.ts +35 -0
  636. package/src/generated/schemas/creditnote.ts +203 -76
  637. package/src/generated/schemas/customadvanceinvoice.ts +172 -165
  638. package/src/generated/schemas/customcreditnote.ts +183 -155
  639. package/src/generated/schemas/customdeliverynote.ts +166 -0
  640. package/src/generated/schemas/customer.ts +4 -8
  641. package/src/generated/schemas/customestimate.ts +123 -97
  642. package/src/generated/schemas/customincomingpurchasedocument.ts +142 -0
  643. package/src/generated/schemas/custominvoice.ts +183 -154
  644. package/src/generated/schemas/deliverynote.ts +124 -79
  645. package/src/generated/schemas/einvoice.ts +19 -0
  646. package/src/generated/schemas/einvoicingsettings.ts +21 -0
  647. package/src/generated/schemas/einvoicingsupplier.ts +45 -0
  648. package/src/generated/schemas/entity.ts +267 -24
  649. package/src/generated/schemas/entityapikey.ts +1 -3
  650. package/src/generated/schemas/entityuserrole.ts +1 -3
  651. package/src/generated/schemas/estimate.ts +120 -127
  652. package/src/generated/schemas/exportsloveniavodxml_body.ts +17 -0
  653. package/src/generated/schemas/exportsloveniayearlynormiranireport_body.ts +4 -3
  654. package/src/generated/schemas/finadevice.ts +15 -0
  655. package/src/generated/schemas/finalizedocument.ts +52 -0
  656. package/src/generated/schemas/finapremise.ts +15 -0
  657. package/src/generated/schemas/finasettings.ts +1 -3
  658. package/src/generated/schemas/furselectronicdevice.ts +15 -0
  659. package/src/generated/schemas/furssettings.ts +2 -3
  660. package/src/generated/schemas/image.ts +15 -0
  661. package/src/generated/schemas/incomingpurchasedocument.ts +178 -0
  662. package/src/generated/schemas/incomingpurchasedocumentattachment.ts +15 -0
  663. package/src/generated/schemas/incomingpurchasedocumentpayment.ts +36 -0
  664. package/src/generated/schemas/index.ts +30 -5
  665. package/src/generated/schemas/invoice.ts +182 -183
  666. package/src/generated/schemas/item.ts +35 -3
  667. package/src/generated/schemas/legacymigrationauth.ts +18 -0
  668. package/src/generated/schemas/me.ts +4 -22
  669. package/src/generated/schemas/migrationjob.ts +20 -0
  670. package/src/generated/schemas/order.ts +6 -8
  671. package/src/generated/schemas/orderintegration.ts +12 -12
  672. package/src/generated/schemas/payment.ts +9 -8
  673. package/src/generated/schemas/ptatcudseries.ts +28 -0
  674. package/src/generated/schemas/queryentitystats.ts +15 -0
  675. package/src/generated/schemas/recurringinvoice.ts +4 -8
  676. package/src/generated/schemas/registerfursmovablepremise_body.ts +1 -3
  677. package/src/generated/schemas/registerfursrealestatepremise_body.ts +1 -3
  678. package/src/generated/schemas/renderadvanceinvoicepreview_body.ts +42 -16
  679. package/src/generated/schemas/rendercreditnotepreview_body.ts +42 -16
  680. package/src/generated/schemas/renderdeliverynotepreview_body.ts +19 -8
  681. package/src/generated/schemas/renderestimatepreview_body.ts +45 -8
  682. package/src/generated/schemas/renderinvoicepreview_body.ts +46 -18
  683. package/src/generated/schemas/reviewsloveniayearlynormiranireport.ts +15 -0
  684. package/src/generated/schemas/searcheinvoicingcustomer.ts +18 -0
  685. package/src/generated/schemas/senddocument_body.ts +2 -3
  686. package/src/generated/schemas/sendemail_body.ts +48 -42
  687. package/src/generated/schemas/sloveniataxprofile.ts +98 -24
  688. package/src/generated/schemas/starteslogexport_body.ts +34 -0
  689. package/src/generated/schemas/startpdfexport_body.ts +18 -81
  690. package/src/generated/schemas/stripeappconnect_body.ts +4 -3
  691. package/src/generated/schemas/stripeappcreateinvoice_body.ts +4 -6
  692. package/src/generated/schemas/stripeappmarketplaceauthorize.ts +15 -0
  693. package/src/generated/schemas/stripeappupdatesettings_body.ts +6 -6
  694. package/src/generated/schemas/supplier.ts +55 -0
  695. package/src/generated/schemas/syncshopifyorders_body.ts +21 -0
  696. package/src/generated/schemas/tax.ts +8 -8
  697. package/src/generated/schemas/uploadfile_body.ts +2 -3
  698. package/src/generated/schemas/uploadfurscertificate_body.ts +6 -6
  699. package/src/generated/schemas/userfinasettings.ts +1 -3
  700. package/src/generated/schemas/userfurssettings.ts +1 -3
  701. package/src/generated/schemas/userptsettings.ts +24 -0
  702. package/src/generated/schemas/voidinvoice_body.ts +25 -0
  703. package/src/generated/schemas/webhook.ts +6 -8
  704. package/src/generated/schemas/wlsubscriptionbillingemail.ts +17 -0
  705. package/src/hooks/create-resource-hooks.ts +22 -19
  706. package/src/hooks/use-duplicate-document.ts +71 -38
  707. package/src/hooks/use-eslog-validation.ts +5 -1
  708. package/src/hooks/use-next-document-number.ts +13 -6
  709. package/src/hooks/use-resolved-entity-id.ts +14 -0
  710. package/src/hooks/use-resource-mutation.ts +11 -30
  711. package/src/hooks/use-transaction-type-check.ts +3 -8
  712. package/src/lib/browser-cookies.ts +1 -1
  713. package/src/lib/country-capabilities.ts +114 -0
  714. package/src/lib/date-fns-locale.ts +1 -20
  715. package/src/lib/date-only.ts +58 -0
  716. package/src/lib/document-display.ts +18 -0
  717. package/src/lib/eslog-export.ts +32 -0
  718. package/src/lib/fiscalization-options.ts +21 -1
  719. package/src/lib/formatting.ts +27 -0
  720. package/src/lib/furs-error-utils.ts +29 -0
  721. package/src/lib/locale.ts +4 -0
  722. package/src/lib/payment-display.ts +97 -0
  723. package/src/lib/pt-document-input.ts +67 -0
  724. package/src/lib/schemas/shared.ts +12 -0
  725. package/src/lib/template-variables.tsx +102 -4
  726. package/src/lib/translation.ts +51 -33
  727. package/src/lib/white-label-capabilities.ts +626 -0
  728. package/src/lib/zod-validation-message.ts +291 -0
  729. package/src/providers/entities-provider.tsx +32 -14
  730. package/src/providers/sdk-provider.tsx +112 -12
  731. package/src/providers/space-invoices-provider.tsx +129 -0
  732. package/src/providers/white-label-provider.tsx +96 -4
  733. package/src/providers/wl-subscription-provider.tsx +149 -10
  734. package/src/generated/schemas/previewadvanceinvoice_body.ts +0 -354
  735. package/src/generated/schemas/previewestimate_body.ts +0 -309
  736. package/src/generated/schemas/registerfinamovablepremise_body.ts +0 -26
  737. package/src/generated/schemas/registerfinarealestatepremise_body.ts +0 -37
  738. package/src/generated/schemas/renderdocument_body.ts +0 -594
@@ -1,7 +1,7 @@
1
1
  import { zodResolver } from "@hookform/resolvers/zod";
2
- import type { CreateEstimateRequest, Estimate } from "@spaceinvoices/js-sdk";
2
+ import type { CreateEstimateRequest, Estimate, UpdateEstimate } from "@spaceinvoices/js-sdk";
3
3
  import { useQueryClient } from "@tanstack/react-query";
4
- import { RefreshCw } from "lucide-react";
4
+ import { ArrowUpDown } from "lucide-react";
5
5
  import type { ReactNode } from "react";
6
6
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
7
7
  import type { Resolver } from "react-hook-form";
@@ -12,11 +12,18 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/ui/c
12
12
  import { createEstimateSchema } from "@/ui/generated/schemas";
13
13
  import { useNextDocumentNumber } from "@/ui/hooks/use-next-document-number";
14
14
  import { useTransactionTypeCheck } from "@/ui/hooks/use-transaction-type-check";
15
+ import {
16
+ normalizePtDocumentInput,
17
+ type PtDocumentInputForm,
18
+ ptDocumentInputFormSchema,
19
+ } from "@/ui/lib/pt-document-input";
20
+ import { normalizeLineItemDiscountsForForm } from "@/ui/lib/schemas/shared";
15
21
  import type { ComponentTranslationProps } from "@/ui/lib/translation";
16
22
  import { createTranslation } from "@/ui/lib/translation";
17
23
  import { useEntities } from "@/ui/providers/entities-context";
18
24
  import { useFormFooterRegistration } from "@/ui/providers/form-footer-context";
19
25
  import { CUSTOMERS_CACHE_KEY } from "../../customers/customers.hooks";
26
+ import { withEstimateIssueDateValidation } from "../../documents/create/document-date-validation";
20
27
  import {
21
28
  DocumentDetailsSection,
22
29
  DocumentFooterField,
@@ -25,10 +32,14 @@ import {
25
32
  DocumentSignatureField,
26
33
  DocumentTaxClauseField,
27
34
  } from "../../documents/create/document-details-section";
35
+ import { withRequiredDocumentItemFields } from "../../documents/create/document-item-validation";
28
36
  import { DocumentItemsSection, type PriceModesMap } from "../../documents/create/document-items-section";
29
37
  import { DocumentRecipientSection } from "../../documents/create/document-recipient-section";
38
+ import { prepareDocumentItems } from "../../documents/create/prepare-document-submission";
39
+ import { applyCustomCreateTemplate } from "../../documents/create/custom-create-template";
40
+ import { financialInputsMatchInitial, resolvePreservedExpectedTotal } from "../../documents/create/preserved-expected-total";
30
41
  import type { DocumentTypes } from "../../documents/types";
31
- import { useCreateEstimate } from "../estimates.hooks";
42
+ import { useCreateCustomEstimate, useCreateEstimate, useUpdateEstimate } from "../estimates.hooks";
32
43
  import de from "./locales/de";
33
44
  import es from "./locales/es";
34
45
  import fr from "./locales/fr";
@@ -38,7 +49,7 @@ import nl from "./locales/nl";
38
49
  import pl from "./locales/pl";
39
50
  import pt from "./locales/pt";
40
51
  import sl from "./locales/sl";
41
- import { prepareEstimateSubmission } from "./prepare-estimate-submission";
52
+ import { prepareEstimateSubmission, prepareEstimateUpdateSubmission } from "./prepare-estimate-submission";
42
53
  import { useEstimateCustomerForm } from "./use-estimate-customer-form";
43
54
 
44
55
  function calculateDueDate(dateIso: string, days: number): string {
@@ -58,14 +69,21 @@ const translations = {
58
69
  pl,
59
70
  hr,
60
71
  } as const;
72
+ const createEstimateFormSchema = withEstimateIssueDateValidation(
73
+ withRequiredDocumentItemFields(
74
+ createEstimateSchema.extend({
75
+ pt: ptDocumentInputFormSchema.optional(),
76
+ }),
77
+ ),
78
+ );
61
79
 
62
80
  // Form values: extend schema with local-only fields (number is for display, not sent to API)
63
- type CreateEstimateFormValues = z.infer<typeof createEstimateSchema> & {
81
+ type CreateEstimateFormValues = z.infer<typeof createEstimateFormSchema> & {
64
82
  number?: string;
65
83
  };
66
84
 
67
85
  /** Preview payload extends request with display-only fields */
68
- type EstimatePreviewPayload = Partial<CreateEstimateRequest> & { number?: string };
86
+ type EstimatePreviewPayload = Partial<CreateEstimateRequest> & { number?: string; pt?: PtDocumentInputForm };
69
87
 
70
88
  type CreateEstimateFormProps = {
71
89
  type: DocumentTypes;
@@ -77,7 +95,17 @@ type CreateEstimateFormProps = {
77
95
  /** Callback to update header action (title toggle) */
78
96
  onHeaderActionChange?: (action: ReactNode) => void;
79
97
  /** Initial values for form fields (used for document duplication) */
80
- initialValues?: Partial<CreateEstimateRequest>;
98
+ initialValues?: Partial<CreateEstimateRequest> & {
99
+ number?: string;
100
+ title_type?: "estimate" | "proforma_invoice" | null;
101
+ };
102
+ mode?: "create" | "edit";
103
+ documentId?: string;
104
+ /** Whether draft actions should be available in the UI */
105
+ allowDrafts?: boolean;
106
+ /** Optional app-level content rendered inside the details section. */
107
+ detailsExtras?: ReactNode;
108
+ translationLocale?: string;
81
109
  } & ComponentTranslationProps;
82
110
 
83
111
  export default function CreateEstimateForm({
@@ -89,6 +117,11 @@ export default function CreateEstimateForm({
89
117
  onAddNewTax,
90
118
  onHeaderActionChange,
91
119
  initialValues,
120
+ mode = "create",
121
+ documentId,
122
+ allowDrafts = true,
123
+ detailsExtras,
124
+ translationLocale,
92
125
  t: translateProp,
93
126
  namespace,
94
127
  locale,
@@ -97,14 +130,18 @@ export default function CreateEstimateForm({
97
130
  t: translateProp,
98
131
  namespace,
99
132
  locale,
133
+ translationLocale,
100
134
  translations,
101
135
  });
102
136
 
103
137
  const { activeEntity } = useEntities();
104
138
  const queryClient = useQueryClient();
139
+ const isEditMode = mode === "edit";
105
140
 
106
- // Title type state: "estimate" (default) or "quote"
107
- const [titleType, setTitleType] = useState<"estimate" | "quote">((initialValues as any)?.title_type || "estimate");
141
+ // Title type state: "estimate" (default) or "proforma_invoice"
142
+ const [titleType, setTitleType] = useState<"estimate" | "proforma_invoice">(
143
+ (initialValues as any)?.title_type || "estimate",
144
+ );
108
145
 
109
146
  // Draft submission state
110
147
  const [isDraftPending, setIsDraftPending] = useState(false);
@@ -115,7 +152,7 @@ export default function CreateEstimateForm({
115
152
 
116
153
  // Fetch next estimate number
117
154
  const { data: nextNumberData } = useNextDocumentNumber(entityId, "estimate", {
118
- enabled: !!entityId,
155
+ enabled: !!entityId && !isEditMode,
119
156
  });
120
157
 
121
158
  // Get default payment terms and footer from entity settings
@@ -123,24 +160,30 @@ export default function CreateEstimateForm({
123
160
  const defaultFooter = (activeEntity?.settings as any)?.document_footer || "";
124
161
 
125
162
  const form = useForm<CreateEstimateFormValues>({
126
- resolver: zodResolver(createEstimateSchema) as Resolver<CreateEstimateFormValues>,
163
+ resolver: zodResolver(createEstimateFormSchema) as Resolver<CreateEstimateFormValues>,
127
164
  defaultValues: {
128
- number: "",
165
+ number: initialValues?.number ?? "",
166
+ calculation_mode: (initialValues as any)?.calculation_mode ?? undefined,
129
167
  date: initialValues?.date || new Date().toISOString(),
130
168
  customer_id: initialValues?.customer_id ?? undefined,
131
169
  // Cast customer to form schema type (API type may have additional fields)
132
170
  customer: (initialValues?.customer as CreateEstimateFormValues["customer"]) ?? undefined,
133
171
  items: initialValues?.items?.length
134
172
  ? initialValues.items.map((item: any) => ({
135
- type: item.type,
173
+ type: item.type ?? undefined,
136
174
  name: item.name || "",
137
175
  description: item.description || "",
138
176
  ...(item.type !== "separator"
139
177
  ? {
178
+ item_id: item.item_id ?? undefined,
179
+ classification: item.classification ?? undefined,
180
+ unit: item.unit ?? undefined,
140
181
  quantity: item.quantity ?? 1,
141
182
  // Use gross_price if set, otherwise use price
142
183
  price: item.gross_price ?? item.price,
184
+ gross_price: item.gross_price ?? undefined,
143
185
  taxes: item.taxes || [],
186
+ discounts: normalizeLineItemDiscountsForForm(item.discounts),
144
187
  }
145
188
  : {}),
146
189
  }))
@@ -155,19 +198,24 @@ export default function CreateEstimateForm({
155
198
  ],
156
199
  currency_code: initialValues?.currency_code || activeEntity?.currency_code || "EUR",
157
200
  reference: (initialValues as any)?.reference ?? "",
158
- note: initialValues?.note ?? defaultEstimateNote,
201
+ note: initialValues?.note ?? (isEditMode ? "" : defaultEstimateNote),
159
202
  tax_clause: (initialValues as any)?.tax_clause ?? "",
160
- payment_terms: initialValues?.payment_terms ?? defaultPaymentTerms,
161
- footer: (initialValues as any)?.footer ?? defaultFooter,
203
+ payment_terms: initialValues?.payment_terms ?? (isEditMode ? "" : defaultPaymentTerms),
204
+ signature: (initialValues as any)?.signature ?? "",
205
+ footer: (initialValues as any)?.footer ?? (isEditMode ? "" : defaultFooter),
162
206
  date_valid_till:
163
207
  initialValues?.date_valid_till ||
164
- calculateDueDate(initialValues?.date || new Date().toISOString(), defaultEstimateValidDays),
208
+ (isEditMode
209
+ ? undefined
210
+ : calculateDueDate(initialValues?.date || new Date().toISOString(), defaultEstimateValidDays)),
211
+ pt: ((initialValues as any)?.pt as PtDocumentInputForm | undefined) ?? undefined,
165
212
  },
166
213
  });
167
214
 
168
215
  // Price modes per item (gross vs net) - collected from component state at submit
169
216
  const onHeaderActionChangeRef = useRef(onHeaderActionChange);
170
217
  onHeaderActionChangeRef.current = onHeaderActionChange;
218
+ const headerActionSignatureRef = useRef<string | null>(null);
171
219
 
172
220
  const onChangeRef = useRef(onChange);
173
221
  onChangeRef.current = onChange;
@@ -180,16 +228,48 @@ export default function CreateEstimateForm({
180
228
  }, {} as PriceModesMap);
181
229
  }, [initialValues?.items]);
182
230
  const priceModesRef = useRef<PriceModesMap>(initialPriceModes);
231
+ const customCreateTemplate = (initialValues as any)?._custom_create_template;
232
+ const financialInputsMatchSource = useCallback(
233
+ (values: { items?: any[]; currency_code?: string; calculation_mode?: string | null }) =>
234
+ financialInputsMatchInitial({
235
+ initialItems: initialValues?.items,
236
+ currentItems: values.items,
237
+ initialCurrencyCode: initialValues?.currency_code,
238
+ currentCurrencyCode: values.currency_code,
239
+ initialCalculationMode: (initialValues as any)?.calculation_mode ?? null,
240
+ currentCalculationMode: values.calculation_mode ?? null,
241
+ initialPriceModes,
242
+ currentPriceModes: priceModesRef.current,
243
+ }),
244
+ [initialPriceModes, initialValues],
245
+ );
246
+ const getPreservedExpectedTotalWithTax = useCallback(
247
+ (values: { items?: any[]; currency_code?: string; calculation_mode?: string | null }) =>
248
+ resolvePreservedExpectedTotal({
249
+ initialExpectedTotalWithTax: (initialValues as any)?._preserved_expected_total_with_tax,
250
+ initialItems: initialValues?.items,
251
+ currentItems: values.items,
252
+ initialCurrencyCode: initialValues?.currency_code,
253
+ currentCurrencyCode: values.currency_code,
254
+ initialCalculationMode: (initialValues as any)?.calculation_mode ?? null,
255
+ currentCalculationMode: values.calculation_mode ?? null,
256
+ initialPriceModes,
257
+ currentPriceModes: priceModesRef.current,
258
+ }),
259
+ [initialPriceModes, initialValues],
260
+ );
183
261
 
184
262
  // Update number when fetched
185
263
  useEffect(() => {
264
+ if (isEditMode) return;
186
265
  if (nextNumberData?.number) {
187
266
  form.setValue("number", nextNumberData.number);
188
267
  }
189
- }, [nextNumberData?.number, form]);
268
+ }, [form, isEditMode, nextNumberData?.number]);
190
269
 
191
270
  // Update default note and valid-till date when entity loads
192
271
  useEffect(() => {
272
+ if (isEditMode) return;
193
273
  const entityDefaultNote = (activeEntity?.settings as any)?.default_estimate_note;
194
274
  if (entityDefaultNote && !form.getValues("note")) {
195
275
  form.setValue("note", entityDefaultNote);
@@ -205,7 +285,7 @@ export default function CreateEstimateForm({
205
285
  form.setValue("date_valid_till", calculateDueDate(currentDate, validDays));
206
286
  }
207
287
  }
208
- }, [activeEntity, form, initialValues?.date_valid_till]);
288
+ }, [activeEntity, form, initialValues?.date_valid_till, isEditMode]);
209
289
 
210
290
  // Auto-add tax field for tax subject entities
211
291
  useEffect(() => {
@@ -220,12 +300,39 @@ export default function CreateEstimateForm({
220
300
  // Update header with clickable title toggle
221
301
  useEffect(() => {
222
302
  const callback = onHeaderActionChangeRef.current;
223
- if (!callback) return;
303
+ if (!callback) {
304
+ headerActionSignatureRef.current = null;
305
+ return;
306
+ }
224
307
 
225
308
  const toggleTitle = () => {
226
- setTitleType((prev) => (prev === "estimate" ? "quote" : "estimate"));
309
+ setTitleType((prev) => (prev === "estimate" ? "proforma_invoice" : "estimate"));
227
310
  };
228
311
 
312
+ const titleLabel = isEditMode
313
+ ? titleType === "estimate"
314
+ ? t("Estimate")
315
+ : t("Proforma invoice")
316
+ : titleType === "estimate"
317
+ ? t("Create Estimate")
318
+ : t("Create Proforma invoice");
319
+ const tooltipLabel = isEditMode
320
+ ? titleType === "estimate"
321
+ ? t("Click to switch to Proforma invoice")
322
+ : t("Click to switch to Estimate")
323
+ : titleType === "estimate"
324
+ ? t("Click to switch to Proforma invoice")
325
+ : t("Click to switch to Estimate");
326
+ const headerActionSignature = JSON.stringify({
327
+ titleLabel,
328
+ tooltipLabel,
329
+ isEditMode,
330
+ titleType,
331
+ });
332
+
333
+ if (headerActionSignatureRef.current === headerActionSignature) return;
334
+ headerActionSignatureRef.current = headerActionSignature;
335
+
229
336
  callback(
230
337
  <TooltipProvider>
231
338
  <Tooltip>
@@ -235,17 +342,24 @@ export default function CreateEstimateForm({
235
342
  onClick={toggleTitle}
236
343
  className="flex cursor-pointer items-center gap-2 font-bold text-2xl hover:text-primary"
237
344
  >
238
- {titleType === "estimate" ? t("Create Estimate") : t("Create Quote")}
239
- <RefreshCw className="size-4 text-muted-foreground" />
345
+ {titleLabel}
346
+ <ArrowUpDown className="size-4 text-muted-foreground" />
240
347
  </button>
241
348
  </TooltipTrigger>
242
- <TooltipContent side="bottom">
243
- {titleType === "estimate" ? t("Click to switch to Quote") : t("Click to switch to Estimate")}
244
- </TooltipContent>
349
+ <TooltipContent side="bottom">{tooltipLabel}</TooltipContent>
245
350
  </Tooltip>
246
351
  </TooltipProvider>,
247
352
  );
248
- }, [titleType, t]);
353
+ }, [isEditMode, t, titleType]);
354
+
355
+ useEffect(() => {
356
+ const callback = onHeaderActionChangeRef.current;
357
+ return () => {
358
+ if (!callback || headerActionSignatureRef.current === null) return;
359
+ headerActionSignatureRef.current = null;
360
+ callback(null);
361
+ };
362
+ }, []);
249
363
 
250
364
  const formValues = useWatch({
251
365
  control: form.control,
@@ -276,13 +390,14 @@ export default function CreateEstimateForm({
276
390
  useEffect(() => {
277
391
  if (effectiveTransactionType === prevTransactionTypeRef.current) return;
278
392
  prevTransactionTypeRef.current = effectiveTransactionType;
393
+ if (isEditMode) return;
279
394
 
280
395
  const taxClauseDefaults = (activeEntity?.settings as any)?.tax_clause_defaults;
281
396
  if (!taxClauseDefaults) return;
282
397
 
283
398
  const clause = taxClauseDefaults[effectiveTransactionType] ?? "";
284
399
  form.setValue("tax_clause", clause);
285
- }, [effectiveTransactionType, activeEntity, form]);
400
+ }, [effectiveTransactionType, activeEntity, form, isEditMode]);
286
401
 
287
402
  // Extract customer management logic into a custom hook
288
403
  const {
@@ -306,18 +421,59 @@ export default function CreateEstimateForm({
306
421
  },
307
422
  onError,
308
423
  });
424
+ const { mutate: createCustomEstimate, isPending: isCreateCustomPending } = useCreateCustomEstimate({
425
+ entityId,
426
+ onSuccess: (data) => {
427
+ if (data.customer_id) {
428
+ queryClient.invalidateQueries({ queryKey: [CUSTOMERS_CACHE_KEY] });
429
+ }
430
+ onSuccess?.(data);
431
+ },
432
+ onError,
433
+ });
434
+ const { mutate: updateEstimate, isPending: isUpdatePending } = useUpdateEstimate({
435
+ entityId,
436
+ onSuccess,
437
+ onError,
438
+ });
309
439
 
310
440
  // Shared submit logic for both regular save and save as draft
311
441
  const submitEstimate = useCallback(
312
442
  (values: CreateEstimateFormValues, isDraft: boolean) => {
313
443
  try {
444
+ if (isEditMode) {
445
+ if (!documentId) {
446
+ throw new Error("Estimate edit mode requires a documentId");
447
+ }
448
+
449
+ const submission = prepareEstimateUpdateSubmission(values as any, {
450
+ originalCustomer,
451
+ priceModes: priceModesRef.current,
452
+ titleType,
453
+ }) as UpdateEstimate;
454
+
455
+ updateEstimate({ id: documentId, data: submission });
456
+ return;
457
+ }
458
+
314
459
  const submission = prepareEstimateSubmission(values, {
315
460
  originalCustomer,
316
461
  priceModes: priceModesRef.current,
317
462
  titleType,
318
463
  isDraft,
319
464
  });
320
- createEstimate(submission);
465
+ const preservedExpectedTotalWithTax = getPreservedExpectedTotalWithTax(values);
466
+ if (preservedExpectedTotalWithTax !== undefined) {
467
+ (submission as any).expected_total_with_tax = preservedExpectedTotalWithTax;
468
+ } else {
469
+ delete (submission as any).expected_total_with_tax;
470
+ }
471
+ if (customCreateTemplate && financialInputsMatchSource(values)) {
472
+ delete (submission as any).expected_total_with_tax;
473
+ createCustomEstimate(applyCustomCreateTemplate(submission as any, customCreateTemplate));
474
+ } else {
475
+ createEstimate(submission);
476
+ }
321
477
  } catch (error) {
322
478
  console.error("Estimate submission error:", error);
323
479
  if (onError) {
@@ -325,7 +481,19 @@ export default function CreateEstimateForm({
325
481
  }
326
482
  }
327
483
  },
328
- [createEstimate, onError, originalCustomer, titleType],
484
+ [
485
+ createEstimate,
486
+ createCustomEstimate,
487
+ customCreateTemplate,
488
+ documentId,
489
+ financialInputsMatchSource,
490
+ getPreservedExpectedTotalWithTax,
491
+ isEditMode,
492
+ onError,
493
+ originalCustomer,
494
+ titleType,
495
+ updateEstimate,
496
+ ],
329
497
  );
330
498
 
331
499
  // Handle save as draft
@@ -343,24 +511,28 @@ export default function CreateEstimateForm({
343
511
  }, [form, submitEstimate]);
344
512
 
345
513
  const secondaryAction = useMemo(
346
- () => ({
347
- label: t("Save as Draft"),
348
- onClick: handleSaveAsDraft,
349
- isPending: isDraftPending,
350
- }),
351
- [t, handleSaveAsDraft, isDraftPending],
514
+ () =>
515
+ allowDrafts && !isEditMode
516
+ ? {
517
+ label: t("Save as Draft"),
518
+ onClick: handleSaveAsDraft,
519
+ isPending: isDraftPending,
520
+ }
521
+ : undefined,
522
+ [allowDrafts, t, handleSaveAsDraft, isDraftPending, isEditMode],
352
523
  );
353
524
 
354
525
  useFormFooterRegistration({
355
526
  formId: "create-estimate-form",
356
- isPending,
527
+ isPending: isPending || isCreateCustomPending || isUpdatePending,
357
528
  isDirty: form.formState.isDirty || !!initialValues,
358
- label: titleType === "estimate" ? t("Create Estimate") : t("Create Quote"),
529
+ label: isEditMode ? t("Update") : titleType === "estimate" ? t("Create Estimate") : t("Create Proforma invoice"),
359
530
  secondaryAction,
360
531
  });
361
532
 
362
533
  // Set default payment terms and footer from entity settings when entity data is available
363
534
  useEffect(() => {
535
+ if (isEditMode) return;
364
536
  const entityDefaultPaymentTerms = (activeEntity?.settings as any)?.default_estimate_payment_terms;
365
537
  if (entityDefaultPaymentTerms && !form.getValues("payment_terms")) {
366
538
  form.setValue("payment_terms", entityDefaultPaymentTerms);
@@ -369,41 +541,45 @@ export default function CreateEstimateForm({
369
541
  if (entityDefaultFooter && !form.getValues("footer")) {
370
542
  form.setValue("footer", entityDefaultFooter);
371
543
  }
372
- }, [activeEntity, form]);
544
+ }, [activeEntity, form, isEditMode]);
373
545
 
374
546
  // Recalculate valid-till date when document date changes
375
547
  const prevDateRef = useRef(form.getValues("date"));
376
548
  useEffect(() => {
549
+ if (isEditMode) return;
377
550
  const currentDate = formValues.date;
378
551
  if (!currentDate || currentDate === prevDateRef.current) return;
379
552
  prevDateRef.current = currentDate;
380
553
  const validDays = (activeEntity?.settings as any)?.default_estimate_valid_days ?? 30;
381
554
  form.setValue("date_valid_till", calculateDueDate(currentDate, validDays));
382
- }, [formValues.date, activeEntity, form]);
383
-
384
- const buildPreviewPayload = useCallback((values: CreateEstimateFormValues): EstimatePreviewPayload => {
385
- const currentItems = values.items || [];
386
-
387
- const transformedItems = currentItems.map((item: any, index: number) => {
388
- const { price, ...rest } = item;
389
- const isGross = priceModesRef.current[index] ?? false;
390
- return isGross ? { ...rest, gross_price: price } : { ...rest, price };
391
- });
392
-
393
- return {
394
- number: values.number,
395
- date: values.date,
396
- customer_id: values.customer_id,
397
- customer: values.customer,
398
- items: transformedItems,
399
- currency_code: values.currency_code,
400
- reference: values.reference,
401
- note: values.note,
402
- payment_terms: values.payment_terms,
403
- signature: values.signature,
404
- title_type: titleType,
405
- };
406
- }, [titleType]);
555
+ }, [formValues.date, activeEntity, form, isEditMode]);
556
+
557
+ const buildPreviewPayload = useCallback(
558
+ (values: CreateEstimateFormValues): EstimatePreviewPayload => {
559
+ const preservedExpectedTotalWithTax = getPreservedExpectedTotalWithTax(values);
560
+ return {
561
+ number: values.number,
562
+ date: values.date,
563
+ customer_id: values.customer_id,
564
+ customer: values.customer,
565
+ items: prepareDocumentItems(values.items, priceModesRef.current),
566
+ currency_code: values.currency_code,
567
+ reference: values.reference,
568
+ note: values.note,
569
+ tax_clause: values.tax_clause,
570
+ payment_terms: values.payment_terms,
571
+ signature: values.signature,
572
+ footer: values.footer,
573
+ date_valid_till: values.date_valid_till,
574
+ title_type: titleType,
575
+ ...(preservedExpectedTotalWithTax !== undefined
576
+ ? { expected_total_with_tax: preservedExpectedTotalWithTax }
577
+ : {}),
578
+ ...(normalizePtDocumentInput(values.pt) ? { pt: normalizePtDocumentInput(values.pt) } : {}),
579
+ };
580
+ },
581
+ [getPreservedExpectedTotalWithTax, titleType],
582
+ );
407
583
 
408
584
  const emitPreviewPayload = useCallback((payload: EstimatePreviewPayload) => {
409
585
  const callback = onChangeRef.current;
@@ -431,7 +607,7 @@ export default function CreateEstimateForm({
431
607
  return (
432
608
  <Form {...form}>
433
609
  <form id="create-estimate-form" onSubmit={form.handleSubmit(onSubmit)} className="space-y-8">
434
- <div className="flex w-full flex-col md:flex-row md:gap-6">
610
+ <div className="flex w-full flex-col gap-8 md:flex-row md:gap-6">
435
611
  <DocumentRecipientSection
436
612
  control={form.control}
437
613
  entityId={entityId}
@@ -442,20 +618,28 @@ export default function CreateEstimateForm({
442
618
  selectedCustomerId={selectedCustomerId}
443
619
  initialCustomerName={initialCustomerName}
444
620
  t={t}
621
+ locale={locale}
445
622
  />
446
623
 
447
- <DocumentDetailsSection control={form.control} documentType={type} t={t} />
624
+ <DocumentDetailsSection control={form.control} documentType={type} t={t} locale={locale}>
625
+ {detailsExtras}
626
+ </DocumentDetailsSection>
448
627
  </div>
449
628
 
450
629
  <DocumentItemsSection
451
630
  control={form.control}
631
+ documentType={type}
452
632
  watch={form.watch}
453
633
  setValue={form.setValue}
634
+ clearErrors={form.clearErrors}
635
+ trigger={form.trigger}
636
+ isSubmitted={form.formState.isSubmitted}
454
637
  getValues={form.getValues}
455
638
  entityId={entityId}
456
639
  currencyCode={activeEntity?.currency_code ?? undefined}
457
640
  onAddNewTax={onAddNewTax}
458
641
  t={t}
642
+ locale={locale}
459
643
  maxTaxesPerItem={activeEntity?.country_rules?.max_taxes_per_item}
460
644
  priceModesRef={priceModesRef}
461
645
  initialPriceModes={initialPriceModes}
@@ -0,0 +1,77 @@
1
+ export default {
2
+ "Create Estimate": "Създай оферта",
3
+ "Create Proforma invoice": "Създай проформа фактура",
4
+ Estimate: "Оферта",
5
+ "Proforma invoice": "Проформа фактура",
6
+ "Click to switch to Proforma invoice": "Натиснете, за да превключите към проформа фактура",
7
+ "Click to switch to Estimate": "Натиснете, за да превключите към оферта",
8
+ Details: "Детайли",
9
+ Number: "Номер",
10
+ Date: "Дата",
11
+ "Due Date": "Краен срок",
12
+ "Valid Until": "Валидна до",
13
+ Recipient: "Recipient",
14
+ "Search or create customer...": "Search or create customer...",
15
+ Clear: "Clear",
16
+ Name: "Име",
17
+ Address: "Адрес",
18
+ "Address 2": "Адрес 2",
19
+ "Post Code": "Пощенски код",
20
+ City: "Град",
21
+ State: "Област",
22
+ Country: "Държава",
23
+ "Tax Number": "ДДС номер",
24
+ Items: "Артикули",
25
+ "Add item": "Add item",
26
+ Tax: "Tax",
27
+ "Tax rate": "Tax rate",
28
+ "Add tax": "Add tax",
29
+ "Select tax...": "Select tax...",
30
+ "Loading...": "Зареждане...",
31
+ "No taxes found": "No taxes found",
32
+ "Add new tax...": "Add new tax...",
33
+ Note: "Note",
34
+ "Insert variable": "Insert variable",
35
+ "Add payment instructions, terms, or other notes...": "Add payment instructions, terms, or other notes...",
36
+ Signature: "Подпис",
37
+ "Add signature text...": "Добавете текст за подпис...",
38
+ "Payment Terms": "Payment Terms",
39
+ "Add payment terms...": "Add payment terms...",
40
+ Quantity: "Quantity",
41
+ Price: "Цена",
42
+ Unit: "Unit",
43
+ Discount: "Discount",
44
+ Description: "Описание",
45
+ Save: "Запази",
46
+ Update: "Актуализирай",
47
+ "Save as Draft": "Save as Draft",
48
+ "Pick a date": "Pick a date",
49
+ Currency: "Валута",
50
+ "Select currency": "Изберете валута",
51
+ "Percentage discount": "Percentage discount",
52
+ "Fixed amount discount": "Fixed amount discount",
53
+ Percentage: "Percentage",
54
+ "Fixed amount": "Fixed amount",
55
+ "Taxes disabled": "Taxes disabled",
56
+ "Gross price": "Gross price",
57
+ "Net price": "Net price",
58
+ "Gross price (tax included)": "Gross price (tax included)",
59
+ "Net price (before tax)": "Net price (before tax)",
60
+ "Add separator": "Add separator",
61
+ "Section header": "Section header",
62
+ "Section title...": "Section title...",
63
+ "Transaction type": "Transaction type",
64
+ Domestic: "Domestic",
65
+ "EU B2B": "EU B2B",
66
+ "EU B2C": "EU B2C",
67
+ "3W B2B": "3W B2B",
68
+ "3W B2C": "3W B2C",
69
+ "Determining transaction type...": "Determining transaction type...",
70
+ "This invoice will not be fiscalized (non-domestic transaction)":
71
+ "This invoice will not be fiscalized (non-domestic transaction)",
72
+ "Tax Clause": "Tax Clause",
73
+ "Add tax clause...": "Add tax clause...",
74
+ Footer: "Footer",
75
+ "Add document footer...": "Add document footer...",
76
+ "Reverse charge - tax exempt EU B2B sale": "Reverse charge - tax exempt EU B2B sale",
77
+ } as const;