diff --git a/.gitignore b/.gitignore index a7c93c6b..3126b165 100644 --- a/.gitignore +++ b/.gitignore @@ -82,3 +82,4 @@ backend/celerybeat-schedule celerybeat-schedule celerybeat-schedule.* celerybeat.pid +backend/api/v1/modules/reports/generated/ diff --git a/frontend/src/lib/api/dashboard/a76/reports/reports-transmission.ts b/frontend/src/lib/api/dashboard/a76/reports/reports-transmission.ts index a845ed10..d9bccf67 100644 --- a/frontend/src/lib/api/dashboard/a76/reports/reports-transmission.ts +++ b/frontend/src/lib/api/dashboard/a76/reports/reports-transmission.ts @@ -1,247 +1,64 @@ - -const BASE_URL = import.meta.env.VITE_API_URL || ''; +import { api } from '$lib/api'; export const reportsTransmissionApi = { triggerGeneration: async (request: any) => { - const endpoint = `${BASE_URL}/v1/a76/reports/exportacion/transmission/generate`; - - const token = localStorage.getItem('access_token'); - const response = await fetch(endpoint, { - method: 'POST', - headers: { - 'Authorization': `Bearer ${token}`, - 'Content-Type': 'application/json' - }, - body: JSON.stringify(request) - }); - - if (!response.ok) { - let errorMessage = 'Error al iniciar la generación del archivo de transmisión'; - try { - const errorData = await response.json(); - errorMessage = errorData.detail || errorData.message || errorMessage; - } catch (e) { - try { - const text = await response.text(); - if (text) errorMessage = text; - } catch (e2) {} - } - throw new Error(errorMessage); - } - return await response.json(); + const result = await api.post('/v1/a76/reports/exportacion/transmission/generate', request); + if (result.error || !result.data) throw new Error(result.error || 'Error al iniciar la generación del archivo de transmisión'); + return result.data; }, getTaskStatus: async (taskId: string) => { - const endpoint = `${BASE_URL}/v1/a76/reports/exportacion/transmission/tasks/${taskId}`; - - const token = localStorage.getItem('access_token'); - const response = await fetch(endpoint, { - method: 'GET', - headers: { 'Authorization': `Bearer ${token}` } - }); - - if (!response.ok) { - let errorMessage = 'Error al consultar estado de la transmisión'; - try { - const errorData = await response.json(); - errorMessage = errorData.detail || errorData.message || errorMessage; - } catch (e) { - try { - const text = await response.text(); - if (text) errorMessage = text; - } catch (e2) {} - } - throw new Error(errorMessage); - } - return await response.json(); + const result = await api.get(`/v1/a76/reports/exportacion/transmission/tasks/${taskId}`); + if (result.error || !result.data) throw new Error(result.error || 'Error al consultar estado de la transmisión'); + return result.data; }, triggerTemporalGeneration: async (request: any) => { - const endpoint = `${BASE_URL}/v1/a76/reports/importacion/transmission/temporal/generate`; - - const token = localStorage.getItem('access_token'); - const response = await fetch(endpoint, { - method: 'POST', - headers: { - 'Authorization': `Bearer ${token}`, - 'Content-Type': 'application/json' - }, - body: JSON.stringify(request) - }); - - if (!response.ok) { - let errorMessage = 'Error al iniciar la generación temporal'; - try { - const errorData = await response.json(); - errorMessage = errorData.detail || errorData.message || errorMessage; - } catch (e) { - try { - const text = await response.text(); - if (text) errorMessage = text; - } catch (e2) {} - } - throw new Error(errorMessage); - } - return await response.json(); + const result = await api.post('/v1/a76/reports/importacion/transmission/temporal/generate', request); + if (result.error || !result.data) throw new Error(result.error || 'Error al iniciar la generación temporal'); + return result.data; }, getTemporalTaskStatus: async (taskId: string) => { - const endpoint = `${BASE_URL}/v1/a76/reports/importacion/transmission/temporal/tasks/${taskId}`; - - const token = localStorage.getItem('access_token'); - const response = await fetch(endpoint, { - method: 'GET', - headers: { 'Authorization': `Bearer ${token}` } - }); - - if (!response.ok) { - let errorMessage = 'Error al consultar estado de la transmisión temporal'; - try { - const errorData = await response.json(); - errorMessage = errorData.detail || errorData.message || errorMessage; - } catch (e) { - try { - const text = await response.text(); - if (text) errorMessage = text; - } catch (e2) {} - } - throw new Error(errorMessage); - } - return await response.json(); + const result = await api.get(`/v1/a76/reports/importacion/transmission/temporal/tasks/${taskId}`); + if (result.error || !result.data) throw new Error(result.error || 'Error al consultar estado de la transmisión temporal'); + return result.data; }, triggerDefinitiveGeneration: async (request: any) => { - const endpoint = `${BASE_URL}/v1/a76/reports/importacion/transmission/definitive/generate`; - - const token = localStorage.getItem('access_token'); - const response = await fetch(endpoint, { - method: 'POST', - headers: { - 'Authorization': `Bearer ${token}`, - 'Content-Type': 'application/json' - }, - body: JSON.stringify(request) - }); - - if (!response.ok) { - let errorMessage = 'Error al iniciar la generación definitiva'; - try { - const errorData = await response.json(); - errorMessage = errorData.detail || errorData.message || errorMessage; - } catch (e) { - try { - const text = await response.text(); - if (text) errorMessage = text; - } catch (e2) {} - } - throw new Error(errorMessage); - } - return await response.json(); + const result = await api.post('/v1/a76/reports/importacion/transmission/definitive/generate', request); + if (result.error || !result.data) throw new Error(result.error || 'Error al iniciar la generación definitiva'); + return result.data; }, getDefinitiveTaskStatus: async (taskId: string) => { - const endpoint = `${BASE_URL}/v1/a76/reports/importacion/transmission/definitive/tasks/${taskId}`; - - const token = localStorage.getItem('access_token'); - const response = await fetch(endpoint, { - method: 'GET', - headers: { 'Authorization': `Bearer ${token}` } - }); - - if (!response.ok) { - let errorMessage = 'Error al consultar estado de la transmisión definitiva'; - try { - const errorData = await response.json(); - errorMessage = errorData.detail || errorData.message || errorMessage; - } catch (e) { - try { - const text = await response.text(); - if (text) errorMessage = text; - } catch (e2) {} - } - throw new Error(errorMessage); - } - return await response.json(); + const result = await api.get(`/v1/a76/reports/importacion/transmission/definitive/tasks/${taskId}`); + if (result.error || !result.data) throw new Error(result.error || 'Error al consultar estado de la transmisión definitiva'); + return result.data; }, triggerXmlRbSystemsImpoTemp: async (request: { invoice_numbers: string[]; entry_port?: string; exit_port?: string }) => { - const endpoint = `${BASE_URL}/v1/a76/reports/xml-rb-systems/importacion-temporal/generate`; - const token = localStorage.getItem('access_token'); - const response = await fetch(endpoint, { - method: 'POST', - headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, - body: JSON.stringify(request) - }); - if (!response.ok) { - let errorMessage = 'Error al generar XML RB Systems (importación temporal)'; - try { errorMessage = (await response.json()).detail || errorMessage; } catch (e) {} - throw new Error(errorMessage); - } - return await response.json(); + const result = await api.post('/v1/a76/reports/xml-rb-systems/importacion-temporal/generate', request); + if (result.error || !result.data) throw new Error(result.error || 'Error al generar XML RB Systems (importación temporal)'); + return result.data; }, triggerXmlRbSystemsImpoDef: async (request: { invoice_numbers: string[]; entry_port?: string; exit_port?: string }) => { - const endpoint = `${BASE_URL}/v1/a76/reports/xml-rb-systems/importacion-definitiva/generate`; - const token = localStorage.getItem('access_token'); - const response = await fetch(endpoint, { - method: 'POST', - headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, - body: JSON.stringify(request) - }); - if (!response.ok) { - let errorMessage = 'Error al generar XML RB Systems (importación definitiva)'; - try { errorMessage = (await response.json()).detail || errorMessage; } catch (e) {} - throw new Error(errorMessage); - } - return await response.json(); + const result = await api.post('/v1/a76/reports/xml-rb-systems/importacion-definitiva/generate', request); + if (result.error || !result.data) throw new Error(result.error || 'Error al generar XML RB Systems (importación definitiva)'); + return result.data; }, - triggerXmlRbSystemsImpo: async (request: { invoice_numbers: string[]; entry_port?: string; exit_port?: string }) => { - const endpoint = `${BASE_URL}/v1/a76/reports/xml-rb-systems/importacion/generate`; - const token = localStorage.getItem('access_token'); - const response = await fetch(endpoint, { - method: 'POST', - headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, - body: JSON.stringify(request) - }); - if (!response.ok) { - let errorMessage = 'Error al generar XML RB Systems (importación)'; - try { errorMessage = (await response.json()).detail || errorMessage; } catch (e) {} - throw new Error(errorMessage); - } - return await response.json(); - }, - - triggerXmlRbSystemsExpo: async (request: { manifest_numbers: string[]; entry_port?: string; exit_port?: string; include_emanifest?: boolean }) => { - const endpoint = `${BASE_URL}/v1/a76/reports/xml-rb-systems/exportacion/generate`; - const token = localStorage.getItem('access_token'); - const response = await fetch(endpoint, { - method: 'POST', - headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, - body: JSON.stringify(request) - }); - if (!response.ok) { - let errorMessage = 'Error al generar XML RB Systems (exportación)'; - try { errorMessage = (await response.json()).detail || errorMessage; } catch (e) {} - throw new Error(errorMessage); - } - return await response.json(); + triggerXmlRbSystemsExpo: async (request: { manifest_numbers: string[]; include_emanifest?: boolean }) => { + const result = await api.post('/v1/a76/reports/xml-rb-systems/exportacion/generate', request); + if (result.error || !result.data) throw new Error(result.error || 'Error al generar XML RB Systems (exportación)'); + return result.data; }, triggerXmlOptimaExpo: async (request: { manifest_numbers: string[]; consolidar_partidas?: boolean }) => { - const endpoint = `${BASE_URL}/v1/a76/reports/xml-optima/exportacion/generate`; - const token = localStorage.getItem('access_token'); - const response = await fetch(endpoint, { - method: 'POST', - headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, - body: JSON.stringify(request) - }); - if (!response.ok) { - let errorMessage = 'Error al generar XML Optima (exportación)'; - try { errorMessage = (await response.json()).detail || errorMessage; } catch (e) {} - throw new Error(errorMessage); - } - return await response.json(); + const result = await api.post('/v1/a76/reports/xml-optima/exportacion/generate', request); + if (result.error || !result.data) throw new Error(result.error || 'Error al generar XML Optima (exportación)'); + return result.data; } }; diff --git a/frontend/src/lib/components/dashboard/exchange_rate/exchange-rate-guard.svelte b/frontend/src/lib/components/dashboard/exchange_rate/exchange-rate-guard.svelte index 47e19ee7..33164161 100644 --- a/frontend/src/lib/components/dashboard/exchange_rate/exchange-rate-guard.svelte +++ b/frontend/src/lib/components/dashboard/exchange_rate/exchange-rate-guard.svelte @@ -1,5 +1,6 @@ - +{#if browser} + +{/if} diff --git a/frontend/src/lib/components/dashboard/invoices/transferencia-electronica-modal.svelte b/frontend/src/lib/components/dashboard/invoices/transferencia-electronica-modal.svelte index 1f428a92..6d15ab6b 100644 --- a/frontend/src/lib/components/dashboard/invoices/transferencia-electronica-modal.svelte +++ b/frontend/src/lib/components/dashboard/invoices/transferencia-electronica-modal.svelte @@ -129,13 +129,13 @@ // --- XML_RB_SYSTEMS --- if (interfaceType === 'XML_RB_SYSTEMS') { - if (!entryPort || !exitPort) { - toast.error('Debe seleccionar tanto el puerto de entrada como el de salida'); - return; - } try { let res; if (movementType === 'Importacion') { + if (!entryPort || !exitPort) { + toast.error('Debe seleccionar tanto el puerto de entrada como el de salida'); + return; + } const validInvoices = manualInvoices.filter((i) => i && i.trim() !== ''); if (validInvoices.length === 0) { toast.error('Debe seleccionar al menos una factura'); @@ -156,8 +156,6 @@ } res = await reportsTransmissionApi.triggerXmlRbSystemsExpo({ manifest_numbers: validManifests, - entry_port: entryPort, - exit_port: exitPort, include_emanifest: !checks.no_enviar_emanifest }); } @@ -494,8 +492,8 @@ {/if} - - {#if movementType === 'Importacion' || interfaceType === 'XML_RB_SYSTEMS'} + + {#if movementType === 'Importacion'}