From d539e5b5f15743f3fdb384a4ae92ee6971eb02e5 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 16 Oct 2025 13:18:55 +0200 Subject: [PATCH] Facturas de cliente --- .../catalogs/taxes/spain-tax-catalog.json | 36 +-- .../src/common/locales/en.json | 4 + .../src/common/locales/es.json | 3 + .../customer-invoice-taxes-multi-select.tsx | 34 +-- .../components/editor/items/amount-input.tsx | 7 +- .../editor/items/item-row-editor.tsx | 35 +++ .../items/items-data-table-row-actions.tsx | 85 +++++++ ...items-editor.bak => items-editor copy.tsx} | 110 ++++----- .../components/editor/items/items-editor.tsx | 167 +++----------- .../editor/items/percentage-input.tsx | 7 +- .../editor/items/quantity-input.tsx | 7 +- .../editor/items/use-items-columns.tsx | 218 ++++++++++++++++++ .../customer-invoice-items-card-editor.tsx | 5 +- .../src/web/context/invoice-context.tsx | 11 +- .../customer-invoices/src/web/hooks/index.ts | 1 - .../src/web/hooks/use-detail-columns.tsx | 5 - modules/customer-invoices/src/web/i18n.ts | 14 +- .../datatable/data-table-column-header.tsx | 69 ++++++ .../datatable/data-table-faceted-filter.tsx | 141 +++++++++++ .../datatable/data-table-pagination.tsx | 100 ++++++++ .../datatable/data-table-toolbar.tsx | 28 +++ .../datatable/data-table-view-options.tsx | 56 +++++ .../src/components/datatable/data-table.tsx | 183 +++++++++++++++ .../rdx-ui/src/components/datatable/index.tsx | 6 +- .../src/components/datatable/user-nav.tsx | 62 +++++ .../datatable-column-header.tsx | 0 .../datatable-row-actions.tsx | 0 .../datatable-row-drag-handle-cell.tsx | 0 .../src/components/datatable2/index.tsx | 3 + packages/rdx-ui/src/components/index.tsx | 1 + .../lookup-dialog/lookup-dialog.tsx | 3 +- packages/rdx-ui/src/locales/en.json | 7 + packages/rdx-ui/src/locales/es.json | 7 + packages/rdx-ui/tsconfig.json | 5 +- 34 files changed, 1133 insertions(+), 287 deletions(-) create mode 100644 modules/customer-invoices/src/web/components/editor/items/item-row-editor.tsx create mode 100644 modules/customer-invoices/src/web/components/editor/items/items-data-table-row-actions.tsx rename modules/customer-invoices/src/web/components/editor/items/{items-editor.bak => items-editor copy.tsx} (50%) create mode 100644 modules/customer-invoices/src/web/components/editor/items/use-items-columns.tsx create mode 100644 packages/rdx-ui/src/components/datatable/data-table-column-header.tsx create mode 100644 packages/rdx-ui/src/components/datatable/data-table-faceted-filter.tsx create mode 100644 packages/rdx-ui/src/components/datatable/data-table-pagination.tsx create mode 100644 packages/rdx-ui/src/components/datatable/data-table-toolbar.tsx create mode 100644 packages/rdx-ui/src/components/datatable/data-table-view-options.tsx create mode 100644 packages/rdx-ui/src/components/datatable/data-table.tsx create mode 100644 packages/rdx-ui/src/components/datatable/user-nav.tsx rename packages/rdx-ui/src/components/{datatable => datatable2}/datatable-column-header.tsx (100%) rename packages/rdx-ui/src/components/{datatable => datatable2}/datatable-row-actions.tsx (100%) rename packages/rdx-ui/src/components/{datatable => datatable2}/datatable-row-drag-handle-cell.tsx (100%) create mode 100644 packages/rdx-ui/src/components/datatable2/index.tsx diff --git a/modules/core/src/common/catalogs/taxes/spain-tax-catalog.json b/modules/core/src/common/catalogs/taxes/spain-tax-catalog.json index 09b1f40b..d4dcc72e 100644 --- a/modules/core/src/common/catalogs/taxes/spain-tax-catalog.json +++ b/modules/core/src/common/catalogs/taxes/spain-tax-catalog.json @@ -136,53 +136,53 @@ }, { - "name": "Retención 35%", + "name": "Retenc. 35%", "code": "retencion_35", "value": "3500", "scale": "2", "group": "Retención", - "description": "Retención profesional o fiscal tipo máximo.", + "description": "Retenc. profesional o fiscal tipo máximo.", "aeat_code": null }, { - "name": "Retención 19%", + "name": "Retenc. 19%", "code": "retencion_19", "value": "1900", "scale": "2", "group": "Retención", - "description": "Retención IRPF general.", + "description": "Retenc. IRPF general.", "aeat_code": "R1" }, { - "name": "Retención 15%", + "name": "Retenc. 15%", "code": "retencion_15", "value": "1500", "scale": "2", "group": "Retención", - "description": "Retención para autónomos y profesionales.", + "description": "Retenc. para autónomos y profesionales.", "aeat_code": "R2" }, { - "name": "Retención 7%", + "name": "Retenc. 7%", "code": "retencion_7", "value": "700", "scale": "2", "group": "Retención", - "description": "Retención para nuevos autónomos.", + "description": "Retenc. para nuevos autónomos.", "aeat_code": null }, { - "name": "Retención 2%", + "name": "Retenc. 2%", "code": "retencion_2", "value": "200", "scale": "2", "group": "Retención", - "description": "Retención sobre arrendamientos de inmuebles urbanos.", + "description": "Retenc. sobre arrendamientos de inmuebles urbanos.", "aeat_code": "R3" }, { - "name": "Rec. de equivalencia 5,2%", + "name": "Rec. 5,2%", "code": "rec_5_2", "value": "520", "scale": "2", @@ -191,7 +191,7 @@ "aeat_code": "51" }, { - "name": "Rec. de equivalencia 1,75%", + "name": "Rec. 1,75%", "code": "rec_1_75", "value": "175", "scale": "2", @@ -200,7 +200,7 @@ "aeat_code": "52" }, { - "name": "Rec. de equivalencia 1,4%", + "name": "Rec. 1,4%", "code": "rec_1_4", "value": "140", "scale": "2", @@ -209,7 +209,7 @@ "aeat_code": null }, { - "name": "Rec. de equivalencia 1%", + "name": "Rec. 1%", "code": "rec_1", "value": "100", "scale": "2", @@ -218,7 +218,7 @@ "aeat_code": null }, { - "name": "Rec. de equivalencia 0,62%", + "name": "Rec. 0,62%", "code": "rec_0_62", "value": "62", "scale": "2", @@ -227,7 +227,7 @@ "aeat_code": null }, { - "name": "Rec. de equivalencia 0,5%", + "name": "Rec. 0,5%", "code": "rec_0_5", "value": "50", "scale": "2", @@ -236,7 +236,7 @@ "aeat_code": null }, { - "name": "Rec. de equivalencia 0,26%", + "name": "Rec. 0,26%", "code": "rec_0_26", "value": "26", "scale": "2", @@ -245,7 +245,7 @@ "aeat_code": null }, { - "name": "Rec. de equivalencia 0%", + "name": "Rec. 0%", "code": "rec_0", "value": "0", "scale": "2", diff --git a/modules/customer-invoices/src/common/locales/en.json b/modules/customer-invoices/src/common/locales/en.json index 9442ac88..30fa4517 100644 --- a/modules/customer-invoices/src/common/locales/en.json +++ b/modules/customer-invoices/src/common/locales/en.json @@ -16,6 +16,7 @@ "rows_selected": "{{count}} fila(s) seleccionadas.", "rows_selected_of_total": "{{count}} de {{total}} fila(s) seleccionadas." }, + "catalog": { "status": { "draft": "Draft", @@ -198,6 +199,9 @@ } }, "components": { + "datatable": { + "actions": "Actions" + }, "customer_invoice_taxes_multi_select": { "label": "Taxes", "placeholder": "Select taxes", diff --git a/modules/customer-invoices/src/common/locales/es.json b/modules/customer-invoices/src/common/locales/es.json index dbbfef18..17dd7299 100644 --- a/modules/customer-invoices/src/common/locales/es.json +++ b/modules/customer-invoices/src/common/locales/es.json @@ -191,6 +191,9 @@ } }, "components": { + "datatable": { + "actions": "Acciones" + }, "customer_invoice_taxes_multi_select": { "label": "Impuestos", "placeholder": "Selecciona impuestos", diff --git a/modules/customer-invoices/src/web/components/customer-invoice-taxes-multi-select.tsx b/modules/customer-invoices/src/web/components/customer-invoice-taxes-multi-select.tsx index 992183c9..ce16555e 100644 --- a/modules/customer-invoices/src/web/components/customer-invoice-taxes-multi-select.tsx +++ b/modules/customer-invoices/src/web/components/customer-invoice-taxes-multi-select.tsx @@ -4,41 +4,9 @@ import { cn } from "@repo/shadcn-ui/lib/utils"; import { useCallback, useMemo } from 'react'; import { useTranslation } from "../i18n"; -const taxesList = [ - { label: "IVA 21%", value: "iva_21", group: "IVA" }, - { label: "IVA 10%", value: "iva_10", group: "IVA" }, - { label: "IVA 7,5%", value: "iva_7_5", group: "IVA" }, - { label: "IVA 5%", value: "iva_5", group: "IVA" }, - { label: "IVA 4%", value: "iva_4", group: "IVA" }, - { label: "IVA 2%", value: "iva_2", group: "IVA" }, - { label: "IVA 0%", value: "iva_0", group: "IVA" }, - { label: "Exenta", value: "iva_exenta", group: "IVA" }, - { label: "No sujeto", value: "iva_no_sujeto", group: "IVA" }, - { label: "Iva Intracomunitario Bienes", value: "iva_intracomunitario_bienes", group: "IVA" }, - { label: "Iva Intracomunitario Servicio", value: "iva_intracomunitario_servicio", group: "IVA" }, - { label: "Exportación", value: "iva_exportacion", group: "IVA" }, - { label: "Inv. Suj. Pasivo", value: "iva_inversion_sujeto_pasivo", group: "IVA" }, - - { label: "Retención 35%", value: "retencion_35", group: "Retención" }, - { label: "Retención 19%", value: "retencion_19", group: "Retención" }, - { label: "Retención 15%", value: "retencion_15", group: "Retención" }, - { label: "Retención 7%", value: "retencion_7", group: "Retención" }, - { label: "Retención 2%", value: "retencion_2", group: "Retención" }, - - { label: "REC 5,2%", value: "rec_5_2", group: "Recargo de equivalencia" }, - { label: "REC 1,75%", value: "rec_1_75", group: "Recargo de equivalencia" }, - { label: "REC 1,4%", value: "rec_1_4", group: "Recargo de equivalencia" }, - { label: "REC 1%", value: "rec_1", group: "Recargo de equivalencia" }, - { label: "REC 0,62%", value: "rec_0_62", group: "Recargo de equivalencia" }, - { label: "REC 0,5%", value: "rec_0_5", group: "Recargo de equivalencia" }, - { label: "REC 0,26%", value: "rec_0_26", group: "Recargo de equivalencia" }, - { label: "REC 0%", value: "rec_0", group: "Recargo de equivalencia" }, -]; - - interface CustomerInvoiceTaxesMultiSelect { - value: string[]; + value?: string[]; onChange: (selectedValues: string[]) => void; className?: string; [key: string]: any; // Allow other props to be passed diff --git a/modules/customer-invoices/src/web/components/editor/items/amount-input.tsx b/modules/customer-invoices/src/web/components/editor/items/amount-input.tsx index 47249aec..a933e4ba 100644 --- a/modules/customer-invoices/src/web/components/editor/items/amount-input.tsx +++ b/modules/customer-invoices/src/web/components/editor/items/amount-input.tsx @@ -1,5 +1,6 @@ import { formatCurrency } from '@erp/core'; import { useMoney } from '@erp/core/hooks'; +import { Input } from '@repo/shadcn-ui/components'; import { cn } from '@repo/shadcn-ui/lib/utils'; import * as React from "react"; import { findFocusableInCell, focusAndSelect } from './input-utils'; @@ -166,7 +167,7 @@ export function AmountInput({ if (readOnly && readOnlyMode === "textlike-input") { return ( - void }) { + // Editor simple reutilizando el mismo RHF + const { register } = useFormContext(); + return ( +
+

Edit line #{index + 1}

+
+ +