@spaceinvoices/react-ui 0.4.3 → 0.4.4
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.
- package/cli/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/common/autocomplete.tsx +18 -2
- package/src/components/advance-invoices/create/create-advance-invoice-form.tsx +0 -1
- package/src/components/advance-invoices/create/locales/de.ts +2 -0
- package/src/components/advance-invoices/create/locales/es.ts +2 -0
- package/src/components/advance-invoices/create/locales/fr.ts +2 -0
- package/src/components/advance-invoices/create/locales/hr.ts +1 -0
- package/src/components/advance-invoices/create/locales/it.ts +2 -0
- package/src/components/advance-invoices/create/locales/nl.ts +2 -0
- package/src/components/advance-invoices/create/locales/pl.ts +1 -0
- package/src/components/advance-invoices/create/locales/pt.ts +1 -0
- package/src/components/advance-invoices/create/locales/sl.ts +1 -0
- package/src/components/advance-invoices/create/prepare-advance-invoice-submission.ts +0 -1
- package/src/components/advance-invoices/list/list-table.tsx +80 -50
- package/src/components/advance-invoices/list/locales/de.ts +5 -0
- package/src/components/advance-invoices/list/locales/en.ts +4 -0
- package/src/components/advance-invoices/list/locales/es.ts +5 -0
- package/src/components/advance-invoices/list/locales/fr.ts +5 -0
- package/src/components/advance-invoices/list/locales/hr.ts +5 -0
- package/src/components/advance-invoices/list/locales/it.ts +5 -0
- package/src/components/advance-invoices/list/locales/nl.ts +5 -0
- package/src/components/advance-invoices/list/locales/pl.ts +5 -0
- package/src/components/advance-invoices/list/locales/pt.ts +5 -0
- package/src/components/advance-invoices/list/locales/sl.ts +5 -0
- package/src/components/credit-notes/create/create-credit-note-form.tsx +114 -3
- package/src/components/credit-notes/create/locales/de.ts +2 -0
- package/src/components/credit-notes/create/locales/es.ts +2 -0
- package/src/components/credit-notes/create/locales/fr.ts +2 -0
- package/src/components/credit-notes/create/locales/hr.ts +1 -0
- package/src/components/credit-notes/create/locales/it.ts +2 -0
- package/src/components/credit-notes/create/locales/nl.ts +2 -0
- package/src/components/credit-notes/create/locales/pl.ts +1 -0
- package/src/components/credit-notes/create/locales/pt.ts +1 -0
- package/src/components/credit-notes/create/locales/sl.ts +1 -0
- package/src/components/credit-notes/credit-notes.hooks.ts +30 -0
- package/src/components/credit-notes/list/list-table.tsx +77 -30
- package/src/components/credit-notes/list/locales/de.ts +5 -0
- package/src/components/credit-notes/list/locales/en.ts +4 -0
- package/src/components/credit-notes/list/locales/es.ts +5 -0
- package/src/components/credit-notes/list/locales/fr.ts +5 -0
- package/src/components/credit-notes/list/locales/hr.ts +5 -0
- package/src/components/credit-notes/list/locales/it.ts +5 -0
- package/src/components/credit-notes/list/locales/nl.ts +5 -0
- package/src/components/credit-notes/list/locales/pl.ts +5 -0
- package/src/components/credit-notes/list/locales/pt.ts +5 -0
- package/src/components/credit-notes/list/locales/sl.ts +5 -0
- package/src/components/customers/customer-list-table/customer-list-table.tsx +0 -3
- package/src/components/customers/customer-list-table/locales/de.ts +1 -0
- package/src/components/customers/customer-list-table/locales/es.ts +1 -0
- package/src/components/customers/customer-list-table/locales/fr.ts +1 -0
- package/src/components/customers/customer-list-table/locales/hr.ts +1 -0
- package/src/components/customers/customer-list-table/locales/it.ts +1 -0
- package/src/components/customers/customer-list-table/locales/nl.ts +1 -0
- package/src/components/customers/customer-list-table/locales/pl.ts +1 -0
- package/src/components/customers/customer-list-table/locales/pt.ts +1 -0
- package/src/components/customers/customer-list-table/locales/sl.ts +1 -0
- package/src/components/delivery-notes/list/list-row-actions.tsx +20 -1
- package/src/components/delivery-notes/list/list-table.tsx +41 -8
- package/src/components/delivery-notes/list/locales/de.ts +4 -0
- package/src/components/delivery-notes/list/locales/en.ts +2 -0
- package/src/components/delivery-notes/list/locales/es.ts +4 -0
- package/src/components/delivery-notes/list/locales/fr.ts +4 -0
- package/src/components/delivery-notes/list/locales/hr.ts +4 -0
- package/src/components/delivery-notes/list/locales/it.ts +4 -0
- package/src/components/delivery-notes/list/locales/nl.ts +4 -0
- package/src/components/delivery-notes/list/locales/pl.ts +4 -0
- package/src/components/delivery-notes/list/locales/pt.ts +4 -0
- package/src/components/delivery-notes/list/locales/sl.ts +4 -0
- package/src/components/documents/create/document-details-section.tsx +41 -27
- package/src/components/documents/create/linked-documents-info.tsx +82 -0
- package/src/components/documents/create/live-preview.tsx +1 -1
- package/src/components/documents/types.ts +2 -2
- package/src/components/documents/view/document-activities-list.tsx +65 -47
- package/src/components/documents/view/document-details-card.tsx +99 -74
- package/src/components/documents/view/document-payments-list.tsx +99 -65
- package/src/components/documents/view/document-relations-list.tsx +43 -28
- package/src/components/documents/view/document-sidebar.tsx +151 -0
- package/src/components/documents/view/index.ts +2 -0
- package/src/components/documents/view/locales/de.ts +2 -0
- package/src/components/documents/view/locales/es.ts +2 -0
- package/src/components/documents/view/locales/fr.ts +2 -0
- package/src/components/documents/view/locales/hr.ts +2 -0
- package/src/components/documents/view/locales/it.ts +2 -0
- package/src/components/documents/view/locales/nl.ts +2 -0
- package/src/components/documents/view/locales/pl.ts +2 -0
- package/src/components/documents/view/locales/pt.ts +2 -0
- package/src/components/documents/view/locales/sl.ts +2 -0
- package/src/components/documents/view/use-document-download.ts +3 -2
- package/src/components/entities/create-entity-form.tsx +165 -13
- package/src/components/entities/entity-settings-form/entity-settings-form.tsx +101 -1
- package/src/components/entities/entity-settings-form/locales/de.ts +9 -0
- package/src/components/entities/entity-settings-form/locales/es.ts +9 -0
- package/src/components/entities/entity-settings-form/locales/fr.ts +9 -0
- package/src/components/entities/entity-settings-form/locales/hr.ts +9 -0
- package/src/components/entities/entity-settings-form/locales/it.ts +9 -0
- package/src/components/entities/entity-settings-form/locales/nl.ts +9 -0
- package/src/components/entities/entity-settings-form/locales/pl.ts +9 -0
- package/src/components/entities/entity-settings-form/locales/pt.ts +9 -0
- package/src/components/entities/entity-settings-form/locales/sl.ts +9 -0
- package/src/components/entities/fina-settings-form/fina-settings-form.tsx +6 -6
- package/src/components/entities/fina-settings-form/locales/de.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/en.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/es.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/fr.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/hr.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/it.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/nl.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/pl.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/pt.ts +2 -2
- package/src/components/entities/fina-settings-form/locales/sl.ts +2 -2
- package/src/components/entities/furs-settings-form/locales/en.ts +0 -1
- package/src/components/entities/settings/pdf-template-selector/locales/de.ts +3 -1
- package/src/components/entities/settings/pdf-template-selector/locales/es.ts +3 -1
- package/src/components/entities/settings/pdf-template-selector/locales/fr.ts +4 -1
- package/src/components/entities/settings/pdf-template-selector/locales/hr.ts +4 -1
- package/src/components/entities/settings/pdf-template-selector/locales/it.ts +3 -1
- package/src/components/entities/settings/pdf-template-selector/locales/nl.ts +3 -1
- package/src/components/entities/settings/pdf-template-selector/locales/pl.ts +3 -1
- package/src/components/entities/settings/pdf-template-selector/locales/pt.ts +3 -1
- package/src/components/entities/settings/pdf-template-selector/locales/sl.ts +3 -1
- package/src/components/entities/settings/pdf-template-selector/pdf-template-cards.tsx +1 -0
- package/src/components/estimates/create/create-estimate-form.tsx +29 -2
- package/src/components/estimates/list/list-table.tsx +3 -6
- package/src/components/estimates/list/locales/de.ts +1 -0
- package/src/components/estimates/list/locales/es.ts +1 -0
- package/src/components/estimates/list/locales/fr.ts +1 -0
- package/src/components/estimates/list/locales/hr.ts +1 -0
- package/src/components/estimates/list/locales/it.ts +1 -0
- package/src/components/estimates/list/locales/nl.ts +1 -0
- package/src/components/estimates/list/locales/pl.ts +1 -0
- package/src/components/estimates/list/locales/pt.ts +1 -0
- package/src/components/estimates/list/locales/sl.ts +1 -0
- package/src/components/export/document-export-form.tsx +9 -2
- package/src/components/export/index.ts +2 -0
- package/src/components/export/sales-per-item-export-form.tsx +223 -0
- package/src/components/invoices/create/create-invoice-form.tsx +48 -1
- package/src/components/invoices/create/locales/de.ts +11 -0
- package/src/components/invoices/create/locales/es.ts +11 -0
- package/src/components/invoices/create/locales/fr.ts +11 -0
- package/src/components/invoices/create/locales/hr.ts +10 -0
- package/src/components/invoices/create/locales/it.ts +11 -0
- package/src/components/invoices/create/locales/nl.ts +11 -0
- package/src/components/invoices/create/locales/pl.ts +10 -0
- package/src/components/invoices/create/locales/pt.ts +10 -0
- package/src/components/invoices/create/locales/sl.ts +10 -0
- package/src/components/invoices/invoices-furs.hooks.ts +4 -1
- package/src/components/invoices/list/list-table.tsx +77 -31
- package/src/components/invoices/list/locales/de.ts +5 -0
- package/src/components/invoices/list/locales/en.ts +4 -0
- package/src/components/invoices/list/locales/es.ts +5 -0
- package/src/components/invoices/list/locales/fr.ts +5 -0
- package/src/components/invoices/list/locales/hr.ts +5 -0
- package/src/components/invoices/list/locales/it.ts +5 -0
- package/src/components/invoices/list/locales/nl.ts +5 -0
- package/src/components/invoices/list/locales/pl.ts +5 -0
- package/src/components/invoices/list/locales/pt.ts +5 -0
- package/src/components/invoices/list/locales/sl.ts +5 -0
- package/src/components/invoices/view/fiscalization-status-card.tsx +42 -24
- package/src/components/items/item-combobox.tsx +5 -3
- package/src/components/items/item-list-table/item-list-header.tsx +4 -17
- package/src/components/items/item-list-table/item-list-table.tsx +3 -3
- package/src/components/items/item-list-table/locales/de.ts +1 -0
- package/src/components/items/item-list-table/locales/es.ts +1 -0
- package/src/components/items/item-list-table/locales/fr.ts +1 -0
- package/src/components/items/item-list-table/locales/hr.ts +1 -0
- package/src/components/items/item-list-table/locales/it.ts +1 -0
- package/src/components/items/item-list-table/locales/nl.ts +1 -0
- package/src/components/items/item-list-table/locales/pl.ts +1 -0
- package/src/components/items/item-list-table/locales/pt.ts +1 -0
- package/src/components/items/item-list-table/locales/sl.ts +1 -0
- package/src/components/payments/list/list-table.tsx +0 -4
- package/src/components/payments/list/locales/de.ts +1 -0
- package/src/components/payments/list/locales/es.ts +1 -0
- package/src/components/payments/list/locales/fr.ts +1 -0
- package/src/components/payments/list/locales/hr.ts +1 -0
- package/src/components/payments/list/locales/it.ts +1 -0
- package/src/components/payments/list/locales/nl.ts +1 -0
- package/src/components/payments/list/locales/pl.ts +1 -0
- package/src/components/payments/list/locales/pt.ts +1 -0
- package/src/components/payments/list/locales/sl.ts +1 -0
- package/src/components/recurring-invoices/list/list-table.tsx +0 -7
- package/src/components/recurring-invoices/list/locales/de.ts +1 -0
- package/src/components/recurring-invoices/list/locales/es.ts +1 -0
- package/src/components/recurring-invoices/list/locales/fr.ts +1 -0
- package/src/components/recurring-invoices/list/locales/hr.ts +1 -0
- package/src/components/recurring-invoices/list/locales/it.ts +1 -0
- package/src/components/recurring-invoices/list/locales/nl.ts +1 -0
- package/src/components/recurring-invoices/list/locales/pl.ts +1 -0
- package/src/components/recurring-invoices/list/locales/pt.ts +1 -0
- package/src/components/recurring-invoices/list/locales/sl.ts +1 -0
- package/src/components/request-logs/request-log-list-table.tsx +0 -3
- package/src/components/table/README.md +14 -121
- package/src/components/table/data-table.tsx +22 -37
- package/src/components/table/hooks/use-table-state.ts +3 -27
- package/src/components/table/index.ts +0 -2
- package/src/components/table/selection-toolbar.tsx +35 -1
- package/src/components/table/table-empty-state.tsx +6 -3
- package/src/components/table/table-no-results.tsx +10 -5
- package/src/components/table/types.ts +0 -5
- package/src/components/taxes/tax-list-table/locales/de.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/es.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/fr.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/hr.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/it.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/nl.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/pl.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/pt.ts +1 -0
- package/src/components/taxes/tax-list-table/locales/sl.ts +1 -0
- package/src/components/taxes/tax-list-table/tax-list-header.tsx +3 -14
- package/src/components/taxes/tax-list-table/tax-list-table.tsx +3 -3
- package/src/components/ui/popover.tsx +3 -1
- package/src/components/ui/tooltip.tsx +3 -1
- package/src/generated/schemas/index.ts +1 -1
- package/src/hooks/use-duplicate-document.ts +40 -5
- package/src/lib/fiscalization.ts +12 -0
- package/src/lib/schemas/advance-invoice.ts +0 -1
- package/src/components/table/sortable-header.tsx +0 -56
package/cli/dist/index.js
CHANGED
|
@@ -870,7 +870,7 @@ async function list(options = {}) {
|
|
|
870
870
|
|
|
871
871
|
// cli/src/index.ts
|
|
872
872
|
var program = new Command();
|
|
873
|
-
program.name("spaceinvoices-ui").description("CLI for adding Space Invoices React UI components to your project").version("0.4.
|
|
873
|
+
program.name("spaceinvoices-ui").description("CLI for adding Space Invoices React UI components to your project").version("0.4.4");
|
|
874
874
|
program.option("--local <path>", "Use local registry from specified path (for development)");
|
|
875
875
|
program.command("init").description("Initialize Space Invoices UI in your project").option("-y, --yes", "Skip prompts and use defaults").option("-f, --force", "Overwrite existing configuration").option("--cwd <path>", "Working directory (defaults to current directory)").action(async (options) => {
|
|
876
876
|
const globalOpts = program.opts();
|
package/package.json
CHANGED
|
@@ -51,12 +51,21 @@ export function Autocomplete({
|
|
|
51
51
|
setInternalSearchValue(value);
|
|
52
52
|
onSearch?.(value);
|
|
53
53
|
|
|
54
|
-
// Open popover when user starts typing
|
|
55
|
-
if (!open) {
|
|
54
|
+
// Open popover when user starts typing (only if there are options)
|
|
55
|
+
if (!open && options.length > 0) {
|
|
56
56
|
setOpen(true);
|
|
57
57
|
}
|
|
58
58
|
};
|
|
59
59
|
|
|
60
|
+
// Close popover when options become empty, open when they appear
|
|
61
|
+
React.useEffect(() => {
|
|
62
|
+
if (options.length === 0) {
|
|
63
|
+
setOpen(false);
|
|
64
|
+
} else if (document.activeElement === inputRef.current && searchValue) {
|
|
65
|
+
setOpen(true);
|
|
66
|
+
}
|
|
67
|
+
}, [options.length, searchValue]);
|
|
68
|
+
|
|
60
69
|
const handleSelect = (selectedValue: string) => {
|
|
61
70
|
onValueChange?.(selectedValue);
|
|
62
71
|
setOpen(false);
|
|
@@ -81,6 +90,12 @@ export function Autocomplete({
|
|
|
81
90
|
onBlurProp?.(e); // Call the passed onBlur prop after internal logic
|
|
82
91
|
};
|
|
83
92
|
|
|
93
|
+
const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
|
|
94
|
+
if (e.key === "Enter" && open) {
|
|
95
|
+
e.preventDefault();
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
84
99
|
// Handle popover open/close - prevent closing when input is focused
|
|
85
100
|
const handleOpenChange = (newOpen: boolean) => {
|
|
86
101
|
if (!newOpen && document.activeElement === inputRef.current) {
|
|
@@ -98,6 +113,7 @@ export function Autocomplete({
|
|
|
98
113
|
onChange={handleInputChange}
|
|
99
114
|
onFocus={handleInputFocus}
|
|
100
115
|
onBlur={handleInputBlur}
|
|
116
|
+
onKeyDown={handleKeyDown}
|
|
101
117
|
placeholder={placeholder}
|
|
102
118
|
className={className}
|
|
103
119
|
disabled={disabled}
|
|
@@ -52,7 +52,6 @@ export function prepareAdvanceInvoiceSubmission(
|
|
|
52
52
|
markAsPaid: options.markAsPaid,
|
|
53
53
|
paymentTypes: options.paymentTypes,
|
|
54
54
|
documentType: "advance_invoice",
|
|
55
|
-
secondaryDate: values.date_due ?? undefined,
|
|
56
55
|
priceModes: options.priceModes,
|
|
57
56
|
isDraft: options.isDraft,
|
|
58
57
|
}) as CreateAdvanceInvoiceRequest;
|
|
@@ -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,9 @@ type AdvanceInvoiceListTableProps = {
|
|
|
53
56
|
onDownloadSuccess?: (fileName: string) => void;
|
|
54
57
|
onDownloadError?: (error: string) => void;
|
|
55
58
|
onExportSelected?: (documentIds: string[]) => void;
|
|
59
|
+
onRetryFiscalization?: (documentIds: string[]) => void;
|
|
60
|
+
fiscalizationFeatures?: ("furs" | "fina")[];
|
|
61
|
+
onCreateNew?: () => void;
|
|
56
62
|
} & ListTableProps<AdvanceInvoice>;
|
|
57
63
|
|
|
58
64
|
export default function AdvanceInvoiceListTable({
|
|
@@ -67,6 +73,9 @@ export default function AdvanceInvoiceListTable({
|
|
|
67
73
|
onDownloadSuccess,
|
|
68
74
|
onDownloadError,
|
|
69
75
|
onExportSelected,
|
|
76
|
+
onRetryFiscalization,
|
|
77
|
+
fiscalizationFeatures,
|
|
78
|
+
onCreateNew,
|
|
70
79
|
...i18nProps
|
|
71
80
|
}: AdvanceInvoiceListTableProps) {
|
|
72
81
|
const t = createTranslation({
|
|
@@ -86,7 +95,6 @@ export default function AdvanceInvoiceListTable({
|
|
|
86
95
|
limit: params.limit,
|
|
87
96
|
next_cursor: params.next_cursor,
|
|
88
97
|
prev_cursor: params.prev_cursor,
|
|
89
|
-
order_by: params.order_by,
|
|
90
98
|
search: params.search,
|
|
91
99
|
query: params.query,
|
|
92
100
|
});
|
|
@@ -97,7 +105,6 @@ export default function AdvanceInvoiceListTable({
|
|
|
97
105
|
() => ({
|
|
98
106
|
dateFields: [
|
|
99
107
|
{ id: "date", label: t("Date") },
|
|
100
|
-
{ id: "date_due", label: t("Date Due") },
|
|
101
108
|
{ id: "created_at", label: t("Created At") },
|
|
102
109
|
],
|
|
103
110
|
statusFilter: true,
|
|
@@ -116,15 +123,42 @@ export default function AdvanceInvoiceListTable({
|
|
|
116
123
|
}, []);
|
|
117
124
|
|
|
118
125
|
const selectionToolbar = useCallback(
|
|
119
|
-
(count: number) =>
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
126
|
+
(count: number, data: AdvanceInvoice[]) => {
|
|
127
|
+
const selectedDocs = data.filter((d) => selectedIds.has(d.id));
|
|
128
|
+
const failedDocs = selectedDocs.filter((d) => {
|
|
129
|
+
const failureType = getFiscalizationFailureType(d as any);
|
|
130
|
+
return failureType && fiscalizationFeatures?.includes(failureType);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
const hasRetry = onRetryFiscalization && fiscalizationFeatures?.length;
|
|
134
|
+
const failedCount = failedDocs.length;
|
|
135
|
+
const allFailed = failedCount > 0 && failedCount === selectedDocs.length;
|
|
136
|
+
const someFailed = failedCount > 0 && failedCount < selectedDocs.length;
|
|
137
|
+
const showRetry = hasRetry && failedCount > 0;
|
|
138
|
+
|
|
139
|
+
return (
|
|
140
|
+
<SelectionToolbar
|
|
141
|
+
selectedCount={count}
|
|
142
|
+
onExportPdfs={onExportSelected ? handleExportPdfs : undefined}
|
|
143
|
+
onRetryFiscalization={showRetry ? () => onRetryFiscalization(failedDocs.map((d) => d.id)) : undefined}
|
|
144
|
+
retryFiscalizationDisabled={someFailed && !allFailed}
|
|
145
|
+
retryFiscalizationTooltip={
|
|
146
|
+
someFailed ? t("Some selected documents don't have failed fiscalization") : undefined
|
|
147
|
+
}
|
|
148
|
+
onDeselectAll={handleDeselectAll}
|
|
149
|
+
t={t}
|
|
150
|
+
/>
|
|
151
|
+
);
|
|
152
|
+
},
|
|
153
|
+
[
|
|
154
|
+
handleExportPdfs,
|
|
155
|
+
handleDeselectAll,
|
|
156
|
+
onExportSelected,
|
|
157
|
+
onRetryFiscalization,
|
|
158
|
+
fiscalizationFeatures,
|
|
159
|
+
selectedIds,
|
|
160
|
+
t,
|
|
161
|
+
],
|
|
128
162
|
);
|
|
129
163
|
|
|
130
164
|
const columns: Column<AdvanceInvoice>[] = useMemo(
|
|
@@ -132,26 +166,39 @@ export default function AdvanceInvoiceListTable({
|
|
|
132
166
|
{
|
|
133
167
|
id: "number",
|
|
134
168
|
header: t("Number"),
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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"
|
|
169
|
+
cell: (advanceInvoice) => {
|
|
170
|
+
const failureType = getFiscalizationFailureType(advanceInvoice as any);
|
|
171
|
+
const showWarning = failureType && fiscalizationFeatures?.includes(failureType);
|
|
172
|
+
return (
|
|
173
|
+
<div className="flex items-center gap-2">
|
|
174
|
+
<Button
|
|
175
|
+
variant="link"
|
|
176
|
+
className="cursor-pointer py-0 underline"
|
|
177
|
+
onClick={() => onRowClick?.(advanceInvoice)}
|
|
149
178
|
>
|
|
150
|
-
{
|
|
151
|
-
</
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
179
|
+
{advanceInvoice.number}
|
|
180
|
+
</Button>
|
|
181
|
+
{(advanceInvoice as any).is_draft && (
|
|
182
|
+
<Badge
|
|
183
|
+
variant="outline"
|
|
184
|
+
className="border-amber-500 bg-amber-50 text-amber-700 dark:bg-amber-950 dark:text-amber-400"
|
|
185
|
+
>
|
|
186
|
+
{t("Draft")}
|
|
187
|
+
</Badge>
|
|
188
|
+
)}
|
|
189
|
+
{showWarning && (
|
|
190
|
+
<Tooltip>
|
|
191
|
+
<TooltipTrigger>
|
|
192
|
+
<AlertTriangle className="size-4 text-orange-500" />
|
|
193
|
+
</TooltipTrigger>
|
|
194
|
+
<TooltipContent>
|
|
195
|
+
{t(failureType === "furs" ? "FURS fiscalization failed" : "FINA fiscalization failed")}
|
|
196
|
+
</TooltipContent>
|
|
197
|
+
</Tooltip>
|
|
198
|
+
)}
|
|
199
|
+
</div>
|
|
200
|
+
);
|
|
201
|
+
},
|
|
155
202
|
},
|
|
156
203
|
{
|
|
157
204
|
id: "customer",
|
|
@@ -161,26 +208,17 @@ export default function AdvanceInvoiceListTable({
|
|
|
161
208
|
{
|
|
162
209
|
id: "date",
|
|
163
210
|
header: t("Date"),
|
|
164
|
-
sortable: true,
|
|
165
211
|
cell: (advanceInvoice) => <FormattedDate date={advanceInvoice.date} />,
|
|
166
212
|
},
|
|
167
|
-
{
|
|
168
|
-
id: "date_due",
|
|
169
|
-
header: t("Date Due"),
|
|
170
|
-
sortable: true,
|
|
171
|
-
cell: (advanceInvoice) => <FormattedDate date={advanceInvoice.date_due} />,
|
|
172
|
-
},
|
|
173
213
|
{
|
|
174
214
|
id: "total",
|
|
175
215
|
header: t("Total"),
|
|
176
|
-
sortable: true,
|
|
177
216
|
align: "right",
|
|
178
217
|
cell: (advanceInvoice) => advanceInvoice.total,
|
|
179
218
|
},
|
|
180
219
|
{
|
|
181
220
|
id: "total_with_tax",
|
|
182
221
|
header: t("Total with Tax"),
|
|
183
|
-
sortable: true,
|
|
184
222
|
align: "right",
|
|
185
223
|
cell: (advanceInvoice) => advanceInvoice.total_with_tax,
|
|
186
224
|
},
|
|
@@ -218,6 +256,7 @@ export default function AdvanceInvoiceListTable({
|
|
|
218
256
|
onDownloadSuccess,
|
|
219
257
|
onDownloadError,
|
|
220
258
|
i18nProps.locale,
|
|
259
|
+
fiscalizationFeatures,
|
|
221
260
|
],
|
|
222
261
|
);
|
|
223
262
|
|
|
@@ -228,13 +267,14 @@ export default function AdvanceInvoiceListTable({
|
|
|
228
267
|
resourceName="advance_invoice"
|
|
229
268
|
cacheKey="advance-invoices"
|
|
230
269
|
createNewLink={entityId ? `/app/${entityId}/documents/add/advance_invoice` : undefined}
|
|
270
|
+
onCreateNew={onCreateNew}
|
|
231
271
|
onFetch={handleFetch}
|
|
232
272
|
onChangeParams={onChangeParams}
|
|
233
273
|
entityId={entityId}
|
|
234
274
|
filterConfig={filterConfig}
|
|
235
275
|
t={t}
|
|
236
276
|
locale={i18nProps.locale}
|
|
237
|
-
selectable={!!onExportSelected}
|
|
277
|
+
selectable={!!(onExportSelected || onRetryFiscalization)}
|
|
238
278
|
selectedIds={selectedIds}
|
|
239
279
|
onSelectionChange={setSelectedIds}
|
|
240
280
|
selectionToolbar={selectionToolbar}
|
|
@@ -270,16 +310,6 @@ function AdvanceInvoiceStatusBadge({
|
|
|
270
310
|
</Badge>
|
|
271
311
|
);
|
|
272
312
|
}
|
|
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
313
|
if (advanceInvoice.total_paid > 0) {
|
|
284
314
|
return (
|
|
285
315
|
<Badge
|
|
@@ -38,8 +38,13 @@ 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",
|
|
45
50
|
} as const;
|
|
@@ -9,4 +9,8 @@ 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",
|
|
12
16
|
} as const;
|
|
@@ -38,8 +38,13 @@ 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",
|
|
45
50
|
} as const;
|
|
@@ -38,8 +38,13 @@ 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",
|
|
45
50
|
} as const;
|
|
@@ -38,8 +38,13 @@ 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",
|
|
45
50
|
} as const;
|
|
@@ -38,8 +38,13 @@ 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",
|
|
45
50
|
} as const;
|
|
@@ -38,8 +38,13 @@ 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",
|
|
45
50
|
} as const;
|
|
@@ -38,8 +38,13 @@ 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",
|
|
45
50
|
} as const;
|
|
@@ -38,8 +38,13 @@ 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",
|
|
45
50
|
} as const;
|
|
@@ -38,8 +38,13 @@ 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",
|
|
45
50
|
} as const;
|