From dedef1672e7d174882f41321beea201ef0db5546 Mon Sep 17 00:00:00 2001 From: acazares Date: Fri, 13 Feb 2026 10:40:24 -0600 Subject: [PATCH] refactor: update API endpoints and improve company ID handling in various components --- backend/main.py | 7 - .../create-edit-dialog.svelte | 4 +- .../identifiers/create-edit-dialog.svelte | 5 + .../incoterms/data-table.svelte | 171 ++++++++---------- .../classification_concepts/+page.server.ts | 2 +- .../classification_concepts/+page.svelte | 1 - .../general_catalogs/concepts/+page.server.ts | 2 +- .../customs_broker_concepts/+page.server.ts | 23 ++- .../customs_broker_concepts/+page.svelte | 15 +- .../general_catalogs/doda/+page.server.ts | 11 +- .../electronic_notices/+page.server.ts | 11 +- .../equivalencies/+page.server.ts | 11 +- .../identifiers/+page.server.ts | 13 +- .../general_catalogs/inpc/+page.server.ts | 11 +- .../general_catalogs/packages/+page.server.ts | 2 +- .../general_catalogs/ports/+page.server.ts | 12 +- .../prevalidators/+page.server.ts | 11 +- .../signatures/+page.server.ts | 11 +- .../unit_conversions/+page.server.ts | 8 +- .../invoices/items/presets/+page.svelte | 2 +- .../reference_data/incoterms/+page.server.ts | 2 +- .../reference_data/incoterms/+page.svelte | 8 +- 22 files changed, 186 insertions(+), 157 deletions(-) diff --git a/backend/main.py b/backend/main.py index b609d156..ae673fbf 100644 --- a/backend/main.py +++ b/backend/main.py @@ -17,12 +17,10 @@ from core.middleware import ( ) from fastapi import FastAPI, Request, status, HTTPException from fastapi.middleware.cors import CORSMiddleware -from fastapi.middleware.trustedhost import TrustedHostMiddleware from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse from fastapi.staticfiles import StaticFiles from pathlib import Path -from uvicorn.middleware.proxy_headers import ProxyHeadersMiddleware # Importar modelos para registrar con SQLAlchemy from api.v1.modules.a76.items.models import Item @@ -97,11 +95,6 @@ async def on_startup(): run_migrations() logger.info("Base de datos inicializada correctamente.") - -# Configurar middleware para headers de proxy (HTTPS en producción) -# Esto asegura que los redirects 307 usen https:// en producción -app.add_middleware(ProxyHeadersMiddleware, trusted_hosts="*") - # Configurar CORS app.add_middleware( CORSMiddleware, diff --git a/frontend/src/lib/components/dashboard/general_catalogs/customs_broker_concepts/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/general_catalogs/customs_broker_concepts/create-edit-dialog.svelte index 930275f5..30f7a7c0 100644 --- a/frontend/src/lib/components/dashboard/general_catalogs/customs_broker_concepts/create-edit-dialog.svelte +++ b/frontend/src/lib/components/dashboard/general_catalogs/customs_broker_concepts/create-edit-dialog.svelte @@ -122,7 +122,7 @@ id="broker_key" bind:value={formData.broker_key} placeholder="Ej: 01001" - maxlength="5" + maxlength={5} disabled={isEdit} /> @@ -133,7 +133,7 @@ id="concept" bind:value={formData.concept} placeholder="Ej: 001" - maxlength="15" + maxlength={15} disabled={isEdit} /> diff --git a/frontend/src/lib/components/dashboard/general_catalogs/identifiers/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/general_catalogs/identifiers/create-edit-dialog.svelte index 6e57fd57..73dd547f 100644 --- a/frontend/src/lib/components/dashboard/general_catalogs/identifiers/create-edit-dialog.svelte +++ b/frontend/src/lib/components/dashboard/general_catalogs/identifiers/create-edit-dialog.svelte @@ -5,6 +5,11 @@ import { Label } from '$lib/components/ui/label'; import { companyStore } from '$lib/stores/company.svelte'; import { obtenerAtajosFormularioIdentificadores } from '$lib/config/shortcuts/dashboard/general_catalogs/identifiers/edit'; + import { + createIdentifier, + updateIdentifier, + type Identifier + } from '$lib/api/dashboard/a76/general_catalogs/identifiers'; let { open = $bindable(false), diff --git a/frontend/src/lib/components/dashboard/reference_data/incoterms/data-table.svelte b/frontend/src/lib/components/dashboard/reference_data/incoterms/data-table.svelte index 4c448e3d..3d5b2a66 100644 --- a/frontend/src/lib/components/dashboard/reference_data/incoterms/data-table.svelte +++ b/frontend/src/lib/components/dashboard/reference_data/incoterms/data-table.svelte @@ -1,123 +1,106 @@ -
-
- - - {#each table.getHeaderGroups() as headerGroup (headerGroup.id)} - - {#each headerGroup.headers as header (header.id)} - - {#if !header.isPlaceholder} - - {/if} - - {/each} - - {/each} - - - {#each table.getRowModel().rows as row (row.id)} - - {#each row.getVisibleCells() as cell (cell.id)} - +
+ + + {#each table.getHeaderGroups() as headerGroup (headerGroup.id)} + + {#each headerGroup.headers as header (header.id)} + + {#if !header.isPlaceholder} - - {/each} - - {:else} - - - No hay resultados. + {/if} + + {/each} + + {/each} + + + {#each table.getRowModel().rows as row (row.id)} + + {#each row.getVisibleCells() as cell (cell.id)} + + - - {/each} - - - {#if hasMore} - - -
- {#if loading} -
-
- Cargando más... -
- {:else} -
- Desplázate para cargar más -
- {/if} -
-
-
- {/if} -
-
+ {/each} + + {:else} + + + No hay resultados. + + + {/each} + + +
+ +
+
+ Total: {totalItems} registros +
+
+ +
diff --git a/frontend/src/routes/dashboard/general_catalogs/classification_concepts/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/classification_concepts/+page.server.ts index d5aa261b..f6619ae7 100644 --- a/frontend/src/routes/dashboard/general_catalogs/classification_concepts/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/classification_concepts/+page.server.ts @@ -39,7 +39,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { page_size: pageSize.toString(), ...filters }); - const response = await authenticatedFetch(`v1/a76/classification-concepts?${queryParams.toString()}`, { method: 'GET' }, cookies, fetch); + const response = await authenticatedFetch(`v1/a76/classification-concepts/?${queryParams.toString()}`, { method: 'GET' }, cookies, fetch); if (!response.ok) { return { error: 'Failed to load', classifications: { items: [], total: 0, page, page_size: pageSize, pages: 0 } }; diff --git a/frontend/src/routes/dashboard/general_catalogs/classification_concepts/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/classification_concepts/+page.svelte index d914cb4b..ce51bb9b 100644 --- a/frontend/src/routes/dashboard/general_catalogs/classification_concepts/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/classification_concepts/+page.svelte @@ -89,7 +89,6 @@ />
diff --git a/frontend/src/routes/dashboard/general_catalogs/concepts/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/concepts/+page.server.ts index ad8d40cc..2ff02a9e 100644 --- a/frontend/src/routes/dashboard/general_catalogs/concepts/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/concepts/+page.server.ts @@ -59,7 +59,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { }); const response = await authenticatedFetch( - `v1/a76/concepts?${queryParams.toString()}`, + `v1/a76/concepts/?${queryParams.toString()}`, { method: 'GET' }, cookies, fetch diff --git a/frontend/src/routes/dashboard/general_catalogs/customs_broker_concepts/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/customs_broker_concepts/+page.server.ts index 56f48a8d..e9bb5588 100644 --- a/frontend/src/routes/dashboard/general_catalogs/customs_broker_concepts/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/customs_broker_concepts/+page.server.ts @@ -2,20 +2,25 @@ import type { PageServerLoad } from './$types'; import { getAuthTokens, authenticatedFetch } from '$lib/server/api'; export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { - await parent(); + const parentData = await parent(); const { accessToken } = getAuthTokens(cookies); if (!accessToken) { - return { error: 'No authenticated', concepts: { items: [], total: 0, page: 1, page_size: 50, pages: 0 }, activeCompanyId: null }; + return { error: 'No authenticated', concepts: { items: [], total: 0, page: 1, page_size: 50, pages: 0 } }; } try { const page = Number(url.searchParams.get('page')) || 1; const pageSize = Number(url.searchParams.get('pageSize')) || 50; - const companyId = url.searchParams.get('company_id') || cookies.get('active_company_id'); + + // Obtener company_id de la cookie o usar el primero disponible + const cookieCompanyId = cookies.get('active_company_id'); + const companyId = cookieCompanyId + ? parseInt(cookieCompanyId) + : parentData.companies?.[0]?.id; if (!companyId) { - return { error: 'No company selected', concepts: { items: [], total: 0, page: 1, page_size: 50, pages: 0 }, activeCompanyId: null }; + return { error: 'No company selected', concepts: { items: [], total: 0, page: 1, page_size: 50, pages: 0 } }; } const filters: Record = {}; @@ -28,22 +33,22 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const queryParams = new URLSearchParams({ page: page.toString(), page_size: pageSize.toString(), - company_id: companyId, + company_id: companyId.toString(), ...filters }); - const response = await authenticatedFetch(`v1/a76/customs-broker-concepts?${queryParams.toString()}`, { method: 'GET' }, cookies, fetch); + const response = await authenticatedFetch(`v1/a76/customs-broker-concepts/?${queryParams.toString()}`, { method: 'GET' }, cookies, fetch); if (!response.ok) { - return { error: 'Failed to load', concepts: { items: [], total: 0, page, page_size: pageSize, pages: 0 }, activeCompanyId: companyId }; + return { error: 'Failed to load', concepts: { items: [], total: 0, page, page_size: pageSize, pages: 0 } }; } const data = await response.json(); // Calculate pages if not provided by API const pages = data.pages || Math.ceil(data.total / pageSize); - return { concepts: { ...data, pages }, activeCompanyId: parseInt(companyId) }; + return { concepts: { ...data, pages } }; } catch (error) { console.error('Error loading customs broker concepts:', error); - return { error: 'Error loading', concepts: { items: [], total: 0, page: 1, page_size: 50, pages: 0 }, activeCompanyId: null }; + return { error: 'Error loading', concepts: { items: [], total: 0, page: 1, page_size: 50, pages: 0 } }; } }; diff --git a/frontend/src/routes/dashboard/general_catalogs/customs_broker_concepts/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/customs_broker_concepts/+page.svelte index 4070f937..0f19a0c1 100644 --- a/frontend/src/routes/dashboard/general_catalogs/customs_broker_concepts/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/customs_broker_concepts/+page.svelte @@ -10,8 +10,11 @@ import { browser } from '$app/environment'; import { useShortcuts } from '$lib/hooks/use-shortcuts'; import { obtenerAtajosListaConceptosAA } from '$lib/config/shortcuts/dashboard/general_catalogs/customs_broker_concepts/list'; + import { companyStore } from '$lib/stores/company.svelte'; let { data } = $props(); + + const activeCompanyId = $derived(companyStore.activeCompany?.id); let dialogOpen = $state(false); // Atajos @@ -92,9 +95,11 @@ />
- + {#if activeCompanyId} + + {/if} diff --git a/frontend/src/routes/dashboard/general_catalogs/doda/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/doda/+page.server.ts index 6b220633..e3c9a28f 100644 --- a/frontend/src/routes/dashboard/general_catalogs/doda/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/doda/+page.server.ts @@ -2,7 +2,7 @@ import type { PageServerLoad } from './$types'; import { getAuthTokens, authenticatedFetch } from '$lib/server/api'; export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { - await parent(); + const parentData = await parent(); const { accessToken } = getAuthTokens(cookies); if (!accessToken) { @@ -12,7 +12,12 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { try { const page = Number(url.searchParams.get('page')) || 1; const pageSize = Number(url.searchParams.get('pageSize')) || 50; - const companyId = url.searchParams.get('company_id') || cookies.get('active_company_id'); + + // Obtener company_id de la cookie o usar el primero disponible + const cookieCompanyId = cookies.get('active_company_id'); + const companyId = cookieCompanyId + ? parseInt(cookieCompanyId) + : parentData.companies?.[0]?.id; if (!companyId) { return { error: 'No company selected', dodas: { items: [], total: 0, page: 1, page_size: 50, pages: 0 } }; @@ -26,7 +31,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const queryParams = new URLSearchParams({ page: page.toString(), page_size: pageSize.toString(), - company_id: companyId, + company_id: companyId.toString(), ...filters }); const response = await authenticatedFetch(`v1/a76/doda?${queryParams.toString()}`, { method: 'GET' }, cookies, fetch); diff --git a/frontend/src/routes/dashboard/general_catalogs/electronic_notices/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/electronic_notices/+page.server.ts index 5c862256..c801c44a 100644 --- a/frontend/src/routes/dashboard/general_catalogs/electronic_notices/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/electronic_notices/+page.server.ts @@ -2,7 +2,7 @@ import type { PageServerLoad } from './$types'; import { getAuthTokens, authenticatedFetch } from '$lib/server/api'; export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { - await parent(); + const parentData = await parent(); const { accessToken } = getAuthTokens(cookies); if (!accessToken) { @@ -12,7 +12,12 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { try { const page = Number(url.searchParams.get('page')) || 1; const pageSize = Number(url.searchParams.get('pageSize')) || 50; - const companyId = url.searchParams.get('company_id') || cookies.get('active_company_id'); + + // Obtener company_id de la cookie o usar el primero disponible + const cookieCompanyId = cookies.get('active_company_id'); + const companyId = cookieCompanyId + ? parseInt(cookieCompanyId) + : parentData.companies?.[0]?.id; if (!companyId) { return { error: 'No company selected', notices: { items: [], total: 0, page: 1, page_size: 50, pages: 0 } }; @@ -28,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const queryParams = new URLSearchParams({ page: page.toString(), page_size: pageSize.toString(), - company_id: companyId, + company_id: companyId.toString(), ...filters }); const response = await authenticatedFetch(`v1/a76/electronic-notices?${queryParams.toString()}`, { method: 'GET' }, cookies, fetch); diff --git a/frontend/src/routes/dashboard/general_catalogs/equivalencies/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/equivalencies/+page.server.ts index efae176a..b1b1a5c7 100644 --- a/frontend/src/routes/dashboard/general_catalogs/equivalencies/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/equivalencies/+page.server.ts @@ -2,7 +2,7 @@ import type { PageServerLoad } from './$types'; import { getAuthTokens, authenticatedFetch } from '$lib/server/api'; export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { - await parent(); + const parentData = await parent(); const { accessToken } = getAuthTokens(cookies); if (!accessToken) { @@ -12,7 +12,12 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { try { const page = Number(url.searchParams.get('page')) || 1; const pageSize = Number(url.searchParams.get('pageSize')) || 50; - const companyId = url.searchParams.get('company_id') || cookies.get('active_company_id'); + + // Obtener company_id de la cookie o usar el primero disponible + const cookieCompanyId = cookies.get('active_company_id'); + const companyId = cookieCompanyId + ? parseInt(cookieCompanyId) + : parentData.companies?.[0]?.id; if (!companyId) { return { error: 'No company selected', equivalencies: { items: [], total: 0, page: 1, page_size: 50, pages: 0 } }; @@ -28,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const queryParams = new URLSearchParams({ page: page.toString(), page_size: pageSize.toString(), - company_id: companyId, + company_id: companyId.toString(), ...filters }); diff --git a/frontend/src/routes/dashboard/general_catalogs/identifiers/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/identifiers/+page.server.ts index 06db1266..38a1865f 100644 --- a/frontend/src/routes/dashboard/general_catalogs/identifiers/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/identifiers/+page.server.ts @@ -2,7 +2,7 @@ import type { PageServerLoad } from './$types'; import { getAuthTokens, authenticatedFetch } from '$lib/server/api'; export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { - await parent(); + const parentData = await parent(); const { accessToken } = getAuthTokens(cookies); if (!accessToken) { @@ -12,7 +12,12 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { try { const page = Number(url.searchParams.get('page')) || 1; const pageSize = Number(url.searchParams.get('pageSize')) || 50; - const companyId = url.searchParams.get('company_id') || cookies.get('active_company_id'); + + // Obtener company_id de la cookie o usar el primero disponible + const cookieCompanyId = cookies.get('active_company_id'); + const companyId = cookieCompanyId + ? parseInt(cookieCompanyId) + : parentData.companies?.[0]?.id; if (!companyId) { return { error: 'No company selected', identifiers: { items: [], total: 0, page: 1, page_size: 50, pages: 0 } }; @@ -28,11 +33,11 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const queryParams = new URLSearchParams({ page: page.toString(), page_size: pageSize.toString(), - company_id: companyId, + company_id: companyId.toString(), ...filters }); - const response = await authenticatedFetch(`v1/a76/identifiers?${queryParams.toString()}`, { method: 'GET' }, cookies, fetch); + const response = await authenticatedFetch(`v1/a76/identifiers/?${queryParams.toString()}`, { method: 'GET' }, cookies, fetch); if (!response.ok) { return { error: 'Failed to load', identifiers: { items: [], total: 0, page, page_size: pageSize, pages: 0 } }; diff --git a/frontend/src/routes/dashboard/general_catalogs/inpc/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/inpc/+page.server.ts index f85f60f6..97c8b44a 100644 --- a/frontend/src/routes/dashboard/general_catalogs/inpc/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/inpc/+page.server.ts @@ -2,7 +2,7 @@ import type { PageServerLoad } from './$types'; import { getAuthTokens, authenticatedFetch } from '$lib/server/api'; export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { - await parent(); + const parentData = await parent(); const { accessToken } = getAuthTokens(cookies); if (!accessToken) { @@ -12,7 +12,12 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { try { const page = Number(url.searchParams.get('page')) || 1; const pageSize = Number(url.searchParams.get('pageSize')) || 50; - const companyId = url.searchParams.get('company_id') || cookies.get('active_company_id'); + + // Obtener company_id de la cookie o usar el primero disponible + const cookieCompanyId = cookies.get('active_company_id'); + const companyId = cookieCompanyId + ? parseInt(cookieCompanyId) + : parentData.companies?.[0]?.id; if (!companyId) { return { error: 'No company selected', inpc: { items: [], total: 0, page: 1, page_size: 50, pages: 0 } }; @@ -28,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const queryParams = new URLSearchParams({ page: page.toString(), page_size: pageSize.toString(), - company_id: companyId, + company_id: companyId.toString(), ...filters }); diff --git a/frontend/src/routes/dashboard/general_catalogs/packages/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/packages/+page.server.ts index 5ca0c933..1d3f1082 100644 --- a/frontend/src/routes/dashboard/general_catalogs/packages/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/packages/+page.server.ts @@ -59,7 +59,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { }); const response = await authenticatedFetch( - `v1/a76/packages?${queryParams.toString()}`, + `v1/a76/packages/?${queryParams.toString()}`, { method: 'GET' }, cookies, fetch diff --git a/frontend/src/routes/dashboard/general_catalogs/ports/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/ports/+page.server.ts index 3f8e57dd..917a60db 100644 --- a/frontend/src/routes/dashboard/general_catalogs/ports/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/ports/+page.server.ts @@ -2,7 +2,8 @@ import { getServerApiUrl, getAuthTokens } from '$lib/server/api'; import type { PageServerLoad } from './$types'; import { redirect } from '@sveltejs/kit'; -export const load: PageServerLoad = async ({ cookies, fetch, url }) => { +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + const parentData = await parent(); const { accessToken } = getAuthTokens(cookies); if (!accessToken) { throw redirect(302, '/login'); @@ -10,7 +11,12 @@ export const load: PageServerLoad = async ({ cookies, fetch, url }) => { const page = Number(url.searchParams.get('page')) || 1; const pageSize = Number(url.searchParams.get('page_size')) || 50; - const companyId = url.searchParams.get('company_id') || cookies.get('active_company_id'); + + // Obtener company_id de la cookie o usar el primero disponible + const cookieCompanyId = cookies.get('active_company_id'); + const companyId = cookieCompanyId + ? parseInt(cookieCompanyId) + : parentData.companies?.[0]?.id; if (!companyId) { return { @@ -27,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url }) => { const query = new URLSearchParams({ page: page.toString(), page_size: pageSize.toString(), - company_id: companyId + company_id: companyId.toString() }); const endpoint = `${apiUrl}v1/a76/ports?${query.toString()}`; diff --git a/frontend/src/routes/dashboard/general_catalogs/prevalidators/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/prevalidators/+page.server.ts index 7e18fd83..0f2da684 100644 --- a/frontend/src/routes/dashboard/general_catalogs/prevalidators/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/prevalidators/+page.server.ts @@ -2,7 +2,7 @@ import type { PageServerLoad } from './$types'; import { getAuthTokens, authenticatedFetch } from '$lib/server/api'; export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { - await parent(); + const parentData = await parent(); const { accessToken } = getAuthTokens(cookies); if (!accessToken) { @@ -12,7 +12,12 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { try { const page = Number(url.searchParams.get('page')) || 1; const pageSize = Number(url.searchParams.get('pageSize')) || 50; - const companyId = url.searchParams.get('company_id') || cookies.get('active_company_id'); + + // Obtener company_id de la cookie o usar el primero disponible + const cookieCompanyId = cookies.get('active_company_id'); + const companyId = cookieCompanyId + ? parseInt(cookieCompanyId) + : parentData.companies?.[0]?.id; if (!companyId) { return { error: 'No company selected', prevalidators: { items: [], total: 0, page: 1, page_size: 50, pages: 0 } }; @@ -28,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const queryParams = new URLSearchParams({ page: page.toString(), page_size: pageSize.toString(), - company_id: companyId, + company_id: companyId.toString(), ...filters }); const response = await authenticatedFetch(`v1/a76/prevalidators?${queryParams.toString()}`, { method: 'GET' }, cookies, fetch); diff --git a/frontend/src/routes/dashboard/general_catalogs/signatures/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/signatures/+page.server.ts index 3a18dde6..35e6c600 100644 --- a/frontend/src/routes/dashboard/general_catalogs/signatures/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/signatures/+page.server.ts @@ -2,7 +2,7 @@ import type { PageServerLoad } from './$types'; import { getAuthTokens, authenticatedFetch } from '$lib/server/api'; export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { - await parent(); + const parentData = await parent(); const { accessToken } = getAuthTokens(cookies); if (!accessToken) { @@ -12,7 +12,12 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { try { const page = Number(url.searchParams.get('page')) || 1; const pageSize = Number(url.searchParams.get('pageSize')) || 50; - const companyId = url.searchParams.get('company_id') || cookies.get('active_company_id'); + + // Obtener company_id de la cookie o usar el primero disponible + const cookieCompanyId = cookies.get('active_company_id'); + const companyId = cookieCompanyId + ? parseInt(cookieCompanyId) + : parentData.companies?.[0]?.id; if (!companyId) { return { error: 'No company selected', signatures: { items: [], total: 0, page: 1, page_size: 50, pages: 0 } }; @@ -23,7 +28,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { if (code) filters.code = code; - const queryParams = new URLSearchParams({ page: page.toString(), page_size: pageSize.toString(), company_id: companyId, ...filters }); + const queryParams = new URLSearchParams({ page: page.toString(), page_size: pageSize.toString(), company_id: companyId.toString(), ...filters }); const response = await authenticatedFetch(`v1/a76/signatures?${queryParams.toString()}`, { method: 'GET' }, cookies, fetch); if (!response.ok) { diff --git a/frontend/src/routes/dashboard/general_catalogs/unit_conversions/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/unit_conversions/+page.server.ts index 30053552..92468805 100644 --- a/frontend/src/routes/dashboard/general_catalogs/unit_conversions/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/unit_conversions/+page.server.ts @@ -2,7 +2,7 @@ import type { PageServerLoad } from './$types'; import { getAuthTokens, authenticatedFetch } from '$lib/server/api'; export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { - await parent(); + const parentData = await parent(); const { accessToken } = getAuthTokens(cookies); if (!accessToken) { @@ -17,9 +17,11 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const pageSize = Number(url.searchParams.get('pageSize')) || 50; const filters: Record = {}; - // Obtener company_id + // Obtener company_id de la cookie o usar el primero disponible const cookieCompanyId = cookies.get('active_company_id'); - const companyId = cookieCompanyId ? parseInt(cookieCompanyId) : undefined; + const companyId = cookieCompanyId + ? parseInt(cookieCompanyId) + : parentData.companies?.[0]?.id; if (!companyId) { return { diff --git a/frontend/src/routes/dashboard/invoices/items/presets/+page.svelte b/frontend/src/routes/dashboard/invoices/items/presets/+page.svelte index d9192f2e..41c8a056 100644 --- a/frontend/src/routes/dashboard/invoices/items/presets/+page.svelte +++ b/frontend/src/routes/dashboard/invoices/items/presets/+page.svelte @@ -496,7 +496,7 @@ onclick={() => handleDeleteItem(i)} class="h-8 w-8 text-zinc-500 hover:text-destructive" > - + diff --git a/frontend/src/routes/dashboard/reference_data/incoterms/+page.server.ts b/frontend/src/routes/dashboard/reference_data/incoterms/+page.server.ts index bb15f72e..776fe196 100644 --- a/frontend/src/routes/dashboard/reference_data/incoterms/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/incoterms/+page.server.ts @@ -24,7 +24,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { // Usar authenticatedFetch para manejar automáticamente el refresh de tokens const response = await authenticatedFetch( - `v1/public/reference_data/incoterms?page=${page}&page_size=${pageSize}`, + `v1/public/reference_data/incoterms/?page=${page}&page_size=${pageSize}`, {}, cookies, fetch diff --git a/frontend/src/routes/dashboard/reference_data/incoterms/+page.svelte b/frontend/src/routes/dashboard/reference_data/incoterms/+page.svelte index a1bd8c0a..9a1b417c 100644 --- a/frontend/src/routes/dashboard/reference_data/incoterms/+page.svelte +++ b/frontend/src/routes/dashboard/reference_data/incoterms/+page.svelte @@ -2,7 +2,7 @@ import { page } from '$app/stores'; import { goto } from '$app/navigation'; import { browser } from '$app/environment'; - import { createColumns } from '$lib/components/dashboard/reference_data/incoterms/columns.js'; + import { createColumns } from '$lib/components/dashboard/reference_data/incoterms/columns'; import DataTable from '$lib/components/dashboard/reference_data/incoterms/data-table.svelte'; import CreateEditDialog from '$lib/components/dashboard/reference_data/incoterms/create-edit-dialog.svelte'; import { Button } from '$lib/components/ui/button'; @@ -59,11 +59,7 @@

Catálogo de Incoterms

- - +