@spaceinvoices/react-ui 0.4.12 → 0.4.32

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 +190 -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 +254 -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 +133 -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 +151 -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 +196 -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 +231 -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 +74 -32
  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
@@ -10,6 +10,7 @@ export default {
10
10
  Items: "Itens",
11
11
  "Add item": "Adicionar item",
12
12
  Save: "Guardar",
13
+ Update: "Atualizar",
13
14
  "Save as Draft": "Guardar como rascunho",
14
15
  Quantity: "Quantidade",
15
16
  Price: "Preco",
@@ -24,16 +25,15 @@ export default {
24
25
  "Add new tax...": "Adicionar novo imposto...",
25
26
  Description: "Descricao",
26
27
  "Mark as Paid": "Marcar como pago",
27
- Paid: "Pago",
28
- "Credit note will be marked as fully paid upon creation":
29
- "A nota de credito sera marcada como totalmente paga ao ser criada",
28
+ "Paid": "Pago",
29
+ "Credit note will be marked as fully paid upon creation": "A nota de crédito será marcada como totalmente paga na criação",
30
30
  "Payment Type": "Tipo de pagamento",
31
31
  "Select payment type": "Selecione o tipo de pagamento",
32
- Cash: "Dinheiro",
33
- "Bank Transfer": "Transferencia bancaria",
34
- Card: "Cartao",
35
- Check: "Cheque",
36
- Other: "Outro",
32
+ "Cash": "Dinheiro",
33
+ "Bank Transfer": "Transferência bancária",
34
+ "Card": "Cartão",
35
+ "Check": "Cheque",
36
+ "Other": "Outro",
37
37
  // Note field
38
38
  Note: "Nota",
39
39
  "Insert variable": "Inserir variavel",
@@ -95,4 +95,17 @@ export default {
95
95
  Footer: "Rodapé",
96
96
  "Add document footer...": "Adicionar rodapé do documento...",
97
97
  "Reverse charge - tax exempt EU B2B sale": "Autoliquidação - venda B2B UE isenta de imposto",
98
+ "Please select": "Selecione",
99
+ "Amount": "Montante",
100
+ "Add payment": "Adicionar pagamento",
101
+ "Recorded now": "Registado agora",
102
+ "Remaining due": "Valor em dívida",
103
+ "Remaining to allocate": "Valor por alocar",
104
+ "This document must be fully paid on creation": "Este documento tem de estar totalmente pago na criação",
105
+ "Record one or more payments on creation": "Registar um ou mais pagamentos na criação",
106
+ // Service date
107
+ "Service Date": "Data do serviço",
108
+ "Service Period": "Período de serviço",
109
+ From: "De",
110
+ To: "Até",
98
111
  } as const;
@@ -10,6 +10,7 @@ export default {
10
10
  Items: "Položky",
11
11
  "Add item": "Add item",
12
12
  Save: "Uložiť",
13
+ Update: "Aktualizovať",
13
14
  "Save as Draft": "Save as Draft",
14
15
  Quantity: "Quantity",
15
16
  Price: "Cena",
@@ -23,16 +24,16 @@ export default {
23
24
  "No taxes found": "No taxes found",
24
25
  "Add new tax...": "Add new tax...",
25
26
  Description: "Popis",
26
- "Mark as Paid": "Mark as Paid",
27
- Paid: "Zaplatené",
28
- "Credit note will be marked as fully paid upon creation": "Credit note will be marked as fully paid upon creation",
29
- "Payment Type": "Payment Type",
27
+ "Mark as Paid": "Označiť ako uhradené",
28
+ "Paid": "Uhradené",
29
+ "Credit note will be marked as fully paid upon creation": "Dobropis bude pri vytvorení označený ako plne uhradený",
30
+ "Payment Type": "Typ platby",
30
31
  "Select payment type": "Vyberte typ platby",
31
- Cash: "Hotovosť",
32
+ "Cash": "Hotovosť",
32
33
  "Bank Transfer": "Bankový prevod",
33
- Card: "Karta",
34
- Check: "Šek",
35
- Other: "Iné",
34
+ "Card": "Karta",
35
+ "Check": "Šek",
36
+ "Other": "Iné",
36
37
  Note: "Note",
37
38
  "Insert variable": "Insert variable",
38
39
  "Add payment instructions, terms, or other notes...": "Add payment instructions, terms, or other notes...",
@@ -84,4 +85,17 @@ export default {
84
85
  Footer: "Footer",
85
86
  "Add document footer...": "Add document footer...",
86
87
  "Reverse charge - tax exempt EU B2B sale": "Reverse charge - tax exempt EU B2B sale",
88
+ "Please select": "Vyberte",
89
+ "Amount": "Suma",
90
+ "Add payment": "Pridať platbu",
91
+ "Recorded now": "Aktuálne zaevidované",
92
+ "Remaining due": "Zostáva uhradiť",
93
+ "Remaining to allocate": "Zostáva priradiť",
94
+ "This document must be fully paid on creation": "Tento dokument musí byť pri vytvorení plne uhradený",
95
+ "Record one or more payments on creation": "Pri vytvorení zaevidujte jednu alebo viac platieb",
96
+ // Service date
97
+ "Service Date": "Dátum služby",
98
+ "Service Period": "Obdobie služby",
99
+ From: "Od",
100
+ To: "Do",
87
101
  } as const;
@@ -10,6 +10,7 @@ export default {
10
10
  Items: "Postavke",
11
11
  "Add item": "Dodaj postavko",
12
12
  Save: "Shrani",
13
+ Update: "Posodobi",
13
14
  "Save as Draft": "Shrani kot osnutek",
14
15
  Quantity: "Količina",
15
16
  Price: "Cena",
@@ -24,15 +25,15 @@ export default {
24
25
  "Add new tax...": "Dodaj nov davek...",
25
26
  Description: "Opis",
26
27
  "Mark as Paid": "Označi kot plačano",
27
- Paid: "Plačano",
28
+ "Paid": "Plačano",
28
29
  "Credit note will be marked as fully paid upon creation": "Dobropis bo označen kot plačan ob ustvarjanju",
29
30
  "Payment Type": "Vrsta plačila",
30
31
  "Select payment type": "Izberi vrsto plačila",
31
- Cash: "Gotovina",
32
+ "Cash": "Gotovina",
32
33
  "Bank Transfer": "Bančno nakazilo",
33
- Card: "Kartica",
34
- Check: "Ček",
35
- Other: "Drugo",
34
+ "Card": "Kartica",
35
+ "Check": "Ček",
36
+ "Other": "Drugo",
36
37
  // Note field
37
38
  Note: "Pripis",
38
39
  "Insert variable": "Vstavi spremenljivko",
@@ -94,4 +95,17 @@ export default {
94
95
  Footer: "Noga dokumenta",
95
96
  "Add document footer...": "Dodaj nogo dokumenta...",
96
97
  "Reverse charge - tax exempt EU B2B sale": "Obrnjena davčna obveznost - davka oproščena EU B2B prodaja",
98
+ "Please select": "Izberi",
99
+ "Amount": "Znesek",
100
+ "Add payment": "Dodaj plačilo",
101
+ "Recorded now": "Trenutno zabeleženo",
102
+ "Remaining due": "Preostanek za plačilo",
103
+ "Remaining to allocate": "Preostanek za razporeditev",
104
+ "This document must be fully paid on creation": "Ta dokument mora biti ob ustvarjanju v celoti plačan",
105
+ "Record one or more payments on creation": "Ob ustvarjanju zabeleži eno ali več plačil",
106
+ // Service date
107
+ "Service Date": "Datum storitve",
108
+ "Service Period": "Obdobje storitve",
109
+ From: "Od",
110
+ To: "Do",
97
111
  } as const;
@@ -10,6 +10,7 @@ export default {
10
10
  Items: "Artiklar",
11
11
  "Add item": "Add item",
12
12
  Save: "Spara",
13
+ Update: "Uppdatera",
13
14
  "Save as Draft": "Save as Draft",
14
15
  Quantity: "Quantity",
15
16
  Price: "Pris",
@@ -23,16 +24,16 @@ export default {
23
24
  "No taxes found": "No taxes found",
24
25
  "Add new tax...": "Add new tax...",
25
26
  Description: "Beskrivning",
26
- "Mark as Paid": "Mark as Paid",
27
- Paid: "Betald",
28
- "Credit note will be marked as fully paid upon creation": "Credit note will be marked as fully paid upon creation",
29
- "Payment Type": "Payment Type",
27
+ "Mark as Paid": "Markera som betald",
28
+ "Paid": "Betald",
29
+ "Credit note will be marked as fully paid upon creation": "Kreditnotan markeras som fullt betald vid skapande",
30
+ "Payment Type": "Betalningstyp",
30
31
  "Select payment type": "Välj betalningstyp",
31
- Cash: "Kontant",
32
+ "Cash": "Kontant",
32
33
  "Bank Transfer": "Banköverföring",
33
- Card: "Kort",
34
- Check: "Check",
35
- Other: "Övrigt",
34
+ "Card": "Kort",
35
+ "Check": "Check",
36
+ "Other": "Övrigt",
36
37
  Note: "Note",
37
38
  "Insert variable": "Insert variable",
38
39
  "Add payment instructions, terms, or other notes...": "Add payment instructions, terms, or other notes...",
@@ -84,4 +85,17 @@ export default {
84
85
  Footer: "Footer",
85
86
  "Add document footer...": "Add document footer...",
86
87
  "Reverse charge - tax exempt EU B2B sale": "Reverse charge - tax exempt EU B2B sale",
88
+ "Please select": "Välj",
89
+ "Amount": "Belopp",
90
+ "Add payment": "Lägg till betalning",
91
+ "Recorded now": "Registrerat nu",
92
+ "Remaining due": "Återstående att betala",
93
+ "Remaining to allocate": "Återstår att fördela",
94
+ "This document must be fully paid on creation": "Det här dokumentet måste vara fullt betalt vid skapande",
95
+ "Record one or more payments on creation": "Registrera en eller flera betalningar vid skapande",
96
+ // Service date
97
+ "Service Date": "Tjänstedatum",
98
+ "Service Period": "Tjänsteperiod",
99
+ From: "Från",
100
+ To: "Till",
87
101
  } as const;
@@ -1,6 +1,12 @@
1
1
  import type { CreateCreditNoteRequest } from "@spaceinvoices/js-sdk";
2
2
  import { normalizePtDocumentInput } from "@/ui/lib/pt-document-input";
3
- import { prepareDocumentSubmission } from "../../documents/create/prepare-document-submission";
3
+ import {
4
+ buildDocumentBasePayload,
5
+ cleanupEmptyCustomerId,
6
+ prepareDocumentCustomerData,
7
+ prepareDocumentItems,
8
+ prepareDocumentSubmission,
9
+ } from "../../documents/create/prepare-document-submission";
4
10
 
5
11
  type PrepareOptions = {
6
12
  originalCustomer: any;
@@ -30,3 +36,31 @@ export function prepareCreditNoteSubmission(values: any, options: PrepareOptions
30
36
  }
31
37
  return payload;
32
38
  }
39
+
40
+ export function prepareCreditNoteUpdateSubmission(
41
+ values: any,
42
+ options: Pick<PrepareOptions, "originalCustomer" | "wasCustomerFormShown" | "priceModes">,
43
+ ): Record<string, unknown> {
44
+ const nextValues: any = {
45
+ ...values,
46
+ customer: values.customer ? { ...values.customer } : values.customer,
47
+ items: values.items
48
+ ? values.items.map((item: any) => ({ ...item, taxes: item?.taxes ? [...item.taxes] : item?.taxes }))
49
+ : values.items,
50
+ };
51
+
52
+ prepareDocumentCustomerData(nextValues, options);
53
+ cleanupEmptyCustomerId(nextValues);
54
+ nextValues.items = prepareDocumentItems(nextValues.items, options.priceModes ?? {});
55
+
56
+ const payload = buildDocumentBasePayload(nextValues, {
57
+ documentType: "credit_note",
58
+ });
59
+
60
+ const pt = normalizePtDocumentInput(values.pt);
61
+ if (pt) {
62
+ payload.pt = pt;
63
+ }
64
+
65
+ return payload;
66
+ }
@@ -8,7 +8,13 @@
8
8
  * - Less code duplication
9
9
  */
10
10
 
11
- import type { CreateCreditNoteRequest, CreditNote, SDKMethodOptions, UpdateCreditNote } from "@spaceinvoices/js-sdk";
11
+ import type {
12
+ CreateCreditNoteRequest,
13
+ CreditNote,
14
+ CustomCreateCreditNote,
15
+ SDKMethodOptions,
16
+ UpdateCreditNote,
17
+ } from "@spaceinvoices/js-sdk";
12
18
  import { creditNotes } from "@spaceinvoices/js-sdk";
13
19
  import { createResourceHooks } from "@/ui/hooks/create-resource-hooks";
14
20
 
@@ -31,7 +37,20 @@ const {
31
37
  CREDIT_NOTES_CACHE_KEY,
32
38
  );
33
39
 
34
- export { useCreateCreditNote, useDeleteCreditNote, useUpdateCreditNote };
40
+ const { useCreateResource: useCreateCustomCreditNote } = createResourceHooks<
41
+ CreditNote,
42
+ CustomCreateCreditNote,
43
+ UpdateCreditNote
44
+ >(
45
+ {
46
+ create: creditNotes.createCustom,
47
+ update: creditNotes.update,
48
+ delete: voidCreditNote,
49
+ },
50
+ CREDIT_NOTES_CACHE_KEY,
51
+ );
52
+
53
+ export { useCreateCreditNote, useCreateCustomCreditNote, useDeleteCreditNote, useUpdateCreditNote };
35
54
 
36
55
  // ============================================================================
37
56
  // FURS Last-Used Combo (localStorage) for credit notes
@@ -17,6 +17,7 @@ import type {
17
17
  import { Badge } from "@/ui/components/ui/badge";
18
18
  import { Button } from "@/ui/components/ui/button";
19
19
  import { Tooltip, TooltipContent, TooltipTrigger } from "@/ui/components/ui/tooltip";
20
+ import { getDisplayDocumentNumber } from "@/ui/lib/document-display";
20
21
  import { getEslogSelectionState } from "@/ui/lib/eslog-export";
21
22
  import { getFiscalizationFailureType } from "@/ui/lib/fiscalization";
22
23
  import { createTranslation } from "@/ui/lib/translation";
@@ -222,7 +223,7 @@ export default function CreditNoteListTable({
222
223
  return (
223
224
  <div className="flex items-center gap-2">
224
225
  <Button variant="link" className="cursor-pointer py-0 underline" onClick={() => onRowClick?.(creditNote)}>
225
- {creditNote.number}
226
+ {getDisplayDocumentNumber(creditNote as CreditNote & { is_draft?: boolean }, t)}
226
227
  </Button>
227
228
  {(creditNote as any).is_draft && (
228
229
  <Badge
@@ -1,5 +1,5 @@
1
1
  import { zodResolver } from "@hookform/resolvers/zod";
2
- import type { CreateDeliveryNoteRequest, DeliveryNote } from "@spaceinvoices/js-sdk";
2
+ import type { CreateDeliveryNoteRequest, DeliveryNote, UpdateDeliveryNote } from "@spaceinvoices/js-sdk";
3
3
  import { useQueryClient } from "@tanstack/react-query";
4
4
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
5
5
  import type { Resolver } from "react-hook-form";
@@ -11,6 +11,7 @@ import { Label } from "@/ui/components/ui/label";
11
11
  import { createDeliveryNoteSchema } from "@/ui/generated/schemas";
12
12
  import { useNextDocumentNumber } from "@/ui/hooks/use-next-document-number";
13
13
  import { useTransactionTypeCheck } from "@/ui/hooks/use-transaction-type-check";
14
+ import { normalizeLineItemDiscountsForForm } from "@/ui/lib/schemas/shared";
14
15
  import type { ComponentTranslationProps } from "@/ui/lib/translation";
15
16
  import { createTranslation } from "@/ui/lib/translation";
16
17
  import { useEntities } from "@/ui/providers/entities-context";
@@ -26,8 +27,11 @@ import {
26
27
  import { withRequiredDocumentItemFields } from "../../documents/create/document-item-validation";
27
28
  import { DocumentItemsSection, type PriceModesMap } from "../../documents/create/document-items-section";
28
29
  import { DocumentRecipientSection } from "../../documents/create/document-recipient-section";
30
+ import { prepareDocumentItems } from "../../documents/create/prepare-document-submission";
31
+ import { applyCustomCreateTemplate } from "../../documents/create/custom-create-template";
32
+ import { financialInputsMatchInitial, resolvePreservedExpectedTotal } from "../../documents/create/preserved-expected-total";
29
33
  import type { DocumentTypes } from "../../documents/types";
30
- import { useCreateDeliveryNote } from "../delivery-notes.hooks";
34
+ import { useCreateCustomDeliveryNote, useCreateDeliveryNote, useUpdateDeliveryNote } from "../delivery-notes.hooks";
31
35
  import de from "./locales/de";
32
36
  import es from "./locales/es";
33
37
  import fr from "./locales/fr";
@@ -37,7 +41,7 @@ import nl from "./locales/nl";
37
41
  import pl from "./locales/pl";
38
42
  import pt from "./locales/pt";
39
43
  import sl from "./locales/sl";
40
- import { prepareDeliveryNoteSubmission } from "./prepare-delivery-note-submission";
44
+ import { prepareDeliveryNoteSubmission, prepareDeliveryNoteUpdateSubmission } from "./prepare-delivery-note-submission";
41
45
  import { useDeliveryNoteCustomerForm } from "./use-delivery-note-customer-form";
42
46
 
43
47
  const translations = {
@@ -71,6 +75,8 @@ type CreateDeliveryNoteFormProps = {
71
75
  initialValues?: Partial<CreateDeliveryNoteRequest>;
72
76
  /** Whether draft actions should be available in the UI */
73
77
  allowDrafts?: boolean;
78
+ mode?: "create" | "edit";
79
+ documentId?: string;
74
80
  translationLocale?: string;
75
81
  } & ComponentTranslationProps;
76
82
 
@@ -83,6 +89,8 @@ export default function CreateDeliveryNoteForm({
83
89
  onAddNewTax,
84
90
  initialValues,
85
91
  allowDrafts = true,
92
+ mode = "create",
93
+ documentId,
86
94
  translationLocale,
87
95
  t: translateProp,
88
96
  namespace,
@@ -98,6 +106,7 @@ export default function CreateDeliveryNoteForm({
98
106
 
99
107
  const { activeEntity } = useEntities();
100
108
  const queryClient = useQueryClient();
109
+ const isEditMode = mode === "edit";
101
110
 
102
111
  // Draft submission state
103
112
  const [isDraftPending, setIsDraftPending] = useState(false);
@@ -110,7 +119,7 @@ export default function CreateDeliveryNoteForm({
110
119
 
111
120
  // Fetch next delivery note number
112
121
  const { data: nextNumberData } = useNextDocumentNumber(entityId, "delivery_note", {
113
- enabled: !!entityId,
122
+ enabled: !!entityId && !isEditMode,
114
123
  });
115
124
 
116
125
  const form = useForm<CreateDeliveryNoteFormValues>({
@@ -118,22 +127,28 @@ export default function CreateDeliveryNoteForm({
118
127
  withRequiredDocumentItemFields(createDeliveryNoteSchema),
119
128
  ) as Resolver<CreateDeliveryNoteFormValues>,
120
129
  defaultValues: {
121
- number: "",
130
+ number: (initialValues as any)?.number ?? "",
131
+ calculation_mode: (initialValues as any)?.calculation_mode ?? undefined,
122
132
  date: initialValues?.date || new Date().toISOString(),
123
133
  customer_id: initialValues?.customer_id ?? undefined,
124
134
  // Cast customer to form schema type (API type may have additional fields)
125
135
  customer: (initialValues?.customer as CreateDeliveryNoteFormValues["customer"]) ?? undefined,
126
136
  items: initialValues?.items?.length
127
137
  ? initialValues.items.map((item: any) => ({
128
- type: item.type,
138
+ type: item.type ?? undefined,
129
139
  name: item.name || "",
130
140
  description: item.description || "",
131
141
  ...(item.type !== "separator"
132
142
  ? {
143
+ item_id: item.item_id ?? undefined,
133
144
  quantity: item.quantity ?? 1,
134
- // Use gross_price if set, otherwise use price
135
145
  price: item.gross_price ?? item.price,
146
+ gross_price: item.gross_price ?? undefined,
147
+ unit: item.unit ?? undefined,
148
+ classification: item.classification ?? undefined,
136
149
  taxes: item.taxes || [],
150
+ discounts: normalizeLineItemDiscountsForForm(item.discounts),
151
+ metadata: item.metadata ?? undefined,
137
152
  }
138
153
  : {}),
139
154
  }))
@@ -148,9 +163,12 @@ export default function CreateDeliveryNoteForm({
148
163
  ],
149
164
  currency_code: initialValues?.currency_code || activeEntity?.currency_code || "EUR",
150
165
  reference: (initialValues as any)?.reference ?? "",
151
- note: initialValues?.note ?? defaultNote,
166
+ note: initialValues?.note ?? (isEditMode ? "" : defaultNote),
152
167
  tax_clause: (initialValues as any)?.tax_clause ?? "",
153
- footer: (initialValues as any)?.footer ?? defaultFooter,
168
+ footer: (initialValues as any)?.footer ?? (isEditMode ? "" : defaultFooter),
169
+ signature:
170
+ (initialValues as any)?.signature ??
171
+ (isEditMode ? "" : (activeEntity?.settings as any)?.default_document_signature || ""),
154
172
  },
155
173
  });
156
174
 
@@ -166,29 +184,62 @@ export default function CreateDeliveryNoteForm({
166
184
  }, {} as PriceModesMap);
167
185
  }, [initialValues?.items]);
168
186
  const priceModesRef = useRef<PriceModesMap>(initialPriceModes);
187
+ const customCreateTemplate = (initialValues as any)?._custom_create_template;
188
+ const financialInputsMatchSource = useCallback(
189
+ (values: { items?: any[]; currency_code?: string; calculation_mode?: string | null }) =>
190
+ financialInputsMatchInitial({
191
+ initialItems: initialValues?.items,
192
+ currentItems: values.items,
193
+ initialCurrencyCode: initialValues?.currency_code,
194
+ currentCurrencyCode: values.currency_code,
195
+ initialCalculationMode: (initialValues as any)?.calculation_mode ?? null,
196
+ currentCalculationMode: values.calculation_mode ?? null,
197
+ initialPriceModes,
198
+ currentPriceModes: priceModesRef.current,
199
+ }),
200
+ [initialPriceModes, initialValues],
201
+ );
202
+ const getPreservedExpectedTotalWithTax = useCallback(
203
+ (values: { items?: any[]; currency_code?: string; calculation_mode?: string | null }) =>
204
+ resolvePreservedExpectedTotal({
205
+ initialExpectedTotalWithTax: (initialValues as any)?._preserved_expected_total_with_tax,
206
+ initialItems: initialValues?.items,
207
+ currentItems: values.items,
208
+ initialCurrencyCode: initialValues?.currency_code,
209
+ currentCurrencyCode: values.currency_code,
210
+ initialCalculationMode: (initialValues as any)?.calculation_mode ?? null,
211
+ currentCalculationMode: values.calculation_mode ?? null,
212
+ initialPriceModes,
213
+ currentPriceModes: priceModesRef.current,
214
+ }),
215
+ [initialPriceModes, initialValues],
216
+ );
169
217
 
170
218
  // Update number when fetched
171
219
  useEffect(() => {
220
+ if (isEditMode) return;
172
221
  if (nextNumberData?.number) {
173
222
  form.setValue("number", nextNumberData.number);
174
223
  }
175
- }, [nextNumberData?.number, form]);
224
+ }, [nextNumberData?.number, form, isEditMode]);
176
225
 
177
226
  // Set default footer from entity settings when entity data is available
178
227
  useEffect(() => {
228
+ if (isEditMode) return;
179
229
  const entityDefaultFooter = (activeEntity?.settings as any)?.document_footer;
180
230
  if (entityDefaultFooter && !form.getValues("footer")) {
181
231
  form.setValue("footer", entityDefaultFooter);
182
232
  }
183
- }, [activeEntity, form]);
233
+ }, [activeEntity, form, isEditMode]);
184
234
 
185
235
  // Set default note from entity settings when entity data is available
186
236
  useEffect(() => {
237
+ if (isEditMode) return;
187
238
  const entityDefaultNote = (activeEntity?.settings as any)?.default_delivery_note_note;
188
239
  if (entityDefaultNote && !form.getValues("note")) {
189
240
  form.setValue("note", entityDefaultNote);
190
241
  }
191
- }, [activeEntity, form]);
242
+ }, [activeEntity, form, isEditMode]);
192
243
 
193
244
  // Auto-add tax field for tax subject entities
194
245
  useEffect(() => {
@@ -202,11 +253,12 @@ export default function CreateDeliveryNoteForm({
202
253
 
203
254
  // Set default signature from entity settings
204
255
  useEffect(() => {
256
+ if (isEditMode) return;
205
257
  const entityDefaultSignature = (activeEntity?.settings as any)?.default_document_signature;
206
258
  if (entityDefaultSignature && !form.getValues("signature")) {
207
259
  form.setValue("signature", entityDefaultSignature);
208
260
  }
209
- }, [activeEntity, form]);
261
+ }, [activeEntity, form, isEditMode]);
210
262
 
211
263
  const formValues = useWatch({
212
264
  control: form.control,
@@ -237,13 +289,14 @@ export default function CreateDeliveryNoteForm({
237
289
  useEffect(() => {
238
290
  if (effectiveTransactionType === prevTransactionTypeRef.current) return;
239
291
  prevTransactionTypeRef.current = effectiveTransactionType;
292
+ if (isEditMode) return;
240
293
 
241
294
  const taxClauseDefaults = (activeEntity?.settings as any)?.tax_clause_defaults;
242
295
  if (!taxClauseDefaults) return;
243
296
 
244
297
  const clause = taxClauseDefaults[effectiveTransactionType] ?? "";
245
298
  form.setValue("tax_clause", clause);
246
- }, [effectiveTransactionType, activeEntity, form]);
299
+ }, [effectiveTransactionType, activeEntity, form, isEditMode]);
247
300
 
248
301
  // Extract customer management logic into a custom hook
249
302
  const {
@@ -267,18 +320,58 @@ export default function CreateDeliveryNoteForm({
267
320
  },
268
321
  onError,
269
322
  });
323
+ const { mutate: createCustomDeliveryNote, isPending: isCreateCustomPending } = useCreateCustomDeliveryNote({
324
+ entityId,
325
+ onSuccess: (data) => {
326
+ if (data.customer_id) {
327
+ queryClient.invalidateQueries({ queryKey: [CUSTOMERS_CACHE_KEY] });
328
+ }
329
+ onSuccess?.(data);
330
+ },
331
+ onError,
332
+ });
333
+ const { mutate: updateDeliveryNote, isPending: isUpdatePending } = useUpdateDeliveryNote({
334
+ entityId,
335
+ onSuccess,
336
+ onError,
337
+ });
270
338
 
271
339
  // Shared submit logic for both regular save and save as draft
272
340
  const submitDeliveryNote = useCallback(
273
341
  (values: CreateDeliveryNoteFormValues, isDraft: boolean) => {
274
342
  try {
343
+ if (isEditMode) {
344
+ if (!documentId) {
345
+ throw new Error("Delivery note edit mode requires a documentId");
346
+ }
347
+
348
+ const updatePayload = prepareDeliveryNoteUpdateSubmission(values, {
349
+ originalCustomer,
350
+ priceModes: priceModesRef.current,
351
+ hidePrices,
352
+ }) as UpdateDeliveryNote;
353
+ updateDeliveryNote({ id: documentId, data: updatePayload });
354
+ return;
355
+ }
356
+
275
357
  const submission = prepareDeliveryNoteSubmission(values, {
276
358
  originalCustomer,
277
359
  priceModes: priceModesRef.current,
278
360
  isDraft,
279
361
  hidePrices,
280
362
  });
281
- createDeliveryNote(submission);
363
+ const preservedExpectedTotalWithTax = getPreservedExpectedTotalWithTax(values);
364
+ if (preservedExpectedTotalWithTax !== undefined) {
365
+ (submission as any).expected_total_with_tax = preservedExpectedTotalWithTax;
366
+ } else {
367
+ delete (submission as any).expected_total_with_tax;
368
+ }
369
+ if (customCreateTemplate && financialInputsMatchSource(values)) {
370
+ delete (submission as any).expected_total_with_tax;
371
+ createCustomDeliveryNote(applyCustomCreateTemplate(submission as any, customCreateTemplate));
372
+ } else {
373
+ createDeliveryNote(submission);
374
+ }
282
375
  } catch (error) {
283
376
  console.error("Delivery note submission error:", error);
284
377
  if (onError) {
@@ -286,7 +379,19 @@ export default function CreateDeliveryNoteForm({
286
379
  }
287
380
  }
288
381
  },
289
- [createDeliveryNote, onError, originalCustomer, hidePrices],
382
+ [
383
+ createDeliveryNote,
384
+ createCustomDeliveryNote,
385
+ customCreateTemplate,
386
+ documentId,
387
+ financialInputsMatchSource,
388
+ getPreservedExpectedTotalWithTax,
389
+ hidePrices,
390
+ isEditMode,
391
+ onError,
392
+ originalCustomer,
393
+ updateDeliveryNote,
394
+ ],
290
395
  );
291
396
 
292
397
  // Handle save as draft
@@ -305,48 +410,46 @@ export default function CreateDeliveryNoteForm({
305
410
 
306
411
  const secondaryAction = useMemo(
307
412
  () =>
308
- allowDrafts
413
+ allowDrafts && !isEditMode
309
414
  ? {
310
415
  label: t("Save as Draft"),
311
416
  onClick: handleSaveAsDraft,
312
417
  isPending: isDraftPending,
313
418
  }
314
419
  : undefined,
315
- [allowDrafts, t, handleSaveAsDraft, isDraftPending],
420
+ [allowDrafts, isEditMode, t, handleSaveAsDraft, isDraftPending],
316
421
  );
317
422
 
318
423
  useFormFooterRegistration({
319
424
  formId: "create-delivery-note-form",
320
- isPending,
425
+ isPending: isPending || isCreateCustomPending || isUpdatePending,
321
426
  isDirty: form.formState.isDirty || !!initialValues,
322
- label: t("Create Delivery Note"),
427
+ label: isEditMode ? t("Update") : t("Create Delivery Note"),
323
428
  secondaryAction,
324
429
  });
325
430
 
326
431
  const buildPreviewPayload = useCallback(
327
432
  (values: CreateDeliveryNoteFormValues): DeliveryNotePreviewPayload => {
328
- const currentItems = values.items || [];
329
-
330
- const transformedItems = currentItems.map((item: any, index: number) => {
331
- const { price, ...rest } = item;
332
- const isGross = priceModesRef.current[index] ?? false;
333
- return isGross ? { ...rest, gross_price: price } : { ...rest, price };
334
- });
335
-
433
+ const preservedExpectedTotalWithTax = getPreservedExpectedTotalWithTax(values);
336
434
  return {
337
435
  number: values.number,
338
436
  date: values.date,
339
437
  customer_id: values.customer_id,
340
438
  customer: values.customer,
341
- items: transformedItems,
439
+ items: prepareDocumentItems(values.items, priceModesRef.current),
342
440
  currency_code: values.currency_code,
343
441
  reference: values.reference,
344
442
  note: values.note,
443
+ tax_clause: values.tax_clause,
345
444
  signature: values.signature,
445
+ footer: values.footer,
346
446
  hide_prices: hidePrices,
447
+ ...(preservedExpectedTotalWithTax !== undefined
448
+ ? { expected_total_with_tax: preservedExpectedTotalWithTax }
449
+ : {}),
347
450
  };
348
451
  },
349
- [hidePrices],
452
+ [getPreservedExpectedTotalWithTax, hidePrices],
350
453
  );
351
454
 
352
455
  const emitPreviewPayload = useCallback((payload: DeliveryNotePreviewPayload) => {
@@ -34,6 +34,7 @@ export default {
34
34
  Discount: "Discount",
35
35
  Description: "Описание",
36
36
  Save: "Запази",
37
+ Update: "Актуализирай",
37
38
  "Save as Draft": "Save as Draft",
38
39
  "Pick a date": "Pick a date",
39
40
  Currency: "Валута",
@@ -34,6 +34,7 @@ export default {
34
34
  Discount: "Discount",
35
35
  Description: "Popis",
36
36
  Save: "Uložit",
37
+ Update: "Aktualizovat",
37
38
  "Save as Draft": "Save as Draft",
38
39
  "Pick a date": "Pick a date",
39
40
  Currency: "Měna",