From ab57c6cd79f2029ff2c6ddeb79a6ebd93276faa4 Mon Sep 17 00:00:00 2001 From: acazares Date: Sun, 2 Nov 2025 16:54:27 -0600 Subject: [PATCH] feat: Implement reference data management for states, transport modes, transport types, and valuation methods - Added server-side loading logic for states, transport modes, transport types, and valuation methods with pagination support. - Created Svelte components for displaying and managing states, transport modes, transport types, and valuation methods. - Implemented infinite scroll functionality for loading more data as the user scrolls. - Added error handling and user feedback for API interactions. - Included dialogs for creating and editing entries in each reference data category. --- .../dashboard/refrence_data/currency_types.ts | 72 ++++++ .../refrence_data/customs_sections.ts | 69 ++++++ .../refrence_data/customs_warehouses.ts | 77 ++++++ .../api/dashboard/refrence_data/incoterms.ts | 72 ++++++ .../dashboard/refrence_data/invoice_types.ts | 75 ++++++ .../dashboard/refrence_data/material_types.ts | 72 ++++++ .../refrence_data/payment_methods.ts | 69 ++++++ .../refrence_data/pedimento_codes.ts | 69 ++++++ .../refrence_data/pedimento_regimens.ts | 69 ++++++ .../api/dashboard/refrence_data/sectors.ts | 72 ++++++ .../lib/api/dashboard/refrence_data/states.ts | 75 ++++++ .../refrence_data/transport_modes.ts | 69 ++++++ .../refrence_data/transport_types.ts | 69 ++++++ .../refrence_data/valuation_methods.ts | 69 ++++++ .../reference_data/currency_types/columns.ts | 64 +++++ .../currency_types/create-edit-dialog.svelte | 206 ++++++++++++++++ .../currency_types/data-table-actions.svelte | 66 ++++++ .../currency_types/data-table.svelte | 123 ++++++++++ .../currency_types/delete-dialog.svelte | 116 +++++++++ .../currency_types/details-dialog.svelte | 65 +++++ .../customs_sections/columns.ts | 50 ++++ .../create-edit-dialog.svelte | 188 +++++++++++++++ .../data-table-actions.svelte | 66 ++++++ .../customs_sections/data-table.svelte | 123 ++++++++++ .../customs_sections/delete-dialog.svelte | 112 +++++++++ .../customs_sections/details-dialog.svelte | 57 +++++ .../customs_warehouses/columns.ts | 64 +++++ .../create-edit-dialog.svelte | 209 ++++++++++++++++ .../data-table-actions.svelte | 66 ++++++ .../customs_warehouses/data-table.svelte | 123 ++++++++++ .../customs_warehouses/delete-dialog.svelte | 116 +++++++++ .../customs_warehouses/details-dialog.svelte | 62 +++++ .../reference_data/incoterms/columns.ts | 64 +++++ .../incoterms/create-edit-dialog.svelte | 207 ++++++++++++++++ .../incoterms/data-table-actions.svelte | 66 ++++++ .../incoterms/data-table.svelte | 123 ++++++++++ .../incoterms/delete-dialog.svelte | 116 +++++++++ .../incoterms/details-dialog.svelte | 65 +++++ .../reference_data/invoice_types/columns.ts | 78 ++++++ .../invoice_types/create-edit-dialog.svelte | 222 +++++++++++++++++ .../invoice_types/data-table-actions.svelte | 66 ++++++ .../invoice_types/data-table.svelte | 123 ++++++++++ .../invoice_types/delete-dialog.svelte | 124 ++++++++++ .../invoice_types/details-dialog.svelte | 77 ++++++ .../reference_data/material_types/columns.ts | 64 +++++ .../material_types/create-edit-dialog.svelte | 206 ++++++++++++++++ .../material_types/data-table-actions.svelte | 66 ++++++ .../material_types/data-table.svelte | 123 ++++++++++ .../material_types/delete-dialog.svelte | 116 +++++++++ .../material_types/details-dialog.svelte | 65 +++++ .../reference_data/payment_methods/columns.ts | 50 ++++ .../payment_methods/create-edit-dialog.svelte | 186 +++++++++++++++ .../payment_methods/data-table-actions.svelte | 66 ++++++ .../payment_methods/data-table.svelte | 123 ++++++++++ .../payment_methods/delete-dialog.svelte | 112 +++++++++ .../payment_methods/details-dialog.svelte | 57 +++++ .../reference_data/pedimento_codes/columns.ts | 50 ++++ .../pedimento_codes/create-edit-dialog.svelte | 188 +++++++++++++++ .../pedimento_codes/data-table-actions.svelte | 66 ++++++ .../pedimento_codes/data-table.svelte | 123 ++++++++++ .../pedimento_codes/delete-dialog.svelte | 112 +++++++++ .../pedimento_codes/details-dialog.svelte | 57 +++++ .../pedimento_regimens/columns.ts | 50 ++++ .../create-edit-dialog.svelte | 186 +++++++++++++++ .../data-table-actions.svelte | 66 ++++++ .../pedimento_regimens/data-table.svelte | 123 ++++++++++ .../pedimento_regimens/delete-dialog.svelte | 112 +++++++++ .../pedimento_regimens/details-dialog.svelte | 57 +++++ .../reference_data/sectors/columns.ts | 67 ++++++ .../sectors/create-edit-dialog.svelte | 223 +++++++++++++++++ .../sectors/data-table-actions.svelte | 66 ++++++ .../reference_data/sectors/data-table.svelte | 123 ++++++++++ .../sectors/delete-dialog.svelte | 119 ++++++++++ .../sectors/details-dialog.svelte | 68 ++++++ .../reference_data/states/columns.ts | 84 +++++++ .../states/create-edit-dialog.svelte | 224 ++++++++++++++++++ .../states/data-table-actions.svelte | 66 ++++++ .../reference_data/states/data-table.svelte | 123 ++++++++++ .../states/delete-dialog.svelte | 124 ++++++++++ .../states/details-dialog.svelte | 85 +++++++ .../reference_data/transport_modes/columns.ts | 50 ++++ .../transport_modes/create-edit-dialog.svelte | 184 ++++++++++++++ .../transport_modes/data-table-actions.svelte | 66 ++++++ .../transport_modes/data-table.svelte | 123 ++++++++++ .../transport_modes/delete-dialog.svelte | 112 +++++++++ .../transport_modes/details-dialog.svelte | 57 +++++ .../reference_data/transport_types/columns.ts | 50 ++++ .../transport_types/create-edit-dialog.svelte | 184 ++++++++++++++ .../transport_types/data-table-actions.svelte | 66 ++++++ .../transport_types/data-table.svelte | 123 ++++++++++ .../transport_types/delete-dialog.svelte | 112 +++++++++ .../transport_types/details-dialog.svelte | 57 +++++ .../valuation_methods/columns.ts | 50 ++++ .../create-edit-dialog.svelte | 184 ++++++++++++++ .../data-table-actions.svelte | 66 ++++++ .../valuation_methods/data-table.svelte | 123 ++++++++++ .../valuation_methods/delete-dialog.svelte | 112 +++++++++ .../valuation_methods/details-dialog.svelte | 57 +++++ .../src/lib/components/sidebar/modules.ts | 4 +- .../src/lib/components/ui/badge/badge.svelte | 50 ++++ frontend/src/lib/components/ui/badge/index.ts | 2 + .../src/lib/components/ui/select/index.ts | 37 +++ .../ui/select/select-content.svelte | 40 ++++ .../ui/select/select-group-heading.svelte | 21 ++ .../components/ui/select/select-group.svelte | 7 + .../components/ui/select/select-item.svelte | 38 +++ .../components/ui/select/select-label.svelte | 20 ++ .../select/select-scroll-down-button.svelte | 20 ++ .../ui/select/select-scroll-up-button.svelte | 20 ++ .../ui/select/select-separator.svelte | 18 ++ .../ui/select/select-trigger.svelte | 29 +++ .../src/lib/components/ui/textarea/index.ts | 7 + .../components/ui/textarea/textarea.svelte | 23 ++ .../currency_types/+page.server.ts | 81 +++++++ .../currency_types/+page.svelte | 196 +++++++++++++++ .../customs_sections/+page.server.ts | 81 +++++++ .../customs_sections/+page.svelte | 196 +++++++++++++++ .../customs_warehouses/+page.server.ts | 81 +++++++ .../customs_warehouses/+page.svelte | 196 +++++++++++++++ .../reference_data/incoterms/+page.server.ts | 81 +++++++ .../reference_data/incoterms/+page.svelte | 196 +++++++++++++++ .../invoice_types/+page.server.ts | 81 +++++++ .../reference_data/invoice_types/+page.svelte | 196 +++++++++++++++ .../material_types/+page.server.ts | 81 +++++++ .../material_types/+page.svelte | 196 +++++++++++++++ .../payment_methods/+page.server.ts | 81 +++++++ .../payment_methods/+page.svelte | 196 +++++++++++++++ .../pedimento_codes/+page.server.ts | 81 +++++++ .../pedimento_codes/+page.svelte | 196 +++++++++++++++ .../pedimento_regimens/+page.server.ts | 81 +++++++ .../pedimento_regimens/+page.svelte | 196 +++++++++++++++ .../reference_data/sectors/+page.server.ts | 81 +++++++ .../reference_data/sectors/+page.svelte | 196 +++++++++++++++ .../reference_data/states/+page.server.ts | 81 +++++++ .../reference_data/states/+page.svelte | 196 +++++++++++++++ .../transport_modes/+page.server.ts | 81 +++++++ .../transport_modes/+page.svelte | 196 +++++++++++++++ .../transport_types/+page.server.ts | 81 +++++++ .../transport_types/+page.svelte | 196 +++++++++++++++ .../valuation_methods/+page.server.ts | 81 +++++++ .../valuation_methods/+page.svelte | 196 +++++++++++++++ 141 files changed, 13989 insertions(+), 2 deletions(-) create mode 100644 frontend/src/lib/api/dashboard/refrence_data/currency_types.ts create mode 100644 frontend/src/lib/api/dashboard/refrence_data/customs_sections.ts create mode 100644 frontend/src/lib/api/dashboard/refrence_data/customs_warehouses.ts create mode 100644 frontend/src/lib/api/dashboard/refrence_data/incoterms.ts create mode 100644 frontend/src/lib/api/dashboard/refrence_data/invoice_types.ts create mode 100644 frontend/src/lib/api/dashboard/refrence_data/material_types.ts create mode 100644 frontend/src/lib/api/dashboard/refrence_data/payment_methods.ts create mode 100644 frontend/src/lib/api/dashboard/refrence_data/pedimento_codes.ts create mode 100644 frontend/src/lib/api/dashboard/refrence_data/pedimento_regimens.ts create mode 100644 frontend/src/lib/api/dashboard/refrence_data/sectors.ts create mode 100644 frontend/src/lib/api/dashboard/refrence_data/states.ts create mode 100644 frontend/src/lib/api/dashboard/refrence_data/transport_modes.ts create mode 100644 frontend/src/lib/api/dashboard/refrence_data/transport_types.ts create mode 100644 frontend/src/lib/api/dashboard/refrence_data/valuation_methods.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/currency_types/columns.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/currency_types/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/currency_types/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/currency_types/data-table.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/currency_types/delete-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/currency_types/details-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/customs_sections/columns.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/customs_sections/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/customs_sections/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/customs_sections/data-table.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/customs_sections/delete-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/customs_sections/details-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/customs_warehouses/columns.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/customs_warehouses/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/customs_warehouses/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/customs_warehouses/data-table.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/customs_warehouses/delete-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/customs_warehouses/details-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/incoterms/columns.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/incoterms/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/incoterms/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/incoterms/data-table.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/incoterms/delete-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/incoterms/details-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/invoice_types/columns.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/invoice_types/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/invoice_types/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/invoice_types/data-table.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/invoice_types/delete-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/invoice_types/details-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/material_types/columns.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/material_types/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/material_types/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/material_types/data-table.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/material_types/delete-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/material_types/details-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/payment_methods/columns.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/payment_methods/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/payment_methods/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/payment_methods/data-table.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/payment_methods/delete-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/payment_methods/details-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/pedimento_codes/columns.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/pedimento_codes/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/pedimento_codes/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/pedimento_codes/data-table.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/pedimento_codes/delete-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/pedimento_codes/details-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/pedimento_regimens/columns.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/pedimento_regimens/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/pedimento_regimens/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/pedimento_regimens/data-table.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/pedimento_regimens/delete-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/pedimento_regimens/details-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/sectors/columns.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/sectors/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/sectors/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/sectors/data-table.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/sectors/delete-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/sectors/details-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/states/columns.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/states/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/states/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/states/data-table.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/states/delete-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/states/details-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/transport_modes/columns.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/transport_modes/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/transport_modes/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/transport_modes/data-table.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/transport_modes/delete-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/transport_modes/details-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/transport_types/columns.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/transport_types/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/transport_types/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/transport_types/data-table.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/transport_types/delete-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/transport_types/details-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/valuation_methods/columns.ts create mode 100644 frontend/src/lib/components/dashboard/reference_data/valuation_methods/create-edit-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/valuation_methods/data-table-actions.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/valuation_methods/data-table.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/valuation_methods/delete-dialog.svelte create mode 100644 frontend/src/lib/components/dashboard/reference_data/valuation_methods/details-dialog.svelte create mode 100644 frontend/src/lib/components/ui/badge/badge.svelte create mode 100644 frontend/src/lib/components/ui/badge/index.ts create mode 100644 frontend/src/lib/components/ui/select/index.ts create mode 100644 frontend/src/lib/components/ui/select/select-content.svelte create mode 100644 frontend/src/lib/components/ui/select/select-group-heading.svelte create mode 100644 frontend/src/lib/components/ui/select/select-group.svelte create mode 100644 frontend/src/lib/components/ui/select/select-item.svelte create mode 100644 frontend/src/lib/components/ui/select/select-label.svelte create mode 100644 frontend/src/lib/components/ui/select/select-scroll-down-button.svelte create mode 100644 frontend/src/lib/components/ui/select/select-scroll-up-button.svelte create mode 100644 frontend/src/lib/components/ui/select/select-separator.svelte create mode 100644 frontend/src/lib/components/ui/select/select-trigger.svelte create mode 100644 frontend/src/lib/components/ui/textarea/index.ts create mode 100644 frontend/src/lib/components/ui/textarea/textarea.svelte create mode 100644 frontend/src/routes/dashboard/reference_data/currency_types/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reference_data/customs_sections/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reference_data/customs_sections/+page.svelte create mode 100644 frontend/src/routes/dashboard/reference_data/customs_warehouses/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reference_data/customs_warehouses/+page.svelte create mode 100644 frontend/src/routes/dashboard/reference_data/incoterms/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reference_data/incoterms/+page.svelte create mode 100644 frontend/src/routes/dashboard/reference_data/invoice_types/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reference_data/invoice_types/+page.svelte create mode 100644 frontend/src/routes/dashboard/reference_data/material_types/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reference_data/material_types/+page.svelte create mode 100644 frontend/src/routes/dashboard/reference_data/payment_methods/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reference_data/payment_methods/+page.svelte create mode 100644 frontend/src/routes/dashboard/reference_data/pedimento_codes/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reference_data/pedimento_codes/+page.svelte create mode 100644 frontend/src/routes/dashboard/reference_data/pedimento_regimens/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reference_data/pedimento_regimens/+page.svelte create mode 100644 frontend/src/routes/dashboard/reference_data/sectors/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reference_data/sectors/+page.svelte create mode 100644 frontend/src/routes/dashboard/reference_data/states/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reference_data/states/+page.svelte create mode 100644 frontend/src/routes/dashboard/reference_data/transport_modes/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reference_data/transport_modes/+page.svelte create mode 100644 frontend/src/routes/dashboard/reference_data/transport_types/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reference_data/transport_types/+page.svelte create mode 100644 frontend/src/routes/dashboard/reference_data/valuation_methods/+page.server.ts create mode 100644 frontend/src/routes/dashboard/reference_data/valuation_methods/+page.svelte diff --git a/frontend/src/lib/api/dashboard/refrence_data/currency_types.ts b/frontend/src/lib/api/dashboard/refrence_data/currency_types.ts new file mode 100644 index 00000000..68fdec93 --- /dev/null +++ b/frontend/src/lib/api/dashboard/refrence_data/currency_types.ts @@ -0,0 +1,72 @@ +/** + * API Client para Currency Types + * Gestiona las operaciones CRUD para los tipos de moneda + */ +import { api } from '$lib/api'; + +export interface CurrencyType { + code: string; + currency_name: string; + country_description: string; +} + +export interface CurrencyTypeListResponse { + items: CurrencyType[]; + total: number; + page: number; + page_size: number; +} + +export interface CreateCurrencyTypeData { + code: string; + currency_name: string; + country_description: string; +} + +export interface UpdateCurrencyTypeData { + code?: string; + currency_name?: string; + country_description?: string; +} + +/** + * API para Currency Types + */ +export const currencyTypesApi = { + /** + * Lista todos los tipos de moneda con paginación + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + */ + list: (page = 1, pageSize = 50) => + api.get( + `/v1/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}`), + + /** + * Crea un nuevo tipo de moneda + * @param data - Datos del tipo de moneda a crear + */ + create: (data: CreateCurrencyTypeData) => + api.post('/v1/currency-types', data), + + /** + * Actualiza un tipo de moneda existente + * @param code - Código del tipo de moneda a actualizar + * @param data - Datos a actualizar + */ + update: (code: string, data: UpdateCurrencyTypeData) => + api.put(`/v1/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}`) +}; diff --git a/frontend/src/lib/api/dashboard/refrence_data/customs_sections.ts b/frontend/src/lib/api/dashboard/refrence_data/customs_sections.ts new file mode 100644 index 00000000..e67620ff --- /dev/null +++ b/frontend/src/lib/api/dashboard/refrence_data/customs_sections.ts @@ -0,0 +1,69 @@ +/** + * API Client para Customs Sections + * Gestiona las operaciones CRUD para las secciones aduaneras + */ +import { api } from '$lib/api'; + +export interface CustomsSection { + customs_code: string; + section_name: string; +} + +export interface CustomsSectionListResponse { + items: CustomsSection[]; + total: number; + page: number; + page_size: number; +} + +export interface CreateCustomsSectionData { + customs_code: string; + section_name: string; +} + +export interface UpdateCustomsSectionData { + customs_code?: string; + section_name?: string; +} + +/** + * API para Customs Sections + */ +export const customsSectionsApi = { + /** + * Lista todas las secciones aduaneras con paginación + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + */ + list: (page = 1, pageSize = 50) => + api.get( + `/v1/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}`), + + /** + * 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), + + /** + * Actualiza una sección aduanera existente + * @param customs_code - Código de la sección aduanera a actualizar + * @param data - Datos a actualizar + */ + update: (customs_code: string, data: UpdateCustomsSectionData) => + api.put(`/v1/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}`) +}; diff --git a/frontend/src/lib/api/dashboard/refrence_data/customs_warehouses.ts b/frontend/src/lib/api/dashboard/refrence_data/customs_warehouses.ts new file mode 100644 index 00000000..3ef02d19 --- /dev/null +++ b/frontend/src/lib/api/dashboard/refrence_data/customs_warehouses.ts @@ -0,0 +1,77 @@ +/** + * API Client para Customs Warehouses + * Gestiona las operaciones CRUD para los recintos fiscalizados + */ +import { api } from '$lib/api'; + +export interface CustomsWarehouse { + key: string; + customs: string; + fiscalized_warehouse: string; +} + +export interface CustomsWarehouseListResponse { + items: CustomsWarehouse[]; + total: number; + page: number; + page_size: number; +} + +export interface CreateCustomsWarehouseData { + key: string; + customs: string; + fiscalized_warehouse: string; +} + +export interface UpdateCustomsWarehouseData { + key?: string; + customs?: string; + fiscalized_warehouse?: string; +} + +/** + * API para Customs Warehouses + */ +export const customsWarehousesApi = { + /** + * Lista todos los recintos fiscalizados con paginación + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + */ + list: (page = 1, pageSize = 50) => + api.get( + `/v1/customs-warehouses?page=${page}&page_size=${pageSize}` + ), + + /** + * Obtiene un recinto fiscalizado por clave compuesta (key + customs) + * @param key - Clave del recinto + * @param customs - Aduana asociada + */ + get: (key: string, customs: string) => + api.get(`/v1/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), + + /** + * Actualiza un recinto fiscalizado existente + * @param key - Clave del recinto a actualizar + * @param customs - Aduana asociada + * @param data - Datos a actualizar + */ + update: (key: string, customs: string, data: UpdateCustomsWarehouseData) => + api.put(`/v1/customs-warehouses/${key}/${customs}`, data), + + /** + * Elimina un recinto fiscalizado + * @param key - Clave del recinto a eliminar + * @param customs - Aduana asociada + */ + delete: (key: string, customs: string) => + api.delete(`/v1/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 new file mode 100644 index 00000000..ece31dd7 --- /dev/null +++ b/frontend/src/lib/api/dashboard/refrence_data/incoterms.ts @@ -0,0 +1,72 @@ +/** + * API Client para Incoterms + * Gestiona las operaciones CRUD para los términos internacionales de comercio + */ +import { api } from '$lib/api'; + +export interface Incoterm { + code: string; + description_es: string; + description_en: string; +} + +export interface IncotermListResponse { + items: Incoterm[]; + total: number; + page: number; + page_size: number; +} + +export interface CreateIncotermData { + code: string; + description_es: string; + description_en: string; +} + +export interface UpdateIncotermData { + code?: string; + description_es?: string; + description_en?: string; +} + +/** + * API para Incoterms + */ +export const incotermsApi = { + /** + * Lista todos los incoterms con paginación + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + */ + list: (page = 1, pageSize = 50) => + api.get( + `/v1/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}`), + + /** + * Crea un nuevo incoterm + * @param data - Datos del incoterm a crear + */ + create: (data: CreateIncotermData) => + api.post('/v1/incoterms', data), + + /** + * Actualiza un incoterm existente + * @param code - Código del incoterm a actualizar + * @param data - Datos a actualizar + */ + update: (code: string, data: UpdateIncotermData) => + api.put(`/v1/incoterms/${code}`, data), + + /** + * Elimina un incoterm + * @param code - Código del incoterm a eliminar + */ + delete: (code: string) => api.delete(`/v1/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 new file mode 100644 index 00000000..8cfbfd46 --- /dev/null +++ b/frontend/src/lib/api/dashboard/refrence_data/invoice_types.ts @@ -0,0 +1,75 @@ +/** + * API Client para Invoice Types + * Gestiona las operaciones CRUD para los tipos de factura + */ +import { api } from '$lib/api'; + +export interface InvoiceType { + key: string; + description: string; + note?: string; + type?: string; +} + +export interface InvoiceTypeListResponse { + items: InvoiceType[]; + total: number; + page: number; + page_size: number; +} + +export interface CreateInvoiceTypeData { + key: string; + description: string; + note?: string; + type?: string; +} + +export interface UpdateInvoiceTypeData { + key?: string; + description?: string; + note?: string; + type?: string; +} + +/** + * API para Invoice Types + */ +export const invoiceTypesApi = { + /** + * Lista todos los tipos de factura con paginación + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + */ + list: (page = 1, pageSize = 50) => + api.get( + `/v1/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}`), + + /** + * Crea un nuevo tipo de factura + * @param data - Datos del tipo de factura a crear + */ + create: (data: CreateInvoiceTypeData) => + api.post('/v1/invoice-types', data), + + /** + * Actualiza un tipo de factura existente + * @param key - Clave del tipo de factura a actualizar + * @param data - Datos a actualizar + */ + update: (key: string, data: UpdateInvoiceTypeData) => + api.put(`/v1/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}`) +}; diff --git a/frontend/src/lib/api/dashboard/refrence_data/material_types.ts b/frontend/src/lib/api/dashboard/refrence_data/material_types.ts new file mode 100644 index 00000000..d3156e5f --- /dev/null +++ b/frontend/src/lib/api/dashboard/refrence_data/material_types.ts @@ -0,0 +1,72 @@ +/** + * API Client para Material Types + * Gestiona las operaciones CRUD para los tipos de material + */ +import { api } from '$lib/api'; + +export interface MaterialType { + key: string; + type: string; + description: string; +} + +export interface MaterialTypeListResponse { + items: MaterialType[]; + total: number; + page: number; + page_size: number; +} + +export interface CreateMaterialTypeData { + key: string; + type: string; + description: string; +} + +export interface UpdateMaterialTypeData { + key?: string; + type?: string; + description?: string; +} + +/** + * API para Material Types + */ +export const materialTypesApi = { + /** + * Lista todos los tipos de material con paginación + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + */ + list: (page = 1, pageSize = 50) => + api.get( + `/v1/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}`), + + /** + * Crea un nuevo tipo de material + * @param data - Datos del tipo de material a crear + */ + create: (data: CreateMaterialTypeData) => + api.post('/v1/material-types', data), + + /** + * Actualiza un tipo de material existente + * @param key - Clave del tipo de material a actualizar + * @param data - Datos a actualizar + */ + update: (key: string, data: UpdateMaterialTypeData) => + api.put(`/v1/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}`) +}; diff --git a/frontend/src/lib/api/dashboard/refrence_data/payment_methods.ts b/frontend/src/lib/api/dashboard/refrence_data/payment_methods.ts new file mode 100644 index 00000000..5706765b --- /dev/null +++ b/frontend/src/lib/api/dashboard/refrence_data/payment_methods.ts @@ -0,0 +1,69 @@ +/** + * API Client para Payment Methods + * Gestiona las operaciones CRUD para los métodos de pago + */ +import { api } from '$lib/api'; + +export interface PaymentMethod { + key: string; + description: string; +} + +export interface PaymentMethodListResponse { + items: PaymentMethod[]; + total: number; + page: number; + page_size: number; +} + +export interface CreatePaymentMethodData { + key: string; + description: string; +} + +export interface UpdatePaymentMethodData { + key?: string; + description?: string; +} + +/** + * API para Payment Methods + */ +export const paymentMethodsApi = { + /** + * Lista todos los métodos de pago con paginación + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + */ + list: (page = 1, pageSize = 50) => + api.get( + `/v1/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}`), + + /** + * 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), + + /** + * Actualiza un método de pago existente + * @param key - Clave del método de pago a actualizar + * @param data - Datos a actualizar + */ + update: (key: string, data: UpdatePaymentMethodData) => + api.put(`/v1/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}`) +}; diff --git a/frontend/src/lib/api/dashboard/refrence_data/pedimento_codes.ts b/frontend/src/lib/api/dashboard/refrence_data/pedimento_codes.ts new file mode 100644 index 00000000..c50c3d59 --- /dev/null +++ b/frontend/src/lib/api/dashboard/refrence_data/pedimento_codes.ts @@ -0,0 +1,69 @@ +/** + * API Client para Pedimento Codes + * Gestiona las operaciones CRUD para las claves de pedimento + */ +import { api } from '$lib/api'; + +export interface PedimentoCode { + code: string; + description: string; +} + +export interface PedimentoCodeListResponse { + items: PedimentoCode[]; + total: number; + page: number; + page_size: number; +} + +export interface CreatePedimentoCodeData { + code: string; + description: string; +} + +export interface UpdatePedimentoCodeData { + code?: string; + description?: string; +} + +/** + * API para Pedimento Codes + */ +export const pedimentoCodesApi = { + /** + * Lista todas las claves de pedimento con paginación + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + */ + list: (page = 1, pageSize = 50) => + api.get( + `/v1/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}`), + + /** + * 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), + + /** + * Actualiza una clave de pedimento existente + * @param code - Código de la clave de pedimento a actualizar + * @param data - Datos a actualizar + */ + update: (code: string, data: UpdatePedimentoCodeData) => + api.put(`/v1/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}`) +}; diff --git a/frontend/src/lib/api/dashboard/refrence_data/pedimento_regimens.ts b/frontend/src/lib/api/dashboard/refrence_data/pedimento_regimens.ts new file mode 100644 index 00000000..0a3dbe0b --- /dev/null +++ b/frontend/src/lib/api/dashboard/refrence_data/pedimento_regimens.ts @@ -0,0 +1,69 @@ +/** + * API Client para Pedimento Regimens + * Gestiona las operaciones CRUD para los regímenes de pedimento + */ +import { api } from '$lib/api'; + +export interface PedimentoRegimen { + code: string; + description: string; +} + +export interface PedimentoRegimenListResponse { + items: PedimentoRegimen[]; + total: number; + page: number; + page_size: number; +} + +export interface CreatePedimentoRegimenData { + code: string; + description: string; +} + +export interface UpdatePedimentoRegimenData { + code?: string; + description?: string; +} + +/** + * API para Pedimento Regimens + */ +export const pedimentoRegimensApi = { + /** + * Lista todos los regímenes de pedimento con paginación + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + */ + list: (page = 1, pageSize = 50) => + api.get( + `/v1/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}`), + + /** + * 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), + + /** + * Actualiza un régimen de pedimento existente + * @param code - Código del régimen de pedimento a actualizar + * @param data - Datos a actualizar + */ + update: (code: string, data: UpdatePedimentoRegimenData) => + api.put(`/v1/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}`) +}; diff --git a/frontend/src/lib/api/dashboard/refrence_data/sectors.ts b/frontend/src/lib/api/dashboard/refrence_data/sectors.ts new file mode 100644 index 00000000..01013760 --- /dev/null +++ b/frontend/src/lib/api/dashboard/refrence_data/sectors.ts @@ -0,0 +1,72 @@ +/** + * API Client para Sectors + * Gestiona las operaciones CRUD para los sectores + */ +import { api } from '$lib/api'; + +export interface Sector { + key: string; + description: string; + authorized: number; +} + +export interface SectorListResponse { + items: Sector[]; + total: number; + page: number; + page_size: number; +} + +export interface CreateSectorData { + key: string; + description: string; + authorized: number; +} + +export interface UpdateSectorData { + key?: string; + description?: string; + authorized?: number; +} + +/** + * API para Sectors + */ +export const sectorsApi = { + /** + * Lista todos los sectores con paginación + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + */ + list: (page = 1, pageSize = 50) => + api.get( + `/v1/sectors?page=${page}&page_size=${pageSize}` + ), + + /** + * Obtiene un sector por key + * @param key - Clave del sector + */ + get: (key: string) => api.get(`/v1/sectors/${key}`), + + /** + * Crea un nuevo sector + * @param data - Datos del sector a crear + */ + create: (data: CreateSectorData) => + api.post('/v1/sectors', data), + + /** + * Actualiza un sector existente + * @param key - Clave del sector a actualizar + * @param data - Datos a actualizar + */ + update: (key: string, data: UpdateSectorData) => + api.put(`/v1/sectors/${key}`, data), + + /** + * Elimina un sector + * @param key - Clave del sector a eliminar + */ + delete: (key: string) => api.delete(`/v1/sectors/${key}`) +}; diff --git a/frontend/src/lib/api/dashboard/refrence_data/states.ts b/frontend/src/lib/api/dashboard/refrence_data/states.ts new file mode 100644 index 00000000..339a65c0 --- /dev/null +++ b/frontend/src/lib/api/dashboard/refrence_data/states.ts @@ -0,0 +1,75 @@ +/** + * API Client para States + * Gestiona las operaciones CRUD para los estados + */ +import { api } from '$lib/api'; + +export interface State { + m3_key: string; + description: string; + mex_key?: string | null; + ame_key?: string | null; +} + +export interface StateListResponse { + items: State[]; + total: number; + page: number; + page_size: number; +} + +export interface CreateStateData { + m3_key: string; + description: string; + mex_key?: string | null; + ame_key?: string | null; +} + +export interface UpdateStateData { + m3_key?: string; + description?: string; + mex_key?: string | null; + ame_key?: string | null; +} + +/** + * API para States + */ +export const statesApi = { + /** + * Lista todos los estados con paginación + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + */ + list: (page = 1, pageSize = 50) => + api.get( + `/v1/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}`), + + /** + * Crea un nuevo estado + * @param data - Datos del estado a crear + */ + create: (data: CreateStateData) => + api.post('/v1/states', data), + + /** + * Actualiza un estado existente + * @param m3Key - Clave M3 del estado a actualizar + * @param data - Datos a actualizar + */ + update: (m3Key: string, data: UpdateStateData) => + api.put(`/v1/states/${m3Key}`, data), + + /** + * Elimina un estado + * @param m3Key - Clave M3 del estado a eliminar + */ + delete: (m3Key: string) => api.delete(`/v1/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 new file mode 100644 index 00000000..277df5e8 --- /dev/null +++ b/frontend/src/lib/api/dashboard/refrence_data/transport_modes.ts @@ -0,0 +1,69 @@ +/** + * API Client para Transport Modes + * Gestiona las operaciones CRUD para los modos de transporte + */ +import { api } from '$lib/api'; + +export interface TransportMode { + key: string; + name: string; +} + +export interface TransportModeListResponse { + items: TransportMode[]; + total: number; + page: number; + page_size: number; +} + +export interface CreateTransportModeData { + key: string; + name: string; +} + +export interface UpdateTransportModeData { + key?: string; + name?: string; +} + +/** + * API para Transport Modes + */ +export const transportModesApi = { + /** + * Lista todos los modos de transporte con paginación + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + */ + list: (page = 1, pageSize = 50) => + api.get( + `/v1/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}`), + + /** + * Crea un nuevo modo de transporte + * @param data - Datos del modo de transporte a crear + */ + create: (data: CreateTransportModeData) => + api.post('/v1/transport-modes', data), + + /** + * Actualiza un modo de transporte existente + * @param key - Clave del modo de transporte a actualizar + * @param data - Datos a actualizar + */ + update: (key: string, data: UpdateTransportModeData) => + api.put(`/v1/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}`) +}; diff --git a/frontend/src/lib/api/dashboard/refrence_data/transport_types.ts b/frontend/src/lib/api/dashboard/refrence_data/transport_types.ts new file mode 100644 index 00000000..5b09910b --- /dev/null +++ b/frontend/src/lib/api/dashboard/refrence_data/transport_types.ts @@ -0,0 +1,69 @@ +/** + * API Client para Transport Types + * Gestiona las operaciones CRUD para los tipos de transporte + */ +import { api } from '$lib/api'; + +export interface TransportType { + transport_code: string; + description: string; +} + +export interface TransportTypeListResponse { + items: TransportType[]; + total: number; + page: number; + page_size: number; +} + +export interface CreateTransportTypeData { + transport_code: string; + description: string; +} + +export interface UpdateTransportTypeData { + transport_code?: string; + description?: string; +} + +/** + * API para Transport Types + */ +export const transportTypesApi = { + /** + * Lista todos los tipos de transporte con paginación + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + */ + list: (page = 1, pageSize = 50) => + api.get( + `/v1/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}`), + + /** + * Crea un nuevo tipo de transporte + * @param data - Datos del tipo de transporte a crear + */ + create: (data: CreateTransportTypeData) => + api.post('/v1/transport-types', data), + + /** + * Actualiza un tipo de transporte existente + * @param transportCode - Código del tipo de transporte a actualizar + * @param data - Datos a actualizar + */ + update: (transportCode: string, data: UpdateTransportTypeData) => + api.put(`/v1/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}`) +}; diff --git a/frontend/src/lib/api/dashboard/refrence_data/valuation_methods.ts b/frontend/src/lib/api/dashboard/refrence_data/valuation_methods.ts new file mode 100644 index 00000000..54f729ad --- /dev/null +++ b/frontend/src/lib/api/dashboard/refrence_data/valuation_methods.ts @@ -0,0 +1,69 @@ +/** + * API Client para Valuation Methods + * Gestiona las operaciones CRUD para los métodos de valoración + */ +import { api } from '$lib/api'; + +export interface ValuationMethod { + key: string; + description: string; +} + +export interface ValuationMethodListResponse { + items: ValuationMethod[]; + total: number; + page: number; + page_size: number; +} + +export interface CreateValuationMethodData { + key: string; + description: string; +} + +export interface UpdateValuationMethodData { + key?: string; + description?: string; +} + +/** + * API para Valuation Methods + */ +export const valuationMethodsApi = { + /** + * Lista todos los métodos de valoración con paginación + * @param page - Número de página (por defecto 1) + * @param pageSize - Tamaño de página (por defecto 50) + */ + list: (page = 1, pageSize = 50) => + api.get( + `/v1/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}`), + + /** + * 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), + + /** + * Actualiza un método de valoración existente + * @param key - Clave del método de valoración a actualizar + * @param data - Datos a actualizar + */ + update: (key: string, data: UpdateValuationMethodData) => + api.put(`/v1/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}`) +}; diff --git a/frontend/src/lib/components/dashboard/reference_data/currency_types/columns.ts b/frontend/src/lib/components/dashboard/reference_data/currency_types/columns.ts new file mode 100644 index 00000000..eb7ab8be --- /dev/null +++ b/frontend/src/lib/components/dashboard/reference_data/currency_types/columns.ts @@ -0,0 +1,64 @@ +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 CurrencyType = { + code: string; + currency_name: string; + country_description: string; +}; + +export function createColumns(onSuccess?: () => void): ColumnDef[] { + return [ + { + accessorKey: "code", + header: "Código", + cell: ({ row }) => { + const codeSnippet = createRawSnippet<[{ code: string }]>((getCode) => { + const { code } = getCode(); + return { + render: () => + `${code}` + }; + }); + return renderSnippet(codeSnippet, { code: row.original.code }); + } + }, + { + accessorKey: "currency_name", + header: "Nombre de Moneda", + cell: ({ row }) => { + const nameSnippet = createRawSnippet<[{ name: string }]>((getName) => { + const { name } = getName(); + return { + render: () => `
${name}
` + }; + }); + return renderSnippet(nameSnippet, { name: row.original.currency_name }); + } + }, + { + accessorKey: "country_description", + header: "País / Descripción", + cell: ({ row }) => { + const descSnippet = createRawSnippet<[{ description: string }]>((getDesc) => { + const { description } = getDesc(); + return { + render: () => `
${description}
` + }; + }); + return renderSnippet(descSnippet, { description: row.original.country_description }); + } + }, + { + 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/reference_data/currency_types/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/reference_data/currency_types/create-edit-dialog.svelte new file mode 100644 index 00000000..0dd6c3cf --- /dev/null +++ b/frontend/src/lib/components/dashboard/reference_data/currency_types/create-edit-dialog.svelte @@ -0,0 +1,206 @@ + + + + + + + {isEditing ? "Editar" : "Nuevo"} Tipo de Moneda + + + {isEditing + ? "Modifica los datos del tipo de moneda." + : "Completa los datos para crear un nuevo tipo de moneda."} + + + +
+ {#if error} +
+ {error} +
+ {/if} + +
+ + +

Código ISO de 3 caracteres

+
+ +
+ + +
+ +
+ + 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 new file mode 100644 index 00000000..ac813d0b --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/currency_types/+page.server.ts @@ -0,0 +1,81 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + await parent(); + + const token = cookies.get('access_token'); + + if (!token) { + return { + error: 'No authenticated', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } + + try { + // Obtener parámetros de paginación de la URL + const page = parseInt(url.searchParams.get('page') || '1'); + const pageSize = parseInt(url.searchParams.get('page_size') || '50'); + + // 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/currency-types?page=${page}&page_size=${pageSize}`, + { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.error('📊 [CurrencyTypes] API Error:', { + status: response.status, + statusText: response.statusText, + error: errorText + }); + + return { + error: `Error ${response.status}: ${response.statusText}`, + items: [], + total: 0, + page: page, + page_size: pageSize + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || page, + page_size: data.page_size || pageSize, + error: null + }; + } catch (error) { + console.error('📊 [CurrencyTypes] Load error:', error); + return { + error: 'Error loading data', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } +}; diff --git a/frontend/src/routes/dashboard/reference_data/currency_types/+page.svelte b/frontend/src/routes/dashboard/reference_data/currency_types/+page.svelte index e69de29b..f47264c8 100644 --- a/frontend/src/routes/dashboard/reference_data/currency_types/+page.svelte +++ b/frontend/src/routes/dashboard/reference_data/currency_types/+page.svelte @@ -0,0 +1,196 @@ + + +
+ +
+
+

Tipos de Moneda

+

+ Gestiona los tipos de moneda disponibles en el sistema +

+
+ +
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Tipos de Moneda + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + + 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 new file mode 100644 index 00000000..fecf64d7 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/customs_sections/+page.server.ts @@ -0,0 +1,81 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + await parent(); + + const token = cookies.get('access_token'); + + if (!token) { + return { + error: 'No authenticated', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } + + try { + // Obtener parámetros de paginación de la URL + const page = parseInt(url.searchParams.get('page') || '1'); + const pageSize = parseInt(url.searchParams.get('page_size') || '50'); + + // 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/customs-sections?page=${page}&page_size=${pageSize}`, + { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.error('📊 [CustomsSections] API Error:', { + status: response.status, + statusText: response.statusText, + error: errorText + }); + + return { + error: `Error ${response.status}: ${response.statusText}`, + items: [], + total: 0, + page: page, + page_size: pageSize + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || page, + page_size: data.page_size || pageSize, + error: null + }; + } catch (error) { + console.error('📊 [CustomsSections] Load error:', error); + return { + error: 'Error loading data', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } +}; diff --git a/frontend/src/routes/dashboard/reference_data/customs_sections/+page.svelte b/frontend/src/routes/dashboard/reference_data/customs_sections/+page.svelte new file mode 100644 index 00000000..a45491b7 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/customs_sections/+page.svelte @@ -0,0 +1,196 @@ + + +
+ +
+
+

Secciones Aduanales

+

+ Gestiona las secciones aduanales del sistema +

+
+ +
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Secciones Aduanales + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + + 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 new file mode 100644 index 00000000..cb9e87b3 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/customs_warehouses/+page.server.ts @@ -0,0 +1,81 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + await parent(); + + const token = cookies.get('access_token'); + + if (!token) { + return { + error: 'No authenticated', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } + + try { + // Obtener parámetros de paginación de la URL + const page = parseInt(url.searchParams.get('page') || '1'); + const pageSize = parseInt(url.searchParams.get('page_size') || '50'); + + // 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/customs-warehouses?page=${page}&page_size=${pageSize}`, + { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.error('📊 [CustomsWarehouses] API Error:', { + status: response.status, + statusText: response.statusText, + error: errorText + }); + + return { + error: `Error ${response.status}: ${response.statusText}`, + items: [], + total: 0, + page: page, + page_size: pageSize + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || page, + page_size: data.page_size || pageSize, + error: null + }; + } catch (error) { + console.error('📊 [CustomsWarehouses] Load error:', error); + return { + error: 'Error loading data', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } +}; diff --git a/frontend/src/routes/dashboard/reference_data/customs_warehouses/+page.svelte b/frontend/src/routes/dashboard/reference_data/customs_warehouses/+page.svelte new file mode 100644 index 00000000..82b7c178 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/customs_warehouses/+page.svelte @@ -0,0 +1,196 @@ + + +
+ +
+
+

Recintos Fiscalizados

+

+ Gestiona los recintos fiscalizados del sistema aduanal +

+
+ +
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Recintos Fiscalizados + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + + diff --git a/frontend/src/routes/dashboard/reference_data/incoterms/+page.server.ts b/frontend/src/routes/dashboard/reference_data/incoterms/+page.server.ts new file mode 100644 index 00000000..d5b9421b --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/incoterms/+page.server.ts @@ -0,0 +1,81 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + await parent(); + + const token = cookies.get('access_token'); + + if (!token) { + return { + error: 'No authenticated', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } + + try { + // Obtener parámetros de paginación de la URL + const page = parseInt(url.searchParams.get('page') || '1'); + const pageSize = parseInt(url.searchParams.get('page_size') || '50'); + + // 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/incoterms?page=${page}&page_size=${pageSize}`, + { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.error('📊 [Incoterms] API Error:', { + status: response.status, + statusText: response.statusText, + error: errorText + }); + + return { + error: `Error ${response.status}: ${response.statusText}`, + items: [], + total: 0, + page: page, + page_size: pageSize + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || page, + page_size: data.page_size || pageSize, + error: null + }; + } catch (error) { + console.error('📊 [Incoterms] Load error:', error); + return { + error: 'Error loading data', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } +}; diff --git a/frontend/src/routes/dashboard/reference_data/incoterms/+page.svelte b/frontend/src/routes/dashboard/reference_data/incoterms/+page.svelte new file mode 100644 index 00000000..217d1c6c --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/incoterms/+page.svelte @@ -0,0 +1,196 @@ + + +
+ +
+
+

Incoterms

+

+ Gestiona los términos internacionales de comercio (International Commercial Terms) +

+
+ +
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Incoterms + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + + 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 new file mode 100644 index 00000000..f3b965a7 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/invoice_types/+page.server.ts @@ -0,0 +1,81 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + await parent(); + + const token = cookies.get('access_token'); + + if (!token) { + return { + error: 'No authenticated', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } + + try { + // Obtener parámetros de paginación de la URL + const page = parseInt(url.searchParams.get('page') || '1'); + const pageSize = parseInt(url.searchParams.get('page_size') || '50'); + + // 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/invoice-types?page=${page}&page_size=${pageSize}`, + { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.error('📊 [Invoice Types] API Error:', { + status: response.status, + statusText: response.statusText, + error: errorText + }); + + return { + error: `Error ${response.status}: ${response.statusText}`, + items: [], + total: 0, + page: page, + page_size: pageSize + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || page, + page_size: data.page_size || pageSize, + error: null + }; + } catch (error) { + console.error('📊 [Invoice Types] Load error:', error); + return { + error: 'Error loading data', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } +}; diff --git a/frontend/src/routes/dashboard/reference_data/invoice_types/+page.svelte b/frontend/src/routes/dashboard/reference_data/invoice_types/+page.svelte new file mode 100644 index 00000000..1ba35154 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/invoice_types/+page.svelte @@ -0,0 +1,196 @@ + + +
+ +
+
+

Tipos de Factura

+

+ Gestiona los tipos de facturas del sistema +

+
+ +
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Tipos de Factura + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + + 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 new file mode 100644 index 00000000..f55dc6b3 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/material_types/+page.server.ts @@ -0,0 +1,81 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + await parent(); + + const token = cookies.get('access_token'); + + if (!token) { + return { + error: 'No authenticated', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } + + try { + // Obtener parámetros de paginación de la URL + const page = parseInt(url.searchParams.get('page') || '1'); + const pageSize = parseInt(url.searchParams.get('page_size') || '50'); + + // 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/material-types?page=${page}&page_size=${pageSize}`, + { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.error('📊 [Material Types] API Error:', { + status: response.status, + statusText: response.statusText, + error: errorText + }); + + return { + error: `Error ${response.status}: ${response.statusText}`, + items: [], + total: 0, + page: page, + page_size: pageSize + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || page, + page_size: data.page_size || pageSize, + error: null + }; + } catch (error) { + console.error('📊 [Material Types] Load error:', error); + return { + error: 'Error loading data', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } +}; diff --git a/frontend/src/routes/dashboard/reference_data/material_types/+page.svelte b/frontend/src/routes/dashboard/reference_data/material_types/+page.svelte new file mode 100644 index 00000000..66589b3f --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/material_types/+page.svelte @@ -0,0 +1,196 @@ + + +
+ +
+
+

Tipos de Material

+

+ Gestiona los tipos de materiales del sistema +

+
+ +
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Tipos de Material + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + + 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 new file mode 100644 index 00000000..5cabd2a5 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/payment_methods/+page.server.ts @@ -0,0 +1,81 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + await parent(); + + const token = cookies.get('access_token'); + + if (!token) { + return { + error: 'No authenticated', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } + + try { + // Obtener parámetros de paginación de la URL + const page = parseInt(url.searchParams.get('page') || '1'); + const pageSize = parseInt(url.searchParams.get('page_size') || '50'); + + // 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/payment-methods?page=${page}&page_size=${pageSize}`, + { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.error('📊 [Payment Methods] API Error:', { + status: response.status, + statusText: response.statusText, + error: errorText + }); + + return { + error: `Error ${response.status}: ${response.statusText}`, + items: [], + total: 0, + page: page, + page_size: pageSize + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || page, + page_size: data.page_size || pageSize, + error: null + }; + } catch (error) { + console.error('📊 [Payment Methods] Load error:', error); + return { + error: 'Error loading data', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } +}; diff --git a/frontend/src/routes/dashboard/reference_data/payment_methods/+page.svelte b/frontend/src/routes/dashboard/reference_data/payment_methods/+page.svelte new file mode 100644 index 00000000..860a48f3 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/payment_methods/+page.svelte @@ -0,0 +1,196 @@ + + +
+ +
+
+

Métodos de Pago

+

+ Gestiona las formas de pago disponibles en el sistema +

+
+ +
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Métodos de Pago + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + + 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 new file mode 100644 index 00000000..d4cfdcc6 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/pedimento_codes/+page.server.ts @@ -0,0 +1,81 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + await parent(); + + const token = cookies.get('access_token'); + + if (!token) { + return { + error: 'No authenticated', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } + + try { + // Obtener parámetros de paginación de la URL + const page = parseInt(url.searchParams.get('page') || '1'); + const pageSize = parseInt(url.searchParams.get('page_size') || '50'); + + // 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/pedimento-codes?page=${page}&page_size=${pageSize}`, + { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.error('📊 [Pedimento Codes] API Error:', { + status: response.status, + statusText: response.statusText, + error: errorText + }); + + return { + error: `Error ${response.status}: ${response.statusText}`, + items: [], + total: 0, + page: page, + page_size: pageSize + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || page, + page_size: data.page_size || pageSize, + error: null + }; + } catch (error) { + console.error('📊 [Pedimento Codes] Load error:', error); + return { + error: 'Error loading data', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } +}; diff --git a/frontend/src/routes/dashboard/reference_data/pedimento_codes/+page.svelte b/frontend/src/routes/dashboard/reference_data/pedimento_codes/+page.svelte new file mode 100644 index 00000000..dec3a448 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/pedimento_codes/+page.svelte @@ -0,0 +1,196 @@ + + +
+ +
+
+

Claves de Pedimento

+

+ Gestiona las claves de pedimento del sistema aduanero +

+
+ +
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Claves de Pedimento + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + + 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 new file mode 100644 index 00000000..842031d1 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/pedimento_regimens/+page.server.ts @@ -0,0 +1,81 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + await parent(); + + const token = cookies.get('access_token'); + + if (!token) { + return { + error: 'No authenticated', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } + + try { + // Obtener parámetros de paginación de la URL + const page = parseInt(url.searchParams.get('page') || '1'); + const pageSize = parseInt(url.searchParams.get('page_size') || '50'); + + // 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/pedimento-regimens?page=${page}&page_size=${pageSize}`, + { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.error('📊 [Pedimento Regimens] API Error:', { + status: response.status, + statusText: response.statusText, + error: errorText + }); + + return { + error: `Error ${response.status}: ${response.statusText}`, + items: [], + total: 0, + page: page, + page_size: pageSize + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || page, + page_size: data.page_size || pageSize, + error: null + }; + } catch (error) { + console.error('📊 [Pedimento Regimens] Load error:', error); + return { + error: 'Error loading data', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } +}; diff --git a/frontend/src/routes/dashboard/reference_data/pedimento_regimens/+page.svelte b/frontend/src/routes/dashboard/reference_data/pedimento_regimens/+page.svelte new file mode 100644 index 00000000..39d1a31f --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/pedimento_regimens/+page.svelte @@ -0,0 +1,196 @@ + + +
+ +
+
+

Regímenes de Pedimento

+

+ Gestiona los regímenes aduaneros de pedimento +

+
+ +
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Regímenes de Pedimento + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + + diff --git a/frontend/src/routes/dashboard/reference_data/sectors/+page.server.ts b/frontend/src/routes/dashboard/reference_data/sectors/+page.server.ts new file mode 100644 index 00000000..fbed6e9e --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/sectors/+page.server.ts @@ -0,0 +1,81 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + await parent(); + + const token = cookies.get('access_token'); + + if (!token) { + return { + error: 'No authenticated', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } + + try { + // Obtener parámetros de paginación de la URL + const page = parseInt(url.searchParams.get('page') || '1'); + const pageSize = parseInt(url.searchParams.get('page_size') || '50'); + + // 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/sectors?page=${page}&page_size=${pageSize}`, + { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.error('📊 [Sectors] API Error:', { + status: response.status, + statusText: response.statusText, + error: errorText + }); + + return { + error: `Error ${response.status}: ${response.statusText}`, + items: [], + total: 0, + page: page, + page_size: pageSize + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || page, + page_size: data.page_size || pageSize, + error: null + }; + } catch (error) { + console.error('📊 [Sectors] Load error:', error); + return { + error: 'Error loading data', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } +}; diff --git a/frontend/src/routes/dashboard/reference_data/sectors/+page.svelte b/frontend/src/routes/dashboard/reference_data/sectors/+page.svelte new file mode 100644 index 00000000..3621eb21 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/sectors/+page.svelte @@ -0,0 +1,196 @@ + + +
+ +
+
+

Sectores

+

+ Gestiona los sectores económicos +

+
+ +
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Sectores + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + + diff --git a/frontend/src/routes/dashboard/reference_data/states/+page.server.ts b/frontend/src/routes/dashboard/reference_data/states/+page.server.ts new file mode 100644 index 00000000..0d62247b --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/states/+page.server.ts @@ -0,0 +1,81 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + await parent(); + + const token = cookies.get('access_token'); + + if (!token) { + return { + error: 'No authenticated', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } + + try { + // Obtener parámetros de paginación de la URL + const page = parseInt(url.searchParams.get('page') || '1'); + const pageSize = parseInt(url.searchParams.get('page_size') || '50'); + + // 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/states?page=${page}&page_size=${pageSize}`, + { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.error('📊 [States] API Error:', { + status: response.status, + statusText: response.statusText, + error: errorText + }); + + return { + error: `Error ${response.status}: ${response.statusText}`, + items: [], + total: 0, + page: page, + page_size: pageSize + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || page, + page_size: data.page_size || pageSize, + error: null + }; + } catch (error) { + console.error('📊 [States] Load error:', error); + return { + error: 'Error loading data', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } +}; diff --git a/frontend/src/routes/dashboard/reference_data/states/+page.svelte b/frontend/src/routes/dashboard/reference_data/states/+page.svelte new file mode 100644 index 00000000..b164088c --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/states/+page.svelte @@ -0,0 +1,196 @@ + + +
+ +
+
+

Estados

+

+ Gestiona los estados y sus claves de identificación +

+
+ +
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Estados + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + + 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 new file mode 100644 index 00000000..68aa9999 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/transport_modes/+page.server.ts @@ -0,0 +1,81 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + await parent(); + + const token = cookies.get('access_token'); + + if (!token) { + return { + error: 'No authenticated', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } + + try { + // Obtener parámetros de paginación de la URL + const page = parseInt(url.searchParams.get('page') || '1'); + const pageSize = parseInt(url.searchParams.get('page_size') || '50'); + + // 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/transport-modes?page=${page}&page_size=${pageSize}`, + { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.error('📊 [Transport Modes] API Error:', { + status: response.status, + statusText: response.statusText, + error: errorText + }); + + return { + error: `Error ${response.status}: ${response.statusText}`, + items: [], + total: 0, + page: page, + page_size: pageSize + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || page, + page_size: data.page_size || pageSize, + error: null + }; + } catch (error) { + console.error('📊 [Transport Modes] Load error:', error); + return { + error: 'Error loading data', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } +}; diff --git a/frontend/src/routes/dashboard/reference_data/transport_modes/+page.svelte b/frontend/src/routes/dashboard/reference_data/transport_modes/+page.svelte new file mode 100644 index 00000000..774372d8 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/transport_modes/+page.svelte @@ -0,0 +1,196 @@ + + +
+ +
+
+

Modos de Transporte

+

+ Gestiona los modos de transporte disponibles +

+
+ +
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Modos de Transporte + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + + 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 new file mode 100644 index 00000000..2704feed --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/transport_types/+page.server.ts @@ -0,0 +1,81 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + await parent(); + + const token = cookies.get('access_token'); + + if (!token) { + return { + error: 'No authenticated', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } + + try { + // Obtener parámetros de paginación de la URL + const page = parseInt(url.searchParams.get('page') || '1'); + const pageSize = parseInt(url.searchParams.get('page_size') || '50'); + + // 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/transport-types?page=${page}&page_size=${pageSize}`, + { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.error('📊 [Transport Types] API Error:', { + status: response.status, + statusText: response.statusText, + error: errorText + }); + + return { + error: `Error ${response.status}: ${response.statusText}`, + items: [], + total: 0, + page: page, + page_size: pageSize + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || page, + page_size: data.page_size || pageSize, + error: null + }; + } catch (error) { + console.error('📊 [Transport Types] Load error:', error); + return { + error: 'Error loading data', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } +}; diff --git a/frontend/src/routes/dashboard/reference_data/transport_types/+page.svelte b/frontend/src/routes/dashboard/reference_data/transport_types/+page.svelte new file mode 100644 index 00000000..28c96469 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/transport_types/+page.svelte @@ -0,0 +1,196 @@ + + +
+ +
+
+

Tipos de Transporte

+

+ Gestiona los tipos de transporte según código SAT +

+
+ +
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Tipos de Transporte + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + + 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 new file mode 100644 index 00000000..def89f09 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/valuation_methods/+page.server.ts @@ -0,0 +1,81 @@ +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + await parent(); + + const token = cookies.get('access_token'); + + if (!token) { + return { + error: 'No authenticated', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } + + try { + // Obtener parámetros de paginación de la URL + const page = parseInt(url.searchParams.get('page') || '1'); + const pageSize = parseInt(url.searchParams.get('page_size') || '50'); + + // 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/valuation-methods?page=${page}&page_size=${pageSize}`, + { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + } + ); + + if (!response.ok) { + const errorText = await response.text(); + console.error('📊 [Valuation Methods] API Error:', { + status: response.status, + statusText: response.statusText, + error: errorText + }); + + return { + error: `Error ${response.status}: ${response.statusText}`, + items: [], + total: 0, + page: page, + page_size: pageSize + }; + } + + const data = await response.json(); + + return { + items: data.items || [], + total: data.total || 0, + page: data.page || page, + page_size: data.page_size || pageSize, + error: null + }; + } catch (error) { + console.error('📊 [Valuation Methods] Load error:', error); + return { + error: 'Error loading data', + items: [], + total: 0, + page: 1, + page_size: 50 + }; + } +}; diff --git a/frontend/src/routes/dashboard/reference_data/valuation_methods/+page.svelte b/frontend/src/routes/dashboard/reference_data/valuation_methods/+page.svelte new file mode 100644 index 00000000..81e18284 --- /dev/null +++ b/frontend/src/routes/dashboard/reference_data/valuation_methods/+page.svelte @@ -0,0 +1,196 @@ + + +
+ +
+
+

Métodos de Valoración

+

+ Gestiona los métodos de valoración aduanera +

+
+ +
+ + + {#if error} + + + Error + {error} + + + {/if} + + + + +
+
+ Listado de Métodos de Valoración + + Mostrando {allItems.length} de {totalItems} registros + +
+ +
+
+ + + + +
+
+ + +