@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
@@ -36,6 +36,7 @@ export default {
36
36
  Discount: "Rabatt",
37
37
  Description: "Beschreibung",
38
38
  Save: "Speichern",
39
+ Update: "Aktualisieren",
39
40
  "Save as Draft": "Als Entwurf speichern",
40
41
  "Pick a date": "Datum auswählen",
41
42
  Currency: "Währung",
@@ -34,6 +34,7 @@ export default {
34
34
  Discount: "Discount",
35
35
  Description: "Description",
36
36
  Save: "Save",
37
+ Update: "Update",
37
38
  "Save as Draft": "Save as Draft",
38
39
  "Pick a date": "Pick a date",
39
40
  Currency: "Currency",
@@ -35,6 +35,7 @@ export default {
35
35
  Discount: "Descuento",
36
36
  Description: "Descripción",
37
37
  Save: "Guardar",
38
+ Update: "Actualizar",
38
39
  "Save as Draft": "Guardar como borrador",
39
40
  "Pick a date": "Seleccionar una fecha",
40
41
  Currency: "Moneda",
@@ -34,6 +34,7 @@ export default {
34
34
  Discount: "Discount",
35
35
  Description: "Kirjeldus",
36
36
  Save: "Salvesta",
37
+ Update: "Uuenda",
37
38
  "Save as Draft": "Save as Draft",
38
39
  "Pick a date": "Pick a date",
39
40
  Currency: "Valuuta",
@@ -34,6 +34,7 @@ export default {
34
34
  Discount: "Discount",
35
35
  Description: "Description",
36
36
  Save: "Save",
37
+ Update: "Päivitä",
37
38
  "Save as Draft": "Save as Draft",
38
39
  "Pick a date": "Pick a date",
39
40
  Currency: "Currency",
@@ -36,6 +36,7 @@ export default {
36
36
  Discount: "Remise",
37
37
  Description: "Description",
38
38
  Save: "Enregistrer",
39
+ Update: "Mettre à jour",
39
40
  "Save as Draft": "Enregistrer comme brouillon",
40
41
  "Pick a date": "Choisir une date",
41
42
  Currency: "Devise",
@@ -35,6 +35,7 @@ export default {
35
35
  Discount: "Popust",
36
36
  Description: "Opis",
37
37
  Save: "Spremi",
38
+ Update: "Ažuriraj",
38
39
  "Save as Draft": "Spremi kao skicu",
39
40
  "Pick a date": "Odaberi datum",
40
41
  Currency: "Valuta",
@@ -34,6 +34,7 @@ export default {
34
34
  Discount: "Discount",
35
35
  Description: "Lýsing",
36
36
  Save: "Vista",
37
+ Update: "Uppfæra",
37
38
  "Save as Draft": "Save as Draft",
38
39
  "Pick a date": "Pick a date",
39
40
  Currency: "Gjaldmiðill",
@@ -35,6 +35,7 @@ export default {
35
35
  Discount: "Sconto",
36
36
  Description: "Descrizione",
37
37
  Save: "Salva",
38
+ Update: "Aggiorna",
38
39
  "Save as Draft": "Salva come bozza",
39
40
  "Pick a date": "Seleziona una data",
40
41
  Currency: "Valuta",
@@ -34,6 +34,7 @@ export default {
34
34
  Discount: "Discount",
35
35
  Description: "Beskrivelse",
36
36
  Save: "Lagre",
37
+ Update: "Oppdater",
37
38
  "Save as Draft": "Save as Draft",
38
39
  "Pick a date": "Pick a date",
39
40
  Currency: "Valuta",
@@ -36,6 +36,7 @@ export default {
36
36
  Discount: "Korting",
37
37
  Description: "Beschrijving",
38
38
  Save: "Opslaan",
39
+ Update: "Bijwerken",
39
40
  "Save as Draft": "Opslaan als concept",
40
41
  "Pick a date": "Kies een datum",
41
42
  Currency: "Valuta",
@@ -35,6 +35,7 @@ export default {
35
35
  Discount: "Rabat",
36
36
  Description: "Opis",
37
37
  Save: "Zapisz",
38
+ Update: "Zaktualizuj",
38
39
  "Save as Draft": "Zapisz jako szkic",
39
40
  "Pick a date": "Wybierz datę",
40
41
  Currency: "Waluta",
@@ -36,6 +36,7 @@ export default {
36
36
  Discount: "Desconto",
37
37
  Description: "Descrição",
38
38
  Save: "Guardar",
39
+ Update: "Atualizar",
39
40
  "Save as Draft": "Guardar como rascunho",
40
41
  "Pick a date": "Selecionar uma data",
41
42
  Currency: "Moeda",
@@ -34,6 +34,7 @@ export default {
34
34
  Discount: "Discount",
35
35
  Description: "Popis",
36
36
  Save: "Uložiť",
37
+ Update: "Aktualizovať",
37
38
  "Save as Draft": "Save as Draft",
38
39
  "Pick a date": "Pick a date",
39
40
  Currency: "Mena",
@@ -35,6 +35,7 @@ export default {
35
35
  Discount: "Popust",
36
36
  Description: "Opis",
37
37
  Save: "Shrani",
38
+ Update: "Posodobi",
38
39
  "Save as Draft": "Shrani kot osnutek",
39
40
  "Pick a date": "Izberi datum",
40
41
  Currency: "Valuta",
@@ -34,6 +34,7 @@ export default {
34
34
  Discount: "Discount",
35
35
  Description: "Beskrivning",
36
36
  Save: "Spara",
37
+ Update: "Uppdatera",
37
38
  "Save as Draft": "Save as Draft",
38
39
  "Pick a date": "Pick a date",
39
40
  Currency: "Valuta",
@@ -1,6 +1,12 @@
1
1
  import type { CreateDeliveryNoteRequest } from "@spaceinvoices/js-sdk";
2
2
  import type { CreateDeliveryNoteSchema } from "@/ui/generated/schemas";
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
  import type { CustomerData } from "../../documents/create/use-document-customer-form";
5
11
 
6
12
  /** Map of item index to gross price mode */
@@ -36,3 +42,30 @@ export function prepareDeliveryNoteSubmission(
36
42
  ...(options.hidePrices !== undefined && { hide_prices: options.hidePrices }),
37
43
  };
38
44
  }
45
+
46
+ export function prepareDeliveryNoteUpdateSubmission(
47
+ values: CreateDeliveryNoteSchema,
48
+ options: Pick<PrepareOptions, "originalCustomer" | "priceModes" | "hidePrices">,
49
+ ): Record<string, unknown> {
50
+ const nextValues: any = {
51
+ ...values,
52
+ customer: values.customer ? { ...values.customer } : values.customer,
53
+ items: values.items
54
+ ? values.items.map((item: any) => ({ ...item, taxes: item?.taxes ? [...item.taxes] : item?.taxes }))
55
+ : values.items,
56
+ };
57
+
58
+ prepareDocumentCustomerData(nextValues, {
59
+ originalCustomer: options.originalCustomer,
60
+ wasCustomerFormShown: true,
61
+ });
62
+ cleanupEmptyCustomerId(nextValues);
63
+ nextValues.items = prepareDocumentItems(nextValues.items, options.priceModes ?? {});
64
+
65
+ return {
66
+ ...buildDocumentBasePayload(nextValues, {
67
+ documentType: "delivery_note",
68
+ }),
69
+ ...(options.hidePrices !== undefined ? { hide_prices: options.hidePrices } : {}),
70
+ };
71
+ }
@@ -1,5 +1,6 @@
1
1
  import type {
2
2
  CreateDeliveryNoteRequest,
3
+ CustomCreateDeliveryNote,
3
4
  DeliveryNote,
4
5
  SDKMethodOptions,
5
6
  UpdateDeliveryNote,
@@ -29,4 +30,17 @@ const {
29
30
  DELIVERY_NOTES_CACHE_KEY,
30
31
  );
31
32
 
32
- export { useCreateDeliveryNote, useDeleteDeliveryNote, useUpdateDeliveryNote };
33
+ const { useCreateResource: useCreateCustomDeliveryNote } = createResourceHooks<
34
+ DeliveryNote,
35
+ CustomCreateDeliveryNote,
36
+ UpdateDeliveryNote
37
+ >(
38
+ {
39
+ create: deliveryNotes.createCustom,
40
+ update: deliveryNotes.update,
41
+ delete: voidDeliveryNote,
42
+ },
43
+ DELIVERY_NOTES_CACHE_KEY,
44
+ );
45
+
46
+ export { useCreateCustomDeliveryNote, useCreateDeliveryNote, useDeleteDeliveryNote, useUpdateDeliveryNote };
@@ -15,6 +15,7 @@ import type {
15
15
  } from "@/ui/components/table/types";
16
16
  import { Badge } from "@/ui/components/ui/badge";
17
17
  import { Button } from "@/ui/components/ui/button";
18
+ import { getDisplayDocumentNumber } from "@/ui/lib/document-display";
18
19
  import { createTranslation } from "@/ui/lib/translation";
19
20
 
20
21
  import DeliveryNoteListRowActions from "./list-row-actions";
@@ -180,7 +181,7 @@ export default function DeliveryNoteListTable({
180
181
  cell: (deliveryNote) => (
181
182
  <div className="flex items-center gap-2">
182
183
  <Button variant="link" className="cursor-pointer py-0 underline" onClick={() => onRowClick?.(deliveryNote)}>
183
- {deliveryNote.number}
184
+ {getDisplayDocumentNumber(deliveryNote as DeliveryNote & { is_draft?: boolean }, t)}
184
185
  </Button>
185
186
  {(deliveryNote as any).is_draft && (
186
187
  <Badge
@@ -0,0 +1,151 @@
1
+ type CustomCreateTemplate = {
2
+ items: any[];
3
+ total: number;
4
+ total_with_tax: number;
5
+ total_discount?: number | null;
6
+ taxes?: any[];
7
+ };
8
+
9
+ function round2(value: number): number {
10
+ return Math.round(value * 100) / 100;
11
+ }
12
+
13
+ function sanitizeItemTaxes(taxes: any[] | undefined): any[] {
14
+ return (taxes ?? []).map((tax) => ({
15
+ tax_id: tax?.tax_id ?? undefined,
16
+ rate: tax?.rate ?? undefined,
17
+ classification: tax?.classification ?? undefined,
18
+ reverse_charge: tax?.reverse_charge ?? false,
19
+ pt_exemption_code: tax?.pt_exemption_code ?? undefined,
20
+ pt_exemption_reason: tax?.pt_exemption_reason ?? undefined,
21
+ }));
22
+ }
23
+
24
+ function sanitizeDiscounts(discounts: any[] | undefined): any[] {
25
+ return (discounts ?? []).map((discount) => ({
26
+ value: discount?.value,
27
+ type: discount?.type ?? undefined,
28
+ }));
29
+ }
30
+
31
+ function getTaxIdentityKey(tax: any): string {
32
+ return JSON.stringify({
33
+ rate: tax?.rate ?? null,
34
+ reverse_charge: tax?.reverse_charge ?? false,
35
+ });
36
+ }
37
+
38
+ function collectResolvedItemTaxIds(items: any[] | undefined): Map<string, Set<string>> {
39
+ const taxIdsByKey = new Map<string, Set<string>>();
40
+
41
+ for (const item of items ?? []) {
42
+ if (item?.type === "separator") continue;
43
+
44
+ for (const tax of item?.taxes ?? []) {
45
+ if (!tax?.tax_id) continue;
46
+
47
+ const key = getTaxIdentityKey(tax);
48
+ const existing = taxIdsByKey.get(key);
49
+ if (existing) {
50
+ existing.add(tax.tax_id);
51
+ } else {
52
+ taxIdsByKey.set(key, new Set([tax.tax_id]));
53
+ }
54
+ }
55
+ }
56
+
57
+ return taxIdsByKey;
58
+ }
59
+
60
+ export function toCustomCreateItem(item: any): any {
61
+ if (item?.type === "separator") {
62
+ return {
63
+ type: "separator",
64
+ name: item?.name,
65
+ description: item?.description ?? undefined,
66
+ };
67
+ }
68
+
69
+ return {
70
+ type: item?.type ?? undefined,
71
+ item_id: item?.item_id ?? undefined,
72
+ name: item?.name,
73
+ description: item?.description ?? undefined,
74
+ classification: item?.classification ?? undefined,
75
+ price: item?.price ?? undefined,
76
+ gross_price: item?.gross_price ?? undefined,
77
+ quantity: item?.quantity ?? undefined,
78
+ unit: item?.unit ?? undefined,
79
+ taxes: sanitizeItemTaxes(item?.taxes),
80
+ discounts: sanitizeDiscounts(item?.discounts),
81
+ total: item?.total ?? undefined,
82
+ total_with_tax: item?.total_with_tax ?? undefined,
83
+ metadata: item?.metadata ?? undefined,
84
+ };
85
+ }
86
+
87
+ export function sanitizeSummaryTaxes(taxes: any[] | undefined, items?: any[]): any[] {
88
+ const resolvedItemTaxIds = collectResolvedItemTaxIds(items);
89
+
90
+ return (taxes ?? []).map((tax) => ({
91
+ tax_id:
92
+ tax?.tax_id ??
93
+ (() => {
94
+ const candidates = resolvedItemTaxIds.get(getTaxIdentityKey(tax));
95
+ if (!candidates || candidates.size !== 1) return undefined;
96
+ return Array.from(candidates)[0];
97
+ })(),
98
+ rate: tax?.rate ?? null,
99
+ base: tax?.base ?? 0,
100
+ amount: tax?.amount ?? 0,
101
+ reverse_charge: tax?.reverse_charge ?? false,
102
+ }));
103
+ }
104
+
105
+ function getSummaryTaxKey(tax: any): string {
106
+ return JSON.stringify({
107
+ tax_id: tax?.tax_id ?? null,
108
+ rate: tax?.rate ?? null,
109
+ reverse_charge: tax?.reverse_charge ?? false,
110
+ });
111
+ }
112
+
113
+ export function sumSummaryTaxes(documents: Array<{ taxes?: any[]; items?: any[] }>): any[] {
114
+ const aggregated = new Map<string, any>();
115
+
116
+ for (const document of documents) {
117
+ for (const tax of sanitizeSummaryTaxes(document.taxes, document.items)) {
118
+ const key = getSummaryTaxKey(tax);
119
+ const existing = aggregated.get(key);
120
+ if (existing) {
121
+ existing.base = round2(existing.base + tax.base);
122
+ existing.amount = round2(existing.amount + tax.amount);
123
+ } else {
124
+ aggregated.set(key, { ...tax });
125
+ }
126
+ }
127
+ }
128
+
129
+ return Array.from(aggregated.values());
130
+ }
131
+
132
+ export function buildCustomCreateTemplateFromDocument(document: any): CustomCreateTemplate {
133
+ return {
134
+ items: (document?.items ?? []).map(toCustomCreateItem),
135
+ total: document?.total ?? 0,
136
+ total_with_tax: document?.total_with_tax ?? 0,
137
+ total_discount: document?.total_discount ?? 0,
138
+ taxes: sanitizeSummaryTaxes(document?.taxes, document?.items),
139
+ };
140
+ }
141
+
142
+ export function applyCustomCreateTemplate<T extends Record<string, any>>(payload: T, template: CustomCreateTemplate): T {
143
+ return {
144
+ ...payload,
145
+ items: template.items,
146
+ total: template.total,
147
+ total_with_tax: template.total_with_tax,
148
+ total_discount: template.total_discount ?? 0,
149
+ taxes: template.taxes ?? [],
150
+ };
151
+ }
@@ -1,7 +1,6 @@
1
1
  import type { Item } from "@spaceinvoices/js-sdk";
2
2
  import { ChevronDown, ChevronUp, DollarSign, Minus, Percent, Plus, PlusIcon, Trash2 } from "lucide-react";
3
3
  import { useEffect, useState } from "react";
4
- import type { Control, UseFormReturn } from "react-hook-form";
5
4
  import { useWatch } from "react-hook-form";
6
5
 
7
6
  import { ItemCombobox } from "@/ui/components/items/item-combobox";
@@ -25,7 +24,7 @@ import DocumentAddItemTaxRateField from "./document-add-item-tax-rate-field";
25
24
 
26
25
  type DocumentAddItemFormProps = {
27
26
  index: number;
28
- control: Control<any>;
27
+ control: any;
29
28
  documentType?: "invoice" | "estimate" | "credit_note" | "advance_invoice" | "delivery_note";
30
29
  entityId: string;
31
30
  currencyCode?: string;
@@ -36,7 +35,7 @@ type DocumentAddItemFormProps = {
36
35
  showRemove: boolean;
37
36
  showMoveUp: boolean;
38
37
  showMoveDown: boolean;
39
- form: UseFormReturn<any>;
38
+ form: any;
40
39
  t: (key: string) => string;
41
40
  /** When true, tax controls are disabled (e.g., for VIES reverse charge) */
42
41
  taxesDisabled?: boolean;
@@ -216,7 +215,7 @@ export default function DocumentAddItemForm({
216
215
  <FormItem>
217
216
  <FormLabel className="text-muted-foreground text-xs">{t("Section header")}</FormLabel>
218
217
  <FormControl>
219
- <Input placeholder={t("Section title...")} {...field} />
218
+ <Input placeholder={t("Section title...")} {...field} value={field.value ?? ""} />
220
219
  </FormControl>
221
220
  <FormMessage />
222
221
  </FormItem>
@@ -240,7 +239,7 @@ export default function DocumentAddItemForm({
240
239
  render={({ field }) => (
241
240
  <FormItem>
242
241
  <FormControl>
243
- <Textarea placeholder={t("Description")} {...field} />
242
+ <Textarea placeholder={t("Description")} {...field} value={field.value ?? ""} />
244
243
  </FormControl>
245
244
  <FormMessage />
246
245
  </FormItem>
@@ -280,7 +279,7 @@ export default function DocumentAddItemForm({
280
279
  <FormControl>
281
280
  <ItemCombobox
282
281
  entityId={entityId}
283
- value={field.value}
282
+ value={field.value ?? ""}
284
283
  onSelect={handleItemSelect}
285
284
  onCommitInlineName={setInlineItemName}
286
285
  onInlineInputChange={setInlineItemName}
@@ -430,7 +429,7 @@ export default function DocumentAddItemForm({
430
429
  <FormItem className="col-span-1 lg:col-span-2">
431
430
  <FormLabel>{t("Unit")}</FormLabel>
432
431
  <FormControl>
433
- <Input {...field} disabled={lockPortugalSavedItemFields} />
432
+ <Input {...field} value={field.value ?? ""} disabled={lockPortugalSavedItemFields} />
434
433
  </FormControl>
435
434
  <FormMessage />
436
435
  </FormItem>
@@ -542,7 +541,12 @@ export default function DocumentAddItemForm({
542
541
  render={({ field }) => (
543
542
  <FormItem>
544
543
  <FormControl>
545
- <Textarea placeholder={t("Description")} {...field} disabled={lockPortugalSavedItemFields} />
544
+ <Textarea
545
+ placeholder={t("Description")}
546
+ {...field}
547
+ value={field.value ?? ""}
548
+ disabled={lockPortugalSavedItemFields}
549
+ />
546
550
  </FormControl>
547
551
  <FormMessage />
548
552
  </FormItem>
@@ -1,7 +1,6 @@
1
1
  import type { Tax } from "@spaceinvoices/js-sdk";
2
2
  import { Plus, Trash2 } from "lucide-react";
3
3
  import { useEffect } from "react";
4
- import type { Control } from "react-hook-form";
5
4
  import { useFormContext, useWatch } from "react-hook-form";
6
5
  import { Button } from "@/ui/components/ui/button";
7
6
  import { FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/ui/components/ui/form";
@@ -36,7 +35,7 @@ function getCurrentRate(tax: Tax): number {
36
35
  type DocumentAddItemTaxRateFieldProps = {
37
36
  index: number;
38
37
  taxIndex: number;
39
- control: Control<any>;
38
+ control: any;
40
39
  entityId: string;
41
40
  onRemove: () => void;
42
41
  onAddNewTax?: () => void;
@@ -0,0 +1,111 @@
1
+ import { z } from "zod";
2
+ import { normalizeDateOnlyInput } from "../../../lib/date-only";
3
+
4
+ type DocumentDateValues = {
5
+ date?: string | null;
6
+ date_due?: string | null;
7
+ date_valid_till?: string | null;
8
+ date_service?: string | null;
9
+ date_service_to?: string | null;
10
+ };
11
+
12
+ const messages = {
13
+ dateInFuture: "Document date cannot be in the future.",
14
+ serviceDateAfterIssueDate: "Service date cannot be later than the issue date.",
15
+ serviceDateToAfterIssueDate: "Service period end date cannot be later than the issue date.",
16
+ serviceDateToBeforeServiceDate: "Service period end date must be on or after the service start date.",
17
+ dueDateBeforeIssueDate: "Due date must be on or after the issue date.",
18
+ validTillBeforeIssueDate: "Valid until date must be on or after the issue date.",
19
+ } as const;
20
+
21
+ function compareDateOnly(left: string, right: string): number {
22
+ if (left === right) return 0;
23
+ return left < right ? -1 : 1;
24
+ }
25
+
26
+ function getTodayDateOnly(): string {
27
+ return normalizeDateOnlyInput(new Date().toISOString()) ?? "";
28
+ }
29
+
30
+ function addCustomIssue(
31
+ ctx: z.RefinementCtx,
32
+ path: string[],
33
+ message: string,
34
+ condition: boolean,
35
+ ) {
36
+ if (!condition) return;
37
+
38
+ ctx.addIssue({
39
+ code: z.ZodIssueCode.custom,
40
+ path,
41
+ message,
42
+ });
43
+ }
44
+
45
+ function applyBaseDocumentDateRules(value: DocumentDateValues, ctx: z.RefinementCtx) {
46
+ const date = normalizeDateOnlyInput(value.date ?? undefined);
47
+ addCustomIssue(ctx, ["date"], messages.dateInFuture, !!date && compareDateOnly(date, getTodayDateOnly()) > 0);
48
+ }
49
+
50
+ function applyInvoiceLikeServiceDateRules(value: DocumentDateValues, ctx: z.RefinementCtx) {
51
+ const date = normalizeDateOnlyInput(value.date ?? undefined);
52
+ const dateService = normalizeDateOnlyInput(value.date_service ?? undefined);
53
+ const dateServiceTo = normalizeDateOnlyInput(value.date_service_to ?? undefined);
54
+
55
+ addCustomIssue(
56
+ ctx,
57
+ ["date_service"],
58
+ messages.serviceDateAfterIssueDate,
59
+ !!date && !!dateService && compareDateOnly(dateService, date) > 0,
60
+ );
61
+ addCustomIssue(
62
+ ctx,
63
+ ["date_service_to"],
64
+ messages.serviceDateToAfterIssueDate,
65
+ !!date && !!dateServiceTo && compareDateOnly(dateServiceTo, date) > 0,
66
+ );
67
+ addCustomIssue(
68
+ ctx,
69
+ ["date_service_to"],
70
+ messages.serviceDateToBeforeServiceDate,
71
+ !!dateService && !!dateServiceTo && compareDateOnly(dateServiceTo, dateService) < 0,
72
+ );
73
+ }
74
+
75
+ export function withInvoiceIssueDateValidation<T extends z.ZodTypeAny>(schema: T) {
76
+ return schema.superRefine((value, ctx) => {
77
+ const document = value as DocumentDateValues;
78
+ applyBaseDocumentDateRules(document, ctx);
79
+ applyInvoiceLikeServiceDateRules(document, ctx);
80
+
81
+ const date = normalizeDateOnlyInput(document.date ?? undefined);
82
+ const dateDue = normalizeDateOnlyInput(document.date_due ?? undefined);
83
+
84
+ addCustomIssue(ctx, ["date_due"], messages.dueDateBeforeIssueDate, !!date && !!dateDue && compareDateOnly(dateDue, date) < 0);
85
+ });
86
+ }
87
+
88
+ export function withCreditNoteIssueDateValidation<T extends z.ZodTypeAny>(schema: T) {
89
+ return schema.superRefine((value, ctx) => {
90
+ const document = value as DocumentDateValues;
91
+ applyBaseDocumentDateRules(document, ctx);
92
+ applyInvoiceLikeServiceDateRules(document, ctx);
93
+ });
94
+ }
95
+
96
+ export function withEstimateIssueDateValidation<T extends z.ZodTypeAny>(schema: T) {
97
+ return schema.superRefine((value, ctx) => {
98
+ const document = value as DocumentDateValues;
99
+ applyBaseDocumentDateRules(document, ctx);
100
+
101
+ const date = normalizeDateOnlyInput(document.date ?? undefined);
102
+ const validTill = normalizeDateOnlyInput(document.date_valid_till ?? undefined);
103
+
104
+ addCustomIssue(
105
+ ctx,
106
+ ["date_valid_till"],
107
+ messages.validTillBeforeIssueDate,
108
+ !!date && !!validTill && compareDateOnly(validTill, date) < 0,
109
+ );
110
+ });
111
+ }