@spaceinvoices/react-ui 0.4.3 → 0.4.5

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 (263) hide show
  1. package/cli/dist/index.js +1 -1
  2. package/package.json +1 -1
  3. package/src/common/autocomplete.tsx +18 -2
  4. package/src/components/advance-invoices/create/create-advance-invoice-form.tsx +61 -12
  5. package/src/components/advance-invoices/create/locales/de.ts +17 -0
  6. package/src/components/advance-invoices/create/locales/es.ts +17 -0
  7. package/src/components/advance-invoices/create/locales/fr.ts +17 -0
  8. package/src/components/advance-invoices/create/locales/hr.ts +16 -0
  9. package/src/components/advance-invoices/create/locales/it.ts +17 -0
  10. package/src/components/advance-invoices/create/locales/nl.ts +17 -0
  11. package/src/components/advance-invoices/create/locales/pl.ts +16 -0
  12. package/src/components/advance-invoices/create/locales/pt.ts +16 -0
  13. package/src/components/advance-invoices/create/locales/sl.ts +16 -0
  14. package/src/components/advance-invoices/create/prepare-advance-invoice-submission.ts +0 -1
  15. package/src/components/advance-invoices/list/list-row-actions.tsx +48 -1
  16. package/src/components/advance-invoices/list/list-table.tsx +100 -50
  17. package/src/components/advance-invoices/list/locales/de.ts +9 -0
  18. package/src/components/advance-invoices/list/locales/en.ts +7 -0
  19. package/src/components/advance-invoices/list/locales/es.ts +9 -0
  20. package/src/components/advance-invoices/list/locales/fr.ts +9 -0
  21. package/src/components/advance-invoices/list/locales/hr.ts +8 -0
  22. package/src/components/advance-invoices/list/locales/it.ts +9 -0
  23. package/src/components/advance-invoices/list/locales/nl.ts +9 -0
  24. package/src/components/advance-invoices/list/locales/pl.ts +8 -0
  25. package/src/components/advance-invoices/list/locales/pt.ts +9 -0
  26. package/src/components/advance-invoices/list/locales/sl.ts +8 -0
  27. package/src/components/credit-notes/create/create-credit-note-form.tsx +185 -11
  28. package/src/components/credit-notes/create/locales/de.ts +18 -0
  29. package/src/components/credit-notes/create/locales/es.ts +18 -0
  30. package/src/components/credit-notes/create/locales/fr.ts +18 -0
  31. package/src/components/credit-notes/create/locales/hr.ts +17 -0
  32. package/src/components/credit-notes/create/locales/it.ts +18 -0
  33. package/src/components/credit-notes/create/locales/nl.ts +18 -0
  34. package/src/components/credit-notes/create/locales/pl.ts +17 -0
  35. package/src/components/credit-notes/create/locales/pt.ts +17 -0
  36. package/src/components/credit-notes/create/locales/sl.ts +18 -1
  37. package/src/components/credit-notes/credit-notes.hooks.ts +30 -0
  38. package/src/components/credit-notes/list/list-row-actions.tsx +44 -1
  39. package/src/components/credit-notes/list/list-table.tsx +93 -32
  40. package/src/components/credit-notes/list/locales/de.ts +7 -0
  41. package/src/components/credit-notes/list/locales/en.ts +6 -0
  42. package/src/components/credit-notes/list/locales/es.ts +7 -0
  43. package/src/components/credit-notes/list/locales/fr.ts +7 -0
  44. package/src/components/credit-notes/list/locales/hr.ts +7 -0
  45. package/src/components/credit-notes/list/locales/it.ts +7 -0
  46. package/src/components/credit-notes/list/locales/nl.ts +7 -0
  47. package/src/components/credit-notes/list/locales/pl.ts +7 -0
  48. package/src/components/credit-notes/list/locales/pt.ts +7 -0
  49. package/src/components/credit-notes/list/locales/sl.ts +7 -0
  50. package/src/components/customers/customer-list-table/customer-list-table.tsx +0 -3
  51. package/src/components/customers/customer-list-table/locales/de.ts +1 -0
  52. package/src/components/customers/customer-list-table/locales/es.ts +1 -0
  53. package/src/components/customers/customer-list-table/locales/fr.ts +1 -0
  54. package/src/components/customers/customer-list-table/locales/hr.ts +1 -0
  55. package/src/components/customers/customer-list-table/locales/it.ts +1 -0
  56. package/src/components/customers/customer-list-table/locales/nl.ts +1 -0
  57. package/src/components/customers/customer-list-table/locales/pl.ts +1 -0
  58. package/src/components/customers/customer-list-table/locales/pt.ts +1 -0
  59. package/src/components/customers/customer-list-table/locales/sl.ts +1 -0
  60. package/src/components/dashboard/collection-rate-card/use-collection-rate.ts +48 -9
  61. package/src/components/dashboard/revenue-trend-chart/use-revenue-trend.ts +77 -48
  62. package/src/components/dashboard/shared/use-revenue-data.ts +77 -9
  63. package/src/components/delivery-notes/create/create-delivery-note-form.tsx +67 -7
  64. package/src/components/delivery-notes/create/locales/de.ts +16 -0
  65. package/src/components/delivery-notes/create/locales/es.ts +16 -0
  66. package/src/components/delivery-notes/create/locales/fr.ts +16 -0
  67. package/src/components/delivery-notes/create/locales/hr.ts +16 -0
  68. package/src/components/delivery-notes/create/locales/it.ts +16 -0
  69. package/src/components/delivery-notes/create/locales/nl.ts +16 -0
  70. package/src/components/delivery-notes/create/locales/pl.ts +16 -0
  71. package/src/components/delivery-notes/create/locales/pt.ts +16 -0
  72. package/src/components/delivery-notes/create/locales/sl.ts +17 -1
  73. package/src/components/delivery-notes/list/list-row-actions.tsx +20 -1
  74. package/src/components/delivery-notes/list/list-table.tsx +50 -8
  75. package/src/components/delivery-notes/list/locales/de.ts +35 -0
  76. package/src/components/delivery-notes/list/locales/en.ts +33 -0
  77. package/src/components/delivery-notes/list/locales/es.ts +35 -0
  78. package/src/components/delivery-notes/list/locales/fr.ts +35 -0
  79. package/src/components/delivery-notes/list/locales/hr.ts +35 -0
  80. package/src/components/delivery-notes/list/locales/it.ts +35 -0
  81. package/src/components/delivery-notes/list/locales/nl.ts +35 -0
  82. package/src/components/delivery-notes/list/locales/pl.ts +35 -0
  83. package/src/components/delivery-notes/list/locales/pt.ts +35 -0
  84. package/src/components/delivery-notes/list/locales/sl.ts +35 -0
  85. package/src/components/documents/create/document-add-item-form.tsx +70 -0
  86. package/src/components/documents/create/document-details-section.tsx +163 -29
  87. package/src/components/documents/create/document-items-section.tsx +21 -4
  88. package/src/components/documents/create/linked-documents-info.tsx +82 -0
  89. package/src/components/documents/create/live-preview.tsx +25 -5
  90. package/src/components/documents/create/mark-as-paid-section.tsx +29 -20
  91. package/src/components/documents/create/prepare-document-submission.ts +19 -7
  92. package/src/components/documents/shared/document-preview-display.tsx +3 -4
  93. package/src/components/documents/types.ts +2 -2
  94. package/src/components/documents/view/document-actions-bar.tsx +7 -27
  95. package/src/components/documents/view/document-activities-list.tsx +65 -47
  96. package/src/components/documents/view/document-details-card.tsx +118 -76
  97. package/src/components/documents/view/document-payments-list.tsx +99 -65
  98. package/src/components/documents/view/document-relations-list.tsx +43 -28
  99. package/src/components/documents/view/document-sidebar.tsx +151 -0
  100. package/src/components/documents/view/index.ts +2 -0
  101. package/src/components/documents/view/locales/de.ts +4 -0
  102. package/src/components/documents/view/locales/es.ts +4 -0
  103. package/src/components/documents/view/locales/fr.ts +4 -0
  104. package/src/components/documents/view/locales/hr.ts +4 -0
  105. package/src/components/documents/view/locales/it.ts +4 -0
  106. package/src/components/documents/view/locales/nl.ts +4 -0
  107. package/src/components/documents/view/locales/pl.ts +4 -0
  108. package/src/components/documents/view/locales/pt.ts +4 -0
  109. package/src/components/documents/view/locales/sl.ts +5 -1
  110. package/src/components/documents/view/use-document-download.ts +7 -3
  111. package/src/components/entities/create-entity-form.tsx +166 -13
  112. package/src/components/entities/entity-settings-form/entity-settings-form.tsx +101 -1
  113. package/src/components/entities/entity-settings-form/input-with-preview.tsx +30 -2
  114. package/src/components/entities/entity-settings-form/locales/de.ts +10 -0
  115. package/src/components/entities/entity-settings-form/locales/es.ts +10 -0
  116. package/src/components/entities/entity-settings-form/locales/fr.ts +10 -0
  117. package/src/components/entities/entity-settings-form/locales/hr.ts +10 -0
  118. package/src/components/entities/entity-settings-form/locales/it.ts +10 -0
  119. package/src/components/entities/entity-settings-form/locales/nl.ts +10 -0
  120. package/src/components/entities/entity-settings-form/locales/pl.ts +10 -0
  121. package/src/components/entities/entity-settings-form/locales/pt.ts +10 -0
  122. package/src/components/entities/entity-settings-form/locales/sl.ts +10 -0
  123. package/src/components/entities/fina-settings-form/fina-settings-form.tsx +6 -6
  124. package/src/components/entities/fina-settings-form/locales/de.ts +2 -2
  125. package/src/components/entities/fina-settings-form/locales/en.ts +2 -2
  126. package/src/components/entities/fina-settings-form/locales/es.ts +2 -2
  127. package/src/components/entities/fina-settings-form/locales/fr.ts +2 -2
  128. package/src/components/entities/fina-settings-form/locales/hr.ts +2 -2
  129. package/src/components/entities/fina-settings-form/locales/it.ts +2 -2
  130. package/src/components/entities/fina-settings-form/locales/nl.ts +2 -2
  131. package/src/components/entities/fina-settings-form/locales/pl.ts +2 -2
  132. package/src/components/entities/fina-settings-form/locales/pt.ts +2 -2
  133. package/src/components/entities/fina-settings-form/locales/sl.ts +2 -2
  134. package/src/components/entities/furs-settings-form/locales/en.ts +0 -1
  135. package/src/components/entities/settings/company-settings-form.tsx +173 -20
  136. package/src/components/entities/settings/pdf-template-selector/locales/de.ts +3 -1
  137. package/src/components/entities/settings/pdf-template-selector/locales/es.ts +3 -1
  138. package/src/components/entities/settings/pdf-template-selector/locales/fr.ts +4 -1
  139. package/src/components/entities/settings/pdf-template-selector/locales/hr.ts +4 -1
  140. package/src/components/entities/settings/pdf-template-selector/locales/it.ts +3 -1
  141. package/src/components/entities/settings/pdf-template-selector/locales/nl.ts +3 -1
  142. package/src/components/entities/settings/pdf-template-selector/locales/pl.ts +3 -1
  143. package/src/components/entities/settings/pdf-template-selector/locales/pt.ts +3 -1
  144. package/src/components/entities/settings/pdf-template-selector/locales/sl.ts +3 -1
  145. package/src/components/entities/settings/pdf-template-selector/pdf-template-cards.tsx +1 -0
  146. package/src/components/estimates/create/create-estimate-form.tsx +93 -8
  147. package/src/components/estimates/create/locales/de.ts +16 -0
  148. package/src/components/estimates/create/locales/es.ts +16 -0
  149. package/src/components/estimates/create/locales/fr.ts +16 -0
  150. package/src/components/estimates/create/locales/hr.ts +16 -0
  151. package/src/components/estimates/create/locales/it.ts +16 -0
  152. package/src/components/estimates/create/locales/nl.ts +16 -0
  153. package/src/components/estimates/create/locales/pl.ts +16 -0
  154. package/src/components/estimates/create/locales/pt.ts +16 -0
  155. package/src/components/estimates/create/locales/sl.ts +17 -1
  156. package/src/components/estimates/list/list-table.tsx +14 -8
  157. package/src/components/estimates/list/locales/de.ts +2 -0
  158. package/src/components/estimates/list/locales/en.ts +1 -0
  159. package/src/components/estimates/list/locales/es.ts +2 -0
  160. package/src/components/estimates/list/locales/fr.ts +2 -0
  161. package/src/components/estimates/list/locales/hr.ts +2 -0
  162. package/src/components/estimates/list/locales/it.ts +2 -0
  163. package/src/components/estimates/list/locales/nl.ts +2 -0
  164. package/src/components/estimates/list/locales/pl.ts +2 -0
  165. package/src/components/estimates/list/locales/pt.ts +2 -0
  166. package/src/components/estimates/list/locales/sl.ts +2 -0
  167. package/src/components/export/document-export-form.tsx +55 -14
  168. package/src/components/export/index.ts +2 -0
  169. package/src/components/export/sales-per-item-export-form.tsx +223 -0
  170. package/src/components/invoices/create/create-invoice-form.tsx +106 -11
  171. package/src/components/invoices/create/locales/de.ts +26 -0
  172. package/src/components/invoices/create/locales/es.ts +26 -0
  173. package/src/components/invoices/create/locales/fr.ts +26 -0
  174. package/src/components/invoices/create/locales/hr.ts +25 -0
  175. package/src/components/invoices/create/locales/it.ts +26 -0
  176. package/src/components/invoices/create/locales/nl.ts +26 -0
  177. package/src/components/invoices/create/locales/pl.ts +25 -0
  178. package/src/components/invoices/create/locales/pt.ts +25 -0
  179. package/src/components/invoices/create/locales/sl.ts +26 -1
  180. package/src/components/invoices/invoices-furs.hooks.ts +4 -1
  181. package/src/components/invoices/list/list-table.tsx +77 -31
  182. package/src/components/invoices/list/locales/de.ts +5 -0
  183. package/src/components/invoices/list/locales/en.ts +4 -0
  184. package/src/components/invoices/list/locales/es.ts +5 -0
  185. package/src/components/invoices/list/locales/fr.ts +5 -0
  186. package/src/components/invoices/list/locales/hr.ts +5 -0
  187. package/src/components/invoices/list/locales/it.ts +5 -0
  188. package/src/components/invoices/list/locales/nl.ts +5 -0
  189. package/src/components/invoices/list/locales/pl.ts +5 -0
  190. package/src/components/invoices/list/locales/pt.ts +5 -0
  191. package/src/components/invoices/list/locales/sl.ts +5 -0
  192. package/src/components/invoices/view/fiscalization-status-card.tsx +44 -24
  193. package/src/components/items/item-combobox.tsx +5 -3
  194. package/src/components/items/item-list-table/item-list-header.tsx +4 -17
  195. package/src/components/items/item-list-table/item-list-table.tsx +3 -3
  196. package/src/components/items/item-list-table/locales/de.ts +1 -0
  197. package/src/components/items/item-list-table/locales/es.ts +1 -0
  198. package/src/components/items/item-list-table/locales/fr.ts +1 -0
  199. package/src/components/items/item-list-table/locales/hr.ts +1 -0
  200. package/src/components/items/item-list-table/locales/it.ts +1 -0
  201. package/src/components/items/item-list-table/locales/nl.ts +1 -0
  202. package/src/components/items/item-list-table/locales/pl.ts +1 -0
  203. package/src/components/items/item-list-table/locales/pt.ts +1 -0
  204. package/src/components/items/item-list-table/locales/sl.ts +1 -0
  205. package/src/components/payments/list/list-table.tsx +0 -4
  206. package/src/components/payments/list/locales/de.ts +1 -0
  207. package/src/components/payments/list/locales/es.ts +1 -0
  208. package/src/components/payments/list/locales/fr.ts +1 -0
  209. package/src/components/payments/list/locales/hr.ts +1 -0
  210. package/src/components/payments/list/locales/it.ts +1 -0
  211. package/src/components/payments/list/locales/nl.ts +1 -0
  212. package/src/components/payments/list/locales/pl.ts +1 -0
  213. package/src/components/payments/list/locales/pt.ts +1 -0
  214. package/src/components/payments/list/locales/sl.ts +1 -0
  215. package/src/components/recurring-invoices/list/list-table.tsx +0 -7
  216. package/src/components/recurring-invoices/list/locales/de.ts +1 -0
  217. package/src/components/recurring-invoices/list/locales/es.ts +1 -0
  218. package/src/components/recurring-invoices/list/locales/fr.ts +1 -0
  219. package/src/components/recurring-invoices/list/locales/hr.ts +1 -0
  220. package/src/components/recurring-invoices/list/locales/it.ts +1 -0
  221. package/src/components/recurring-invoices/list/locales/nl.ts +1 -0
  222. package/src/components/recurring-invoices/list/locales/pl.ts +1 -0
  223. package/src/components/recurring-invoices/list/locales/pt.ts +1 -0
  224. package/src/components/recurring-invoices/list/locales/sl.ts +1 -0
  225. package/src/components/request-logs/request-log-list-table.tsx +0 -3
  226. package/src/components/table/README.md +14 -121
  227. package/src/components/table/data-table.tsx +22 -37
  228. package/src/components/table/hooks/use-table-state.ts +3 -27
  229. package/src/components/table/index.ts +0 -2
  230. package/src/components/table/search-input.tsx +17 -0
  231. package/src/components/table/selection-toolbar.tsx +35 -1
  232. package/src/components/table/table-empty-state.tsx +6 -3
  233. package/src/components/table/table-no-results.tsx +10 -5
  234. package/src/components/table/types.ts +0 -5
  235. package/src/components/taxes/tax-list-table/locales/de.ts +1 -0
  236. package/src/components/taxes/tax-list-table/locales/es.ts +1 -0
  237. package/src/components/taxes/tax-list-table/locales/fr.ts +1 -0
  238. package/src/components/taxes/tax-list-table/locales/hr.ts +1 -0
  239. package/src/components/taxes/tax-list-table/locales/it.ts +1 -0
  240. package/src/components/taxes/tax-list-table/locales/nl.ts +1 -0
  241. package/src/components/taxes/tax-list-table/locales/pl.ts +1 -0
  242. package/src/components/taxes/tax-list-table/locales/pt.ts +1 -0
  243. package/src/components/taxes/tax-list-table/locales/sl.ts +1 -0
  244. package/src/components/taxes/tax-list-table/tax-list-header.tsx +3 -14
  245. package/src/components/taxes/tax-list-table/tax-list-table.tsx +3 -3
  246. package/src/components/ui/popover.tsx +3 -1
  247. package/src/components/ui/tooltip.tsx +3 -1
  248. package/src/generated/schemas/advanceinvoice.ts +4 -2
  249. package/src/generated/schemas/creditnote.ts +2 -1
  250. package/src/generated/schemas/deliverynote.ts +2 -1
  251. package/src/generated/schemas/estimate.ts +4 -2
  252. package/src/generated/schemas/index.ts +1 -1
  253. package/src/generated/schemas/invoice.ts +2 -1
  254. package/src/generated/schemas/renderadvanceinvoicepreview_body.ts +17 -23
  255. package/src/generated/schemas/rendercreditnotepreview_body.ts +17 -23
  256. package/src/generated/schemas/renderdeliverynotepreview_body.ts +17 -23
  257. package/src/generated/schemas/renderestimatepreview_body.ts +17 -23
  258. package/src/generated/schemas/renderinvoicepreview_body.ts +19 -23
  259. package/src/hooks/use-duplicate-document.ts +56 -14
  260. package/src/hooks/use-vies-check.ts +3 -0
  261. package/src/lib/fiscalization.ts +12 -0
  262. package/src/lib/schemas/advance-invoice.ts +0 -1
  263. package/src/components/table/sortable-header.tsx +0 -56
@@ -1,4 +1,5 @@
1
1
  import type { AdvanceInvoice } from "@spaceinvoices/js-sdk";
2
+ import { AlertTriangle } from "lucide-react";
2
3
  import { useCallback, useMemo, useState } from "react";
3
4
  import { DataTable } from "@/ui/components/table/data-table";
4
5
  import { FormattedDate } from "@/ui/components/table/date-cell";
@@ -13,6 +14,8 @@ import type {
13
14
  } from "@/ui/components/table/types";
14
15
  import { Badge } from "@/ui/components/ui/badge";
15
16
  import { Button } from "@/ui/components/ui/button";
17
+ import { Tooltip, TooltipContent, TooltipTrigger } from "@/ui/components/ui/tooltip";
18
+ import { getFiscalizationFailureType } from "@/ui/lib/fiscalization";
16
19
  import { createTranslation } from "@/ui/lib/translation";
17
20
  import { useSDK } from "@/ui/providers/sdk-provider";
18
21
 
@@ -53,6 +56,12 @@ type AdvanceInvoiceListTableProps = {
53
56
  onDownloadSuccess?: (fileName: string) => void;
54
57
  onDownloadError?: (error: string) => void;
55
58
  onExportSelected?: (documentIds: string[]) => void;
59
+ onCopyToInvoice?: (documentIds: string[]) => void;
60
+ onRetryFiscalization?: (documentIds: string[]) => void;
61
+ fiscalizationFeatures?: ("furs" | "fina")[];
62
+ onCreateNew?: () => void;
63
+ onVoid?: (advanceInvoice: AdvanceInvoice) => void;
64
+ isVoiding?: boolean;
56
65
  } & ListTableProps<AdvanceInvoice>;
57
66
 
58
67
  export default function AdvanceInvoiceListTable({
@@ -67,6 +76,12 @@ export default function AdvanceInvoiceListTable({
67
76
  onDownloadSuccess,
68
77
  onDownloadError,
69
78
  onExportSelected,
79
+ onCopyToInvoice,
80
+ onRetryFiscalization,
81
+ fiscalizationFeatures,
82
+ onCreateNew,
83
+ onVoid,
84
+ isVoiding,
70
85
  ...i18nProps
71
86
  }: AdvanceInvoiceListTableProps) {
72
87
  const t = createTranslation({
@@ -86,9 +101,9 @@ export default function AdvanceInvoiceListTable({
86
101
  limit: params.limit,
87
102
  next_cursor: params.next_cursor,
88
103
  prev_cursor: params.prev_cursor,
89
- order_by: params.order_by,
90
104
  search: params.search,
91
105
  query: params.query,
106
+ include: "document_relations",
92
107
  });
93
108
  return response as unknown as TableQueryResponse<AdvanceInvoice>;
94
109
  }, entityId);
@@ -97,7 +112,6 @@ export default function AdvanceInvoiceListTable({
97
112
  () => ({
98
113
  dateFields: [
99
114
  { id: "date", label: t("Date") },
100
- { id: "date_due", label: t("Date Due") },
101
115
  { id: "created_at", label: t("Created At") },
102
116
  ],
103
117
  statusFilter: true,
@@ -111,20 +125,56 @@ export default function AdvanceInvoiceListTable({
111
125
  }
112
126
  }, [selectedIds, onExportSelected]);
113
127
 
128
+ const handleCopyToInvoice = useCallback(() => {
129
+ if (selectedIds.size > 0 && onCopyToInvoice) {
130
+ onCopyToInvoice(Array.from(selectedIds));
131
+ }
132
+ }, [selectedIds, onCopyToInvoice]);
133
+
114
134
  const handleDeselectAll = useCallback(() => {
115
135
  setSelectedIds(new Set());
116
136
  }, []);
117
137
 
118
138
  const selectionToolbar = useCallback(
119
- (count: number) => (
120
- <SelectionToolbar
121
- selectedCount={count}
122
- onExportPdfs={onExportSelected ? handleExportPdfs : undefined}
123
- onDeselectAll={handleDeselectAll}
124
- t={t}
125
- />
126
- ),
127
- [handleExportPdfs, handleDeselectAll, onExportSelected, t],
139
+ (count: number, data: AdvanceInvoice[]) => {
140
+ const selectedDocs = data.filter((d) => selectedIds.has(d.id));
141
+ const failedDocs = selectedDocs.filter((d) => {
142
+ const failureType = getFiscalizationFailureType(d as any);
143
+ return failureType && fiscalizationFeatures?.includes(failureType);
144
+ });
145
+
146
+ const hasRetry = onRetryFiscalization && fiscalizationFeatures?.length;
147
+ const failedCount = failedDocs.length;
148
+ const allFailed = failedCount > 0 && failedCount === selectedDocs.length;
149
+ const someFailed = failedCount > 0 && failedCount < selectedDocs.length;
150
+ const showRetry = hasRetry && failedCount > 0;
151
+
152
+ return (
153
+ <SelectionToolbar
154
+ selectedCount={count}
155
+ onExportPdfs={onExportSelected ? handleExportPdfs : undefined}
156
+ onCopyToInvoice={onCopyToInvoice ? handleCopyToInvoice : undefined}
157
+ onRetryFiscalization={showRetry ? () => onRetryFiscalization(failedDocs.map((d) => d.id)) : undefined}
158
+ retryFiscalizationDisabled={someFailed && !allFailed}
159
+ retryFiscalizationTooltip={
160
+ someFailed ? t("Some selected documents don't have failed fiscalization") : undefined
161
+ }
162
+ onDeselectAll={handleDeselectAll}
163
+ t={t}
164
+ />
165
+ );
166
+ },
167
+ [
168
+ handleExportPdfs,
169
+ handleCopyToInvoice,
170
+ handleDeselectAll,
171
+ onExportSelected,
172
+ onCopyToInvoice,
173
+ onRetryFiscalization,
174
+ fiscalizationFeatures,
175
+ selectedIds,
176
+ t,
177
+ ],
128
178
  );
129
179
 
130
180
  const columns: Column<AdvanceInvoice>[] = useMemo(
@@ -132,26 +182,39 @@ export default function AdvanceInvoiceListTable({
132
182
  {
133
183
  id: "number",
134
184
  header: t("Number"),
135
- sortable: true,
136
- cell: (advanceInvoice) => (
137
- <div className="flex items-center gap-2">
138
- <Button
139
- variant="link"
140
- className="cursor-pointer py-0 underline"
141
- onClick={() => onRowClick?.(advanceInvoice)}
142
- >
143
- {advanceInvoice.number}
144
- </Button>
145
- {(advanceInvoice as any).is_draft && (
146
- <Badge
147
- variant="outline"
148
- className="border-amber-500 bg-amber-50 text-amber-700 dark:bg-amber-950 dark:text-amber-400"
185
+ cell: (advanceInvoice) => {
186
+ const failureType = getFiscalizationFailureType(advanceInvoice as any);
187
+ const showWarning = failureType && fiscalizationFeatures?.includes(failureType);
188
+ return (
189
+ <div className="flex items-center gap-2">
190
+ <Button
191
+ variant="link"
192
+ className="cursor-pointer py-0 underline"
193
+ onClick={() => onRowClick?.(advanceInvoice)}
149
194
  >
150
- {t("Draft")}
151
- </Badge>
152
- )}
153
- </div>
154
- ),
195
+ {advanceInvoice.number}
196
+ </Button>
197
+ {(advanceInvoice as any).is_draft && (
198
+ <Badge
199
+ variant="outline"
200
+ className="border-amber-500 bg-amber-50 text-amber-700 dark:bg-amber-950 dark:text-amber-400"
201
+ >
202
+ {t("Draft")}
203
+ </Badge>
204
+ )}
205
+ {showWarning && (
206
+ <Tooltip>
207
+ <TooltipTrigger>
208
+ <AlertTriangle className="size-4 text-orange-500" />
209
+ </TooltipTrigger>
210
+ <TooltipContent>
211
+ {t(failureType === "furs" ? "FURS fiscalization failed" : "FINA fiscalization failed")}
212
+ </TooltipContent>
213
+ </Tooltip>
214
+ )}
215
+ </div>
216
+ );
217
+ },
155
218
  },
156
219
  {
157
220
  id: "customer",
@@ -161,26 +224,17 @@ export default function AdvanceInvoiceListTable({
161
224
  {
162
225
  id: "date",
163
226
  header: t("Date"),
164
- sortable: true,
165
227
  cell: (advanceInvoice) => <FormattedDate date={advanceInvoice.date} />,
166
228
  },
167
- {
168
- id: "date_due",
169
- header: t("Date Due"),
170
- sortable: true,
171
- cell: (advanceInvoice) => <FormattedDate date={advanceInvoice.date_due} />,
172
- },
173
229
  {
174
230
  id: "total",
175
231
  header: t("Total"),
176
- sortable: true,
177
232
  align: "right",
178
233
  cell: (advanceInvoice) => advanceInvoice.total,
179
234
  },
180
235
  {
181
236
  id: "total_with_tax",
182
237
  header: t("Total with Tax"),
183
- sortable: true,
184
238
  align: "right",
185
239
  cell: (advanceInvoice) => advanceInvoice.total_with_tax,
186
240
  },
@@ -202,6 +256,8 @@ export default function AdvanceInvoiceListTable({
202
256
  onDownloadStart={onDownloadStart}
203
257
  onDownloadSuccess={onDownloadSuccess}
204
258
  onDownloadError={onDownloadError}
259
+ onVoid={onVoid}
260
+ isVoiding={isVoiding}
205
261
  t={t}
206
262
  locale={i18nProps.locale}
207
263
  />
@@ -217,7 +273,10 @@ export default function AdvanceInvoiceListTable({
217
273
  onDownloadStart,
218
274
  onDownloadSuccess,
219
275
  onDownloadError,
276
+ onVoid,
277
+ isVoiding,
220
278
  i18nProps.locale,
279
+ fiscalizationFeatures,
221
280
  ],
222
281
  );
223
282
 
@@ -228,13 +287,14 @@ export default function AdvanceInvoiceListTable({
228
287
  resourceName="advance_invoice"
229
288
  cacheKey="advance-invoices"
230
289
  createNewLink={entityId ? `/app/${entityId}/documents/add/advance_invoice` : undefined}
290
+ onCreateNew={onCreateNew}
231
291
  onFetch={handleFetch}
232
292
  onChangeParams={onChangeParams}
233
293
  entityId={entityId}
234
294
  filterConfig={filterConfig}
235
295
  t={t}
236
296
  locale={i18nProps.locale}
237
- selectable={!!onExportSelected}
297
+ selectable={!!(onExportSelected || onCopyToInvoice || onRetryFiscalization)}
238
298
  selectedIds={selectedIds}
239
299
  onSelectionChange={setSelectedIds}
240
300
  selectionToolbar={selectionToolbar}
@@ -270,16 +330,6 @@ function AdvanceInvoiceStatusBadge({
270
330
  </Badge>
271
331
  );
272
332
  }
273
- if (advanceInvoice.date_due && new Date(advanceInvoice.date_due) < new Date()) {
274
- return (
275
- <Badge
276
- variant="outline"
277
- className="border-orange-500 bg-orange-50 text-orange-700 dark:bg-orange-950 dark:text-orange-400"
278
- >
279
- {t("Overdue")}
280
- </Badge>
281
- );
282
- }
283
333
  if (advanceInvoice.total_paid > 0) {
284
334
  return (
285
335
  <Badge
@@ -38,8 +38,17 @@ export default {
38
38
  "No results found": "Keine Vorauszahlungsrechnungen gefunden",
39
39
  "Try adjusting your search criteria": "Versuchen Sie, Ihre Suchkriterien anzupassen",
40
40
  "Clear search": "Suche zurücksetzen",
41
+ "Clear all": "Alles zurücksetzen",
41
42
  selected: "ausgewählt",
42
43
  "Export PDFs": "PDFs exportieren",
43
44
  "Deselect all": "Auswahl aufheben",
44
45
  "Partially Paid": "Teilweise bezahlt",
46
+ "FURS fiscalization failed": "FURS fiscalization failed",
47
+ "FINA fiscalization failed": "FINA fiscalization failed",
48
+ "Retry Fiscalization": "Retry Fiscalization",
49
+ "Some selected documents don't have failed fiscalization": "Some selected documents don't have failed fiscalization",
50
+ "Copy to Invoice": "In Rechnung kopieren",
51
+ Void: "Stornieren",
52
+ "Cannot void an advance invoice linked to an invoice":
53
+ "Stornierung einer mit einer Rechnung verknüpften Anzahlungsrechnung nicht möglich",
45
54
  } as const;
@@ -9,4 +9,11 @@ export default {
9
9
  "Export PDFs": "Export PDFs",
10
10
  "Deselect all": "Deselect all",
11
11
  "Partially Paid": "Partially Paid",
12
+ "FURS fiscalization failed": "FURS fiscalization failed",
13
+ "FINA fiscalization failed": "FINA fiscalization failed",
14
+ "Retry Fiscalization": "Retry Fiscalization",
15
+ "Some selected documents don't have failed fiscalization": "Some selected documents don't have failed fiscalization",
16
+ "Copy to Invoice": "Copy to Invoice",
17
+ Void: "Void",
18
+ "Cannot void an advance invoice linked to an invoice": "Cannot void an advance invoice linked to an invoice",
12
19
  } as const;
@@ -38,8 +38,17 @@ export default {
38
38
  "No results found": "No se encontraron facturas anticipadas",
39
39
  "Try adjusting your search criteria": "Intente ajustar sus criterios de busqueda",
40
40
  "Clear search": "Limpiar busqueda",
41
+ "Clear all": "Borrar todo",
41
42
  selected: "seleccionados",
42
43
  "Export PDFs": "Exportar PDFs",
43
44
  "Deselect all": "Deseleccionar todo",
44
45
  "Partially Paid": "Parcialmente pagado",
46
+ "FURS fiscalization failed": "FURS fiscalization failed",
47
+ "FINA fiscalization failed": "FINA fiscalization failed",
48
+ "Retry Fiscalization": "Retry Fiscalization",
49
+ "Some selected documents don't have failed fiscalization": "Some selected documents don't have failed fiscalization",
50
+ "Copy to Invoice": "Copiar a factura",
51
+ Void: "Anular",
52
+ "Cannot void an advance invoice linked to an invoice":
53
+ "No se puede anular una factura anticipada vinculada a una factura",
45
54
  } as const;
@@ -38,8 +38,17 @@ export default {
38
38
  "No results found": "Aucune facture d'acompte trouvee",
39
39
  "Try adjusting your search criteria": "Essayez de modifier vos criteres de recherche",
40
40
  "Clear search": "Effacer la recherche",
41
+ "Clear all": "Tout effacer",
41
42
  selected: "sélectionnés",
42
43
  "Export PDFs": "Exporter les PDF",
43
44
  "Deselect all": "Tout désélectionner",
44
45
  "Partially Paid": "Partiellement payé",
46
+ "FURS fiscalization failed": "FURS fiscalization failed",
47
+ "FINA fiscalization failed": "FINA fiscalization failed",
48
+ "Retry Fiscalization": "Retry Fiscalization",
49
+ "Some selected documents don't have failed fiscalization": "Some selected documents don't have failed fiscalization",
50
+ "Copy to Invoice": "Copier vers facture",
51
+ Void: "Annuler",
52
+ "Cannot void an advance invoice linked to an invoice":
53
+ "Impossible d'annuler une facture d'acompte liée à une facture",
45
54
  } as const;
@@ -38,8 +38,16 @@ export default {
38
38
  "No results found": "Nije pronadjen nijedan avansni racun",
39
39
  "Try adjusting your search criteria": "Pokusajte prilagoditi kriterije pretrazivanja",
40
40
  "Clear search": "Ocisti pretragu",
41
+ "Clear all": "Očisti sve",
41
42
  selected: "odabranih",
42
43
  "Export PDFs": "Izvezi PDF-ove",
43
44
  "Deselect all": "Poništi odabir",
44
45
  "Partially Paid": "Djelomično plaćeno",
46
+ "FURS fiscalization failed": "FURS fiskalizacija nije uspjela",
47
+ "FINA fiscalization failed": "FINA fiskalizacija nije uspjela",
48
+ "Retry Fiscalization": "Ponovi fiskalizaciju",
49
+ "Some selected documents don't have failed fiscalization": "Neki odabrani dokumenti nemaju neuspjelu fiskalizaciju",
50
+ "Copy to Invoice": "Kopiraj u račun",
51
+ Void: "Storniraj",
52
+ "Cannot void an advance invoice linked to an invoice": "Nije moguće poništiti avansni račun povezan s računom",
45
53
  } as const;
@@ -38,8 +38,17 @@ export default {
38
38
  "No results found": "Nessuna fattura anticipata trovata",
39
39
  "Try adjusting your search criteria": "Prova a modificare i criteri di ricerca",
40
40
  "Clear search": "Cancella ricerca",
41
+ "Clear all": "Cancella tutto",
41
42
  selected: "selezionati",
42
43
  "Export PDFs": "Esporta PDF",
43
44
  "Deselect all": "Deseleziona tutto",
44
45
  "Partially Paid": "Parzialmente pagato",
46
+ "FURS fiscalization failed": "FURS fiscalization failed",
47
+ "FINA fiscalization failed": "FINA fiscalization failed",
48
+ "Retry Fiscalization": "Retry Fiscalization",
49
+ "Some selected documents don't have failed fiscalization": "Some selected documents don't have failed fiscalization",
50
+ "Copy to Invoice": "Copia in fattura",
51
+ Void: "Annulla",
52
+ "Cannot void an advance invoice linked to an invoice":
53
+ "Impossibile annullare una fattura anticipata collegata a una fattura",
45
54
  } as const;
@@ -38,8 +38,17 @@ export default {
38
38
  "No results found": "Geen voorschotfacturen gevonden",
39
39
  "Try adjusting your search criteria": "Probeer uw zoekcriteria aan te passen",
40
40
  "Clear search": "Zoekopdracht wissen",
41
+ "Clear all": "Alles wissen",
41
42
  selected: "geselecteerd",
42
43
  "Export PDFs": "PDFs exporteren",
43
44
  "Deselect all": "Alles deselecteren",
44
45
  "Partially Paid": "Gedeeltelijk betaald",
46
+ "FURS fiscalization failed": "FURS fiscalization failed",
47
+ "FINA fiscalization failed": "FINA fiscalization failed",
48
+ "Retry Fiscalization": "Retry Fiscalization",
49
+ "Some selected documents don't have failed fiscalization": "Some selected documents don't have failed fiscalization",
50
+ "Copy to Invoice": "Kopieer naar factuur",
51
+ Void: "Nietig verklaren",
52
+ "Cannot void an advance invoice linked to an invoice":
53
+ "Kan een voorschotfactuur gekoppeld aan een factuur niet ongeldig maken",
45
54
  } as const;
@@ -38,8 +38,16 @@ export default {
38
38
  "No results found": "Nie znaleziono faktur zaliczkowych",
39
39
  "Try adjusting your search criteria": "Sprobuj dostosowac kryteria wyszukiwania",
40
40
  "Clear search": "Wyczysc wyszukiwanie",
41
+ "Clear all": "Wyczyść wszystko",
41
42
  selected: "wybranych",
42
43
  "Export PDFs": "Eksportuj PDF-y",
43
44
  "Deselect all": "Odznacz wszystko",
44
45
  "Partially Paid": "Częściowo opłacona",
46
+ "FURS fiscalization failed": "FURS fiscalization failed",
47
+ "FINA fiscalization failed": "FINA fiscalization failed",
48
+ "Retry Fiscalization": "Retry Fiscalization",
49
+ "Some selected documents don't have failed fiscalization": "Some selected documents don't have failed fiscalization",
50
+ "Copy to Invoice": "Kopiuj do faktury",
51
+ Void: "Anuluj",
52
+ "Cannot void an advance invoice linked to an invoice": "Nie można anulować faktury zaliczkowej powiązanej z fakturą",
45
53
  } as const;
@@ -38,8 +38,17 @@ export default {
38
38
  "No results found": "Nenhuma fatura antecipada encontrada",
39
39
  "Try adjusting your search criteria": "Tente ajustar os seus criterios de pesquisa",
40
40
  "Clear search": "Limpar pesquisa",
41
+ "Clear all": "Limpar tudo",
41
42
  selected: "selecionados",
42
43
  "Export PDFs": "Exportar PDFs",
43
44
  "Deselect all": "Desselecionar tudo",
44
45
  "Partially Paid": "Parcialmente pago",
46
+ "FURS fiscalization failed": "FURS fiscalization failed",
47
+ "FINA fiscalization failed": "FINA fiscalization failed",
48
+ "Retry Fiscalization": "Retry Fiscalization",
49
+ "Some selected documents don't have failed fiscalization": "Some selected documents don't have failed fiscalization",
50
+ "Copy to Invoice": "Copiar para fatura",
51
+ Void: "Anular",
52
+ "Cannot void an advance invoice linked to an invoice":
53
+ "Não é possível anular uma fatura antecipada vinculada a uma fatura",
45
54
  } as const;
@@ -38,8 +38,16 @@ export default {
38
38
  "No results found": "Ni najdenih avansnih računov",
39
39
  "Try adjusting your search criteria": "Poskusite prilagoditi iskalne kriterije",
40
40
  "Clear search": "Počisti iskanje",
41
+ "Clear all": "Počisti vse",
41
42
  selected: "izbranih",
42
43
  "Export PDFs": "Izvozi PDF-je",
43
44
  "Deselect all": "Počisti izbiro",
44
45
  "Partially Paid": "Delno plačano",
46
+ "FURS fiscalization failed": "FURS davčno potrjevanje ni uspelo",
47
+ "FINA fiscalization failed": "FINA fiskalizacija ni uspela",
48
+ "Retry Fiscalization": "Ponovi fiskalizacijo",
49
+ "Some selected documents don't have failed fiscalization": "Nekateri izbrani dokumenti nimajo neuspele fiskalizacije",
50
+ "Copy to Invoice": "Kopiraj v račun",
51
+ Void: "Storniraj",
52
+ "Cannot void an advance invoice linked to an invoice": "Ni mogoče razveljaviti predračuna, ki je povezan z računom",
45
53
  } as const;