diff --git a/frontend/src/lib/components/dashboard/invoices/edit/general-tab-form.svelte b/frontend/src/lib/components/dashboard/invoices/edit/general-tab-form.svelte
index ac50af33..5f9e640d 100644
--- a/frontend/src/lib/components/dashboard/invoices/edit/general-tab-form.svelte
+++ b/frontend/src/lib/components/dashboard/invoices/edit/general-tab-form.svelte
@@ -1,7 +1,8 @@
-
-
+
+
Datos del pedimento
+
+
+
Fecha del:
+
{formData.fecha_pedimento_del || '-'}
+
+
+
Fecha al:
+
{formData.fecha_pedimento_al || '-'}
+
+
+
Clave:
+
{formData.clave_pedimento || '-'}
+
+
+
Régimen:
+
{formData.regimen_pedimento || '-'}
+
+
+
+
Clientes - Proveedores - Agente Aduanal
-
Tipo de Moneda - Pesos Netos y Brutos
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/lib/components/dashboard/invoices/edit/invoice-top-fields.svelte b/frontend/src/lib/components/dashboard/invoices/edit/invoice-top-fields.svelte
index bee69a12..8e4700a4 100644
--- a/frontend/src/lib/components/dashboard/invoices/edit/invoice-top-fields.svelte
+++ b/frontend/src/lib/components/dashboard/invoices/edit/invoice-top-fields.svelte
@@ -5,21 +5,41 @@
import { Switch } from '$lib/components/ui/switch';
import type { Invoice } from '$lib/api/dashboard/a76/invoices';
import type { InvoiceType } from '$lib/api/dashboard/refrence_data/invoice_types';
+ import type { Pedimento } from '$lib/api/dashboard/a76/pedimentos';
let {
invoice,
formData = $bindable(),
invoiceTypes = [],
+ pedimentos = [],
defaultOperationType = undefined,
defaultInvoiceType = undefined,
}: {
invoice: Invoice | null;
formData?: any;
invoiceTypes?: InvoiceType[];
+ pedimentos?: Pedimento[];
defaultOperationType?: number | null;
defaultInvoiceType?: string | null;
} = $props();
+ function handlePedimentoChange(pedimentoId: string) {
+ if (!pedimentoId) return;
+
+ const selectedPedimento = pedimentos.find(p => p.id === parseInt(pedimentoId));
+ if (!selectedPedimento) return;
+
+ // Actualizar los campos del pedimento en formData
+ formData.fecha_pedimento_del = selectedPedimento.pedimento_dates?.start_date || '';
+ formData.fecha_pedimento_al = selectedPedimento.pedimento_dates?.end_date || '';
+ formData.clave_pedimento = selectedPedimento.pedimento_code || '';
+ formData.regimen_pedimento = selectedPedimento.regime || '';
+
+ // Construir el número de pedimento completo
+ const pedimentoNumber = `${selectedPedimento.year || ''}-${selectedPedimento.customs_office || ''}-${selectedPedimento.license || ''}-${selectedPedimento.pedimento_number || ''}`.replace(/^-+|-+$/g, '');
+ formData.pedimento = pedimentoNumber;
+ }
+
if (!formData) {
let operationType: number | null = null;
if (invoice?.operation_type) {
@@ -30,6 +50,7 @@
formData = {
is_pedimento_pending: false,
+ pedimento_id: null,
pedimento: invoice?.compliance_mx?.pedimento || '',
remesa: invoice?.compliance_mx?.remesa || '',
invoice_number: invoice?.invoice_number || '',
@@ -37,6 +58,11 @@
emission_date: '',
operation_type: operationType,
invoice_type: invoice?.invoice_type || (defaultInvoiceType ?? ''),
+ // Campos del pedimento (se llenarán al seleccionar un pedimento)
+ fecha_pedimento_del: '',
+ fecha_pedimento_al: '',
+ clave_pedimento: '',
+ regimen_pedimento: '',
};
}
@@ -103,7 +129,29 @@
-
+ {
+ formData.pedimento_id = v ? parseInt(v) : null;
+ if (v) {
+ handlePedimentoChange(v);
+ }
+ }}
+ >
+
+
+ {formData.pedimento || 'Selecciona pedimento...'}
+
+
+
+ {#each pedimentos as pedimento}
+
+ {pedimento.year}-{pedimento.customs_office}-{pedimento.license}-{pedimento.pedimento_number}
+
+ {/each}
+
+
diff --git a/frontend/src/routes/dashboard/invoices/edit/[id]/+page.server.ts b/frontend/src/routes/dashboard/invoices/edit/[id]/+page.server.ts
index ffb19ce8..11d7de3a 100644
--- a/frontend/src/routes/dashboard/invoices/edit/[id]/+page.server.ts
+++ b/frontend/src/routes/dashboard/invoices/edit/[id]/+page.server.ts
@@ -95,6 +95,13 @@ export const load: PageServerLoad = async ({ params, cookies, fetch, url }) => {
fetch
);
+ const pedimentosPromise = authenticatedFetch(
+ `v1/a76/pedimentos?company_id=${companyId}&page=1&page_size=100`,
+ {},
+ cookies,
+ fetch
+ );
+
// Si el ID es "new", es una creación
if (params.id === 'new') {
const [
@@ -106,7 +113,8 @@ export const load: PageServerLoad = async ({ params, cookies, fetch, url }) => {
transportTypesResponse,
sealsResponse,
incotermsResponse,
- enclosureResponse
+ enclosureResponse,
+ pedimentosResponse
] = await Promise.all([
invoiceTypesPromise,
customsBrokersPromise,
@@ -116,7 +124,8 @@ export const load: PageServerLoad = async ({ params, cookies, fetch, url }) => {
transportTypesPromise,
sealsPromise,
incotermsPromise,
- enclosurePromise
+ enclosurePromise,
+ pedimentosPromise
]);
const invoiceTypes = invoiceTypesResponse.ok ? await invoiceTypesResponse.json() : { items: [] };
@@ -128,6 +137,7 @@ export const load: PageServerLoad = async ({ params, cookies, fetch, url }) => {
const seals = sealsResponse.ok ? await sealsResponse.json() : { items: [] };
const incoterms = incotermsResponse.ok ? await incotermsResponse.json() : { items: [] };
const enclosure = enclosureResponse.ok ? await enclosureResponse.json() : { items: [] };
+ const pedimentos = pedimentosResponse.ok ? await pedimentosResponse.json() : { items: [] };
return {
invoice: null,
@@ -142,6 +152,7 @@ export const load: PageServerLoad = async ({ params, cookies, fetch, url }) => {
seals: seals.items || [],
incoterms: incoterms.items || [],
enclosure: enclosure.items || [],
+ pedimentos: pedimentos.items || [],
// Filtros desde query parameters para preselección
filters: {
operation_type: parsedOperationType,
@@ -180,7 +191,8 @@ export const load: PageServerLoad = async ({ params, cookies, fetch, url }) => {
transportTypesResponse,
sealsResponse,
incotermsResponse,
- enclosureResponse
+ enclosureResponse,
+ pedimentosResponse
] = await Promise.all([
invoiceTypesPromise,
customsBrokersPromise,
@@ -190,7 +202,8 @@ export const load: PageServerLoad = async ({ params, cookies, fetch, url }) => {
transportTypesPromise,
sealsPromise,
incotermsPromise,
- enclosurePromise
+ enclosurePromise,
+ pedimentosPromise
]);
const invoiceTypes = invoiceTypesResponse.ok ? await invoiceTypesResponse.json() : { items: [] };
@@ -202,6 +215,7 @@ export const load: PageServerLoad = async ({ params, cookies, fetch, url }) => {
const seals = sealsResponse.ok ? await sealsResponse.json() : { items: [] };
const incoterms = incotermsResponse.ok ? await incotermsResponse.json() : { items: [] };
const enclosure = enclosureResponse.ok ? await enclosureResponse.json() : { items: [] };
+ const pedimentos = pedimentosResponse.ok ? await pedimentosResponse.json() : { items: [] };
return {
invoice,
@@ -216,6 +230,7 @@ export const load: PageServerLoad = async ({ params, cookies, fetch, url }) => {
seals: seals.items || [],
incoterms: incoterms.items || [],
enclosure: enclosure.items || [],
+ pedimentos: pedimentos.items || [],
// Filtros desde query parameters para preselección
filters: {
operation_type: parsedOperationType,
diff --git a/frontend/src/routes/dashboard/invoices/edit/[id]/+page.svelte b/frontend/src/routes/dashboard/invoices/edit/[id]/+page.svelte
index 5d0cf1a8..3bc2c203 100644
--- a/frontend/src/routes/dashboard/invoices/edit/[id]/+page.svelte
+++ b/frontend/src/routes/dashboard/invoices/edit/[id]/+page.svelte
@@ -57,6 +57,7 @@
operation_type?: number | null;
invoice_type?: string | null;
};
+ pedimentos?: any[];
}
let { data }: { data: ExtendedPageData } = $props();
@@ -573,6 +574,7 @@
invoice={data.invoice}
bind:formData={generalFormData}
invoiceTypes={data.invoiceTypes || []}
+ pedimentos={data.pedimentos || []}
defaultOperationType={data.filters?.operation_type ?? undefined}
defaultInvoiceType={data.filters?.invoice_type ?? undefined}
/>