From ae0664e987f6315853ebe65dbbc8cd60976a82c2 Mon Sep 17 00:00:00 2001 From: Jair Cedillo Date: Fri, 7 Aug 2026 17:10:57 -0500 Subject: [PATCH] =?UTF-8?q?refactor(fin):=20conceptos=20con=20p=C3=A1ginas?= =?UTF-8?q?=20dedicadas=20en=20vez=20de=20modal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sustituye el diálogo de alta/edición por el patrón que ya usa el CRM para proveedores y cuentas: la lista solo lista, y el alta y la edición viven en /dashboard/fin/conceptos/nuevo y /dashboard/fin/conceptos/[id]. Los campos del formulario se extraen a $lib/components/fin/ConceptFields.svelte para que ambas pantallas compartan el combobox de clave ProdServ y los selects de unidad y objeto de impuesto. El 409 del backend por clave ya asignada se sigue mostrando junto al campo. Co-Authored-By: Claude Opus 5 (1M context) --- .../lib/components/fin/ConceptFields.svelte | 185 +++++++++++ .../dashboard/fin/conceptos/+page.svelte | 313 +----------------- .../dashboard/fin/conceptos/[id]/+page.svelte | 155 +++++++++ .../fin/conceptos/nuevo/+page.svelte | 99 ++++++ 4 files changed, 457 insertions(+), 295 deletions(-) create mode 100644 frontend/src/lib/components/fin/ConceptFields.svelte create mode 100644 frontend/src/routes/dashboard/fin/conceptos/[id]/+page.svelte create mode 100644 frontend/src/routes/dashboard/fin/conceptos/nuevo/+page.svelte diff --git a/frontend/src/lib/components/fin/ConceptFields.svelte b/frontend/src/lib/components/fin/ConceptFields.svelte new file mode 100644 index 0000000..b6e7523 --- /dev/null +++ b/frontend/src/lib/components/fin/ConceptFields.svelte @@ -0,0 +1,185 @@ + + +
+ + + + + +
+ Clave de producto/servicio del SAT * +

+ Una clave del SAT solo puede estar asignada a un concepto de la empresa. +

+ {#if productService} +
+ + {productService.code} + — {productService.description} + + +
+ {:else} + + {#if searchingProductService} +

Buscando…

+ {:else if productServiceOptions.length > 0} +
    + {#each productServiceOptions as option (option.id)} +
  • + +
  • + {/each} +
+ {:else if productServiceQuery.trim().length >= 2} +

Sin coincidencias en el catálogo.

+ {/if} + {/if} + {#if productServiceError} +

{productServiceError}

+ {/if} +
+ + + + + + + + +
diff --git a/frontend/src/routes/dashboard/fin/conceptos/+page.svelte b/frontend/src/routes/dashboard/fin/conceptos/+page.svelte index ed87f66..11c1304 100644 --- a/frontend/src/routes/dashboard/fin/conceptos/+page.svelte +++ b/frontend/src/routes/dashboard/fin/conceptos/+page.svelte @@ -1,60 +1,23 @@ + + + {concept ? `Concepto ${concept.code}` : 'Concepto de facturación'} + + +
+ + + {#if loading && !concept} +

Cargando…

+ {:else if concept} +
+
+

+ + {concept.code} +

+

+ {concept.description} + {#if concept.product_service} + · {concept.product_service.code} + {/if} + · {concept.is_active ? 'Activo' : 'Inactivo'} +

+
+ +
+ + + +
+ + +
+ +
+ +
+
+ {/if} +
diff --git a/frontend/src/routes/dashboard/fin/conceptos/nuevo/+page.svelte b/frontend/src/routes/dashboard/fin/conceptos/nuevo/+page.svelte new file mode 100644 index 0000000..a6f0e12 --- /dev/null +++ b/frontend/src/routes/dashboard/fin/conceptos/nuevo/+page.svelte @@ -0,0 +1,99 @@ + + + + Nuevo concepto de facturación + + +
+ + +
+

+ Nuevo concepto +

+

+ Cada concepto se liga a una clave de producto/servicio del SAT. +

+
+ + + +
+ + +
+ + +
+ +
+
+