@spaceinvoices/react-ui 0.4.1 → 0.4.3
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/registry.json +25 -0
- package/src/components/advance-invoices/advance-invoices.hooks.ts +32 -2
- package/src/components/advance-invoices/create/create-advance-invoice-form.tsx +109 -4
- 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 +2 -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 +2 -0
- package/src/components/advance-invoices/create/locales/pt.ts +2 -0
- package/src/components/advance-invoices/create/locales/sl.ts +2 -0
- package/src/components/advance-invoices/create/prepare-advance-invoice-submission.ts +17 -0
- package/src/components/advance-invoices/list/list-row-actions.tsx +3 -6
- package/src/components/advance-invoices/list/list-table.tsx +105 -2
- package/src/components/advance-invoices/list/locales/de.ts +4 -0
- package/src/components/advance-invoices/list/locales/en.ts +4 -0
- package/src/components/advance-invoices/list/locales/es.ts +4 -0
- package/src/components/advance-invoices/list/locales/fr.ts +4 -0
- package/src/components/advance-invoices/list/locales/hr.ts +4 -0
- package/src/components/advance-invoices/list/locales/it.ts +4 -0
- package/src/components/advance-invoices/list/locales/nl.ts +4 -0
- package/src/components/advance-invoices/list/locales/pl.ts +4 -0
- package/src/components/advance-invoices/list/locales/pt.ts +4 -0
- package/src/components/advance-invoices/list/locales/sl.ts +4 -0
- package/src/components/credit-notes/create/create-credit-note-form.tsx +177 -6
- package/src/components/credit-notes/create/locales/de.ts +8 -0
- package/src/components/credit-notes/create/locales/es.ts +8 -0
- package/src/components/credit-notes/create/locales/fr.ts +7 -0
- package/src/components/credit-notes/create/locales/hr.ts +7 -0
- package/src/components/credit-notes/create/locales/it.ts +9 -0
- package/src/components/credit-notes/create/locales/nl.ts +7 -0
- package/src/components/credit-notes/create/locales/pl.ts +7 -0
- package/src/components/credit-notes/create/locales/pt.ts +7 -0
- package/src/components/credit-notes/create/locales/sl.ts +7 -0
- package/src/components/credit-notes/credit-notes.hooks.ts +30 -0
- package/src/components/credit-notes/list/list-row-actions.tsx +3 -6
- package/src/components/credit-notes/list/list-table.tsx +79 -8
- package/src/components/credit-notes/list/locales/de.ts +4 -1
- package/src/components/credit-notes/list/locales/en.ts +5 -0
- package/src/components/credit-notes/list/locales/es.ts +4 -1
- package/src/components/credit-notes/list/locales/fr.ts +4 -1
- package/src/components/credit-notes/list/locales/hr.ts +4 -1
- package/src/components/credit-notes/list/locales/it.ts +4 -1
- package/src/components/credit-notes/list/locales/nl.ts +4 -1
- package/src/components/credit-notes/list/locales/pl.ts +4 -1
- package/src/components/credit-notes/list/locales/pt.ts +4 -1
- package/src/components/credit-notes/list/locales/sl.ts +4 -1
- package/src/components/customers/create-customer-form/create-customer-form.tsx +0 -1
- package/src/components/dashboard/collection-rate-card/use-collection-rate.ts +2 -2
- package/src/components/dashboard/invoice-status-chart/use-invoice-status.ts +3 -3
- package/src/components/dashboard/payment-methods-chart/use-payment-methods.ts +1 -1
- package/src/components/dashboard/payment-trend-chart/use-payment-trend.ts +1 -1
- package/src/components/dashboard/revenue-trend-chart/use-revenue-trend.ts +1 -1
- package/src/components/dashboard/shared/use-revenue-data.ts +4 -4
- package/src/components/dashboard/shared/use-stats-counts.ts +4 -4
- package/src/components/dashboard/shared/use-stats-query.ts +1 -1
- package/src/components/dashboard/tax-collected-card/use-tax-collected.ts +2 -2
- package/src/components/dashboard/top-customers-chart/use-top-customers.ts +1 -1
- package/src/components/delivery-notes/create/create-delivery-note-form.tsx +332 -0
- package/src/components/delivery-notes/create/locales/de.ts +50 -0
- package/src/components/delivery-notes/create/locales/es.ts +49 -0
- package/src/components/delivery-notes/create/locales/fr.ts +50 -0
- package/src/components/delivery-notes/create/locales/hr.ts +49 -0
- package/src/components/delivery-notes/create/locales/it.ts +49 -0
- package/src/components/delivery-notes/create/locales/nl.ts +50 -0
- package/src/components/delivery-notes/create/locales/pl.ts +49 -0
- package/src/components/delivery-notes/create/locales/pt.ts +50 -0
- package/src/components/delivery-notes/create/locales/sl.ts +49 -0
- package/src/components/delivery-notes/create/prepare-delivery-note-submission.ts +38 -0
- package/src/components/delivery-notes/create/use-delivery-note-customer-form.ts +1 -0
- package/src/components/delivery-notes/delivery-notes.hooks.ts +15 -0
- package/src/components/delivery-notes/list/index.ts +3 -0
- package/src/components/delivery-notes/list/list-row-actions.tsx +103 -0
- package/src/components/delivery-notes/list/list-table.tsx +214 -0
- package/src/components/delivery-notes/list/locales/de.ts +9 -0
- package/src/components/delivery-notes/list/locales/en.ts +11 -0
- package/src/components/delivery-notes/list/locales/es.ts +9 -0
- package/src/components/delivery-notes/list/locales/fr.ts +9 -0
- package/src/components/delivery-notes/list/locales/hr.ts +9 -0
- package/src/components/delivery-notes/list/locales/it.ts +9 -0
- package/src/components/delivery-notes/list/locales/nl.ts +9 -0
- package/src/components/delivery-notes/list/locales/pl.ts +9 -0
- package/src/components/delivery-notes/list/locales/pt.ts +9 -0
- package/src/components/delivery-notes/list/locales/sl.ts +9 -0
- package/src/components/delivery-notes/list/use-delivery-note-download.ts +63 -0
- package/src/components/documents/create/document-details-section.tsx +103 -33
- package/src/components/documents/create/live-preview.tsx +37 -10
- package/src/components/documents/create/mark-as-paid-section.tsx +11 -2
- package/src/components/documents/create/prepare-document-submission.ts +1 -1
- package/src/components/documents/documents.hooks.ts +2 -1
- package/src/components/documents/shared/document-preview-display.tsx +12 -5
- package/src/components/documents/types.ts +10 -1
- package/src/components/documents/view/document-actions-bar.tsx +30 -0
- package/src/components/documents/view/document-details-card.tsx +3 -3
- package/src/components/documents/view/document-payments-list.tsx +3 -3
- package/src/components/documents/view/document-relations-list.tsx +105 -0
- package/src/components/documents/view/locales/de.ts +26 -0
- package/src/components/documents/view/locales/es.ts +26 -0
- package/src/components/documents/view/locales/fr.ts +26 -0
- package/src/components/documents/view/locales/hr.ts +26 -0
- package/src/components/documents/view/locales/it.ts +26 -0
- package/src/components/documents/view/locales/nl.ts +26 -0
- package/src/components/documents/view/locales/pl.ts +26 -0
- package/src/components/documents/view/locales/pt.ts +26 -0
- package/src/components/documents/view/locales/sl.ts +26 -0
- package/src/components/documents/view/use-document-download.ts +5 -3
- package/src/components/entities/create-entity-form.tsx +1 -1
- package/src/components/entities/entity-settings-form/entity-settings-form.tsx +2 -3
- package/src/components/entities/entity-settings-form/locales/es.ts +2 -0
- package/src/components/entities/entity-settings-form/locales/fr.ts +2 -0
- package/src/components/entities/entity-settings-form/locales/hr.ts +2 -0
- package/src/components/entities/entity-settings-form/locales/it.ts +2 -0
- package/src/components/entities/entity-settings-form/locales/nl.ts +2 -0
- package/src/components/entities/entity-settings-form/locales/pl.ts +2 -0
- package/src/components/entities/entity-settings-form/locales/pt.ts +2 -0
- package/src/components/entities/fina-settings-form/fina-operator-required-dialog.tsx +109 -0
- package/src/components/entities/fina-settings-form/fina-settings-form.tsx +377 -35
- package/src/components/entities/fina-settings-form/fina-settings.hooks.ts +106 -20
- package/src/components/entities/fina-settings-form/index.ts +1 -0
- package/src/components/entities/fina-settings-form/locales/de.ts +54 -34
- package/src/components/entities/fina-settings-form/locales/en.ts +51 -34
- package/src/components/entities/fina-settings-form/locales/es.ts +50 -34
- package/src/components/entities/fina-settings-form/locales/fr.ts +50 -34
- package/src/components/entities/fina-settings-form/locales/hr.ts +50 -34
- package/src/components/entities/fina-settings-form/locales/it.ts +50 -34
- package/src/components/entities/fina-settings-form/locales/nl.ts +50 -34
- package/src/components/entities/fina-settings-form/locales/pl.ts +50 -34
- package/src/components/entities/fina-settings-form/locales/pt.ts +50 -34
- package/src/components/entities/fina-settings-form/locales/sl.ts +50 -34
- package/src/components/entities/fina-settings-form/sections/certificate-settings-section.tsx +18 -0
- package/src/components/entities/fina-settings-form/sections/premises-management-section.tsx +64 -89
- package/src/components/entities/fina-settings-form/sections/register-premise-dialog.tsx +51 -323
- package/src/components/entities/furs-settings-form/furs-operator-required-dialog.tsx +106 -0
- package/src/components/entities/furs-settings-form/furs-settings-form.tsx +33 -10
- package/src/components/entities/furs-settings-form/furs-settings.hooks.ts +12 -11
- package/src/components/entities/furs-settings-form/index.ts +1 -0
- package/src/components/entities/furs-settings-form/locales/de.ts +27 -3
- package/src/components/entities/furs-settings-form/locales/en.ts +17 -3
- package/src/components/entities/furs-settings-form/locales/es.ts +26 -3
- package/src/components/entities/furs-settings-form/locales/fr.ts +26 -3
- package/src/components/entities/furs-settings-form/locales/hr.ts +26 -3
- package/src/components/entities/furs-settings-form/locales/it.ts +26 -3
- package/src/components/entities/furs-settings-form/locales/nl.ts +26 -3
- package/src/components/entities/furs-settings-form/locales/pl.ts +26 -3
- package/src/components/entities/furs-settings-form/locales/pt.ts +26 -3
- package/src/components/entities/furs-settings-form/locales/sl.ts +16 -3
- package/src/components/entities/furs-settings-form/sections/certificate-settings-section.tsx +22 -0
- package/src/components/entities/furs-settings-form/sections/general-settings-section.tsx +26 -5
- package/src/components/entities/furs-settings-form/sections/register-premise-dialog.tsx +14 -2
- package/src/components/entities/settings/tax-rules-settings-form.tsx +4 -4
- package/src/components/estimates/list/list-row-actions.tsx +3 -7
- package/src/components/estimates/list/list-table.tsx +35 -2
- package/src/components/estimates/list/locales/de.ts +3 -0
- package/src/components/estimates/list/locales/en.ts +3 -0
- package/src/components/estimates/list/locales/es.ts +3 -0
- package/src/components/estimates/list/locales/fr.ts +3 -0
- package/src/components/estimates/list/locales/hr.ts +3 -0
- package/src/components/estimates/list/locales/it.ts +3 -0
- package/src/components/estimates/list/locales/nl.ts +3 -0
- package/src/components/estimates/list/locales/pl.ts +3 -0
- package/src/components/estimates/list/locales/pt.ts +3 -0
- package/src/components/estimates/list/locales/sl.ts +3 -0
- package/src/components/export/document-export-form.tsx +34 -34
- package/src/components/invoices/create/create-invoice-form.tsx +107 -5
- package/src/components/invoices/create/prepare-invoice-submission.ts +17 -0
- package/src/components/invoices/invoices-furs.hooks.ts +24 -9
- package/src/components/invoices/invoices.hooks.ts +32 -2
- package/src/components/invoices/list/list-row-actions.tsx +26 -11
- package/src/components/invoices/list/list-table.tsx +121 -5
- package/src/components/invoices/list/locales/de.ts +5 -0
- package/src/components/invoices/list/locales/en.ts +5 -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 +4 -1
- package/src/components/items/item-list-table/item-list-row-actions.tsx +5 -8
- package/src/components/items/item-list-table/item-list-row.tsx +5 -3
- package/src/components/items/item-list-table/item-list-table.tsx +5 -1
- package/src/components/recurring-invoices/create-recurring-invoice-form/create-recurring-invoice-form.tsx +418 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/de.ts +45 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/es.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/fr.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/hr.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/it.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/nl.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/pl.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/pt.ts +44 -0
- package/src/components/recurring-invoices/create-recurring-invoice-form/locales/sl.ts +44 -0
- package/src/components/recurring-invoices/index.ts +3 -0
- package/src/components/recurring-invoices/list/index.ts +2 -0
- package/src/components/recurring-invoices/list/list-row-actions.tsx +139 -0
- package/src/components/recurring-invoices/list/list-table.tsx +179 -0
- package/src/components/recurring-invoices/list/locales/de.ts +27 -0
- package/src/components/recurring-invoices/list/locales/en.ts +5 -0
- package/src/components/recurring-invoices/list/locales/es.ts +27 -0
- package/src/components/recurring-invoices/list/locales/fr.ts +27 -0
- package/src/components/recurring-invoices/list/locales/hr.ts +27 -0
- package/src/components/recurring-invoices/list/locales/it.ts +27 -0
- package/src/components/recurring-invoices/list/locales/nl.ts +27 -0
- package/src/components/recurring-invoices/list/locales/pl.ts +27 -0
- package/src/components/recurring-invoices/list/locales/pt.ts +27 -0
- package/src/components/recurring-invoices/list/locales/sl.ts +27 -0
- package/src/components/recurring-invoices/recurring-invoices.hooks.ts +28 -0
- package/src/components/table/data-table.tsx +122 -5
- package/src/components/table/selection-toolbar.tsx +36 -0
- package/src/components/tax-reports/kir-export-form.tsx +75 -55
- package/src/components/taxes/tax-list-table/tax-list-row-actions.tsx +3 -6
- package/src/components/taxes/tax-list-table/tax-list-row.tsx +3 -2
- package/src/components/taxes/tax-list-table/tax-list-table.tsx +5 -1
- package/src/components/ui/checkbox.tsx +5 -5
- package/src/generate-schemas.ts +45 -18
- package/src/generated/schemas/authorizeshopify_body.ts +22 -0
- package/src/generated/schemas/creditnote.ts +0 -2
- package/src/generated/schemas/deliverynote.ts +134 -0
- package/src/generated/schemas/entity.ts +5 -1
- package/src/generated/schemas/index.ts +42 -28
- package/src/generated/schemas/order.ts +129 -0
- package/src/generated/schemas/orderintegration.ts +51 -0
- package/src/generated/schemas/payment.ts +24 -2
- package/src/generated/schemas/recurringinvoice.ts +61 -0
- package/src/generated/schemas/renderadvanceinvoicepreview_body.ts +108 -140
- package/src/generated/schemas/rendercreditnotepreview_body.ts +109 -141
- package/src/generated/schemas/renderdeliverynotepreview_body.ts +185 -0
- package/src/generated/schemas/renderestimatepreview_body.ts +79 -82
- package/src/generated/schemas/renderinvoicepreview_body.ts +109 -141
- package/src/generated/schemas/startpdfexport_body.ts +18 -2
- package/src/generated/schemas/userfinasettings.ts +19 -0
- package/src/generated/schemas/webhook.ts +54 -0
- package/src/hooks/use-duplicate-document.ts +11 -3
- package/src/hooks/use-next-document-number.ts +2 -2
- package/src/lib/furs-error-utils.ts +36 -0
- package/src/lib/schemas/advance-invoice.ts +3 -3
- package/src/lib/schemas/credit-note.ts +3 -3
- package/src/lib/schemas/estimate.ts +3 -3
- package/src/lib/schemas/invoice.ts +3 -3
- package/src/providers/sdk-provider.tsx +5 -7
- package/src/providers/white-label-provider.tsx +3 -0
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { Invoice } from "@spaceinvoices/js-sdk";
|
|
2
|
-
import { useMemo } from "react";
|
|
2
|
+
import { useCallback, useMemo, useState } from "react";
|
|
3
3
|
import { DataTable } from "@/ui/components/table/data-table";
|
|
4
4
|
import { FormattedDate } from "@/ui/components/table/date-cell";
|
|
5
5
|
import { useTableFetch } from "@/ui/components/table/hooks/use-table-fetch";
|
|
6
|
+
import { SelectionToolbar } from "@/ui/components/table/selection-toolbar";
|
|
6
7
|
import type {
|
|
7
8
|
Column,
|
|
8
9
|
FilterConfig,
|
|
@@ -10,6 +11,7 @@ import type {
|
|
|
10
11
|
TableQueryParams,
|
|
11
12
|
TableQueryResponse,
|
|
12
13
|
} from "@/ui/components/table/types";
|
|
14
|
+
import { Badge } from "@/ui/components/ui/badge";
|
|
13
15
|
import { Button } from "@/ui/components/ui/button";
|
|
14
16
|
import { createTranslation } from "@/ui/lib/translation";
|
|
15
17
|
import { useSDK } from "@/ui/providers/sdk-provider";
|
|
@@ -44,16 +46,21 @@ type InvoiceListTableProps = {
|
|
|
44
46
|
namespace?: string;
|
|
45
47
|
locale?: string;
|
|
46
48
|
entityId?: string;
|
|
49
|
+
onView?: (invoice: Invoice) => void;
|
|
47
50
|
onAddPayment?: (invoice: Invoice) => void;
|
|
48
51
|
onDuplicate?: (invoice: Invoice) => void;
|
|
49
52
|
onDownloadStart?: () => void;
|
|
50
53
|
onDownloadSuccess?: (fileName: string) => void;
|
|
51
54
|
onDownloadError?: (error: string) => void;
|
|
55
|
+
onExportSelected?: (documentIds: string[]) => void;
|
|
56
|
+
onVoid?: (invoice: Invoice) => void;
|
|
57
|
+
isVoiding?: boolean;
|
|
52
58
|
} & ListTableProps<Invoice>;
|
|
53
59
|
|
|
54
60
|
export default function InvoiceListTable({
|
|
55
61
|
queryParams,
|
|
56
62
|
onRowClick,
|
|
63
|
+
onView,
|
|
57
64
|
onAddPayment,
|
|
58
65
|
onDuplicate,
|
|
59
66
|
onChangeParams,
|
|
@@ -62,6 +69,9 @@ export default function InvoiceListTable({
|
|
|
62
69
|
onDownloadStart,
|
|
63
70
|
onDownloadSuccess,
|
|
64
71
|
onDownloadError,
|
|
72
|
+
onExportSelected,
|
|
73
|
+
onVoid,
|
|
74
|
+
isVoiding,
|
|
65
75
|
...i18nProps
|
|
66
76
|
}: InvoiceListTableProps) {
|
|
67
77
|
const t = createTranslation({
|
|
@@ -70,6 +80,7 @@ export default function InvoiceListTable({
|
|
|
70
80
|
});
|
|
71
81
|
|
|
72
82
|
const { sdk } = useSDK();
|
|
83
|
+
const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());
|
|
73
84
|
|
|
74
85
|
const handleFetch = useTableFetch(async (params: TableQueryParams) => {
|
|
75
86
|
if (!sdk) throw new Error("SDK not initialized");
|
|
@@ -99,6 +110,28 @@ export default function InvoiceListTable({
|
|
|
99
110
|
[t],
|
|
100
111
|
);
|
|
101
112
|
|
|
113
|
+
const handleExportPdfs = useCallback(() => {
|
|
114
|
+
if (selectedIds.size > 0 && onExportSelected) {
|
|
115
|
+
onExportSelected(Array.from(selectedIds));
|
|
116
|
+
}
|
|
117
|
+
}, [selectedIds, onExportSelected]);
|
|
118
|
+
|
|
119
|
+
const handleDeselectAll = useCallback(() => {
|
|
120
|
+
setSelectedIds(new Set());
|
|
121
|
+
}, []);
|
|
122
|
+
|
|
123
|
+
const selectionToolbar = useCallback(
|
|
124
|
+
(count: number) => (
|
|
125
|
+
<SelectionToolbar
|
|
126
|
+
selectedCount={count}
|
|
127
|
+
onExportPdfs={onExportSelected ? handleExportPdfs : undefined}
|
|
128
|
+
onDeselectAll={handleDeselectAll}
|
|
129
|
+
t={t}
|
|
130
|
+
/>
|
|
131
|
+
),
|
|
132
|
+
[handleExportPdfs, handleDeselectAll, onExportSelected, t],
|
|
133
|
+
);
|
|
134
|
+
|
|
102
135
|
const columns: Column<Invoice>[] = useMemo(
|
|
103
136
|
() => [
|
|
104
137
|
{
|
|
@@ -106,9 +139,19 @@ export default function InvoiceListTable({
|
|
|
106
139
|
header: t("Number"),
|
|
107
140
|
sortable: true,
|
|
108
141
|
cell: (invoice) => (
|
|
109
|
-
<
|
|
110
|
-
|
|
111
|
-
|
|
142
|
+
<div className="flex items-center gap-2">
|
|
143
|
+
<Button variant="link" className="cursor-pointer py-0 underline" onClick={() => onRowClick?.(invoice)}>
|
|
144
|
+
{invoice.number}
|
|
145
|
+
</Button>
|
|
146
|
+
{(invoice as any).is_draft && (
|
|
147
|
+
<Badge
|
|
148
|
+
variant="outline"
|
|
149
|
+
className="border-amber-500 bg-amber-50 text-amber-700 dark:bg-amber-950 dark:text-amber-400"
|
|
150
|
+
>
|
|
151
|
+
{t("Draft")}
|
|
152
|
+
</Badge>
|
|
153
|
+
)}
|
|
154
|
+
</div>
|
|
112
155
|
),
|
|
113
156
|
},
|
|
114
157
|
{
|
|
@@ -142,6 +185,11 @@ export default function InvoiceListTable({
|
|
|
142
185
|
align: "right",
|
|
143
186
|
cell: (invoice) => invoice.total_with_tax,
|
|
144
187
|
},
|
|
188
|
+
{
|
|
189
|
+
id: "status",
|
|
190
|
+
header: t("Status"),
|
|
191
|
+
cell: (invoice) => <InvoiceStatusBadge invoice={invoice} t={t} />,
|
|
192
|
+
},
|
|
145
193
|
{
|
|
146
194
|
id: "actions",
|
|
147
195
|
header: "",
|
|
@@ -149,18 +197,33 @@ export default function InvoiceListTable({
|
|
|
149
197
|
cell: (invoice) => (
|
|
150
198
|
<InvoiceListRowActions
|
|
151
199
|
invoice={invoice}
|
|
200
|
+
onView={onView}
|
|
152
201
|
onAddPayment={onAddPayment}
|
|
153
202
|
onDuplicate={onDuplicate}
|
|
154
203
|
onDownloadStart={onDownloadStart}
|
|
155
204
|
onDownloadSuccess={onDownloadSuccess}
|
|
156
205
|
onDownloadError={onDownloadError}
|
|
206
|
+
onVoid={onVoid}
|
|
207
|
+
isVoiding={isVoiding}
|
|
157
208
|
t={t}
|
|
158
209
|
locale={i18nProps.locale}
|
|
159
210
|
/>
|
|
160
211
|
),
|
|
161
212
|
},
|
|
162
213
|
],
|
|
163
|
-
[
|
|
214
|
+
[
|
|
215
|
+
t,
|
|
216
|
+
onRowClick,
|
|
217
|
+
onView,
|
|
218
|
+
onAddPayment,
|
|
219
|
+
onDuplicate,
|
|
220
|
+
onDownloadStart,
|
|
221
|
+
onDownloadSuccess,
|
|
222
|
+
onDownloadError,
|
|
223
|
+
onVoid,
|
|
224
|
+
isVoiding,
|
|
225
|
+
i18nProps.locale,
|
|
226
|
+
],
|
|
164
227
|
);
|
|
165
228
|
|
|
166
229
|
return (
|
|
@@ -177,6 +240,59 @@ export default function InvoiceListTable({
|
|
|
177
240
|
filterConfig={filterConfig}
|
|
178
241
|
t={t}
|
|
179
242
|
locale={i18nProps.locale}
|
|
243
|
+
selectable={!!onExportSelected}
|
|
244
|
+
selectedIds={selectedIds}
|
|
245
|
+
onSelectionChange={setSelectedIds}
|
|
246
|
+
selectionToolbar={selectionToolbar}
|
|
180
247
|
/>
|
|
181
248
|
);
|
|
182
249
|
}
|
|
250
|
+
|
|
251
|
+
/** Status badge for invoices */
|
|
252
|
+
function InvoiceStatusBadge({ invoice, t }: { invoice: Invoice; t: (key: string) => string }) {
|
|
253
|
+
if ((invoice as any).voided_at) {
|
|
254
|
+
return (
|
|
255
|
+
<Badge variant="outline" className="border-red-500 bg-red-50 text-red-700 dark:bg-red-950 dark:text-red-400">
|
|
256
|
+
{t("Voided")}
|
|
257
|
+
</Badge>
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
if ((invoice as any).is_draft) {
|
|
261
|
+
return null;
|
|
262
|
+
}
|
|
263
|
+
if (invoice.paid_in_full) {
|
|
264
|
+
return (
|
|
265
|
+
<Badge
|
|
266
|
+
variant="outline"
|
|
267
|
+
className="border-green-500 bg-green-50 text-green-700 dark:bg-green-950 dark:text-green-400"
|
|
268
|
+
>
|
|
269
|
+
{t("Paid")}
|
|
270
|
+
</Badge>
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
if (invoice.date_due && new Date(invoice.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
|
+
if (invoice.total_paid > 0) {
|
|
284
|
+
return (
|
|
285
|
+
<Badge
|
|
286
|
+
variant="outline"
|
|
287
|
+
className="border-yellow-500 bg-yellow-50 text-yellow-700 dark:bg-yellow-950 dark:text-yellow-400"
|
|
288
|
+
>
|
|
289
|
+
{t("Partially Paid")}
|
|
290
|
+
</Badge>
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
return (
|
|
294
|
+
<Badge variant="outline" className="border-gray-500 bg-gray-50 text-gray-700 dark:bg-gray-800 dark:text-gray-400">
|
|
295
|
+
{t("Unpaid")}
|
|
296
|
+
</Badge>
|
|
297
|
+
);
|
|
298
|
+
}
|
|
@@ -39,4 +39,9 @@ export default {
|
|
|
39
39
|
"No results found": "Keine Rechnungen gefunden",
|
|
40
40
|
"Try adjusting your search criteria": "Versuchen Sie, Ihre Suchkriterien anzupassen",
|
|
41
41
|
"Clear search": "Suche zurücksetzen",
|
|
42
|
+
selected: "ausgewählt",
|
|
43
|
+
"Export PDFs": "PDFs exportieren",
|
|
44
|
+
"Deselect all": "Auswahl aufheben",
|
|
45
|
+
Void: "Stornieren",
|
|
46
|
+
"Partially Paid": "Teilweise bezahlt",
|
|
42
47
|
} as const;
|
|
@@ -5,4 +5,9 @@ export default {
|
|
|
5
5
|
"Create new": "Create invoice",
|
|
6
6
|
// No results translations
|
|
7
7
|
"No results found": "No invoices found",
|
|
8
|
+
selected: "selected",
|
|
9
|
+
"Export PDFs": "Export PDFs",
|
|
10
|
+
"Deselect all": "Deselect all",
|
|
11
|
+
Void: "Void",
|
|
12
|
+
"Partially Paid": "Partially Paid",
|
|
8
13
|
} as const;
|
|
@@ -39,4 +39,9 @@ export default {
|
|
|
39
39
|
"No results found": "No se encontraron facturas",
|
|
40
40
|
"Try adjusting your search criteria": "Intente ajustar sus criterios de búsqueda",
|
|
41
41
|
"Clear search": "Limpiar búsqueda",
|
|
42
|
+
selected: "seleccionados",
|
|
43
|
+
"Export PDFs": "Exportar PDFs",
|
|
44
|
+
"Deselect all": "Deseleccionar todo",
|
|
45
|
+
Void: "Anular",
|
|
46
|
+
"Partially Paid": "Parcialmente pagado",
|
|
42
47
|
} as const;
|
|
@@ -39,4 +39,9 @@ export default {
|
|
|
39
39
|
"No results found": "Aucune facture trouvée",
|
|
40
40
|
"Try adjusting your search criteria": "Essayez de modifier vos critères de recherche",
|
|
41
41
|
"Clear search": "Effacer la recherche",
|
|
42
|
+
selected: "sélectionnés",
|
|
43
|
+
"Export PDFs": "Exporter les PDF",
|
|
44
|
+
"Deselect all": "Tout désélectionner",
|
|
45
|
+
Void: "Annuler",
|
|
46
|
+
"Partially Paid": "Partiellement payé",
|
|
42
47
|
} as const;
|
|
@@ -39,4 +39,9 @@ export default {
|
|
|
39
39
|
"No results found": "Nisu pronađeni računi",
|
|
40
40
|
"Try adjusting your search criteria": "Pokušajte prilagoditi kriterije pretrage",
|
|
41
41
|
"Clear search": "Očisti pretragu",
|
|
42
|
+
selected: "odabranih",
|
|
43
|
+
"Export PDFs": "Izvezi PDF-ove",
|
|
44
|
+
"Deselect all": "Poništi odabir",
|
|
45
|
+
Void: "Storniraj",
|
|
46
|
+
"Partially Paid": "Djelomično plaćeno",
|
|
42
47
|
} as const;
|
|
@@ -39,4 +39,9 @@ export default {
|
|
|
39
39
|
"No results found": "Nessuna fattura trovata",
|
|
40
40
|
"Try adjusting your search criteria": "Prova a modificare i criteri di ricerca",
|
|
41
41
|
"Clear search": "Cancella ricerca",
|
|
42
|
+
selected: "selezionati",
|
|
43
|
+
"Export PDFs": "Esporta PDF",
|
|
44
|
+
"Deselect all": "Deseleziona tutto",
|
|
45
|
+
Void: "Annulla",
|
|
46
|
+
"Partially Paid": "Parzialmente pagato",
|
|
42
47
|
} as const;
|
|
@@ -39,4 +39,9 @@ export default {
|
|
|
39
39
|
"No results found": "Geen facturen gevonden",
|
|
40
40
|
"Try adjusting your search criteria": "Probeer uw zoekcriteria aan te passen",
|
|
41
41
|
"Clear search": "Zoekopdracht wissen",
|
|
42
|
+
selected: "geselecteerd",
|
|
43
|
+
"Export PDFs": "PDFs exporteren",
|
|
44
|
+
"Deselect all": "Alles deselecteren",
|
|
45
|
+
Void: "Nietig verklaren",
|
|
46
|
+
"Partially Paid": "Gedeeltelijk betaald",
|
|
42
47
|
} as const;
|
|
@@ -39,4 +39,9 @@ export default {
|
|
|
39
39
|
"No results found": "Nie znaleziono faktur",
|
|
40
40
|
"Try adjusting your search criteria": "Spróbuj dostosować kryteria wyszukiwania",
|
|
41
41
|
"Clear search": "Wyczyść wyszukiwanie",
|
|
42
|
+
selected: "wybranych",
|
|
43
|
+
"Export PDFs": "Eksportuj PDF-y",
|
|
44
|
+
"Deselect all": "Odznacz wszystko",
|
|
45
|
+
Void: "Anuluj",
|
|
46
|
+
"Partially Paid": "Częściowo opłacona",
|
|
42
47
|
} as const;
|
|
@@ -39,4 +39,9 @@ export default {
|
|
|
39
39
|
"No results found": "Nenhuma fatura encontrada",
|
|
40
40
|
"Try adjusting your search criteria": "Tente ajustar os seus critérios de pesquisa",
|
|
41
41
|
"Clear search": "Limpar pesquisa",
|
|
42
|
+
selected: "selecionados",
|
|
43
|
+
"Export PDFs": "Exportar PDFs",
|
|
44
|
+
"Deselect all": "Desselecionar tudo",
|
|
45
|
+
Void: "Anular",
|
|
46
|
+
"Partially Paid": "Parcialmente pago",
|
|
42
47
|
} as const;
|
|
@@ -39,4 +39,9 @@ export default {
|
|
|
39
39
|
"No results found": "Ni najdenih računov",
|
|
40
40
|
"Try adjusting your search criteria": "Poskusite prilagoditi iskalne kriterije",
|
|
41
41
|
"Clear search": "Počisti iskanje",
|
|
42
|
+
selected: "izbranih",
|
|
43
|
+
"Export PDFs": "Izvozi PDF-je",
|
|
44
|
+
"Deselect all": "Počisti izbiro",
|
|
45
|
+
Void: "Storniraj",
|
|
46
|
+
"Partially Paid": "Delno plačano",
|
|
42
47
|
} as const;
|
|
@@ -18,7 +18,10 @@ import sl from "../../documents/view/locales/sl";
|
|
|
18
18
|
|
|
19
19
|
const translations = { de, es, fr, hr, it, nl, pl, pt, sl } as const;
|
|
20
20
|
|
|
21
|
-
type
|
|
21
|
+
type FiscalizationStatus = "pending" | "success" | "failed" | "skipped";
|
|
22
|
+
type FiscalizationData = (Exclude<FursFiscalizationResponse, null> | Exclude<FinaFiscalizationResponse, null>) & {
|
|
23
|
+
status: FiscalizationStatus;
|
|
24
|
+
};
|
|
22
25
|
|
|
23
26
|
interface FiscalizationStatusCardProps extends ComponentTranslationProps {
|
|
24
27
|
fiscalizationType: "furs" | "fina";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Item } from "@spaceinvoices/js-sdk";
|
|
2
2
|
|
|
3
3
|
import { MoreHorizontal } from "lucide-react";
|
|
4
|
+
import { memo } from "react";
|
|
4
5
|
import { Button } from "@/ui/components/ui/button";
|
|
5
6
|
import {
|
|
6
7
|
DropdownMenu,
|
|
@@ -15,9 +16,10 @@ import { createTranslation } from "@/ui/lib/translation";
|
|
|
15
16
|
|
|
16
17
|
type ItemListRowActionsProps = {
|
|
17
18
|
item: Item;
|
|
19
|
+
onView?: (item: Item) => void;
|
|
18
20
|
} & ComponentTranslationProps;
|
|
19
21
|
|
|
20
|
-
export default function ItemListRowActions({ item, ...i18nProps }: ItemListRowActionsProps) {
|
|
22
|
+
export default memo(function ItemListRowActions({ item, onView, ...i18nProps }: ItemListRowActionsProps) {
|
|
21
23
|
const t = createTranslation(i18nProps);
|
|
22
24
|
|
|
23
25
|
return (
|
|
@@ -34,15 +36,10 @@ export default function ItemListRowActions({ item, ...i18nProps }: ItemListRowAc
|
|
|
34
36
|
{t("Copy item ID")}
|
|
35
37
|
</DropdownMenuItem>
|
|
36
38
|
<DropdownMenuSeparator />
|
|
37
|
-
<DropdownMenuItem
|
|
38
|
-
className="cursor-pointer"
|
|
39
|
-
onClick={() => {
|
|
40
|
-
window.location.href = `/app/items/${item.id}`;
|
|
41
|
-
}}
|
|
42
|
-
>
|
|
39
|
+
<DropdownMenuItem className="cursor-pointer" onClick={() => onView?.(item)}>
|
|
43
40
|
{t("View item")}
|
|
44
41
|
</DropdownMenuItem>
|
|
45
42
|
</DropdownMenuContent>
|
|
46
43
|
</DropdownMenu>
|
|
47
44
|
);
|
|
48
|
-
}
|
|
45
|
+
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Item } from "@spaceinvoices/js-sdk";
|
|
2
2
|
import { Package } from "lucide-react";
|
|
3
|
+
import { memo } from "react";
|
|
3
4
|
import { TableCell, TableRow } from "@/ui/components/ui/table";
|
|
4
5
|
import type { ComponentTranslationProps } from "@/ui/lib/translation";
|
|
5
6
|
import { createTranslation } from "@/ui/lib/translation";
|
|
@@ -9,9 +10,10 @@ import ItemListRowActions from "./item-list-row-actions";
|
|
|
9
10
|
type ItemListRowProps = {
|
|
10
11
|
item: Item;
|
|
11
12
|
onRowClick?: (item: Item) => void;
|
|
13
|
+
onView?: (item: Item) => void;
|
|
12
14
|
} & ComponentTranslationProps;
|
|
13
15
|
|
|
14
|
-
export default function ItemListRow({ item, onRowClick, ...i18nProps }: ItemListRowProps) {
|
|
16
|
+
export default memo(function ItemListRow({ item, onRowClick, onView, ...i18nProps }: ItemListRowProps) {
|
|
15
17
|
const t = createTranslation(i18nProps);
|
|
16
18
|
|
|
17
19
|
return (
|
|
@@ -25,8 +27,8 @@ export default function ItemListRow({ item, onRowClick, ...i18nProps }: ItemList
|
|
|
25
27
|
<TableCell>{item.description}</TableCell>
|
|
26
28
|
<TableCell className="text-right">{item.price}</TableCell>
|
|
27
29
|
<TableCell className="text-right">
|
|
28
|
-
<ItemListRowActions item={item} t={t} />
|
|
30
|
+
<ItemListRowActions item={item} onView={onView} t={t} />
|
|
29
31
|
</TableCell>
|
|
30
32
|
</TableRow>
|
|
31
33
|
);
|
|
32
|
-
}
|
|
34
|
+
});
|
|
@@ -37,12 +37,14 @@ type ItemListTableProps = {
|
|
|
37
37
|
namespace?: string;
|
|
38
38
|
locale?: string;
|
|
39
39
|
entityId?: string;
|
|
40
|
+
onView?: (item: Item) => void;
|
|
40
41
|
} & ListTableProps<Item>;
|
|
41
42
|
|
|
42
43
|
export default function ItemListTable({
|
|
43
44
|
queryParams,
|
|
44
45
|
createNewTrigger,
|
|
45
46
|
onRowClick,
|
|
47
|
+
onView,
|
|
46
48
|
onChangeParams,
|
|
47
49
|
entityId,
|
|
48
50
|
...i18nProps
|
|
@@ -67,7 +69,9 @@ export default function ItemListTable({
|
|
|
67
69
|
{ id: "price", header: t("Price"), align: "right" },
|
|
68
70
|
{ id: "actions", header: "", align: "right" },
|
|
69
71
|
]}
|
|
70
|
-
renderRow={(item) =>
|
|
72
|
+
renderRow={(item) => (
|
|
73
|
+
<ItemListRow item={item} key={item.id} onRowClick={(item) => onRowClick?.(item)} onView={onView} t={t} />
|
|
74
|
+
)}
|
|
71
75
|
renderHeader={(headerProps) => <ItemListHeader orderBy={headerProps.orderBy} onSort={headerProps.onSort} t={t} />}
|
|
72
76
|
queryParams={queryParams}
|
|
73
77
|
resourceName="item"
|