@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
@@ -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,27 @@ 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),
137
151
  }
138
152
  : {}),
139
153
  }))
@@ -148,9 +162,12 @@ export default function CreateDeliveryNoteForm({
148
162
  ],
149
163
  currency_code: initialValues?.currency_code || activeEntity?.currency_code || "EUR",
150
164
  reference: (initialValues as any)?.reference ?? "",
151
- note: initialValues?.note ?? defaultNote,
165
+ note: initialValues?.note ?? (isEditMode ? "" : defaultNote),
152
166
  tax_clause: (initialValues as any)?.tax_clause ?? "",
153
- footer: (initialValues as any)?.footer ?? defaultFooter,
167
+ footer: (initialValues as any)?.footer ?? (isEditMode ? "" : defaultFooter),
168
+ signature:
169
+ (initialValues as any)?.signature ??
170
+ (isEditMode ? "" : (activeEntity?.settings as any)?.default_document_signature || ""),
154
171
  },
155
172
  });
156
173
 
@@ -166,29 +183,62 @@ export default function CreateDeliveryNoteForm({
166
183
  }, {} as PriceModesMap);
167
184
  }, [initialValues?.items]);
168
185
  const priceModesRef = useRef<PriceModesMap>(initialPriceModes);
186
+ const customCreateTemplate = (initialValues as any)?._custom_create_template;
187
+ const financialInputsMatchSource = useCallback(
188
+ (values: { items?: any[]; currency_code?: string; calculation_mode?: string | null }) =>
189
+ financialInputsMatchInitial({
190
+ initialItems: initialValues?.items,
191
+ currentItems: values.items,
192
+ initialCurrencyCode: initialValues?.currency_code,
193
+ currentCurrencyCode: values.currency_code,
194
+ initialCalculationMode: (initialValues as any)?.calculation_mode ?? null,
195
+ currentCalculationMode: values.calculation_mode ?? null,
196
+ initialPriceModes,
197
+ currentPriceModes: priceModesRef.current,
198
+ }),
199
+ [initialPriceModes, initialValues],
200
+ );
201
+ const getPreservedExpectedTotalWithTax = useCallback(
202
+ (values: { items?: any[]; currency_code?: string; calculation_mode?: string | null }) =>
203
+ resolvePreservedExpectedTotal({
204
+ initialExpectedTotalWithTax: (initialValues as any)?._preserved_expected_total_with_tax,
205
+ initialItems: initialValues?.items,
206
+ currentItems: values.items,
207
+ initialCurrencyCode: initialValues?.currency_code,
208
+ currentCurrencyCode: values.currency_code,
209
+ initialCalculationMode: (initialValues as any)?.calculation_mode ?? null,
210
+ currentCalculationMode: values.calculation_mode ?? null,
211
+ initialPriceModes,
212
+ currentPriceModes: priceModesRef.current,
213
+ }),
214
+ [initialPriceModes, initialValues],
215
+ );
169
216
 
170
217
  // Update number when fetched
171
218
  useEffect(() => {
219
+ if (isEditMode) return;
172
220
  if (nextNumberData?.number) {
173
221
  form.setValue("number", nextNumberData.number);
174
222
  }
175
- }, [nextNumberData?.number, form]);
223
+ }, [nextNumberData?.number, form, isEditMode]);
176
224
 
177
225
  // Set default footer from entity settings when entity data is available
178
226
  useEffect(() => {
227
+ if (isEditMode) return;
179
228
  const entityDefaultFooter = (activeEntity?.settings as any)?.document_footer;
180
229
  if (entityDefaultFooter && !form.getValues("footer")) {
181
230
  form.setValue("footer", entityDefaultFooter);
182
231
  }
183
- }, [activeEntity, form]);
232
+ }, [activeEntity, form, isEditMode]);
184
233
 
185
234
  // Set default note from entity settings when entity data is available
186
235
  useEffect(() => {
236
+ if (isEditMode) return;
187
237
  const entityDefaultNote = (activeEntity?.settings as any)?.default_delivery_note_note;
188
238
  if (entityDefaultNote && !form.getValues("note")) {
189
239
  form.setValue("note", entityDefaultNote);
190
240
  }
191
- }, [activeEntity, form]);
241
+ }, [activeEntity, form, isEditMode]);
192
242
 
193
243
  // Auto-add tax field for tax subject entities
194
244
  useEffect(() => {
@@ -202,11 +252,12 @@ export default function CreateDeliveryNoteForm({
202
252
 
203
253
  // Set default signature from entity settings
204
254
  useEffect(() => {
255
+ if (isEditMode) return;
205
256
  const entityDefaultSignature = (activeEntity?.settings as any)?.default_document_signature;
206
257
  if (entityDefaultSignature && !form.getValues("signature")) {
207
258
  form.setValue("signature", entityDefaultSignature);
208
259
  }
209
- }, [activeEntity, form]);
260
+ }, [activeEntity, form, isEditMode]);
210
261
 
211
262
  const formValues = useWatch({
212
263
  control: form.control,
@@ -237,13 +288,14 @@ export default function CreateDeliveryNoteForm({
237
288
  useEffect(() => {
238
289
  if (effectiveTransactionType === prevTransactionTypeRef.current) return;
239
290
  prevTransactionTypeRef.current = effectiveTransactionType;
291
+ if (isEditMode) return;
240
292
 
241
293
  const taxClauseDefaults = (activeEntity?.settings as any)?.tax_clause_defaults;
242
294
  if (!taxClauseDefaults) return;
243
295
 
244
296
  const clause = taxClauseDefaults[effectiveTransactionType] ?? "";
245
297
  form.setValue("tax_clause", clause);
246
- }, [effectiveTransactionType, activeEntity, form]);
298
+ }, [effectiveTransactionType, activeEntity, form, isEditMode]);
247
299
 
248
300
  // Extract customer management logic into a custom hook
249
301
  const {
@@ -267,18 +319,58 @@ export default function CreateDeliveryNoteForm({
267
319
  },
268
320
  onError,
269
321
  });
322
+ const { mutate: createCustomDeliveryNote, isPending: isCreateCustomPending } = useCreateCustomDeliveryNote({
323
+ entityId,
324
+ onSuccess: (data) => {
325
+ if (data.customer_id) {
326
+ queryClient.invalidateQueries({ queryKey: [CUSTOMERS_CACHE_KEY] });
327
+ }
328
+ onSuccess?.(data);
329
+ },
330
+ onError,
331
+ });
332
+ const { mutate: updateDeliveryNote, isPending: isUpdatePending } = useUpdateDeliveryNote({
333
+ entityId,
334
+ onSuccess,
335
+ onError,
336
+ });
270
337
 
271
338
  // Shared submit logic for both regular save and save as draft
272
339
  const submitDeliveryNote = useCallback(
273
340
  (values: CreateDeliveryNoteFormValues, isDraft: boolean) => {
274
341
  try {
342
+ if (isEditMode) {
343
+ if (!documentId) {
344
+ throw new Error("Delivery note edit mode requires a documentId");
345
+ }
346
+
347
+ const updatePayload = prepareDeliveryNoteUpdateSubmission(values, {
348
+ originalCustomer,
349
+ priceModes: priceModesRef.current,
350
+ hidePrices,
351
+ }) as UpdateDeliveryNote;
352
+ updateDeliveryNote({ id: documentId, data: updatePayload });
353
+ return;
354
+ }
355
+
275
356
  const submission = prepareDeliveryNoteSubmission(values, {
276
357
  originalCustomer,
277
358
  priceModes: priceModesRef.current,
278
359
  isDraft,
279
360
  hidePrices,
280
361
  });
281
- createDeliveryNote(submission);
362
+ const preservedExpectedTotalWithTax = getPreservedExpectedTotalWithTax(values);
363
+ if (preservedExpectedTotalWithTax !== undefined) {
364
+ (submission as any).expected_total_with_tax = preservedExpectedTotalWithTax;
365
+ } else {
366
+ delete (submission as any).expected_total_with_tax;
367
+ }
368
+ if (customCreateTemplate && financialInputsMatchSource(values)) {
369
+ delete (submission as any).expected_total_with_tax;
370
+ createCustomDeliveryNote(applyCustomCreateTemplate(submission as any, customCreateTemplate));
371
+ } else {
372
+ createDeliveryNote(submission);
373
+ }
282
374
  } catch (error) {
283
375
  console.error("Delivery note submission error:", error);
284
376
  if (onError) {
@@ -286,7 +378,19 @@ export default function CreateDeliveryNoteForm({
286
378
  }
287
379
  }
288
380
  },
289
- [createDeliveryNote, onError, originalCustomer, hidePrices],
381
+ [
382
+ createDeliveryNote,
383
+ createCustomDeliveryNote,
384
+ customCreateTemplate,
385
+ documentId,
386
+ financialInputsMatchSource,
387
+ getPreservedExpectedTotalWithTax,
388
+ hidePrices,
389
+ isEditMode,
390
+ onError,
391
+ originalCustomer,
392
+ updateDeliveryNote,
393
+ ],
290
394
  );
291
395
 
292
396
  // Handle save as draft
@@ -305,48 +409,46 @@ export default function CreateDeliveryNoteForm({
305
409
 
306
410
  const secondaryAction = useMemo(
307
411
  () =>
308
- allowDrafts
412
+ allowDrafts && !isEditMode
309
413
  ? {
310
414
  label: t("Save as Draft"),
311
415
  onClick: handleSaveAsDraft,
312
416
  isPending: isDraftPending,
313
417
  }
314
418
  : undefined,
315
- [allowDrafts, t, handleSaveAsDraft, isDraftPending],
419
+ [allowDrafts, isEditMode, t, handleSaveAsDraft, isDraftPending],
316
420
  );
317
421
 
318
422
  useFormFooterRegistration({
319
423
  formId: "create-delivery-note-form",
320
- isPending,
424
+ isPending: isPending || isCreateCustomPending || isUpdatePending,
321
425
  isDirty: form.formState.isDirty || !!initialValues,
322
- label: t("Create Delivery Note"),
426
+ label: isEditMode ? t("Update") : t("Create Delivery Note"),
323
427
  secondaryAction,
324
428
  });
325
429
 
326
430
  const buildPreviewPayload = useCallback(
327
431
  (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
-
432
+ const preservedExpectedTotalWithTax = getPreservedExpectedTotalWithTax(values);
336
433
  return {
337
434
  number: values.number,
338
435
  date: values.date,
339
436
  customer_id: values.customer_id,
340
437
  customer: values.customer,
341
- items: transformedItems,
438
+ items: prepareDocumentItems(values.items, priceModesRef.current),
342
439
  currency_code: values.currency_code,
343
440
  reference: values.reference,
344
441
  note: values.note,
442
+ tax_clause: values.tax_clause,
345
443
  signature: values.signature,
444
+ footer: values.footer,
346
445
  hide_prices: hidePrices,
446
+ ...(preservedExpectedTotalWithTax !== undefined
447
+ ? { expected_total_with_tax: preservedExpectedTotalWithTax }
448
+ : {}),
347
449
  };
348
450
  },
349
- [hidePrices],
451
+ [getPreservedExpectedTotalWithTax, hidePrices],
350
452
  );
351
453
 
352
454
  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",