From 4302bd4655298c7254f971f573c483e3fe52e345 Mon Sep 17 00:00:00 2001 From: AlexeerCT Date: Tue, 3 Mar 2026 12:58:00 -0600 Subject: [PATCH 1/4] feat: Update environment variables and improve Sitar API configuration --- .env.example | 15 +++++---------- docker-compose.prod.yml | 5 +---- docker-compose.yml | 3 --- frontend/src/routes/auth/callback/+page.server.ts | 2 +- frontend/src/routes/login/+page.server.ts | 2 +- frontend/svelte.config.js | 2 +- 6 files changed, 9 insertions(+), 20 deletions(-) diff --git a/.env.example b/.env.example index 87dcbf5f..46bb47bc 100644 --- a/.env.example +++ b/.env.example @@ -31,16 +31,6 @@ CORE_DB_PASSWORD=postgres # Ejemplo para Hub: http://localhost:5173,http://100.78.6.108:5174,http://100.78.6.108:8001 CORS_ORIGINS=http://localhost:5173,http://localhost:3000 -# ---- API Tipo cambio (External) --- -EXTERNAL_API_URL=http://74.208.80.245:3000 -EXTERNAL_API_USER=devAS -EXTERNAL_API_PASSWORD=T6Y4mqP09Y[-2-3H - -# ----- API SITAR (Warnings) --- -SITAR_API_URL="" -SITAR_API_USER="" -SITAR_API_PASSWORD="" - # ----- Frontend ----- NODE_ENV=development VITE_API_URL=http://localhost:8000/api @@ -52,6 +42,11 @@ VITE_KEYCLOAK_CLIENT_ID=anexo76-frontend #------ Celery / Valkey ---------- VALKEY_URL=redis://valkey:6379/0 +# ----- Sitar API ----- +SITAR_API_URL=http://api.sitar.aduanasoft.com +SITAR_API_USER=user_sitar_api +SITAR_API_PASSWORD=password123 + # ================================== # CONFIGURACIÓN DE SINCRONIZACIÓN # ================================== diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 9b422bfa..2c828760 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -173,10 +173,7 @@ services: - CORS_ORIGINS=${CORS_ORIGINS:-https://anexo76-dev.aduanasoft.com,http://localhost:3000} - SITAR_API_URL=${SITAR_API_URL} - SITAR_API_USER=${SITAR_API_USER} - - SITAR_API_PASSWORD=${SITAR_API_PASSWORD} - - EXTERNAL_API_URL=${EXTERNAL_API_URL} - - EXTERNAL_API_USER=${EXTERNAL_API_USER} - - EXTERNAL_API_PASSWORD=${EXTERNAL_API_PASSWORD} + - SITAR_API_PASSWORD=${SITAR_API_PASSWORD} - VALKEY_URL=${VALKEY_URL:-redis://valkey:6379/0} - CENTRAL_SERVER_URL=${CENTRAL_SERVER_URL:-""} - SYNC_SECRET_TOKEN=${SYNC_SECRET_TOKEN:-change-this-sync-token-in-production} diff --git a/docker-compose.yml b/docker-compose.yml index 5ae2e394..78f78bd3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -178,9 +178,6 @@ services: - SITAR_API_URL=${SITAR_API_URL} - SITAR_API_USER=${SITAR_API_USER} - SITAR_API_PASSWORD=${SITAR_API_PASSWORD} - - EXTERNAL_API_URL=${EXTERNAL_API_URL} - - EXTERNAL_API_USER=${EXTERNAL_API_USER} - - EXTERNAL_API_PASSWORD=${EXTERNAL_API_PASSWORD} - VALKEY_URL=${VALKEY_URL:-redis://valkey:6379/0} - CENTRAL_SERVER_URL=${CENTRAL_SERVER_URL:-""} - SYNC_SECRET_TOKEN=${SYNC_SECRET_TOKEN:-change-this-sync-token-in-production} diff --git a/frontend/src/routes/auth/callback/+page.server.ts b/frontend/src/routes/auth/callback/+page.server.ts index 6e0426d5..5f3372bc 100644 --- a/frontend/src/routes/auth/callback/+page.server.ts +++ b/frontend/src/routes/auth/callback/+page.server.ts @@ -1,7 +1,7 @@ import { redirect } from '@sveltejs/kit'; import type { PageServerLoad } from './$types'; -export const load: PageServerLoad = async ({ url, cookies }) => { +export const load: PageServerLoad = async ({ url, cookies, fetch }) => { // Obtener el código y state de los query params const code = url.searchParams.get('code'); const state = url.searchParams.get('state'); diff --git a/frontend/src/routes/login/+page.server.ts b/frontend/src/routes/login/+page.server.ts index c8492b7a..0fd34e11 100644 --- a/frontend/src/routes/login/+page.server.ts +++ b/frontend/src/routes/login/+page.server.ts @@ -19,7 +19,7 @@ export const load: PageServerLoad = async ({ cookies, url }) => { }; export const actions = { - default: async ({ request, cookies, url }) => { + default: async ({ request, cookies, url, fetch }) => { const data = await request.formData(); const username = data.get('username')?.toString(); const password = data.get('password')?.toString(); diff --git a/frontend/svelte.config.js b/frontend/svelte.config.js index d3ef3f6a..72124dee 100644 --- a/frontend/svelte.config.js +++ b/frontend/svelte.config.js @@ -9,7 +9,7 @@ const config = { kit: { adapter: adapter(), csrf: { - checkOrigin: false + trustedOrigins: (process.env.TRUSTED_ORIGINS ?? process.env.CORS_ORIGINS ?? '').split(',').filter(Boolean) } } }; From 4f5da6fe4a191fb29d0f9a6e4737b0f5c93cc627 Mon Sep 17 00:00:00 2001 From: hreyes Date: Tue, 3 Mar 2026 12:01:57 -0700 Subject: [PATCH 2/4] feature/estados-codigo-postal-corregidos --- backend/celerybeat-schedule | Bin 0 -> 16384 bytes .../customs_brokers/create-dialog.svelte | 2 +- .../customs_brokers/edit-dialog.svelte | 1 + .../customs_brokers/edit/[[id]]/+page.svelte | 5 ++++- 4 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 backend/celerybeat-schedule diff --git a/backend/celerybeat-schedule b/backend/celerybeat-schedule new file mode 100644 index 0000000000000000000000000000000000000000..695dce4c6da7b87ad13a4835153fab45b8dac671 GIT binary patch literal 16384 zcmeI(O=uHA6bJB08%<(UEJjfjL`1P7SwE^CiU%cnD4`boK=9CIvzeHon~h{=#RLL5 zsfD?93gX3^XYnqcJ$V&8c@^~JK}6Iyoz>=0{0MD{@(;|unc2+j#9R`en0VeC82e%aju3zV1Rwwb2tWV=5P$##AOHaf{EGqyl0_q02spsO2w)#z zA7CHgK0qEo9zY&I9zY&I9zY&I9{A7lK-%8bET2Sn!d9kJHqIyQ>q-0JN!$N?%*N7b z8~@~JuJw%`YdshJRs{}l=)XU(A2w${ym|Tdi0j_r`6S<&^tO`<{5QuR&TzH@aDYR< zfUWPFf3`oCzB|{KpYeHe)d~62TEJm22XFC1frqm7{*)b`p)g0^`QSO2=ZmM;_Q(!n z$C7+CLem_iGHjmaJr_LcrMucOpMP7CXojxaOE0hd3xHOvww!UMoU_`I9qQd}IhZP3 zXz-Tsz2md|uJD^~NyxT#Op4~AR|$Bvmww>w;e+G9FXiA5kq7-^Nc#ib`@i{@0>PBY{ptTm~6ld3bOO8q%E z4sQ#8A>jI+zM|KD$>o$eXG)o=iDdOrvTV9g_D7v&tZ!90v&Je9q(|*CE1xT~`!sg( zvN;~@>aLbliTdP9>m>JU_rFIi9Gc3^eA;l-ufIjj41juZI8jIQ)8p**=Z!|4{g_@y Z)g&VzKmY;|fB*y_009U<00P4<@Ew)_gOmUO literal 0 HcmV?d00001 diff --git a/frontend/src/lib/components/dashboard/customs_brokers/create-dialog.svelte b/frontend/src/lib/components/dashboard/customs_brokers/create-dialog.svelte index 44bca734..672f019a 100644 --- a/frontend/src/lib/components/dashboard/customs_brokers/create-dialog.svelte +++ b/frontend/src/lib/components/dashboard/customs_brokers/create-dialog.svelte @@ -275,7 +275,7 @@
- + { formData.postal_code = e.currentTarget.value.replace(/[^a-zA-Z0-9]/g, ''); }} />
diff --git a/frontend/src/lib/components/dashboard/customs_brokers/edit-dialog.svelte b/frontend/src/lib/components/dashboard/customs_brokers/edit-dialog.svelte index 147df888..294c7515 100644 --- a/frontend/src/lib/components/dashboard/customs_brokers/edit-dialog.svelte +++ b/frontend/src/lib/components/dashboard/customs_brokers/edit-dialog.svelte @@ -318,6 +318,7 @@ placeholder="C.P." maxlength={15} disabled={loading} + oninput={(e) => { formData.postal_code = e.currentTarget.value.replace(/[^a-zA-Z0-9]/g, ''); }} />
diff --git a/frontend/src/routes/dashboard/customs_brokers/edit/[[id]]/+page.svelte b/frontend/src/routes/dashboard/customs_brokers/edit/[[id]]/+page.svelte index 801303a2..c52512ae 100644 --- a/frontend/src/routes/dashboard/customs_brokers/edit/[[id]]/+page.svelte +++ b/frontend/src/routes/dashboard/customs_brokers/edit/[[id]]/+page.svelte @@ -199,7 +199,9 @@ } function handleStateSelect(state: any) { - formData.state = state.m3_key || state.mex_key || state.ame_key; + // Mostrar en Estado la clave del estado (mex_key/ame_key), no el país (m3_key) + formData.state = state.mex_key || state.ame_key || state.m3_key; + if (state.m3_key) formData.country = state.m3_key; } // --- 4. GUARDADO --- @@ -538,6 +540,7 @@ placeholder="32000" disabled={loading} class="h-10" + oninput={(e) => { formData.postal_code = e.currentTarget.value.replace(/[^a-zA-Z0-9]/g, ''); }} />
From ae23a080bad989f1cfa379ec6510e9cfd13b4211 Mon Sep 17 00:00:00 2001 From: hreyes Date: Tue, 3 Mar 2026 12:58:33 -0700 Subject: [PATCH 3/4] feature/alerta-no-registros-agentes-clientes --- backend/celerybeat-schedule | Bin 0 -> 16384 bytes docker-compose.yml | 7 +- .../dashboard/PrerequisitesModal.svelte | 74 ++++++++++++++++++ .../src/lib/components/help/HelpDrawer.svelte | 2 +- .../keyboard/ShortcutsHelpModal.svelte | 13 ++- .../lib/components/sidebar/nav-main.svelte | 4 +- .../ui/select/select-content.svelte | 1 - .../goods/parts/edit/[[id]]/+page.server.ts | 55 +++++++++++++ .../goods/parts/edit/[[id]]/+page.svelte | 35 ++++++++- .../dashboard/invoices/edit/[id]/+page.svelte | 22 ++++++ .../pedimentos/edit/[id]/+page.svelte | 26 ++++++ 11 files changed, 221 insertions(+), 18 deletions(-) create mode 100644 backend/celerybeat-schedule create mode 100644 frontend/src/lib/components/dashboard/PrerequisitesModal.svelte create mode 100644 frontend/src/routes/dashboard/goods/parts/edit/[[id]]/+page.server.ts diff --git a/backend/celerybeat-schedule b/backend/celerybeat-schedule new file mode 100644 index 0000000000000000000000000000000000000000..8cda996d90f19534ef5b500c264fc536e50391cb GIT binary patch literal 16384 zcmeI(O=}ZD7zgl)i6*fP6eB1KB3^8etZ&$Zcu;}|S*&0M!9$nLW@?6Rc4c=~Odybx zT9|{-DTp7yv-kx(d-4N#^5CUVKY^gnbhb8!;!Dt?_8*vip54vNPJWqvNCJ8H;%=SI zFt*t!m{`r@OB1h}4P&2ez!m}!fB*y_009U<00Izz00bZafqzlpWIky`3jqf>7y+yU ztOKkA+y|%wr~{}2r~{}2r~{}2s00659VptnnoZ}CowLd1f{ly$e!XV*H!f^F@z-OC zx_qI>PCaqls=xsbO7Lk^YgZUnZi7M2ZZNjo^M{=IVuN?oyqIf zJ{sl}wZF~Nyyt?aqtZ}2=JRioia7GTQE6@SUjQ^?wf~ZH(V5eZ9MI7tmV>GKwH{AI z;Gez8ABiCLT0-`hDQEUDm47@g~$dgqty7R))*T&8C7*{Aum=|YvQoJQ;(P*pR>4iBYI`z~{@xa + import * as AlertDialog from '$lib/components/ui/alert-dialog'; + import { CircleAlert } from 'lucide-svelte'; + + let { + open = $bindable(false), + agentsCount = 0, + clientsCount = 0, + onAccept, + onCancel + }: { + open?: boolean; + agentsCount?: number; + clientsCount?: number; + onAccept?: () => void; + onCancel?: () => void; + } = $props(); + + const showModal = $derived(agentsCount === 0 || clientsCount === 0); + + const message = $derived( + agentsCount === 0 && clientsCount === 0 + ? 'No hay Agentes aduanales ni Clientes registrados. Debes darlos de alta para poder trabajar en este módulo.' + : agentsCount === 0 + ? 'No hay Agentes aduanales registrados. Debes darlos de alta para poder trabajar en este módulo.' + : 'No hay Clientes registrados. Debes darlos de alta para poder trabajar en este módulo.' + ); + + function handleOpenChange(newOpen: boolean) { + open = newOpen; + } + + function handleCancel() { + onCancel?.(); + } + + function handleAccept() { + onAccept?.(); + } + + + + + +
+ + Aviso +
+ +

{message}

+

+ Puedes registrarlos en + + Agentes Aduanales + + y + + Clientes y Proveedores + . +

+
+
+ + Cancelar + Aceptar + +
+
diff --git a/frontend/src/lib/components/help/HelpDrawer.svelte b/frontend/src/lib/components/help/HelpDrawer.svelte index 6a557aed..e2de2644 100644 --- a/frontend/src/lib/components/help/HelpDrawer.svelte +++ b/frontend/src/lib/components/help/HelpDrawer.svelte @@ -121,7 +121,7 @@ - +
From d061193d96b21593a59d9c2d7d3d973dcb85688f Mon Sep 17 00:00:00 2001 From: hreyes Date: Tue, 3 Mar 2026 13:07:15 -0700 Subject: [PATCH 4/4] fix/celerybeat-ignore --- .gitignore | 4 ++++ backend/celerybeat-schedule | Bin 16384 -> 0 bytes 2 files changed, 4 insertions(+) delete mode 100644 backend/celerybeat-schedule diff --git a/.gitignore b/.gitignore index 2db7f63a..0e7f227c 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,7 @@ postgres-data/ backend/uploads/ docker-compose.yml .mypy_cache/ + + +# Celery +celerybeat-schedule \ No newline at end of file diff --git a/backend/celerybeat-schedule b/backend/celerybeat-schedule deleted file mode 100644 index 695dce4c6da7b87ad13a4835153fab45b8dac671..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeI(O=uHA6bJB08%<(UEJjfjL`1P7SwE^CiU%cnD4`boK=9CIvzeHon~h{=#RLL5 zsfD?93gX3^XYnqcJ$V&8c@^~JK}6Iyoz>=0{0MD{@(;|unc2+j#9R`en0VeC82e%aju3zV1Rwwb2tWV=5P$##AOHaf{EGqyl0_q02spsO2w)#z zA7CHgK0qEo9zY&I9zY&I9zY&I9{A7lK-%8bET2Sn!d9kJHqIyQ>q-0JN!$N?%*N7b z8~@~JuJw%`YdshJRs{}l=)XU(A2w${ym|Tdi0j_r`6S<&^tO`<{5QuR&TzH@aDYR< zfUWPFf3`oCzB|{KpYeHe)d~62TEJm22XFC1frqm7{*)b`p)g0^`QSO2=ZmM;_Q(!n z$C7+CLem_iGHjmaJr_LcrMucOpMP7CXojxaOE0hd3xHOvww!UMoU_`I9qQd}IhZP3 zXz-Tsz2md|uJD^~NyxT#Op4~AR|$Bvmww>w;e+G9FXiA5kq7-^Nc#ib`@i{@0>PBY{ptTm~6ld3bOO8q%E z4sQ#8A>jI+zM|KD$>o$eXG)o=iDdOrvTV9g_D7v&tZ!90v&Je9q(|*CE1xT~`!sg( zvN;~@>aLbliTdP9>m>JU_rFIi9Gc3^eA;l-ufIjj41juZI8jIQ)8p**=Z!|4{g_@y Z)g&VzKmY;|fB*y_009U<00P4<@Ew)_gOmUO