@spaceinvoices/react-ui 0.4.12 → 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 (334) hide show
  1. package/cli/dist/index.js +1 -1
  2. package/package.json +1 -1
  3. package/src/common/autocomplete.tsx +7 -1
  4. package/src/components/advance-invoices/advance-invoices.hooks.ts +35 -44
  5. package/src/components/advance-invoices/create/create-advance-invoice-form.tsx +189 -73
  6. package/src/components/advance-invoices/create/locales/bg.ts +17 -9
  7. package/src/components/advance-invoices/create/locales/cs.ts +17 -9
  8. package/src/components/advance-invoices/create/locales/de.ts +15 -7
  9. package/src/components/advance-invoices/create/locales/en.ts +15 -7
  10. package/src/components/advance-invoices/create/locales/es.ts +15 -7
  11. package/src/components/advance-invoices/create/locales/et.ts +17 -9
  12. package/src/components/advance-invoices/create/locales/fi.ts +18 -10
  13. package/src/components/advance-invoices/create/locales/fr.ts +16 -8
  14. package/src/components/advance-invoices/create/locales/hr.ts +15 -7
  15. package/src/components/advance-invoices/create/locales/is.ts +17 -9
  16. package/src/components/advance-invoices/create/locales/it.ts +15 -7
  17. package/src/components/advance-invoices/create/locales/nb.ts +17 -9
  18. package/src/components/advance-invoices/create/locales/nl.ts +15 -7
  19. package/src/components/advance-invoices/create/locales/pl.ts +17 -9
  20. package/src/components/advance-invoices/create/locales/pt.ts +16 -8
  21. package/src/components/advance-invoices/create/locales/sk.ts +17 -9
  22. package/src/components/advance-invoices/create/locales/sl.ts +14 -5
  23. package/src/components/advance-invoices/create/locales/sv.ts +17 -9
  24. package/src/components/advance-invoices/create/prepare-advance-invoice-submission.ts +47 -1
  25. package/src/components/advance-invoices/list/list-table.tsx +2 -1
  26. package/src/components/credit-notes/create/create-credit-note-form.tsx +253 -85
  27. package/src/components/credit-notes/create/locales/bg.ts +22 -8
  28. package/src/components/credit-notes/create/locales/cs.ts +22 -8
  29. package/src/components/credit-notes/create/locales/de.ts +20 -7
  30. package/src/components/credit-notes/create/locales/en.ts +19 -5
  31. package/src/components/credit-notes/create/locales/es.ts +20 -7
  32. package/src/components/credit-notes/create/locales/et.ts +22 -8
  33. package/src/components/credit-notes/create/locales/fi.ts +23 -9
  34. package/src/components/credit-notes/create/locales/fr.ts +21 -8
  35. package/src/components/credit-notes/create/locales/hr.ts +20 -7
  36. package/src/components/credit-notes/create/locales/is.ts +22 -8
  37. package/src/components/credit-notes/create/locales/it.ts +20 -7
  38. package/src/components/credit-notes/create/locales/nb.ts +22 -8
  39. package/src/components/credit-notes/create/locales/nl.ts +20 -7
  40. package/src/components/credit-notes/create/locales/pl.ts +22 -9
  41. package/src/components/credit-notes/create/locales/pt.ts +21 -8
  42. package/src/components/credit-notes/create/locales/sk.ts +22 -8
  43. package/src/components/credit-notes/create/locales/sl.ts +19 -5
  44. package/src/components/credit-notes/create/locales/sv.ts +22 -8
  45. package/src/components/credit-notes/create/prepare-credit-note-submission.ts +35 -1
  46. package/src/components/credit-notes/credit-notes.hooks.ts +21 -2
  47. package/src/components/credit-notes/list/list-table.tsx +2 -1
  48. package/src/components/delivery-notes/create/create-delivery-note-form.tsx +132 -30
  49. package/src/components/delivery-notes/create/locales/bg.ts +1 -0
  50. package/src/components/delivery-notes/create/locales/cs.ts +1 -0
  51. package/src/components/delivery-notes/create/locales/de.ts +1 -0
  52. package/src/components/delivery-notes/create/locales/en.ts +1 -0
  53. package/src/components/delivery-notes/create/locales/es.ts +1 -0
  54. package/src/components/delivery-notes/create/locales/et.ts +1 -0
  55. package/src/components/delivery-notes/create/locales/fi.ts +1 -0
  56. package/src/components/delivery-notes/create/locales/fr.ts +1 -0
  57. package/src/components/delivery-notes/create/locales/hr.ts +1 -0
  58. package/src/components/delivery-notes/create/locales/is.ts +1 -0
  59. package/src/components/delivery-notes/create/locales/it.ts +1 -0
  60. package/src/components/delivery-notes/create/locales/nb.ts +1 -0
  61. package/src/components/delivery-notes/create/locales/nl.ts +1 -0
  62. package/src/components/delivery-notes/create/locales/pl.ts +1 -0
  63. package/src/components/delivery-notes/create/locales/pt.ts +1 -0
  64. package/src/components/delivery-notes/create/locales/sk.ts +1 -0
  65. package/src/components/delivery-notes/create/locales/sl.ts +1 -0
  66. package/src/components/delivery-notes/create/locales/sv.ts +1 -0
  67. package/src/components/delivery-notes/create/prepare-delivery-note-submission.ts +34 -1
  68. package/src/components/delivery-notes/delivery-notes.hooks.ts +15 -1
  69. package/src/components/delivery-notes/list/list-table.tsx +2 -1
  70. package/src/components/documents/create/custom-create-template.ts +114 -0
  71. package/src/components/documents/create/document-add-item-form.tsx +12 -8
  72. package/src/components/documents/create/document-add-item-tax-rate-field.tsx +1 -2
  73. package/src/components/documents/create/document-date-validation.ts +111 -0
  74. package/src/components/documents/create/document-details-section.tsx +93 -48
  75. package/src/components/documents/create/document-form-item.ts +67 -0
  76. package/src/components/documents/create/document-item-validation.ts +6 -2
  77. package/src/components/documents/create/form-types.ts +2 -2
  78. package/src/components/documents/create/linked-documents-info.tsx +2 -11
  79. package/src/components/documents/create/live-preview.tsx +3 -3
  80. package/src/components/documents/create/mark-as-paid-section.tsx +14 -11
  81. package/src/components/documents/create/payment-rows.ts +30 -0
  82. package/src/components/documents/create/prepare-document-submission.ts +143 -103
  83. package/src/components/documents/create/prepare-preview-data.ts +12 -0
  84. package/src/components/documents/create/preserved-expected-total.ts +90 -0
  85. package/src/components/documents/public/public-document-summary.tsx +6 -13
  86. package/src/components/documents/view/document-actions-bar.tsx +10 -1
  87. package/src/components/documents/view/document-details-card.tsx +4 -12
  88. package/src/components/documents/view/document-relations-list.tsx +4 -4
  89. package/src/components/documents/view/locales/bg.ts +8 -8
  90. package/src/components/documents/view/locales/cs.ts +8 -8
  91. package/src/components/documents/view/locales/de.ts +1 -1
  92. package/src/components/documents/view/locales/en.ts +14 -14
  93. package/src/components/documents/view/locales/es.ts +1 -1
  94. package/src/components/documents/view/locales/et.ts +8 -8
  95. package/src/components/documents/view/locales/fi.ts +10 -10
  96. package/src/components/documents/view/locales/fr.ts +1 -1
  97. package/src/components/documents/view/locales/hr.ts +6 -6
  98. package/src/components/documents/view/locales/is.ts +8 -8
  99. package/src/components/documents/view/locales/it.ts +1 -1
  100. package/src/components/documents/view/locales/nb.ts +8 -8
  101. package/src/components/documents/view/locales/nl.ts +1 -1
  102. package/src/components/documents/view/locales/pl.ts +1 -1
  103. package/src/components/documents/view/locales/pt.ts +1 -1
  104. package/src/components/documents/view/locales/sk.ts +8 -8
  105. package/src/components/documents/view/locales/sl.ts +9 -9
  106. package/src/components/documents/view/locales/sv.ts +1 -1
  107. package/src/components/documents/view/use-document-download.ts +2 -2
  108. package/src/components/entities/entity-settings-form/locales/bg.ts +7 -0
  109. package/src/components/entities/entity-settings-form/locales/cs.ts +7 -0
  110. package/src/components/entities/entity-settings-form/locales/de.ts +9 -0
  111. package/src/components/entities/entity-settings-form/locales/en.ts +7 -0
  112. package/src/components/entities/entity-settings-form/locales/es.ts +7 -0
  113. package/src/components/entities/entity-settings-form/locales/et.ts +7 -0
  114. package/src/components/entities/entity-settings-form/locales/fi.ts +7 -0
  115. package/src/components/entities/entity-settings-form/locales/fr.ts +7 -0
  116. package/src/components/entities/entity-settings-form/locales/hr.ts +7 -0
  117. package/src/components/entities/entity-settings-form/locales/is.ts +7 -0
  118. package/src/components/entities/entity-settings-form/locales/it.ts +7 -0
  119. package/src/components/entities/entity-settings-form/locales/nb.ts +7 -0
  120. package/src/components/entities/entity-settings-form/locales/nl.ts +7 -0
  121. package/src/components/entities/entity-settings-form/locales/pl.ts +7 -0
  122. package/src/components/entities/entity-settings-form/locales/pt.ts +7 -0
  123. package/src/components/entities/entity-settings-form/locales/sk.ts +7 -0
  124. package/src/components/entities/entity-settings-form/locales/sl.ts +12 -4
  125. package/src/components/entities/entity-settings-form/locales/sv.ts +7 -0
  126. package/src/components/entities/settings/tax-rules-settings-form.tsx +36 -0
  127. package/src/components/estimates/create/create-estimate-form.tsx +195 -47
  128. package/src/components/estimates/create/locales/bg.ts +6 -5
  129. package/src/components/estimates/create/locales/cs.ts +6 -5
  130. package/src/components/estimates/create/locales/de.ts +4 -3
  131. package/src/components/estimates/create/locales/en.ts +4 -3
  132. package/src/components/estimates/create/locales/es.ts +4 -3
  133. package/src/components/estimates/create/locales/et.ts +6 -5
  134. package/src/components/estimates/create/locales/fi.ts +9 -8
  135. package/src/components/estimates/create/locales/fr.ts +4 -3
  136. package/src/components/estimates/create/locales/hr.ts +7 -6
  137. package/src/components/estimates/create/locales/is.ts +6 -5
  138. package/src/components/estimates/create/locales/it.ts +4 -3
  139. package/src/components/estimates/create/locales/nb.ts +6 -5
  140. package/src/components/estimates/create/locales/nl.ts +4 -3
  141. package/src/components/estimates/create/locales/pl.ts +4 -3
  142. package/src/components/estimates/create/locales/pt.ts +4 -3
  143. package/src/components/estimates/create/locales/sk.ts +6 -5
  144. package/src/components/estimates/create/locales/sl.ts +7 -6
  145. package/src/components/estimates/create/locales/sv.ts +6 -5
  146. package/src/components/estimates/create/prepare-estimate-submission.ts +37 -3
  147. package/src/components/estimates/estimates.hooks.ts +11 -2
  148. package/src/components/estimates/list/list-table.tsx +11 -1
  149. package/src/components/estimates/list/locales/bg.ts +2 -0
  150. package/src/components/estimates/list/locales/cs.ts +2 -0
  151. package/src/components/estimates/list/locales/de.ts +2 -0
  152. package/src/components/estimates/list/locales/en.ts +2 -0
  153. package/src/components/estimates/list/locales/es.ts +2 -0
  154. package/src/components/estimates/list/locales/et.ts +2 -0
  155. package/src/components/estimates/list/locales/fi.ts +2 -0
  156. package/src/components/estimates/list/locales/fr.ts +2 -0
  157. package/src/components/estimates/list/locales/hr.ts +7 -5
  158. package/src/components/estimates/list/locales/is.ts +2 -0
  159. package/src/components/estimates/list/locales/it.ts +2 -0
  160. package/src/components/estimates/list/locales/nb.ts +2 -0
  161. package/src/components/estimates/list/locales/nl.ts +2 -0
  162. package/src/components/estimates/list/locales/pl.ts +2 -0
  163. package/src/components/estimates/list/locales/pt.ts +2 -0
  164. package/src/components/estimates/list/locales/sk.ts +2 -0
  165. package/src/components/estimates/list/locales/sl.ts +9 -7
  166. package/src/components/estimates/list/locales/sv.ts +2 -0
  167. package/src/components/invoices/create/create-invoice-form.tsx +230 -60
  168. package/src/components/invoices/create/locales/bg.ts +23 -14
  169. package/src/components/invoices/create/locales/cs.ts +23 -14
  170. package/src/components/invoices/create/locales/de.ts +17 -9
  171. package/src/components/invoices/create/locales/en.ts +16 -7
  172. package/src/components/invoices/create/locales/es.ts +18 -9
  173. package/src/components/invoices/create/locales/et.ts +23 -14
  174. package/src/components/invoices/create/locales/fi.ts +24 -15
  175. package/src/components/invoices/create/locales/fr.ts +19 -11
  176. package/src/components/invoices/create/locales/hr.ts +18 -9
  177. package/src/components/invoices/create/locales/is.ts +23 -14
  178. package/src/components/invoices/create/locales/it.ts +19 -11
  179. package/src/components/invoices/create/locales/nb.ts +23 -14
  180. package/src/components/invoices/create/locales/nl.ts +19 -10
  181. package/src/components/invoices/create/locales/pl.ts +19 -11
  182. package/src/components/invoices/create/locales/pt.ts +19 -10
  183. package/src/components/invoices/create/locales/sk.ts +23 -14
  184. package/src/components/invoices/create/locales/sl.ts +17 -9
  185. package/src/components/invoices/create/locales/sv.ts +17 -8
  186. package/src/components/invoices/create/prepare-invoice-submission.ts +55 -1
  187. package/src/components/invoices/invoices.hooks.ts +11 -2
  188. package/src/components/invoices/list/list-table.tsx +2 -1
  189. package/src/components/invoices/send-email-dialog/locales/bg.ts +5 -0
  190. package/src/components/invoices/send-email-dialog/locales/cs.ts +5 -0
  191. package/src/components/invoices/send-email-dialog/locales/de.ts +5 -0
  192. package/src/components/invoices/send-email-dialog/locales/en.ts +5 -0
  193. package/src/components/invoices/send-email-dialog/locales/es.ts +5 -0
  194. package/src/components/invoices/send-email-dialog/locales/et.ts +5 -0
  195. package/src/components/invoices/send-email-dialog/locales/fi.ts +5 -0
  196. package/src/components/invoices/send-email-dialog/locales/fr.ts +5 -0
  197. package/src/components/invoices/send-email-dialog/locales/hr.ts +8 -3
  198. package/src/components/invoices/send-email-dialog/locales/is.ts +5 -0
  199. package/src/components/invoices/send-email-dialog/locales/it.ts +5 -0
  200. package/src/components/invoices/send-email-dialog/locales/nb.ts +5 -0
  201. package/src/components/invoices/send-email-dialog/locales/nl.ts +5 -0
  202. package/src/components/invoices/send-email-dialog/locales/pl.ts +5 -0
  203. package/src/components/invoices/send-email-dialog/locales/pt.ts +5 -0
  204. package/src/components/invoices/send-email-dialog/locales/sk.ts +5 -0
  205. package/src/components/invoices/send-email-dialog/locales/sl.ts +8 -3
  206. package/src/components/invoices/send-email-dialog/locales/sv.ts +5 -0
  207. package/src/components/invoices/send-email-dialog/send-email-dialog.tsx +2 -1
  208. package/src/components/items/item-combobox.tsx +4 -4
  209. package/src/components/payments/create-payment-form/create-payment-form.tsx +5 -2
  210. package/src/components/payments/edit-payment-form/edit-payment-form.tsx +5 -1
  211. package/src/components/recurring-invoices/create-recurring-invoice-form/create-recurring-invoice-form.tsx +98 -22
  212. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/bg.ts +26 -26
  213. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/cs.ts +25 -25
  214. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/et.ts +26 -26
  215. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/fi.ts +36 -36
  216. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/is.ts +26 -26
  217. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/nb.ts +26 -26
  218. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/sk.ts +25 -25
  219. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/sv.ts +26 -26
  220. package/src/components/recurring-invoices/list/list-row-actions.tsx +9 -1
  221. package/src/components/recurring-invoices/list/list-table.tsx +53 -5
  222. package/src/components/recurring-invoices/list/locales/bg.ts +4 -0
  223. package/src/components/recurring-invoices/list/locales/cs.ts +4 -0
  224. package/src/components/recurring-invoices/list/locales/de.ts +4 -0
  225. package/src/components/recurring-invoices/list/locales/en.ts +4 -0
  226. package/src/components/recurring-invoices/list/locales/es.ts +4 -0
  227. package/src/components/recurring-invoices/list/locales/et.ts +4 -0
  228. package/src/components/recurring-invoices/list/locales/fi.ts +4 -0
  229. package/src/components/recurring-invoices/list/locales/fr.ts +4 -0
  230. package/src/components/recurring-invoices/list/locales/hr.ts +4 -0
  231. package/src/components/recurring-invoices/list/locales/is.ts +4 -0
  232. package/src/components/recurring-invoices/list/locales/it.ts +4 -0
  233. package/src/components/recurring-invoices/list/locales/nb.ts +4 -0
  234. package/src/components/recurring-invoices/list/locales/nl.ts +4 -0
  235. package/src/components/recurring-invoices/list/locales/pl.ts +4 -0
  236. package/src/components/recurring-invoices/list/locales/pt.ts +4 -0
  237. package/src/components/recurring-invoices/list/locales/sk.ts +4 -0
  238. package/src/components/recurring-invoices/list/locales/sl.ts +4 -0
  239. package/src/components/recurring-invoices/list/locales/sv.ts +4 -0
  240. package/src/components/tax-reports/slovenia-tax-profile-step.tsx +4 -1
  241. package/src/components/tax-reports/slovenia-yearly-export-form.tsx +3 -0
  242. package/src/components/tax-reports/slovenia-yearly-review-step.tsx +2 -1
  243. package/src/components/ui/form.tsx +5 -13
  244. package/src/components/ui/select.tsx +0 -1
  245. package/src/components/ui/sidebar.tsx +2 -2
  246. package/src/generate-schemas.ts +132 -99
  247. package/src/generated/schemas/acceptentityinvitation_body.ts +4 -3
  248. package/src/generated/schemas/accountwebhook.ts +4 -8
  249. package/src/generated/schemas/addentityuser_body.ts +4 -3
  250. package/src/generated/schemas/advanceinvoice.ts +167 -168
  251. package/src/generated/schemas/authorizeshopify_body.ts +4 -3
  252. package/src/generated/schemas/calculatedocumentpreview.ts +120 -0
  253. package/src/generated/schemas/checktransactiontype.ts +35 -0
  254. package/src/generated/schemas/creditnote.ts +203 -76
  255. package/src/generated/schemas/customadvanceinvoice.ts +172 -165
  256. package/src/generated/schemas/customcreditnote.ts +183 -155
  257. package/src/generated/schemas/customdeliverynote.ts +166 -0
  258. package/src/generated/schemas/customer.ts +4 -8
  259. package/src/generated/schemas/customestimate.ts +123 -97
  260. package/src/generated/schemas/customincomingpurchasedocument.ts +142 -0
  261. package/src/generated/schemas/custominvoice.ts +183 -154
  262. package/src/generated/schemas/deliverynote.ts +124 -79
  263. package/src/generated/schemas/einvoice.ts +19 -0
  264. package/src/generated/schemas/einvoicingsettings.ts +21 -0
  265. package/src/generated/schemas/einvoicingsupplier.ts +45 -0
  266. package/src/generated/schemas/entity.ts +44 -40
  267. package/src/generated/schemas/entityapikey.ts +1 -3
  268. package/src/generated/schemas/entityuserrole.ts +1 -3
  269. package/src/generated/schemas/estimate.ts +120 -127
  270. package/src/generated/schemas/exportsloveniavodxml_body.ts +4 -3
  271. package/src/generated/schemas/exportsloveniayearlynormiranireport_body.ts +4 -3
  272. package/src/generated/schemas/finadevice.ts +15 -0
  273. package/src/generated/schemas/finalizedocument.ts +52 -0
  274. package/src/generated/schemas/finapremise.ts +15 -0
  275. package/src/generated/schemas/finasettings.ts +1 -3
  276. package/src/generated/schemas/furselectronicdevice.ts +15 -0
  277. package/src/generated/schemas/furssettings.ts +1 -3
  278. package/src/generated/schemas/image.ts +15 -0
  279. package/src/generated/schemas/incomingpurchasedocument.ts +7 -27
  280. package/src/generated/schemas/incomingpurchasedocumentattachment.ts +15 -0
  281. package/src/generated/schemas/incomingpurchasedocumentpayment.ts +1 -3
  282. package/src/generated/schemas/index.ts +20 -5
  283. package/src/generated/schemas/invoice.ts +182 -183
  284. package/src/generated/schemas/item.ts +6 -10
  285. package/src/generated/schemas/legacymigrationauth.ts +18 -0
  286. package/src/generated/schemas/me.ts +2 -24
  287. package/src/generated/schemas/migrationjob.ts +20 -0
  288. package/src/generated/schemas/order.ts +4 -8
  289. package/src/generated/schemas/orderintegration.ts +4 -8
  290. package/src/generated/schemas/payment.ts +4 -8
  291. package/src/generated/schemas/ptatcudseries.ts +1 -3
  292. package/src/generated/schemas/queryentitystats.ts +15 -0
  293. package/src/generated/schemas/recurringinvoice.ts +4 -8
  294. package/src/generated/schemas/registerfursmovablepremise_body.ts +1 -3
  295. package/src/generated/schemas/registerfursrealestatepremise_body.ts +1 -3
  296. package/src/generated/schemas/renderadvanceinvoicepreview_body.ts +10 -16
  297. package/src/generated/schemas/rendercreditnotepreview_body.ts +10 -16
  298. package/src/generated/schemas/renderdeliverynotepreview_body.ts +9 -5
  299. package/src/generated/schemas/renderestimatepreview_body.ts +11 -7
  300. package/src/generated/schemas/renderinvoicepreview_body.ts +10 -16
  301. package/src/generated/schemas/reviewsloveniayearlynormiranireport.ts +15 -0
  302. package/src/generated/schemas/searcheinvoicingcustomer.ts +18 -0
  303. package/src/generated/schemas/senddocument_body.ts +1 -3
  304. package/src/generated/schemas/sendemail_body.ts +2 -24
  305. package/src/generated/schemas/sloveniataxprofile.ts +8 -10
  306. package/src/generated/schemas/starteslogexport_body.ts +4 -3
  307. package/src/generated/schemas/startpdfexport_body.ts +8 -87
  308. package/src/generated/schemas/stripeappconnect_body.ts +4 -3
  309. package/src/generated/schemas/stripeappcreateinvoice_body.ts +4 -6
  310. package/src/generated/schemas/stripeappmarketplaceauthorize.ts +15 -0
  311. package/src/generated/schemas/stripeappupdatesettings_body.ts +6 -6
  312. package/src/generated/schemas/supplier.ts +4 -8
  313. package/src/generated/schemas/syncshopifyorders_body.ts +4 -3
  314. package/src/generated/schemas/tax.ts +6 -8
  315. package/src/generated/schemas/uploadfile_body.ts +1 -3
  316. package/src/generated/schemas/uploadfurscertificate_body.ts +6 -6
  317. package/src/generated/schemas/userfinasettings.ts +1 -3
  318. package/src/generated/schemas/userfurssettings.ts +1 -3
  319. package/src/generated/schemas/userptsettings.ts +1 -3
  320. package/src/generated/schemas/voidinvoice_body.ts +8 -3
  321. package/src/generated/schemas/webhook.ts +4 -8
  322. package/src/generated/schemas/wlsubscriptionbillingemail.ts +17 -0
  323. package/src/hooks/use-duplicate-document.ts +61 -30
  324. package/src/lib/date-only.ts +58 -0
  325. package/src/lib/document-display.ts +18 -0
  326. package/src/lib/payment-display.ts +5 -3
  327. package/src/lib/schemas/shared.ts +11 -0
  328. package/src/providers/wl-subscription-provider.tsx +5 -0
  329. package/src/generated/schemas/account_webhook.ts +0 -43
  330. package/src/generated/schemas/previewadvanceinvoice_body.ts +0 -354
  331. package/src/generated/schemas/previewestimate_body.ts +0 -309
  332. package/src/generated/schemas/registerfinamovablepremise_body.ts +0 -26
  333. package/src/generated/schemas/registerfinarealestatepremise_body.ts +0 -37
  334. package/src/generated/schemas/renderdocument_body.ts +0 -594
@@ -14,53 +14,13 @@ const PdfExportByDocumentIds = z
14
14
  document_ids: z.array(z.string()).min(1),
15
15
  locale: z
16
16
  .union([
17
- z.enum([
18
- "en-US",
19
- "de-DE",
20
- "it-IT",
21
- "fr-FR",
22
- "es-ES",
23
- "sl-SI",
24
- "pt-PT",
25
- "nl-NL",
26
- "pl-PL",
27
- "hr-HR",
28
- "sv-SE",
29
- "fi-FI",
30
- "et-EE",
31
- "bg-BG",
32
- "cs-CZ",
33
- "sk-SK",
34
- "nb-NO",
35
- "is-IS",
36
- null,
37
- ]),
17
+ z.union([z.enum(["en-US", "de-DE", "it-IT", "fr-FR", "es-ES", "sl-SI", "pt-PT", "nl-NL", "pl-PL", "hr-HR", "sv-SE", "fi-FI", "et-EE", "bg-BG", "cs-CZ", "sk-SK", "nb-NO", "is-IS"]), z.null()]),
38
18
  z.null(),
39
19
  ])
40
20
  .optional(),
41
21
  language: z
42
22
  .union([
43
- z.enum([
44
- "en",
45
- "de",
46
- "sl",
47
- "it",
48
- "fr",
49
- "es",
50
- "pt",
51
- "nl",
52
- "pl",
53
- "hr",
54
- "sv",
55
- "fi",
56
- "et",
57
- "bg",
58
- "cs",
59
- "sk",
60
- "nb",
61
- "is",
62
- null,
63
- ]),
23
+ z.union([z.enum(["en", "de", "sl", "it", "fr", "es", "pt", "nl", "pl", "hr", "sv", "fi", "et", "bg", "cs", "sk", "nb", "is"]), z.null()]),
64
24
  z.null(),
65
25
  ])
66
26
  .optional(),
@@ -86,53 +46,13 @@ const PdfExportByDateRange = z
86
46
  date_to: z.union([z.string(), z.null()]).optional(),
87
47
  locale: z
88
48
  .union([
89
- z.enum([
90
- "en-US",
91
- "de-DE",
92
- "it-IT",
93
- "fr-FR",
94
- "es-ES",
95
- "sl-SI",
96
- "pt-PT",
97
- "nl-NL",
98
- "pl-PL",
99
- "hr-HR",
100
- "sv-SE",
101
- "fi-FI",
102
- "et-EE",
103
- "bg-BG",
104
- "cs-CZ",
105
- "sk-SK",
106
- "nb-NO",
107
- "is-IS",
108
- null,
109
- ]),
49
+ z.union([z.enum(["en-US", "de-DE", "it-IT", "fr-FR", "es-ES", "sl-SI", "pt-PT", "nl-NL", "pl-PL", "hr-HR", "sv-SE", "fi-FI", "et-EE", "bg-BG", "cs-CZ", "sk-SK", "nb-NO", "is-IS"]), z.null()]),
110
50
  z.null(),
111
51
  ])
112
52
  .optional(),
113
53
  language: z
114
54
  .union([
115
- z.enum([
116
- "en",
117
- "de",
118
- "sl",
119
- "it",
120
- "fr",
121
- "es",
122
- "pt",
123
- "nl",
124
- "pl",
125
- "hr",
126
- "sv",
127
- "fi",
128
- "et",
129
- "bg",
130
- "cs",
131
- "sk",
132
- "nb",
133
- "is",
134
- null,
135
- ]),
55
+ z.union([z.enum(["en", "de", "sl", "it", "fr", "es", "pt", "nl", "pl", "hr", "sv", "fi", "et", "bg", "cs", "sk", "nb", "is"]), z.null()]),
136
56
  z.null(),
137
57
  ])
138
58
  .optional(),
@@ -140,10 +60,11 @@ const PdfExportByDateRange = z
140
60
  .passthrough();
141
61
 
142
62
 
143
- // Dependency schema for startpdfexport_body
144
- const startPdfExport_Body = z.union([
63
+ // Schema for startPdfExport operation
64
+ const startPdfExportSchemaDefinition = z.union([
145
65
  PdfExportByDocumentIds,
146
66
  PdfExportByDateRange,
147
67
  ]);
148
68
 
149
-
69
+ export type StartPdfExportSchema = z.infer<typeof startPdfExportSchemaDefinition>;
70
+ export const startPdfExportSchema = startPdfExportSchemaDefinition;
@@ -8,11 +8,12 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for stripeappconnect_body endpoints
10
10
 
11
- // Dependency schema for stripeappconnect_body
12
- const stripeAppConnect_Body = z.object({
11
+ // Schema for stripeAppConnect operation
12
+ const stripeAppConnectSchemaDefinition = z.object({
13
13
  state: z.string().min(1),
14
14
  entity_id: z.string().min(1),
15
15
  force: z.boolean().optional(),
16
16
  });
17
17
 
18
-
18
+ export type StripeAppConnectSchema = z.infer<typeof stripeAppConnectSchemaDefinition>;
19
+ export const stripeAppConnectSchema = stripeAppConnectSchemaDefinition;
@@ -8,13 +8,11 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for stripeappcreateinvoice_body endpoints
10
10
 
11
- // Schema for create appcreateinvoice operation
12
- const createAppCreateInvoiceSchemaDefinition = z.object({
11
+ // Schema for stripeAppCreateInvoice operation
12
+ const stripeAppCreateInvoiceSchemaDefinition = z.object({
13
13
  stripe_object_id: z.string().min(1),
14
14
  note: z.string().max(2000).optional(),
15
15
  });
16
16
 
17
- // Type for create appcreateinvoice operation
18
- export type CreateAppCreateInvoiceSchema = z.infer<typeof createAppCreateInvoiceSchemaDefinition>;
19
-
20
- export const createAppCreateInvoiceSchema = createAppCreateInvoiceSchemaDefinition;
17
+ export type StripeAppCreateInvoiceSchema = z.infer<typeof stripeAppCreateInvoiceSchemaDefinition>;
18
+ export const stripeAppCreateInvoiceSchema = stripeAppCreateInvoiceSchemaDefinition;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * This file was automatically generated using 'bun generate-schemas'.
3
+ * Do not edit this file manually. To update, run the generator again.
4
+ * @generated
5
+ */
6
+
7
+ import { z } from 'zod';
8
+
9
+ // Schemas for stripeappmarketplaceauthorize endpoints
10
+
11
+ // Schema for stripeAppMarketplaceAuthorize operation
12
+ const stripeAppMarketplaceAuthorizeSchemaDefinition = z.object({ code: z.string(), message: z.string() }).passthrough();
13
+
14
+ export type StripeAppMarketplaceAuthorizeSchema = z.infer<typeof stripeAppMarketplaceAuthorizeSchemaDefinition>;
15
+ export const stripeAppMarketplaceAuthorizeSchema = stripeAppMarketplaceAuthorizeSchemaDefinition;
@@ -8,8 +8,8 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for stripeappupdatesettings_body endpoints
10
10
 
11
- // Schema for update appupdatesettings operation
12
- const updateAppUpdateSettingsSchemaDefinition = z
11
+ // Schema for stripeAppEntityUpdateSettings operation
12
+ const stripeAppEntityUpdateSettingsSchemaDefinition = z
13
13
  .object({
14
14
  auto_invoice_enabled: z.boolean(),
15
15
  auto_invoice_events: z.array(
@@ -20,7 +20,7 @@ const updateAppUpdateSettingsSchemaDefinition = z
20
20
  })
21
21
  .partial();
22
22
 
23
- // Type for update appupdatesettings operation
24
- export type UpdateAppUpdateSettingsSchema = z.infer<typeof updateAppUpdateSettingsSchemaDefinition>;
25
-
26
- export const updateAppUpdateSettingsSchema = updateAppUpdateSettingsSchemaDefinition;
23
+ export type StripeAppEntityUpdateSettingsSchema = z.infer<typeof stripeAppEntityUpdateSettingsSchemaDefinition>;
24
+ export const stripeAppEntityUpdateSettingsSchema = stripeAppEntityUpdateSettingsSchemaDefinition;
25
+ export type StripeAppUpdateSettingsSchema = z.infer<typeof stripeAppEntityUpdateSettingsSchemaDefinition>;
26
+ export const stripeAppUpdateSettingsSchema = stripeAppEntityUpdateSettingsSchemaDefinition;
@@ -8,7 +8,7 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for supplier endpoints
10
10
 
11
- // Schema for create supplier operation
11
+ // Schema for createSupplier operation
12
12
  const createSupplierSchemaDefinition = z.object({
13
13
  name: z.string().min(1),
14
14
  address: z.union([z.string(), z.null()]).optional(),
@@ -27,11 +27,8 @@ const createSupplierSchemaDefinition = z.object({
27
27
  metadata: z.union([z.record(z.string(), z.any()), z.null()]).optional(),
28
28
  });
29
29
 
30
- // Type for create supplier operation
31
- export type CreateSupplierSchema = z.infer<typeof createSupplierSchemaDefinition>;
32
-
33
30
 
34
- // Schema for update supplier operation
31
+ // Schema for updateSupplier operation
35
32
  const updateSupplierSchemaDefinition = z
36
33
  .object({
37
34
  name: z.string().min(1),
@@ -52,8 +49,7 @@ const updateSupplierSchemaDefinition = z
52
49
  })
53
50
  .partial();
54
51
 
55
- // Type for update supplier operation
56
- export type UpdateSupplierSchema = z.infer<typeof updateSupplierSchemaDefinition>;
57
-
52
+ export type CreateSupplierSchema = z.infer<typeof createSupplierSchemaDefinition>;
58
53
  export const createSupplierSchema = createSupplierSchemaDefinition;
54
+ export type UpdateSupplierSchema = z.infer<typeof updateSupplierSchemaDefinition>;
59
55
  export const updateSupplierSchema = updateSupplierSchemaDefinition;
@@ -8,8 +8,8 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for syncshopifyorders_body endpoints
10
10
 
11
- // Dependency schema for syncshopifyorders_body
12
- const syncShopifyOrders_Body = z
11
+ // Schema for syncShopifyOrders operation
12
+ const syncShopifyOrdersSchemaDefinition = z
13
13
  .object({
14
14
  updated_since: z.string().datetime({ offset: true }),
15
15
  updated_until: z.string().datetime({ offset: true }),
@@ -17,4 +17,5 @@ const syncShopifyOrders_Body = z
17
17
  })
18
18
  .partial();
19
19
 
20
-
20
+ export type SyncShopifyOrdersSchema = z.infer<typeof syncShopifyOrdersSchemaDefinition>;
21
+ export const syncShopifyOrdersSchema = syncShopifyOrdersSchemaDefinition;
@@ -8,7 +8,7 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for tax endpoints
10
10
 
11
- // Schema for create tax operation
11
+ // Schema for createTax operation
12
12
  const createTaxSchemaDefinition = z.object({
13
13
  name: z.string().max(100).optional(),
14
14
  tax_rates: z
@@ -26,11 +26,8 @@ const createTaxSchemaDefinition = z.object({
26
26
  metadata: z.union([z.record(z.string(), z.any()), z.null()]).optional(),
27
27
  });
28
28
 
29
- // Type for create tax operation
30
- export type CreateTaxSchema = z.infer<typeof createTaxSchemaDefinition>;
31
-
32
29
 
33
- // Schema for update tax operation
30
+ // Schema for updateTax operation
34
31
  const updateTaxSchemaDefinition = z.object({
35
32
  tax_rates: z
36
33
  .array(
@@ -43,8 +40,9 @@ const updateTaxSchemaDefinition = z.object({
43
40
  is_default: z.boolean().optional(),
44
41
  });
45
42
 
46
- // Type for update tax operation
47
- export type UpdateTaxSchema = z.infer<typeof updateTaxSchemaDefinition>;
48
-
43
+ export type CreateTaxSchema = z.infer<typeof createTaxSchemaDefinition>;
49
44
  export const createTaxSchema = createTaxSchemaDefinition;
45
+ export type UpdateTaxSchema = z.infer<typeof updateTaxSchemaDefinition>;
50
46
  export const updateTaxSchema = updateTaxSchemaDefinition;
47
+ export type ReplaceTaxSchema = z.infer<typeof createTaxSchemaDefinition>;
48
+ export const replaceTaxSchema = createTaxSchemaDefinition;
@@ -8,7 +8,7 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for uploadfile_body endpoints
10
10
 
11
- // Schema for upload file operation
11
+ // Schema for uploadFile operation
12
12
  const uploadFileSchemaDefinition = z
13
13
  .object({
14
14
  file: z.instanceof(File).optional(),
@@ -18,7 +18,5 @@ const uploadFileSchemaDefinition = z
18
18
  })
19
19
  .passthrough();
20
20
 
21
- // Type for upload file operation
22
21
  export type UploadFileSchema = z.infer<typeof uploadFileSchemaDefinition>;
23
-
24
22
  export const uploadFileSchema = uploadFileSchemaDefinition;
@@ -8,13 +8,13 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for uploadfurscertificate_body endpoints
10
10
 
11
- // Schema for upload furscertificate operation
12
- const uploadFursCertificateSchemaDefinition = z
11
+ // Schema for uploadFinaCertificate operation
12
+ const uploadFinaCertificateSchemaDefinition = z
13
13
  .object({ file: z.instanceof(File), passphrase: z.string() })
14
14
  .partial()
15
15
  .passthrough();
16
16
 
17
- // Type for upload furscertificate operation
18
- export type UploadFursCertificateSchema = z.infer<typeof uploadFursCertificateSchemaDefinition>;
19
-
20
- export const uploadFursCertificateSchema = uploadFursCertificateSchemaDefinition;
17
+ export type UploadFinaCertificateSchema = z.infer<typeof uploadFinaCertificateSchemaDefinition>;
18
+ export const uploadFinaCertificateSchema = uploadFinaCertificateSchemaDefinition;
19
+ export type UploadFursCertificateSchema = z.infer<typeof uploadFinaCertificateSchemaDefinition>;
20
+ export const uploadFursCertificateSchema = uploadFinaCertificateSchemaDefinition;
@@ -8,12 +8,10 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for userfinasettings endpoints
10
10
 
11
- // Schema for update userfinasettings operation
11
+ // Schema for updateUserFinaSettings operation
12
12
  const updateUserFinaSettingsSchemaDefinition = z
13
13
  .object({ operator_oib: z.string(), operator_label: z.string() })
14
14
  .partial();
15
15
 
16
- // Type for update userfinasettings operation
17
16
  export type UpdateUserFinaSettingsSchema = z.infer<typeof updateUserFinaSettingsSchemaDefinition>;
18
-
19
17
  export const updateUserFinaSettingsSchema = updateUserFinaSettingsSchemaDefinition;
@@ -8,12 +8,10 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for userfurssettings endpoints
10
10
 
11
- // Schema for update userfurssettings operation
11
+ // Schema for updateUserFursSettings operation
12
12
  const updateUserFursSettingsSchemaDefinition = z
13
13
  .object({ operator_tax_number: z.string(), operator_label: z.string() })
14
14
  .partial();
15
15
 
16
- // Type for update userfurssettings operation
17
16
  export type UpdateUserFursSettingsSchema = z.infer<typeof updateUserFursSettingsSchemaDefinition>;
18
-
19
17
  export const updateUserFursSettingsSchema = updateUserFursSettingsSchemaDefinition;
@@ -8,7 +8,7 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for userptsettings endpoints
10
10
 
11
- // Schema for update userptsettings operation
11
+ // Schema for updateUserPtSettings operation
12
12
  const updateUserPtSettingsSchemaDefinition = z
13
13
  .object({
14
14
  operator_first_name: z.string(),
@@ -20,7 +20,5 @@ const updateUserPtSettingsSchemaDefinition = z
20
20
  })
21
21
  .partial();
22
22
 
23
- // Type for update userptsettings operation
24
23
  export type UpdateUserPtSettingsSchema = z.infer<typeof updateUserPtSettingsSchemaDefinition>;
25
-
26
24
  export const updateUserPtSettingsSchema = updateUserPtSettingsSchemaDefinition;
@@ -8,8 +8,8 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for voidinvoice_body endpoints
10
10
 
11
- // Dependency schema for voidinvoice_body
12
- const voidInvoice_Body = z
11
+ // Schema for voidAdvanceInvoice operation
12
+ const voidAdvanceInvoiceSchemaDefinition = z
13
13
  .object({
14
14
  reason: z.string().min(1),
15
15
  has_original_document: z.union([z.boolean(), z.null()]),
@@ -17,4 +17,9 @@ const voidInvoice_Body = z
17
17
  .partial()
18
18
  .passthrough();
19
19
 
20
-
20
+ export type VoidAdvanceInvoiceSchema = z.infer<typeof voidAdvanceInvoiceSchemaDefinition>;
21
+ export const voidAdvanceInvoiceSchema = voidAdvanceInvoiceSchemaDefinition;
22
+ export type VoidCreditNoteSchema = z.infer<typeof voidAdvanceInvoiceSchemaDefinition>;
23
+ export const voidCreditNoteSchema = voidAdvanceInvoiceSchemaDefinition;
24
+ export type VoidInvoiceSchema = z.infer<typeof voidAdvanceInvoiceSchemaDefinition>;
25
+ export const voidInvoiceSchema = voidAdvanceInvoiceSchemaDefinition;
@@ -8,7 +8,7 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for webhook endpoints
10
10
 
11
- // Schema for create webhook operation
11
+ // Schema for createWebhook operation
12
12
  const createWebhookSchemaDefinition = z.object({
13
13
  url: z.string().max(2048).url(),
14
14
  description: z.string().max(500).optional(),
@@ -104,11 +104,8 @@ const createWebhookSchemaDefinition = z.object({
104
104
  metadata: z.union([z.record(z.string(), z.any()), z.null()]).optional(),
105
105
  });
106
106
 
107
- // Type for create webhook operation
108
- export type CreateWebhookSchema = z.infer<typeof createWebhookSchemaDefinition>;
109
-
110
107
 
111
- // Schema for update webhook operation
108
+ // Schema for updateWebhook operation
112
109
  const updateWebhookSchemaDefinition = z
113
110
  .object({
114
111
  url: z.string().max(2048).url(),
@@ -206,8 +203,7 @@ const updateWebhookSchemaDefinition = z
206
203
  })
207
204
  .partial();
208
205
 
209
- // Type for update webhook operation
210
- export type UpdateWebhookSchema = z.infer<typeof updateWebhookSchemaDefinition>;
211
-
206
+ export type CreateWebhookSchema = z.infer<typeof createWebhookSchemaDefinition>;
212
207
  export const createWebhookSchema = createWebhookSchemaDefinition;
208
+ export type UpdateWebhookSchema = z.infer<typeof updateWebhookSchemaDefinition>;
213
209
  export const updateWebhookSchema = updateWebhookSchemaDefinition;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * This file was automatically generated using 'bun generate-schemas'.
3
+ * Do not edit this file manually. To update, run the generator again.
4
+ * @generated
5
+ */
6
+
7
+ import { z } from 'zod';
8
+
9
+ // Schemas for wlsubscriptionbillingemail endpoints
10
+
11
+ // Schema for updateWLSubscriptionBillingEmail operation
12
+ const updateWLSubscriptionBillingEmailSchemaDefinition = z.object({
13
+ billing_email: z.union([z.string(), z.null()]),
14
+ });
15
+
16
+ export type UpdateWLSubscriptionBillingEmailSchema = z.infer<typeof updateWLSubscriptionBillingEmailSchemaDefinition>;
17
+ export const updateWLSubscriptionBillingEmailSchema = updateWLSubscriptionBillingEmailSchemaDefinition;
@@ -1,5 +1,6 @@
1
1
  import type {
2
2
  AdvanceInvoice,
3
+ CalculateDocumentPreview,
3
4
  CreateAdvanceInvoiceRequest,
4
5
  CreateCreditNoteRequest,
5
6
  CreateDeliveryNoteRequest,
@@ -11,10 +12,14 @@ import type {
11
12
  Invoice,
12
13
  } from "@spaceinvoices/js-sdk";
13
14
  import { useQuery } from "@tanstack/react-query";
15
+ import { buildCustomCreateTemplateFromDocument } from "@/ui/components/documents/create/custom-create-template";
16
+ import { toDocumentFormItem } from "@/ui/components/documents/create/document-form-item";
17
+ import { totalsDifferByCents } from "@/ui/components/documents/create/preserved-expected-total";
14
18
  import { useEntities } from "@/ui/providers/entities-context";
15
19
  import { advanceInvoices } from "../../../js-sdk/src/sdk/advance-invoices";
16
20
  import { creditNotes } from "../../../js-sdk/src/sdk/credit-notes";
17
21
  import { deliveryNotes } from "../../../js-sdk/src/sdk/delivery-notes";
22
+ import { documents } from "../../../js-sdk/src/sdk/documents";
18
23
  import { estimates } from "../../../js-sdk/src/sdk/estimates";
19
24
  import { invoices } from "../../../js-sdk/src/sdk/invoices";
20
25
 
@@ -34,13 +39,32 @@ type CreateRequest =
34
39
  | CreateAdvanceInvoiceRequest
35
40
  | CreateDeliveryNoteRequest;
36
41
 
42
+ function shouldCheckForPreservedTotal(document: any): boolean {
43
+ return document?.creation_source === "custom" || Math.abs(document?.rounding_correction ?? 0) > 0;
44
+ }
45
+
46
+ function buildCalculatePayload(values: Partial<CreateRequest>): CalculateDocumentPreview | null {
47
+ if (!values.items?.length) {
48
+ return null;
49
+ }
50
+
51
+ return {
52
+ items: values.items,
53
+ customer_id: (values as any).customer_id,
54
+ customer: (values as any).customer,
55
+ currency_code: (values as any).currency_code,
56
+ date: (values as any).date,
57
+ calculation_mode: (values as any).calculation_mode,
58
+ };
59
+ }
60
+
37
61
  /**
38
62
  * Get document type from ID prefix
39
63
  */
40
64
  export function getDocumentTypeFromId(id: string): DocumentType | null {
41
65
  if (id.startsWith("inv_")) return "invoice";
42
66
  if (id.startsWith("est_")) return "estimate";
43
- if (id.startsWith("cn_")) return "credit_note";
67
+ if (id.startsWith("cre_") || id.startsWith("cn_")) return "credit_note";
44
68
  if (id.startsWith("adv_")) return "advance_invoice";
45
69
  if (id.startsWith("del_")) return "delivery_note";
46
70
  return null;
@@ -71,34 +95,7 @@ export function getAllowedDuplicateTargets(sourceType: DocumentType): DocumentTy
71
95
  * Copies relevant fields and resets computed/generated ones
72
96
  */
73
97
  function transformDocumentForDuplication(source: Document, targetType: DocumentType): Partial<CreateRequest> {
74
- // Transform items - copy only the fields needed for creation
75
- // Use type assertion for items since all document item types share the same shape
76
- const sourceItems = source.items as Array<{
77
- type?: string | null;
78
- name: string;
79
- description: string | null;
80
- quantity: number;
81
- price: number;
82
- gross_price?: number | null;
83
- taxes: Array<{ tax_id?: string }>;
84
- }>;
85
- const items = sourceItems?.map((item) => ({
86
- type: item.type ?? undefined,
87
- name: item.name,
88
- description: item.description,
89
- // Separator items skip financial fields
90
- ...(item.type !== "separator"
91
- ? {
92
- quantity: item.quantity,
93
- // Use gross_price if set, otherwise use price. The form uses is_gross_price as a UI toggle.
94
- price: item.gross_price ?? item.price,
95
- // Copy tax references (tax_id), not computed tax data
96
- taxes: item.taxes?.map((tax) => ({ tax_id: tax.tax_id })),
97
- // Derive is_gross_price from whether gross_price is set
98
- gross_price: item.gross_price ?? undefined,
99
- }
100
- : {}),
101
- }));
98
+ const items = source.items?.map((item) => toDocumentFormItem(item as any));
102
99
 
103
100
  // Build customer data - always copy if available (form needs this for display)
104
101
  const customerData = source.customer
@@ -129,9 +126,14 @@ function transformDocumentForDuplication(source: Document, targetType: DocumentT
129
126
  items: items as any,
130
127
  // Currency
131
128
  currency_code: source.currency_code,
129
+ calculation_mode: (source as any).calculation_mode ?? undefined,
132
130
  // Notes
133
131
  note: source.note,
134
132
  payment_terms: source.payment_terms,
133
+ reference: (source as any).reference,
134
+ signature: (source as any).signature,
135
+ tax_clause: (source as any).tax_clause,
136
+ footer: (source as any).footer,
135
137
  // Date - use today's date as ISO string
136
138
  date: new Date().toISOString(),
137
139
  // Number - leave empty for auto-generation
@@ -140,7 +142,6 @@ function transformDocumentForDuplication(source: Document, targetType: DocumentT
140
142
  // Skip linking if source is a draft (drafts have no number/fiscalization)
141
143
  ...(isConversion && !(source as any).is_draft ? { linked_documents: [source.id] } : {}),
142
144
  };
143
-
144
145
  // Copy service dates when source is an invoice (available on invoices and credit notes)
145
146
  if (sourceType === "invoice" || sourceType === "credit_note") {
146
147
  const sourceDoc = source as any;
@@ -152,6 +153,20 @@ function transformDocumentForDuplication(source: Document, targetType: DocumentT
152
153
  }
153
154
  }
154
155
 
156
+ if (sourceType === "estimate") {
157
+ const sourceDoc = source as Estimate & { title_type?: "estimate" | "proforma_invoice" | null };
158
+ if (sourceDoc.title_type) {
159
+ (baseData as CreateEstimateRequest).title_type = sourceDoc.title_type;
160
+ }
161
+ }
162
+
163
+ if (sourceType === "delivery_note") {
164
+ const sourceDoc = source as DeliveryNote & { hide_prices?: boolean | null };
165
+ if (sourceDoc.hide_prices !== undefined && sourceDoc.hide_prices !== null) {
166
+ (baseData as CreateDeliveryNoteRequest).hide_prices = sourceDoc.hide_prices;
167
+ }
168
+ }
169
+
155
170
  return baseData;
156
171
  }
157
172
 
@@ -240,6 +255,22 @@ export function useDuplicateDocument({
240
255
  }
241
256
 
242
257
  const initialValues = transformDocumentForDuplication(source, targetType);
258
+ if ((source as any).creation_source === "custom") {
259
+ (initialValues as any)._custom_create_template = buildCustomCreateTemplateFromDocument(source);
260
+ }
261
+ if (shouldCheckForPreservedTotal(source)) {
262
+ const calculatePayload = buildCalculatePayload(initialValues);
263
+ if (calculatePayload) {
264
+ const calculated = await documents.calculateDocumentPreview(
265
+ calculatePayload,
266
+ { type: targetType },
267
+ { entity_id: activeEntity.id },
268
+ );
269
+ if (totalsDifferByCents(calculated.total_with_tax, (source as any).total_with_tax)) {
270
+ (initialValues as any)._preserved_expected_total_with_tax = (source as any).total_with_tax;
271
+ }
272
+ }
273
+ }
243
274
 
244
275
  // Build source document summaries for conversions (different source → target type)
245
276
  const isConversion = sourceType !== targetType;
@@ -0,0 +1,58 @@
1
+ const DATE_ONLY_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
2
+ const LEADING_DATE_ONLY_PATTERN = /^(\d{4}-\d{2}-\d{2})(?:$|T)/;
3
+
4
+ export function toLocalDateOnlyString(date: Date): string {
5
+ const year = date.getFullYear();
6
+ const month = String(date.getMonth() + 1).padStart(2, "0");
7
+ const day = String(date.getDate()).padStart(2, "0");
8
+ return `${year}-${month}-${day}`;
9
+ }
10
+
11
+ export function normalizeDateOnlyInput(value: string | undefined): string | undefined {
12
+ if (!value) return undefined;
13
+ if (DATE_ONLY_PATTERN.test(value)) return value;
14
+
15
+ const utcMidnightMatch = value.match(/^(\d{4}-\d{2}-\d{2})T00:00:00(?:\.000)?Z$/);
16
+ if (utcMidnightMatch) {
17
+ return utcMidnightMatch[1];
18
+ }
19
+
20
+ const date = new Date(value);
21
+ if (Number.isNaN(date.getTime())) {
22
+ return value;
23
+ }
24
+
25
+ return toLocalDateOnlyString(date);
26
+ }
27
+
28
+ export function toUtcMidnightIsoString(value: string | undefined): string | undefined {
29
+ const dateOnly = normalizeDateOnlyInput(value);
30
+ return dateOnly ? `${dateOnly}T00:00:00.000Z` : undefined;
31
+ }
32
+
33
+ export function extractDateOnlyToken(value: string | undefined): string | undefined {
34
+ return value?.match(LEADING_DATE_ONLY_PATTERN)?.[1];
35
+ }
36
+
37
+ export function formatDateOnlyForDisplay(
38
+ value: Date | string | null | undefined,
39
+ locale: string,
40
+ options: Intl.DateTimeFormatOptions = {
41
+ year: "numeric",
42
+ month: "short",
43
+ day: "numeric",
44
+ },
45
+ ): string {
46
+ if (!value) return "-";
47
+
48
+ const normalized = typeof value === "string" ? normalizeDateOnlyInput(value) ?? extractDateOnlyToken(value) : undefined;
49
+ const dateOnly = normalized ?? (value instanceof Date ? toLocalDateOnlyString(value) : undefined);
50
+
51
+ if (!dateOnly) {
52
+ return typeof value === "string" ? value : "-";
53
+ }
54
+
55
+ return new Intl.DateTimeFormat(locale, { ...options, timeZone: "UTC" }).format(
56
+ new Date(`${dateOnly}T00:00:00.000Z`),
57
+ );
58
+ }