diff --git a/frontend/src/routes/dashboard/export/manifest/+page.svelte b/frontend/src/routes/dashboard/export/manifest/+page.svelte index 06c7f2f3..32afa19f 100644 --- a/frontend/src/routes/dashboard/export/manifest/+page.svelte +++ b/frontend/src/routes/dashboard/export/manifest/+page.svelte @@ -47,10 +47,8 @@ let showDetails = $state(false); - const isError = $derived(!canView || status >= 400 || error); - // Pasamos canEdit y canDelete a las columnas por si tu DataTable tiene acciones por fila - const columns = createColumns({ canEdit, canDelete }); + const columns = createColumns(); // --- Lifecycle --- onMount(() => { diff --git a/frontend/src/routes/dashboard/general_catalogs/concepts/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/concepts/+page.svelte index f514e93d..fbb8734d 100644 --- a/frontend/src/routes/dashboard/general_catalogs/concepts/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/concepts/+page.svelte @@ -1,238 +1,285 @@ -
-
-
-

Conceptos

-

Catálogo de Conceptos

-
-
- -{#if !isError && canCreate} - -{/if} -
-
+
+
+
+

Conceptos

+

Catálogo de Conceptos

+
+
+ + {#if !isError && canCreate} + + {/if} +
+
-{#if isError} - -{:else} - - -
-Listado -
- - -
-
-
- -
- (selectedIds = ids)} -onRowClick={(row) => selectedIds = selectedIds.includes(row.id) ? [] : [row.id]} -onRowDoubleClick={(row) => { if(canEdit) { editingItem = row; dialogOpen = true; } }} -/> -
-
-
+ {#if isError} + + {:else} + + +
+ Listado +
+ + +
+
+
+ +
+ (selectedIds = ids)} + onRowClick={(row) => (selectedIds = selectedIds.includes(row.id) ? [] : [row.id])} + onRowDoubleClick={(row) => { + if (canEdit) { + editingItem = row; + dialogOpen = true; + } + }} + /> +
+
+
-
-Mostrando {allItems.length} de {totalItems} registros -
+
+ Mostrando {allItems.length} de {totalItems} registros +
+
+
+
+ {#if canEdit} + + {/if} + {#if canDelete} + + {/if} +
+
+
+ {/if} -
-
-
-{#if canEdit} - -{/if} -{#if canDelete} - -{/if} +
-
-
-{/if} - - -
\ No newline at end of file diff --git a/frontend/src/routes/dashboard/general_catalogs/exchange-rate/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/exchange-rate/+page.svelte index b6e61749..ba3792e9 100644 --- a/frontend/src/routes/dashboard/general_catalogs/exchange-rate/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/exchange-rate/+page.svelte @@ -37,7 +37,7 @@ let selectedIds = $state<(string | number)[]>([]); const selectedItem = $derived( - selectedIds.length === 1 ? allItems.find((item) => item.id === selectedIds[0]) ?? null : null + selectedIds.length === 1 ? allItems.find((item: ExchangeRate) => item.id === selectedIds[0]) ?? null : null ); // Permisos diff --git a/frontend/src/routes/dashboard/general_catalogs/identifiers/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/identifiers/+page.svelte index 93b9e501..dd28a1b7 100644 --- a/frontend/src/routes/dashboard/general_catalogs/identifiers/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/identifiers/+page.svelte @@ -1,237 +1,283 @@ -
-
-
-

Identificadores

-

Catálogo de Identificadores del sistema

-
-
- -{#if !isError && canCreate} - -{/if} -
-
+
+
+
+

Identificadores

+

Catálogo de Identificadores del sistema

+
+
+ + {#if !isError && canCreate} + + {/if} +
+
-{#if isError} - -{:else} - - -
-Listado de Identificadores -
- - -
-
-
- -
- (selectedIds = ids)} -onRowClick={(row) => selectedIds = selectedIds.includes(row.id) ? [] : [row.id]} -onRowDoubleClick={(row) => { if(canEdit) { editingItem = row; createDialogOpen = true; } }} -/> -
-
-
+ {#if isError} + + {:else} + + +
+ Listado de Identificadores +
+ + +
+
+
+ +
+ (selectedIds = ids)} + onRowClick={(row) => (selectedIds = selectedIds.includes(row.id) ? [] : [row.id])} + onRowDoubleClick={(row) => { + if (canEdit) { + editingItem = row; + createDialogOpen = true; + } + }} + /> +
+
+
-
-Mostrando {allItems.length} de {totalItems} registros -
+
+ Mostrando {allItems.length} de {totalItems} registros +
+
+
+
+ {#if canEdit} + + {/if} + {#if canDelete} + + {/if} +
+
+
+ {/if} -
-
-
-{#if canEdit} - -{/if} -{#if canDelete} - -{/if} +
-
-
-{/if} - - -
\ No newline at end of file diff --git a/frontend/src/routes/dashboard/general_catalogs/inpc/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/inpc/+page.svelte index cc083c22..f81996e7 100644 --- a/frontend/src/routes/dashboard/general_catalogs/inpc/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/inpc/+page.svelte @@ -1,237 +1,280 @@ -
-
-
-

INPC

-

Catálogo de INPC del sistema

-
-
- -{#if !isError && canCreate} - -{/if} -
-
+
+
+
+

INPC

+

Catálogo de INPC del sistema

+
+
+ + {#if !isError && canCreate} + + {/if} +
+
-{#if isError} - -{:else} - - -
-Listado de INPC -
- - -
-
-
- -
- (selectedIds = ids)} -onRowClick={(row) => selectedIds = selectedIds.includes(row.id) ? [] : [row.id]} -onRowDoubleClick={(row) => { if(canEdit) { editingItem = row; createDialogOpen = true; } }} -/> -
-
-
+ {#if isError} + + {:else} + + +
+ Listado de INPC +
+ + +
+
+
+ +
+ (selectedIds = ids)} + onRowClick={(row) => (selectedIds = selectedIds.includes(row.id) ? [] : [row.id])} + onRowDoubleClick={(row) => { + if (canEdit) { + editingItem = row; + createDialogOpen = true; + } + }} + /> +
+
+
-
-Mostrando {allItems.length} de {totalItems} registros -
+
+ Mostrando {allItems.length} de {totalItems} registros +
+
+
+
+ {#if canEdit} + + {/if} + {#if canDelete} + + {/if} +
+
+
+ {/if} -
-
-
-{#if canEdit} - -{/if} -{#if canDelete} - -{/if} +
-
-
-{/if} - - -
\ No newline at end of file diff --git a/frontend/src/routes/dashboard/general_catalogs/legends/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/legends/+page.svelte index 80662218..4518b68f 100644 --- a/frontend/src/routes/dashboard/general_catalogs/legends/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/legends/+page.svelte @@ -1,237 +1,280 @@ -
-
-
-

Leyendas

-

Catálogo de Leyendas del sistema

-
-
- -{#if !isError && canCreate} - -{/if} -
-
+
+
+
+

Leyendas

+

Catálogo de Leyendas del sistema

+
+
+ + {#if !isError && canCreate} + + {/if} +
+
-{#if isError} - -{:else} - - -
-Listado de Leyendas -
- - -
-
-
- -
- (selectedIds = ids)} -onRowClick={(row) => selectedIds = selectedIds.includes(row.id) ? [] : [row.id]} -onRowDoubleClick={(row) => { if(canEdit) { editingItem = row; createDialogOpen = true; } }} -/> -
-
-
+ {#if isError} + + {:else} + + +
+ Listado de Leyendas +
+ + +
+
+
+ +
+ (selectedIds = ids)} + onRowClick={(row) => (selectedIds = selectedIds.includes(row.id) ? [] : [row.id])} + onRowDoubleClick={(row) => { + if (canEdit) { + editingItem = row; + createDialogOpen = true; + } + }} + /> +
+
+
-
-Mostrando {allItems.length} de {totalItems} registros -
+
+ Mostrando {allItems.length} de {totalItems} registros +
+
+
+
+ {#if canEdit} + + {/if} + {#if canDelete} + + {/if} +
+
+
+ {/if} -
-
-
-{#if canEdit} - -{/if} -{#if canDelete} - -{/if} +
-
-
-{/if} - - -
\ No newline at end of file diff --git a/frontend/src/routes/dashboard/general_catalogs/ports/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/ports/+page.svelte index a5a85ed8..c59074c4 100644 --- a/frontend/src/routes/dashboard/general_catalogs/ports/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/ports/+page.svelte @@ -1,237 +1,280 @@ -
-
-
-

Puertos

-

Catálogo de Puertos del sistema

-
-
- -{#if !isError && canCreate} - -{/if} -
-
+
+
+
+

Puertos

+

Catálogo de Puertos del sistema

+
+
+ + {#if !isError && canCreate} + + {/if} +
+
-{#if isError} - -{:else} - - -
-Listado de Puertos -
- - -
-
-
- -
- (selectedIds = ids)} -onRowClick={(row) => selectedIds = selectedIds.includes(row.id) ? [] : [row.id]} -onRowDoubleClick={(row) => { if(canEdit) { editingItem = row; createDialogOpen = true; } }} -/> -
-
-
+ {#if isError} + + {:else} + + +
+ Listado de Puertos +
+ + +
+
+
+ +
+ (selectedIds = ids)} + onRowClick={(row) => (selectedIds = selectedIds.includes(row.id) ? [] : [row.id])} + onRowDoubleClick={(row) => { + if (canEdit) { + editingItem = row; + createDialogOpen = true; + } + }} + /> +
+
+
-
-Mostrando {allItems.length} de {totalItems} registros -
+
+ Mostrando {allItems.length} de {totalItems} registros +
+
+
+
+ {#if canEdit} + + {/if} + {#if canDelete} + + {/if} +
+
+
+ {/if} -
-
-
-{#if canEdit} - -{/if} -{#if canDelete} - -{/if} +
-
-
-{/if} - - -
\ No newline at end of file diff --git a/frontend/src/routes/dashboard/general_catalogs/seal/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/seal/+page.server.ts new file mode 100644 index 00000000..f0341324 --- /dev/null +++ b/frontend/src/routes/dashboard/general_catalogs/seal/+page.server.ts @@ -0,0 +1,83 @@ +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, parent }) => { + const parentData = await parent(); + const { accessToken } = getAuthTokens(cookies); + if (!accessToken) { + throw redirect(302, '/login'); + } + + const page = Number(url.searchParams.get('page')) || 1; + const pageSize = Number(url.searchParams.get('page_size')) || 50; + const sealFilter = url.searchParams.get('seal')?.trim() || ''; + + const cookieCompanyId = cookies.get('active_company_id'); + const companyId = cookieCompanyId + ? parseInt(cookieCompanyId) + : parentData.companies?.[0]?.id; + + if (!companyId) { + return { + seals: { items: [], total: 0, page, page_size: pageSize, pages: 0 }, + error: 'Selecciona una compañía para ver los sellos', + status: 400 + }; + } + + const apiUrl = getServerApiUrl(); + const query = new URLSearchParams({ + page: page.toString(), + page_size: pageSize.toString(), + company_id: companyId.toString() + }); + if (sealFilter) { + query.set('seal', sealFilter); + } + + const endpoint = `${apiUrl}v1/a76/seals/?${query.toString()}`; + + try { + const response = await fetch(endpoint, { + headers: { + Authorization: `Bearer ${accessToken}` + } + }); + + if (!response.ok) { + let errorMessage = `Error: ${response.status} ${response.statusText}`; + try { + const errorData = await response.json(); + errorMessage = errorData.detail || errorData.message || errorMessage; + } catch { + // not JSON + } + return { + seals: { items: [], total: 0, page, page_size: pageSize, pages: 0 }, + error: errorMessage, + status: response.status + }; + } + + const data = await response.json(); + return { + seals: { + items: data.items, + total: data.total, + page: data.page, + page_size: data.page_size, + pages: data.pages + }, + status: 200 + }; + } catch (error: unknown) { + console.error('Error fetching seals:', error); + const message = error instanceof Error ? error.message : 'Failed to connect to server'; + return { + seals: { items: [], total: 0, page, page_size: pageSize, pages: 0 }, + error: message, + status: 500 + }; + } +}; diff --git a/frontend/src/routes/dashboard/general_catalogs/seal/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/seal/+page.svelte index 67b7a2ab..724e64c9 100644 --- a/frontend/src/routes/dashboard/general_catalogs/seal/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/seal/+page.svelte @@ -1,234 +1,272 @@ -
-
-
-

Sellos

-

Catálogo de Sellos del sistema

-
-
- -{#if !isError && canCreate} - -{/if} -
-
+
+
+
+

Sellos

+

Catálogo de Sellos del sistema

+
+
+ + {#if !isError && canCreate} + + {/if} +
+
-{#if isError} - -{:else} - - -
-Listado de Sellos -
- -
-
-
- -
- (selectedIds = ids)} -onRowClick={(row) => selectedIds = selectedIds.includes(row.id) ? [] : [row.id]} -onRowDoubleClick={(row) => { if(canEdit) { editingItem = row; createDialogOpen = true; } }} -/> -
-
-
+ {#if isError} + + {:else} + + +
+ Listado de Sellos +
+ +
+
+
+ +
+ (selectedIds = ids)} + onRowClick={(row) => (selectedIds = selectedIds.includes(row.id) ? [] : [row.id])} + onRowDoubleClick={(row) => { + if (canEdit) { + editingItem = row; + createDialogOpen = true; + } + }} + /> +
+
+
-
-Mostrando {allItems.length} de {totalItems} registros -
+
+ Mostrando {allItems.length} de {totalItems} registros +
+
+
+
+ {#if canEdit} + + {/if} + {#if canDelete} + + {/if} +
+
+
+ {/if} -
-
-
-{#if canEdit} - -{/if} -{#if canDelete} - -{/if} +
-
-
-{/if} - - -
\ No newline at end of file diff --git a/frontend/src/routes/dashboard/general_catalogs/signatures/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/signatures/+page.svelte index 0b62f0a3..6fcb3cfb 100644 --- a/frontend/src/routes/dashboard/general_catalogs/signatures/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/signatures/+page.svelte @@ -49,10 +49,10 @@ let searchCode = $state($page.url.searchParams.get('code') || ''); let searchDesc = $state($page.url.searchParams.get('description') || ''); let timeout: ReturnType; -let allItems = $state(data.items?.items || data.items || []); -let currentPage = $state(data.items?.page || 1); -let pageSize = $state(data.items?.page_size || 50); -let totalItems = $state(data.items?.total || 0); +let allItems = $state(data.signatures?.items || data.signatures || []); +let currentPage = $state(data.signatures?.page || 1); +let pageSize = $state(data.signatures?.page_size || 50); +let totalItems = $state(data.signatures?.total || 0); let loading = $state(false); let hasMore = $derived(allItems.length < totalItems); let selectedIds = $state<(string | number)[]>([]); @@ -63,11 +63,11 @@ selectedIds.length === 1 ); $effect(() => { -if (data.items) { -allItems = data.items.items || data.items || []; -currentPage = data.items.page || 1; -totalItems = data.items.total || 0; -pageSize = data.items.page_size || pageSize; +if (data.signatures) { +allItems = data.signatures.items || data.signatures || []; +currentPage = data.signatures.page || 1; +totalItems = data.signatures.total || 0; +pageSize = data.signatures.page_size || pageSize; } }); diff --git a/frontend/src/routes/dashboard/goods/fda-codes/+page.svelte b/frontend/src/routes/dashboard/goods/fda-codes/+page.svelte index fb967805..93f51275 100644 --- a/frontend/src/routes/dashboard/goods/fda-codes/+page.svelte +++ b/frontend/src/routes/dashboard/goods/fda-codes/+page.svelte @@ -409,7 +409,6 @@
{/if} - {/if}
diff --git a/frontend/src/routes/dashboard/reference_data/countries/+page.svelte b/frontend/src/routes/dashboard/reference_data/countries/+page.svelte index 5ff81be4..4a515aff 100644 --- a/frontend/src/routes/dashboard/reference_data/countries/+page.svelte +++ b/frontend/src/routes/dashboard/reference_data/countries/+page.svelte @@ -81,7 +81,7 @@ loading = true; error = null; try { - const response = await countriesApi.list(1, pageSize, searchQuery); + const response = await countriesApi.list(1, pageSize, searchQuery as any); if (!response.error && response.data) { allItems = response.data.items; currentPage = 1; @@ -108,7 +108,7 @@ error = null; try { - const response = await countriesApi.list(currentPage + 1, pageSize, searchQuery); + const response = await countriesApi.list(currentPage + 1, pageSize, searchQuery as any); if (response.error) { console.error('📊 [Page] Error en loadMore:', response.error, 'Status:', response.status); if (response.status === 401 || response.status === 403) {