From cf18c8e07df95fa48aac6f4ce89735b23a3294a8 Mon Sep 17 00:00:00 2001 From: acazares Date: Thu, 6 Nov 2025 18:35:47 -0600 Subject: [PATCH] feat: Implement create/edit dialog for pedimentos management - Added create-edit-dialog component for creating and editing pedimentos. - Integrated dialog with data table actions for editing existing pedimentos. - Implemented infinite scroll functionality in the data table for loading more pedimentos. - Enhanced server-side loading of pedimentos with authentication checks. - Added filtering options for pedimentos based on status, client ID, and year. - Improved error handling and user feedback for actions like creating, editing, and deleting pedimentos. --- backend/core/config.py | 2 +- .../src/lib/api/dashboard/a76/pedimentos.ts | 126 ++++++ .../refrence_data/code_pedimento_regimens.ts | 8 +- .../api/dashboard/refrence_data/containers.ts | 8 +- .../api/dashboard/refrence_data/countries.ts | 10 +- .../dashboard/refrence_data/currency_types.ts | 10 +- .../refrence_data/customs_sections.ts | 10 +- .../refrence_data/customs_warehouses.ts | 10 +- .../api/dashboard/refrence_data/incoterms.ts | 10 +- .../dashboard/refrence_data/invoice_types.ts | 10 +- .../dashboard/refrence_data/material_types.ts | 10 +- .../refrence_data/payment_methods.ts | 10 +- .../refrence_data/pedimento_codes.ts | 10 +- .../refrence_data/pedimento_regimens.ts | 10 +- .../api/dashboard/refrence_data/sectors.ts | 10 +- .../lib/api/dashboard/refrence_data/states.ts | 10 +- .../refrence_data/transport_modes.ts | 10 +- .../refrence_data/transport_types.ts | 10 +- .../refrence_data/valuation_methods.ts | 10 +- .../dashboard/pedimentos/columns.ts | 234 ++++++++++ .../pedimentos/create-edit-dialog.svelte | 425 ++++++++++++++++++ .../pedimentos/data-table-actions.svelte | 179 ++++++++ .../dashboard/pedimentos/data-table.svelte | 123 +++++ .../src/lib/components/sidebar/modules.ts | 10 +- .../dashboard/pedimentos/+page.server.ts | 64 +++ .../routes/dashboard/pedimentos/+page.svelte | 352 +++++++++++++++ .../code_pedimento_regimens/+page.server.ts | 2 +- .../reference_data/containers/+page.server.ts | 2 +- .../reference_data/countries/+page.server.ts | 2 +- .../currency_types/+page.server.ts | 2 +- .../customs_sections/+page.server.ts | 2 +- .../customs_warehouses/+page.server.ts | 2 +- .../reference_data/incoterms/+page.server.ts | 2 +- .../invoice_types/+page.server.ts | 2 +- .../material_types/+page.server.ts | 2 +- .../payment_methods/+page.server.ts | 2 +- .../pedimento_codes/+page.server.ts | 2 +- .../pedimento_regimens/+page.server.ts | 2 +- .../reference_data/sectors/+page.server.ts | 2 +- .../reference_data/states/+page.server.ts | 2 +- .../transport_modes/+page.server.ts | 2 +- .../transport_types/+page.server.ts | 2 +- .../valuation_methods/+page.server.ts | 2 +- 43 files changed, 1609 insertions(+), 106 deletions(-) create mode 100644 frontend/src/lib/api/dashboard/a76/pedimentos.ts create mode 100644 frontend/src/lib/components/dashboard/pedimentos/columns.ts create mode 100644 frontend/src/lib/components/dashboard/pedimentos/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/pedimentos/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/pedimentos/data-table.svelte create mode 100644 frontend/src/routes/dashboard/pedimentos/+page.server.ts create mode 100644 frontend/src/routes/dashboard/pedimentos/+page.svelte diff --git a/backend/core/config.py b/backend/core/config.py index cfc509b6..83d290ad 100644 --- a/backend/core/config.py +++ b/backend/core/config.py @@ -15,7 +15,7 @@ class Settings(BaseSettings): ENVIRONMENT: str = "development" # Database - Core (Shared) - CORE_DB_HOST: str = "localhost" + CORE_DB_HOST: str = "postgres-a76" CORE_DB_PORT: int = 5432 CORE_DB_NAME: str = "anexo76_core" CORE_DB_USER: str = "postgres" diff --git a/frontend/src/lib/api/dashboard/a76/pedimentos.ts b/frontend/src/lib/api/dashboard/a76/pedimentos.ts new file mode 100644 index 00000000..7428e18e --- /dev/null +++ b/frontend/src/lib/api/dashboard/a76/pedimentos.ts @@ -0,0 +1,126 @@ +/** + * API Client para Pedimentos + * Gestiona las operaciones CRUD para pedimentos + */ +import { api } from '$lib/api'; + +export interface Pedimento { + id: number; + tenant_id: number; + year?: string | null; + customs_office?: string | null; + license?: string | null; + pedimento_number?: string | null; + client_id?: number | null; + operation_type?: number | null; + pedimento_type?: number | null; + pedimento_key?: string | null; + regime?: string | null; + status?: string | null; + usd_value?: number | null; + paid_price?: number | null; + gross_weight?: number | null; + exchange_rate?: number | null; + created_at: string; +} + +export interface PedimentoListResponse { + items: Pedimento[]; + total: number; + page: number; + page_size: number; +} + +export interface CreatePedimentoData { + year?: string | null; + customs_office?: string | null; + license?: string | null; + pedimento_number?: string | null; + client_id?: number | null; + operation_type?: number | null; + pedimento_type?: number | null; + pedimento_key?: string | null; + regime?: string | null; + status?: string | null; + usd_value?: number | null; + paid_price?: number | null; + gross_weight?: number | null; + exchange_rate?: number | null; +} + +export interface UpdatePedimentoData { + year?: string | null; + customs_office?: string | null; + license?: string | null; + pedimento_number?: string | null; + client_id?: number | null; + operation_type?: number | null; + pedimento_type?: number | null; + pedimento_key?: string | null; + regime?: string | null; + status?: string | null; + usd_value?: number | null; + paid_price?: number | null; + gross_weight?: number | null; + exchange_rate?: number | null; +} + +export interface PedimentoFilters { + status?: string; + client_id?: number; + year?: string; +} + +/** + * API para Pedimentos + */ +export const pedimentosApi = { + /** + * Lista todos los pedimentos con paginación y filtros + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + * @param filters - Filtros opcionales + */ + list: (page = 1, pageSize = 50, filters?: PedimentoFilters) => { + let url = `/v1/a76/pedimentos?page=${page}&page_size=${pageSize}`; + + if (filters?.status) { + url += `&status=${encodeURIComponent(filters.status)}`; + } + if (filters?.client_id) { + url += `&client_id=${filters.client_id}`; + } + if (filters?.year) { + url += `&year=${encodeURIComponent(filters.year)}`; + } + + return api.get(url); + }, + + /** + * Obtiene un pedimento por ID + * @param id - ID del pedimento + */ + get: (id: number) => api.get(`/v1/a76/pedimentos/${id}`), + + /** + * Crea un nuevo pedimento + * @param data - Datos del pedimento a crear + */ + create: (data: CreatePedimentoData) => + api.post('/v1/a76/pedimentos', data), + + /** + * Actualiza un pedimento existente + * @param id - ID del pedimento a actualizar + * @param data - Datos a actualizar + */ + update: (id: number, data: UpdatePedimentoData) => + api.put(`/v1/a76/pedimentos/${id}`, data), + + /** + * Elimina un pedimento + * @param id - ID del pedimento a eliminar + */ + delete: (id: number) => api.delete(`/v1/a76/pedimentos/${id}`) +}; diff --git a/frontend/src/lib/api/dashboard/refrence_data/code_pedimento_regimens.ts b/frontend/src/lib/api/dashboard/refrence_data/code_pedimento_regimens.ts index 837216f8..fd8e4d4a 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/code_pedimento_regimens.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/code_pedimento_regimens.ts @@ -41,7 +41,7 @@ export const codePedimentoRegimensApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/code-pedimento-regimens?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/code-pedimento-regimens?page=${page}&page_size=${pageSize}` ), /** @@ -55,7 +55,7 @@ export const codePedimentoRegimensApi = { * @param data - Datos del code pedimento regimen a crear */ create: (data: CreateCodePedimentoRegimenData) => - api.post('/v1/code-pedimento-regimens', data), + api.post('/v1/public/refrence_data/code-pedimento-regimens', data), /** * Actualiza un code pedimento regimen existente @@ -63,11 +63,11 @@ export const codePedimentoRegimensApi = { * @param data - Datos a actualizar */ update: (id: number, data: UpdateCodePedimentoRegimenData) => - api.put(`/v1/code-pedimento-regimens/${id}`, data), + api.put(`/v1/public/refrence_data/code-pedimento-regimens/${id}`, data), /** * Elimina un code pedimento regimen * @param id - ID del code pedimento regimen a eliminar */ - delete: (id: number) => api.delete(`/v1/code-pedimento-regimens/${id}`) + delete: (id: number) => api.delete(`/v1/public/refrence_data/code-pedimento-regimens/${id}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/containers.ts b/frontend/src/lib/api/dashboard/refrence_data/containers.ts index 1bd2a7fc..64294fbe 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/containers.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/containers.ts @@ -37,7 +37,7 @@ export const containersApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/containers?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/containers?page=${page}&page_size=${pageSize}` ), /** @@ -51,7 +51,7 @@ export const containersApi = { * @param data - Datos del container a crear */ create: (data: CreateContainerData) => - api.post('/v1/containers', data), + api.post('/v1/public/refrence_data/containers', data), /** * Actualiza un container existente @@ -59,11 +59,11 @@ export const containersApi = { * @param data - Datos a actualizar */ update: (key: number, data: UpdateContainerData) => - api.put(`/v1/containers/${key}`, data), + api.put(`/v1/public/refrence_data/containers/${key}`, data), /** * Elimina un container * @param key - ID del container a eliminar */ - delete: (key: number) => api.delete(`/v1/containers/${key}`) + delete: (key: number) => api.delete(`/v1/public/refrence_data/containers/${key}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/countries.ts b/frontend/src/lib/api/dashboard/refrence_data/countries.ts index 66fba25e..55bea4b4 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/countries.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/countries.ts @@ -46,21 +46,21 @@ export const countriesApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/countries?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/countries?page=${page}&page_size=${pageSize}` ), /** * Obtiene un país por su clave M3 * @param m3_key - Clave M3 del país */ - get: (m3_key: string) => api.get(`/v1/countries/${m3_key}`), + get: (m3_key: string) => api.get(`/v1/public/refrence_data/countries/${m3_key}`), /** * Crea un nuevo país * @param data - Datos del país a crear */ create: (data: CreateCountryData) => - api.post('/v1/countries', data), + api.post('/v1/public/refrence_data/countries', data), /** * Actualiza un país existente @@ -68,11 +68,11 @@ export const countriesApi = { * @param data - Datos a actualizar */ update: (m3_key: string, data: UpdateCountryData) => - api.put(`/v1/countries/${m3_key}`, data), + api.put(`/v1/public/refrence_data/countries/${m3_key}`, data), /** * Elimina un país * @param m3_key - Clave M3 del país a eliminar */ - delete: (m3_key: string) => api.delete(`/v1/countries/${m3_key}`) + delete: (m3_key: string) => api.delete(`/v1/public/refrence_data/countries/${m3_key}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/currency_types.ts b/frontend/src/lib/api/dashboard/refrence_data/currency_types.ts index 68fdec93..a3912934 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/currency_types.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/currency_types.ts @@ -40,21 +40,21 @@ export const currencyTypesApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/currency-types?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/currency-types?page=${page}&page_size=${pageSize}` ), /** * Obtiene un tipo de moneda por código * @param code - Código del tipo de moneda */ - get: (code: string) => api.get(`/v1/currency-types/${code}`), + get: (code: string) => api.get(`/v1/public/refrence_data/currency-types/${code}`), /** * Crea un nuevo tipo de moneda * @param data - Datos del tipo de moneda a crear */ create: (data: CreateCurrencyTypeData) => - api.post('/v1/currency-types', data), + api.post('/v1/public/refrence_data/currency-types', data), /** * Actualiza un tipo de moneda existente @@ -62,11 +62,11 @@ export const currencyTypesApi = { * @param data - Datos a actualizar */ update: (code: string, data: UpdateCurrencyTypeData) => - api.put(`/v1/currency-types/${code}`, data), + api.put(`/v1/public/refrence_data/currency-types/${code}`, data), /** * Elimina un tipo de moneda * @param code - Código del tipo de moneda a eliminar */ - delete: (code: string) => api.delete(`/v1/currency-types/${code}`) + delete: (code: string) => api.delete(`/v1/public/refrence_data/currency-types/${code}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/customs_sections.ts b/frontend/src/lib/api/dashboard/refrence_data/customs_sections.ts index e67620ff..5ee4141b 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/customs_sections.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/customs_sections.ts @@ -37,21 +37,21 @@ export const customsSectionsApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/customs-sections?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/customs-sections?page=${page}&page_size=${pageSize}` ), /** * Obtiene una sección aduanera por código * @param customs_code - Código de la sección aduanera */ - get: (customs_code: string) => api.get(`/v1/customs-sections/${customs_code}`), + get: (customs_code: string) => api.get(`/v1/public/refrence_data/customs-sections/${customs_code}`), /** * Crea una nueva sección aduanera * @param data - Datos de la sección aduanera a crear */ create: (data: CreateCustomsSectionData) => - api.post('/v1/customs-sections', data), + api.post('/v1/public/refrence_data/customs-sections', data), /** * Actualiza una sección aduanera existente @@ -59,11 +59,11 @@ export const customsSectionsApi = { * @param data - Datos a actualizar */ update: (customs_code: string, data: UpdateCustomsSectionData) => - api.put(`/v1/customs-sections/${customs_code}`, data), + api.put(`/v1/public/refrence_data/customs-sections/${customs_code}`, data), /** * Elimina una sección aduanera * @param customs_code - Código de la sección aduanera a eliminar */ - delete: (customs_code: string) => api.delete(`/v1/customs-sections/${customs_code}`) + delete: (customs_code: string) => api.delete(`/v1/public/refrence_data/customs-sections/${customs_code}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/customs_warehouses.ts b/frontend/src/lib/api/dashboard/refrence_data/customs_warehouses.ts index 3ef02d19..5b2bb3c1 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/customs_warehouses.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/customs_warehouses.ts @@ -40,7 +40,7 @@ export const customsWarehousesApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/customs-warehouses?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/customs-warehouses?page=${page}&page_size=${pageSize}` ), /** @@ -49,14 +49,14 @@ export const customsWarehousesApi = { * @param customs - Aduana asociada */ get: (key: string, customs: string) => - api.get(`/v1/customs-warehouses/${key}/${customs}`), + api.get(`/v1/public/refrence_data/customs-warehouses/${key}/${customs}`), /** * Crea un nuevo recinto fiscalizado * @param data - Datos del recinto fiscalizado a crear */ create: (data: CreateCustomsWarehouseData) => - api.post('/v1/customs-warehouses', data), + api.post('/v1/public/refrence_data/customs-warehouses', data), /** * Actualiza un recinto fiscalizado existente @@ -65,7 +65,7 @@ export const customsWarehousesApi = { * @param data - Datos a actualizar */ update: (key: string, customs: string, data: UpdateCustomsWarehouseData) => - api.put(`/v1/customs-warehouses/${key}/${customs}`, data), + api.put(`/v1/public/refrence_data/customs-warehouses/${key}/${customs}`, data), /** * Elimina un recinto fiscalizado @@ -73,5 +73,5 @@ export const customsWarehousesApi = { * @param customs - Aduana asociada */ delete: (key: string, customs: string) => - api.delete(`/v1/customs-warehouses/${key}/${customs}`) + api.delete(`/v1/public/refrence_data/customs-warehouses/${key}/${customs}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/incoterms.ts b/frontend/src/lib/api/dashboard/refrence_data/incoterms.ts index ece31dd7..a83609e1 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/incoterms.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/incoterms.ts @@ -40,21 +40,21 @@ export const incotermsApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/incoterms?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/incoterms?page=${page}&page_size=${pageSize}` ), /** * Obtiene un incoterm por código * @param code - Código del incoterm */ - get: (code: string) => api.get(`/v1/incoterms/${code}`), + get: (code: string) => api.get(`/v1/public/refrence_data/incoterms/${code}`), /** * Crea un nuevo incoterm * @param data - Datos del incoterm a crear */ create: (data: CreateIncotermData) => - api.post('/v1/incoterms', data), + api.post('/v1/public/refrence_data/incoterms', data), /** * Actualiza un incoterm existente @@ -62,11 +62,11 @@ export const incotermsApi = { * @param data - Datos a actualizar */ update: (code: string, data: UpdateIncotermData) => - api.put(`/v1/incoterms/${code}`, data), + api.put(`/v1/public/refrence_data/incoterms/${code}`, data), /** * Elimina un incoterm * @param code - Código del incoterm a eliminar */ - delete: (code: string) => api.delete(`/v1/incoterms/${code}`) + delete: (code: string) => api.delete(`/v1/public/refrence_data/incoterms/${code}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/invoice_types.ts b/frontend/src/lib/api/dashboard/refrence_data/invoice_types.ts index 8cfbfd46..8b132732 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/invoice_types.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/invoice_types.ts @@ -43,21 +43,21 @@ export const invoiceTypesApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/invoice-types?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/invoice-types?page=${page}&page_size=${pageSize}` ), /** * Obtiene un tipo de factura por key * @param key - Clave del tipo de factura */ - get: (key: string) => api.get(`/v1/invoice-types/${key}`), + get: (key: string) => api.get(`/v1/public/refrence_data/invoice-types/${key}`), /** * Crea un nuevo tipo de factura * @param data - Datos del tipo de factura a crear */ create: (data: CreateInvoiceTypeData) => - api.post('/v1/invoice-types', data), + api.post('/v1/public/refrence_data/invoice-types', data), /** * Actualiza un tipo de factura existente @@ -65,11 +65,11 @@ export const invoiceTypesApi = { * @param data - Datos a actualizar */ update: (key: string, data: UpdateInvoiceTypeData) => - api.put(`/v1/invoice-types/${key}`, data), + api.put(`/v1/public/refrence_data/invoice-types/${key}`, data), /** * Elimina un tipo de factura * @param key - Clave del tipo de factura a eliminar */ - delete: (key: string) => api.delete(`/v1/invoice-types/${key}`) + delete: (key: string) => api.delete(`/v1/public/refrence_data/invoice-types/${key}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/material_types.ts b/frontend/src/lib/api/dashboard/refrence_data/material_types.ts index d3156e5f..e9457401 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/material_types.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/material_types.ts @@ -40,21 +40,21 @@ export const materialTypesApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/material-types?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/material-types?page=${page}&page_size=${pageSize}` ), /** * Obtiene un tipo de material por key * @param key - Clave del tipo de material */ - get: (key: string) => api.get(`/v1/material-types/${key}`), + get: (key: string) => api.get(`/v1/public/refrence_data/material-types/${key}`), /** * Crea un nuevo tipo de material * @param data - Datos del tipo de material a crear */ create: (data: CreateMaterialTypeData) => - api.post('/v1/material-types', data), + api.post('/v1/public/refrence_data/material-types', data), /** * Actualiza un tipo de material existente @@ -62,11 +62,11 @@ export const materialTypesApi = { * @param data - Datos a actualizar */ update: (key: string, data: UpdateMaterialTypeData) => - api.put(`/v1/material-types/${key}`, data), + api.put(`/v1/public/refrence_data/material-types/${key}`, data), /** * Elimina un tipo de material * @param key - Clave del tipo de material a eliminar */ - delete: (key: string) => api.delete(`/v1/material-types/${key}`) + delete: (key: string) => api.delete(`/v1/public/refrence_data/material-types/${key}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/payment_methods.ts b/frontend/src/lib/api/dashboard/refrence_data/payment_methods.ts index 5706765b..cf651f59 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/payment_methods.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/payment_methods.ts @@ -37,21 +37,21 @@ export const paymentMethodsApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/payment-methods?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/payment-methods?page=${page}&page_size=${pageSize}` ), /** * Obtiene un método de pago por key * @param key - Clave del método de pago */ - get: (key: string) => api.get(`/v1/payment-methods/${key}`), + get: (key: string) => api.get(`/v1/public/refrence_data/payment-methods/${key}`), /** * Crea un nuevo método de pago * @param data - Datos del método de pago a crear */ create: (data: CreatePaymentMethodData) => - api.post('/v1/payment-methods', data), + api.post('/v1/public/refrence_data/payment-methods', data), /** * Actualiza un método de pago existente @@ -59,11 +59,11 @@ export const paymentMethodsApi = { * @param data - Datos a actualizar */ update: (key: string, data: UpdatePaymentMethodData) => - api.put(`/v1/payment-methods/${key}`, data), + api.put(`/v1/public/refrence_data/payment-methods/${key}`, data), /** * Elimina un método de pago * @param key - Clave del método de pago a eliminar */ - delete: (key: string) => api.delete(`/v1/payment-methods/${key}`) + delete: (key: string) => api.delete(`/v1/public/refrence_data/payment-methods/${key}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/pedimento_codes.ts b/frontend/src/lib/api/dashboard/refrence_data/pedimento_codes.ts index c50c3d59..36d0d46e 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/pedimento_codes.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/pedimento_codes.ts @@ -37,21 +37,21 @@ export const pedimentoCodesApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/pedimento-codes?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/pedimento-codes?page=${page}&page_size=${pageSize}` ), /** * Obtiene una clave de pedimento por code * @param code - Código de la clave de pedimento */ - get: (code: string) => api.get(`/v1/pedimento-codes/${code}`), + get: (code: string) => api.get(`/v1/public/refrence_data/pedimento-codes/${code}`), /** * Crea una nueva clave de pedimento * @param data - Datos de la clave de pedimento a crear */ create: (data: CreatePedimentoCodeData) => - api.post('/v1/pedimento-codes', data), + api.post('/v1/public/refrence_data/pedimento-codes', data), /** * Actualiza una clave de pedimento existente @@ -59,11 +59,11 @@ export const pedimentoCodesApi = { * @param data - Datos a actualizar */ update: (code: string, data: UpdatePedimentoCodeData) => - api.put(`/v1/pedimento-codes/${code}`, data), + api.put(`/v1/public/refrence_data/pedimento-codes/${code}`, data), /** * Elimina una clave de pedimento * @param code - Código de la clave de pedimento a eliminar */ - delete: (code: string) => api.delete(`/v1/pedimento-codes/${code}`) + delete: (code: string) => api.delete(`/v1/public/refrence_data/pedimento-codes/${code}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/pedimento_regimens.ts b/frontend/src/lib/api/dashboard/refrence_data/pedimento_regimens.ts index 0a3dbe0b..2fdf716c 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/pedimento_regimens.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/pedimento_regimens.ts @@ -37,21 +37,21 @@ export const pedimentoRegimensApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/pedimento-regimens?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/pedimento-regimens?page=${page}&page_size=${pageSize}` ), /** * Obtiene un régimen de pedimento por code * @param code - Código del régimen de pedimento */ - get: (code: string) => api.get(`/v1/pedimento-regimens/${code}`), + get: (code: string) => api.get(`/v1/public/refrence_data/pedimento-regimens/${code}`), /** * Crea un nuevo régimen de pedimento * @param data - Datos del régimen de pedimento a crear */ create: (data: CreatePedimentoRegimenData) => - api.post('/v1/pedimento-regimens', data), + api.post('/v1/public/refrence_data/pedimento-regimens', data), /** * Actualiza un régimen de pedimento existente @@ -59,11 +59,11 @@ export const pedimentoRegimensApi = { * @param data - Datos a actualizar */ update: (code: string, data: UpdatePedimentoRegimenData) => - api.put(`/v1/pedimento-regimens/${code}`, data), + api.put(`/v1/public/refrence_data/pedimento-regimens/${code}`, data), /** * Elimina un régimen de pedimento * @param code - Código del régimen de pedimento a eliminar */ - delete: (code: string) => api.delete(`/v1/pedimento-regimens/${code}`) + delete: (code: string) => api.delete(`/v1/public/refrence_data/pedimento-regimens/${code}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/sectors.ts b/frontend/src/lib/api/dashboard/refrence_data/sectors.ts index 01013760..1d334cf0 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/sectors.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/sectors.ts @@ -40,21 +40,21 @@ export const sectorsApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/sectors?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/sectors?page=${page}&page_size=${pageSize}` ), /** * Obtiene un sector por key * @param key - Clave del sector */ - get: (key: string) => api.get(`/v1/sectors/${key}`), + get: (key: string) => api.get(`/v1/public/refrence_data/sectors/${key}`), /** * Crea un nuevo sector * @param data - Datos del sector a crear */ create: (data: CreateSectorData) => - api.post('/v1/sectors', data), + api.post('/v1/public/refrence_data/sectors', data), /** * Actualiza un sector existente @@ -62,11 +62,11 @@ export const sectorsApi = { * @param data - Datos a actualizar */ update: (key: string, data: UpdateSectorData) => - api.put(`/v1/sectors/${key}`, data), + api.put(`/v1/public/refrence_data/sectors/${key}`, data), /** * Elimina un sector * @param key - Clave del sector a eliminar */ - delete: (key: string) => api.delete(`/v1/sectors/${key}`) + delete: (key: string) => api.delete(`/v1/public/refrence_data/sectors/${key}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/states.ts b/frontend/src/lib/api/dashboard/refrence_data/states.ts index 339a65c0..ed24c5c4 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/states.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/states.ts @@ -43,21 +43,21 @@ export const statesApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/states?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/states?page=${page}&page_size=${pageSize}` ), /** * Obtiene un estado por m3_key * @param m3Key - Clave M3 del estado */ - get: (m3Key: string) => api.get(`/v1/states/${m3Key}`), + get: (m3Key: string) => api.get(`/v1/public/refrence_data/states/${m3Key}`), /** * Crea un nuevo estado * @param data - Datos del estado a crear */ create: (data: CreateStateData) => - api.post('/v1/states', data), + api.post('/v1/public/refrence_data/states', data), /** * Actualiza un estado existente @@ -65,11 +65,11 @@ export const statesApi = { * @param data - Datos a actualizar */ update: (m3Key: string, data: UpdateStateData) => - api.put(`/v1/states/${m3Key}`, data), + api.put(`/v1/public/refrence_data/states/${m3Key}`, data), /** * Elimina un estado * @param m3Key - Clave M3 del estado a eliminar */ - delete: (m3Key: string) => api.delete(`/v1/states/${m3Key}`) + delete: (m3Key: string) => api.delete(`/v1/public/refrence_data/states/${m3Key}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/transport_modes.ts b/frontend/src/lib/api/dashboard/refrence_data/transport_modes.ts index 277df5e8..f62d6b56 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/transport_modes.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/transport_modes.ts @@ -37,21 +37,21 @@ export const transportModesApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/transport-modes?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/transport-modes?page=${page}&page_size=${pageSize}` ), /** * Obtiene un modo de transporte por key * @param key - Clave del modo de transporte */ - get: (key: string) => api.get(`/v1/transport-modes/${key}`), + get: (key: string) => api.get(`/v1/public/refrence_data/transport-modes/${key}`), /** * Crea un nuevo modo de transporte * @param data - Datos del modo de transporte a crear */ create: (data: CreateTransportModeData) => - api.post('/v1/transport-modes', data), + api.post('/v1/public/refrence_data/transport-modes', data), /** * Actualiza un modo de transporte existente @@ -59,11 +59,11 @@ export const transportModesApi = { * @param data - Datos a actualizar */ update: (key: string, data: UpdateTransportModeData) => - api.put(`/v1/transport-modes/${key}`, data), + api.put(`/v1/public/refrence_data/transport-modes/${key}`, data), /** * Elimina un modo de transporte * @param key - Clave del modo de transporte a eliminar */ - delete: (key: string) => api.delete(`/v1/transport-modes/${key}`) + delete: (key: string) => api.delete(`/v1/public/refrence_data/transport-modes/${key}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/transport_types.ts b/frontend/src/lib/api/dashboard/refrence_data/transport_types.ts index 5b09910b..bbb2e06b 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/transport_types.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/transport_types.ts @@ -37,21 +37,21 @@ export const transportTypesApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/transport-types?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/transport-types?page=${page}&page_size=${pageSize}` ), /** * Obtiene un tipo de transporte por transport_code * @param transportCode - Código del tipo de transporte */ - get: (transportCode: string) => api.get(`/v1/transport-types/${transportCode}`), + get: (transportCode: string) => api.get(`/v1/public/refrence_data/transport-types/${transportCode}`), /** * Crea un nuevo tipo de transporte * @param data - Datos del tipo de transporte a crear */ create: (data: CreateTransportTypeData) => - api.post('/v1/transport-types', data), + api.post('/v1/public/refrence_data/transport-types', data), /** * Actualiza un tipo de transporte existente @@ -59,11 +59,11 @@ export const transportTypesApi = { * @param data - Datos a actualizar */ update: (transportCode: string, data: UpdateTransportTypeData) => - api.put(`/v1/transport-types/${transportCode}`, data), + api.put(`/v1/public/refrence_data/transport-types/${transportCode}`, data), /** * Elimina un tipo de transporte * @param transportCode - Código del tipo de transporte a eliminar */ - delete: (transportCode: string) => api.delete(`/v1/transport-types/${transportCode}`) + delete: (transportCode: string) => api.delete(`/v1/public/refrence_data/transport-types/${transportCode}`) }; diff --git a/frontend/src/lib/api/dashboard/refrence_data/valuation_methods.ts b/frontend/src/lib/api/dashboard/refrence_data/valuation_methods.ts index 54f729ad..a4277151 100644 --- a/frontend/src/lib/api/dashboard/refrence_data/valuation_methods.ts +++ b/frontend/src/lib/api/dashboard/refrence_data/valuation_methods.ts @@ -37,21 +37,21 @@ export const valuationMethodsApi = { */ list: (page = 1, pageSize = 50) => api.get( - `/v1/valuation-methods?page=${page}&page_size=${pageSize}` + `/v1/public/refrence_data/valuation-methods?page=${page}&page_size=${pageSize}` ), /** * Obtiene un método de valoración por key * @param key - Clave del método de valoración */ - get: (key: string) => api.get(`/v1/valuation-methods/${key}`), + get: (key: string) => api.get(`/v1/public/refrence_data/valuation-methods/${key}`), /** * Crea un nuevo método de valoración * @param data - Datos del método de valoración a crear */ create: (data: CreateValuationMethodData) => - api.post('/v1/valuation-methods', data), + api.post('/v1/public/refrence_data/valuation-methods', data), /** * Actualiza un método de valoración existente @@ -59,11 +59,11 @@ export const valuationMethodsApi = { * @param data - Datos a actualizar */ update: (key: string, data: UpdateValuationMethodData) => - api.put(`/v1/valuation-methods/${key}`, data), + api.put(`/v1/public/refrence_data/valuation-methods/${key}`, data), /** * Elimina un método de valoración * @param key - Clave del método de valoración a eliminar */ - delete: (key: string) => api.delete(`/v1/valuation-methods/${key}`) + delete: (key: string) => api.delete(`/v1/public/refrence_data/valuation-methods/${key}`) }; diff --git a/frontend/src/lib/components/dashboard/pedimentos/columns.ts b/frontend/src/lib/components/dashboard/pedimentos/columns.ts new file mode 100644 index 00000000..30aae1a0 --- /dev/null +++ b/frontend/src/lib/components/dashboard/pedimentos/columns.ts @@ -0,0 +1,234 @@ +import type { ColumnDef } from "@tanstack/table-core"; +import { renderComponent, renderSnippet } from "$lib/components/ui/data-table/index.js"; +import { createRawSnippet } from "svelte"; +import DataTableActions from "./data-table-actions.svelte"; + +export type Pedimento = { + id: number; + tenant_id: number; + year?: string | null; + customs_office?: string | null; + license?: string | null; + pedimento_number?: string | null; + client_id?: number | null; + operation_type?: number | null; + pedimento_type?: number | null; + pedimento_key?: string | null; + regime?: string | null; + status?: string | null; + usd_value?: number | null; + paid_price?: number | null; + gross_weight?: number | null; + exchange_rate?: number | null; + created_at: string; +}; + +/** + * Formatea un número como moneda + */ +function formatCurrency(value?: number | null): string { + if (value === null || value === undefined) return '-'; + return new Intl.NumberFormat('es-MX', { + style: 'currency', + currency: 'USD', + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }).format(value); +} + +/** + * Formatea un número con separadores de miles + */ +function formatNumber(value?: number | null, decimals = 2): string { + if (value === null || value === undefined) return '-'; + return new Intl.NumberFormat('es-MX', { + minimumFractionDigits: decimals, + maximumFractionDigits: decimals + }).format(value); +} + +/** + * Formatea una fecha + */ +function formatDate(date?: string | null): string { + if (!date) return '-'; + return new Date(date).toLocaleDateString('es-MX', { + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit' + }); +} + +/** + * Obtiene el color del badge según el status + */ +function getStatusColor(status?: string | null): string { + if (!status) return 'bg-gray-100 text-gray-800'; + + const statusLower = status.toLowerCase(); + if (statusLower.includes('activo') || statusLower.includes('completado')) { + return 'bg-green-100 text-green-800'; + } else if (statusLower.includes('pendiente') || statusLower.includes('proceso')) { + return 'bg-yellow-100 text-yellow-800'; + } else if (statusLower.includes('cancelado') || statusLower.includes('rechazado')) { + return 'bg-red-100 text-red-800'; + } + return 'bg-blue-100 text-blue-800'; +} + +export function createColumns(onSuccess?: () => void): ColumnDef[] { + return [ + { + accessorKey: "id", + header: "ID", + cell: ({ row }) => { + const idSnippet = createRawSnippet<[{ id: number }]>((getId) => { + const { id } = getId(); + return { + render: () => + `
#${id}
` + }; + }); + return renderSnippet(idSnippet, { id: row.original.id }); + } + }, + { + accessorKey: "pedimento_number", + header: "Número de Pedimento", + cell: ({ row }) => { + const pedimento = row.original; + const fullNumber = `${pedimento.year || ''}${pedimento.customs_office || ''}${pedimento.license || ''}${pedimento.pedimento_number || ''}`; + + const numberSnippet = createRawSnippet<[{ number: string }]>((getNumber) => { + const { number } = getNumber(); + return { + render: () => + `${number || 'N/A'}` + }; + }); + return renderSnippet(numberSnippet, { number: fullNumber }); + } + }, + { + accessorKey: "client_id", + header: "Cliente", + cell: ({ row }) => { + const clientSnippet = createRawSnippet<[{ clientId?: number | null }]>((getClient) => { + const { clientId } = getClient(); + return { + render: () => + `
${clientId ? `Cliente #${clientId}` : '-'}
` + }; + }); + return renderSnippet(clientSnippet, { clientId: row.original.client_id }); + } + }, + { + accessorKey: "status", + header: "Estado", + cell: ({ row }) => { + const status = row.original.status; + const colorClass = getStatusColor(status); + + const statusSnippet = createRawSnippet<[{ status?: string | null; colorClass: string }]>((getStatus) => { + const { status, colorClass } = getStatus(); + return { + render: () => + ` + ${status || 'N/A'} + ` + }; + }); + return renderSnippet(statusSnippet, { status, colorClass }); + } + }, + { + accessorKey: "usd_value", + header: () => { + const headerSnippet = createRawSnippet(() => { + return { + render: () => `
Valor USD
` + }; + }); + return renderSnippet(headerSnippet, {}); + }, + cell: ({ row }) => { + const valueSnippet = createRawSnippet<[{ value: string }]>((getValue) => { + const { value } = getValue(); + return { + render: () => + `
${value}
` + }; + }); + return renderSnippet(valueSnippet, { value: formatCurrency(row.original.usd_value) }); + } + }, + { + accessorKey: "paid_price", + header: () => { + const headerSnippet = createRawSnippet(() => { + return { + render: () => `
Precio Pagado
` + }; + }); + return renderSnippet(headerSnippet, {}); + }, + cell: ({ row }) => { + const priceSnippet = createRawSnippet<[{ price: string }]>((getPrice) => { + const { price } = getPrice(); + return { + render: () => + `
${price}
` + }; + }); + return renderSnippet(priceSnippet, { price: formatCurrency(row.original.paid_price) }); + } + }, + { + accessorKey: "gross_weight", + header: () => { + const headerSnippet = createRawSnippet(() => { + return { + render: () => `
Peso Bruto
` + }; + }); + return renderSnippet(headerSnippet, {}); + }, + cell: ({ row }) => { + const weightSnippet = createRawSnippet<[{ weight: string }]>((getWeight) => { + const { weight } = getWeight(); + return { + render: () => + `
${weight}
` + }; + }); + return renderSnippet(weightSnippet, { weight: formatNumber(row.original.gross_weight, 3) }); + } + }, + { + accessorKey: "created_at", + header: "Fecha de Creación", + cell: ({ row }) => { + const dateSnippet = createRawSnippet<[{ date: string }]>((getDate) => { + const { date } = getDate(); + return { + render: () => + `
${date}
` + }; + }); + return renderSnippet(dateSnippet, { date: formatDate(row.original.created_at) }); + } + }, + { + id: "actions", + cell: ({ row }) => { + return renderComponent(DataTableActions, { item: row.original, onSuccess }); + } + } + ]; +} + +// Mantener compatibilidad hacia atrás +export const columns = createColumns(); diff --git a/frontend/src/lib/components/dashboard/pedimentos/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/pedimentos/create-edit-dialog.svelte new file mode 100644 index 00000000..e6a80298 --- /dev/null +++ b/frontend/src/lib/components/dashboard/pedimentos/create-edit-dialog.svelte @@ -0,0 +1,425 @@ + + + + + + + {isEditing ? "Editar" : "Nuevo"} Pedimento + + + {isEditing + ? "Modifica los datos del pedimento." + : "Completa los datos para crear un nuevo pedimento."} + + + +
+ {#if error} +
+ {error} +
+ {/if} + + +
+

Información del Pedimento

+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+
+ + +
+ +
+ + +
+
+
+ + +
+

Cliente y Operación

+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ + +
+

Información Financiera

+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ + + + + +
+
+
diff --git a/frontend/src/lib/components/dashboard/pedimentos/data-table-actions.svelte b/frontend/src/lib/components/dashboard/pedimentos/data-table-actions.svelte new file mode 100644 index 00000000..9df58ec8 --- /dev/null +++ b/frontend/src/lib/components/dashboard/pedimentos/data-table-actions.svelte @@ -0,0 +1,179 @@ + + + + + {#snippet child({ props })} + + {/snippet} + + + Acciones + + + + + + + Ver detalles + + + + + + + Editar + + + + {#if loading} + + + + + {:else} + + + + + + {/if} + Eliminar + + + + +{#if showEditDialog} + + {#await import('./create-edit-dialog.svelte') then { default: CreateEditDialog }} + + {/await} +{/if} diff --git a/frontend/src/lib/components/dashboard/pedimentos/data-table.svelte b/frontend/src/lib/components/dashboard/pedimentos/data-table.svelte new file mode 100644 index 00000000..ef98de23 --- /dev/null +++ b/frontend/src/lib/components/dashboard/pedimentos/data-table.svelte @@ -0,0 +1,123 @@ + + +
+
+ + + {#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} + + {:else} + + + No hay resultados. + + + {/each} + + + {#if hasMore} + + +
+ {#if loading} +
+
+ Cargando más... +
+ {:else} +
+ Desplázate para cargar más +
+ {/if} +
+
+
+ {/if} +
+
+
+
diff --git a/frontend/src/lib/components/sidebar/modules.ts b/frontend/src/lib/components/sidebar/modules.ts index ee9b1269..77a9cf17 100644 --- a/frontend/src/lib/components/sidebar/modules.ts +++ b/frontend/src/lib/components/sidebar/modules.ts @@ -286,23 +286,23 @@ export function getSidebarData(): SidebarData { items: [ { title: m["sidebar.pedimentos.pedimento_management"](), - url: "#", + url: "/dashboard/pedimentos", }, { title: m["sidebar.pedimentos.pedimento_codes"](), - url: "#", + url: "/dashboard/reference_data/pedimento_codes", }, { title: m["sidebar.pedimentos.customs_regimes"](), - url: "#", + url: "/dashboard/reference_data/pedimento_regimens", }, { title: m["sidebar.pedimentos.payment_methods"](), - url: "#", + url: "/dashboard/reference_data/payment_methods", }, { title: m["sidebar.pedimentos.customs_sections"](), - url: "#", + url: "/dashboard/reference_data/customs_sections", }, { title: m["sidebar.pedimentos.anexo_22_app_31"](), diff --git a/frontend/src/routes/dashboard/pedimentos/+page.server.ts b/frontend/src/routes/dashboard/pedimentos/+page.server.ts new file mode 100644 index 00000000..e69dd3c9 --- /dev/null +++ b/frontend/src/routes/dashboard/pedimentos/+page.server.ts @@ -0,0 +1,64 @@ +import type { PageServerLoad } from './$types'; +import { redirect } from '@sveltejs/kit'; + +export const load: PageServerLoad = async ({ fetch, cookies }) => { + // Verificar autenticación + const token = cookies.get('access_token'); + + if (!token) { + throw redirect(302, '/login'); + } + + try { + // Cargar datos iniciales de pedimentos + // Configurar la URL de la API para SSR + let apiUrl = process.env.INTERNAL_API_URL; + if (!apiUrl) { + apiUrl = import.meta.env.VITE_API_URL; + // Reemplazar 'localhost' con 'backend' para llamadas desde el servidor (SSR) + apiUrl = apiUrl?.replace('localhost', 'backend').replace('127.0.0.1', 'backend'); + } + + // Normalizar la URL + const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; + + const response = await fetch(`${baseUrl}v1/a76/pedimentos?page=1&page_size=50`, { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + }); + + if (!response.ok) { + if (response.status === 401 || response.status === 403) { + throw redirect(302, '/login'); + } + + return { + items: [], + total: 0, + page: 1, + page_size: 50, + error: 'Error al cargar pedimentos' + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || 1, + page_size: data.page_size || 50 + }; + } catch (error) { + console.error('Error loading pedimentos:', error); + return { + items: [], + total: 0, + page: 1, + page_size: 50, + error: 'Error al cargar pedimentos' + }; + } +}; diff --git a/frontend/src/routes/dashboard/pedimentos/+page.svelte b/frontend/src/routes/dashboard/pedimentos/+page.svelte new file mode 100644 index 00000000..22f489ee --- /dev/null +++ b/frontend/src/routes/dashboard/pedimentos/+page.svelte @@ -0,0 +1,352 @@ + + +
+ +
+
+

Pedimentos

+

+ Gestiona los pedimentos del sistema +

+
+ +
+ + + + + Filtros + Filtra los pedimentos por diferentes criterios + + +
{ e.preventDefault(); applyFilters(); }} class="grid grid-cols-1 md:grid-cols-4 gap-4"> +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Pedimentos + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + + diff --git a/frontend/src/routes/dashboard/reference_data/code_pedimento_regimens/+page.server.ts b/frontend/src/routes/dashboard/reference_data/code_pedimento_regimens/+page.server.ts index ff2f87ee..2ac8d182 100644 --- a/frontend/src/routes/dashboard/reference_data/code_pedimento_regimens/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/code_pedimento_regimens/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/code-pedimento-regimens?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/code-pedimento-regimens?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/containers/+page.server.ts b/frontend/src/routes/dashboard/reference_data/containers/+page.server.ts index d63ee421..3210dc37 100644 --- a/frontend/src/routes/dashboard/reference_data/containers/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/containers/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/containers?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/containers?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/countries/+page.server.ts b/frontend/src/routes/dashboard/reference_data/countries/+page.server.ts index 3c8e022c..f2a7631b 100644 --- a/frontend/src/routes/dashboard/reference_data/countries/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/countries/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/countries?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/countries?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/currency_types/+page.server.ts b/frontend/src/routes/dashboard/reference_data/currency_types/+page.server.ts index ac813d0b..a8a17651 100644 --- a/frontend/src/routes/dashboard/reference_data/currency_types/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/currency_types/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/currency-types?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/currency-types?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/customs_sections/+page.server.ts b/frontend/src/routes/dashboard/reference_data/customs_sections/+page.server.ts index fecf64d7..d0d6683a 100644 --- a/frontend/src/routes/dashboard/reference_data/customs_sections/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/customs_sections/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/customs-sections?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/customs-sections?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/customs_warehouses/+page.server.ts b/frontend/src/routes/dashboard/reference_data/customs_warehouses/+page.server.ts index cb9e87b3..a7a11917 100644 --- a/frontend/src/routes/dashboard/reference_data/customs_warehouses/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/customs_warehouses/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/customs-warehouses?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/customs-warehouses?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, 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 d5b9421b..347e8ac8 100644 --- a/frontend/src/routes/dashboard/reference_data/incoterms/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/incoterms/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/incoterms?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/incoterms?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/invoice_types/+page.server.ts b/frontend/src/routes/dashboard/reference_data/invoice_types/+page.server.ts index f3b965a7..1ddd9026 100644 --- a/frontend/src/routes/dashboard/reference_data/invoice_types/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/invoice_types/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/invoice-types?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/invoice-types?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/material_types/+page.server.ts b/frontend/src/routes/dashboard/reference_data/material_types/+page.server.ts index f55dc6b3..fbf97e7e 100644 --- a/frontend/src/routes/dashboard/reference_data/material_types/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/material_types/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/material-types?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/material-types?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/payment_methods/+page.server.ts b/frontend/src/routes/dashboard/reference_data/payment_methods/+page.server.ts index 5cabd2a5..f197fd6a 100644 --- a/frontend/src/routes/dashboard/reference_data/payment_methods/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/payment_methods/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/payment-methods?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/payment-methods?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/pedimento_codes/+page.server.ts b/frontend/src/routes/dashboard/reference_data/pedimento_codes/+page.server.ts index d4cfdcc6..4cd1e31b 100644 --- a/frontend/src/routes/dashboard/reference_data/pedimento_codes/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/pedimento_codes/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/pedimento-codes?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/pedimento-codes?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/pedimento_regimens/+page.server.ts b/frontend/src/routes/dashboard/reference_data/pedimento_regimens/+page.server.ts index 842031d1..aa169764 100644 --- a/frontend/src/routes/dashboard/reference_data/pedimento_regimens/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/pedimento_regimens/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/pedimento-regimens?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/pedimento-regimens?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/sectors/+page.server.ts b/frontend/src/routes/dashboard/reference_data/sectors/+page.server.ts index fbed6e9e..21eef54e 100644 --- a/frontend/src/routes/dashboard/reference_data/sectors/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/sectors/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/sectors?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/sectors?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/states/+page.server.ts b/frontend/src/routes/dashboard/reference_data/states/+page.server.ts index 0d62247b..c50ce29e 100644 --- a/frontend/src/routes/dashboard/reference_data/states/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/states/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/states?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/states?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/transport_modes/+page.server.ts b/frontend/src/routes/dashboard/reference_data/transport_modes/+page.server.ts index 68aa9999..8a7a6969 100644 --- a/frontend/src/routes/dashboard/reference_data/transport_modes/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/transport_modes/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/transport-modes?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/transport-modes?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/transport_types/+page.server.ts b/frontend/src/routes/dashboard/reference_data/transport_types/+page.server.ts index 2704feed..0742b526 100644 --- a/frontend/src/routes/dashboard/reference_data/transport_types/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/transport_types/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/transport-types?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/transport-types?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`, diff --git a/frontend/src/routes/dashboard/reference_data/valuation_methods/+page.server.ts b/frontend/src/routes/dashboard/reference_data/valuation_methods/+page.server.ts index def89f09..40ffc4bb 100644 --- a/frontend/src/routes/dashboard/reference_data/valuation_methods/+page.server.ts +++ b/frontend/src/routes/dashboard/reference_data/valuation_methods/+page.server.ts @@ -33,7 +33,7 @@ export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`; const response = await fetch( - `${baseUrl}v1/valuation-methods?page=${page}&page_size=${pageSize}`, + `${baseUrl}v1/public/refrence_data/valuation-methods?page=${page}&page_size=${pageSize}`, { headers: { 'Authorization': `Bearer ${token}`,