From 9f2971d8c4521537c16e41524fc1ac4812a7851d Mon Sep 17 00:00:00 2001 From: Kevin_Ramirez Date: Wed, 24 Dec 2025 10:36:14 -0600 Subject: [PATCH] Se acabo de realizar las tareas CRUD de catalogos, ademas de cambiar su estilo de tablas. Tambien se agrego la caracteristica de reactividad --- ...ff0274_increase_port_description_length.py | 28 ++ .../a76/general_catalogs/ports/service.py | 2 +- docker-compose.yml | 2 +- .../dashboard/a76/general_catalogs/ports.ts | 22 +- .../dashboard/ports/create-edit-dialog.svelte | 25 +- .../dashboard/ports/data-table-actions.svelte | 9 +- .../valuation_methods/data-table.svelte | 1 + frontend/src/routes/dashboard/+layout.svelte | 11 + .../company_information/+page.svelte | 12 +- .../company_information/new/+page.svelte | 247 ++++++++++++++++ .../general_catalogs/doda/+page.svelte | 3 +- .../general_catalogs/doda/new/+page.svelte | 277 ++++++++++++++++++ .../multi_currency_types/+page.svelte | 45 ++- .../general_catalogs/packages/+page.svelte | 4 +- .../general_catalogs/ports/+page.server.ts | 25 +- .../general_catalogs/ports/+page.svelte | 131 +++++---- .../prevalidators/+page.svelte | 91 ++---- .../general_catalogs/seal/+page.svelte | 84 ++---- .../general_catalogs/signatures/+page.svelte | 57 ++-- .../unit_conversions/+page.svelte | 127 ++++---- .../reference_data/countries/+page.svelte | 67 ++--- .../currency_types/+page.svelte | 67 ++--- .../customs_warehouses/+page.svelte | 67 ++--- .../reference_data/invoice_types/+page.svelte | 67 ++--- .../valuation_methods/+page.svelte | 67 ++--- 25 files changed, 1030 insertions(+), 508 deletions(-) create mode 100644 backend/alembic/versions/3a012dff0274_increase_port_description_length.py create mode 100644 frontend/src/routes/dashboard/general_catalogs/company_information/new/+page.svelte create mode 100644 frontend/src/routes/dashboard/general_catalogs/doda/new/+page.svelte diff --git a/backend/alembic/versions/3a012dff0274_increase_port_description_length.py b/backend/alembic/versions/3a012dff0274_increase_port_description_length.py new file mode 100644 index 00000000..802b6983 --- /dev/null +++ b/backend/alembic/versions/3a012dff0274_increase_port_description_length.py @@ -0,0 +1,28 @@ +"""increase_port_description_length + +Revision ID: 3a012dff0274 +Revises: 7937209f9718 +Create Date: 2025-12-24 10:24:49.927020 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '3a012dff0274' +down_revision: Union[str, Sequence[str], None] = '7937209f9718' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + pass + + +def downgrade() -> None: + """Downgrade schema.""" + pass diff --git a/backend/api/v1/modules/a76/general_catalogs/ports/service.py b/backend/api/v1/modules/a76/general_catalogs/ports/service.py index 54b41df2..4d4d9cc2 100644 --- a/backend/api/v1/modules/a76/general_catalogs/ports/service.py +++ b/backend/api/v1/modules/a76/general_catalogs/ports/service.py @@ -63,8 +63,8 @@ class PortService: def update( db: Session, id: int, - data: PortUpdate, tenant_id: int, + data: PortUpdate, company_id: int ) -> Optional[Port]: db_obj = PortService.get_by_id(db, id, tenant_id, company_id) diff --git a/docker-compose.yml b/docker-compose.yml index 8ddf9f66..f71a9aee 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -164,7 +164,7 @@ services: - KEYCLOAK_CLIENT_SECRET=${KEYCLOAK_CLIENT_SECRET:-dev-secret} - CORS_ORIGINS=${CORS_ORIGINS:-http://localhost:5173,http://localhost:3000} ports: - - "8001:8000" + - "5050:8000" depends_on: postgres-a76: condition: service_healthy diff --git a/frontend/src/lib/api/dashboard/a76/general_catalogs/ports.ts b/frontend/src/lib/api/dashboard/a76/general_catalogs/ports.ts index 932c4db1..0234bcf0 100644 --- a/frontend/src/lib/api/dashboard/a76/general_catalogs/ports.ts +++ b/frontend/src/lib/api/dashboard/a76/general_catalogs/ports.ts @@ -45,24 +45,30 @@ export interface PortListResponse { export async function getPorts( page = 1, pageSize = 50, - filters: Record = {} + filters: Record = {}, + companyId?: number ): Promise> { const queryParams = new URLSearchParams({ page: page.toString(), page_size: pageSize.toString(), ...filters }); - return await api.get(`/a76/ports?${queryParams.toString()}`); + + if (companyId) { + queryParams.append('company_id', companyId.toString()); + } + + return await api.get(`/v1/a76/ports?${queryParams.toString()}`); } -export async function createPort(data: PortCreate): Promise> { - return await api.post('/a76/ports', data); +export async function createPort(data: PortCreate, companyId: number): Promise> { + return await api.post(`/v1/a76/ports?company_id=${companyId}`, data); } -export async function updatePort(id: number, data: PortUpdate): Promise> { - return await api.put(`/a76/ports/${id}`, data); +export async function updatePort(id: number, data: PortUpdate, companyId: number): Promise> { + return await api.put(`/v1/a76/ports/${id}?company_id=${companyId}`, data); } -export async function deletePort(id: number): Promise> { - return await api.delete(`/a76/ports/${id}`); +export async function deletePort(id: number, companyId: number): Promise> { + return await api.delete(`/v1/a76/ports/${id}?company_id=${companyId}`); } diff --git a/frontend/src/lib/components/dashboard/ports/create-edit-dialog.svelte b/frontend/src/lib/components/dashboard/ports/create-edit-dialog.svelte index 4904603c..d5aa4048 100644 --- a/frontend/src/lib/components/dashboard/ports/create-edit-dialog.svelte +++ b/frontend/src/lib/components/dashboard/ports/create-edit-dialog.svelte @@ -3,8 +3,9 @@ import * as Dialog from "$lib/components/ui/dialog"; import { Input } from "$lib/components/ui/input"; import { Label } from "$lib/components/ui/label"; - import * as Select from "$lib/components/ui/select"; + import * as Select from "$lib/components/ui/select"; import { createPort, updatePort, type Port, PortType } from "$lib/api/dashboard/a76/general_catalogs/ports"; + import { companyStore } from "$lib/stores/company.svelte"; let { open = $bindable(false), @@ -60,23 +61,29 @@ error = null; try { + const companyId = companyStore.activeCompany?.id; + if (!companyId) { + error = 'Selecciona una compañía para guardar el puerto'; + return; + } + let response; if (isEdit && item) { response = await updatePort(item.id, { port_code: formData.port_code, description: formData.description || null, - location_code: formData.location_code, - location_description: formData.location_description || null, - port_type: formData.port_type - }); + location_code: formData.location_code, + location_description: formData.location_description || null, + port_type: formData.port_type + }, companyId); } else { response = await createPort({ port_code: formData.port_code, description: formData.description || null, - location_code: formData.location_code, - location_description: formData.location_description || null, - port_type: formData.port_type - }); + location_code: formData.location_code, + location_description: formData.location_description || null, + port_type: formData.port_type + }, companyId); } if (response.error) { diff --git a/frontend/src/lib/components/dashboard/ports/data-table-actions.svelte b/frontend/src/lib/components/dashboard/ports/data-table-actions.svelte index df4c1630..f8f2534f 100644 --- a/frontend/src/lib/components/dashboard/ports/data-table-actions.svelte +++ b/frontend/src/lib/components/dashboard/ports/data-table-actions.svelte @@ -4,6 +4,7 @@ import { deletePort, type Port } from "$lib/api/dashboard/a76/general_catalogs/ports"; import { EllipsisVertical, Pencil, LoaderCircle, Trash2 } from 'lucide-svelte'; import CreateEditDialog from "./create-edit-dialog.svelte"; + import { companyStore } from "$lib/stores/company.svelte"; let { item, @@ -22,11 +23,17 @@ return; } + const companyId = companyStore.activeCompany?.id; + if (!companyId) { + alert('Selecciona una compañía antes de eliminar'); + return; + } + loading = true; error = null; try { - const response = await deletePort(item.id); + const response = await deletePort(item.id, companyId); if (response.error) { error = response.error; diff --git a/frontend/src/lib/components/dashboard/reference_data/valuation_methods/data-table.svelte b/frontend/src/lib/components/dashboard/reference_data/valuation_methods/data-table.svelte index ef98de23..5b6be70f 100644 --- a/frontend/src/lib/components/dashboard/reference_data/valuation_methods/data-table.svelte +++ b/frontend/src/lib/components/dashboard/reference_data/valuation_methods/data-table.svelte @@ -59,6 +59,7 @@ }); +
diff --git a/frontend/src/routes/dashboard/+layout.svelte b/frontend/src/routes/dashboard/+layout.svelte index 350c00e5..60b5d95c 100644 --- a/frontend/src/routes/dashboard/+layout.svelte +++ b/frontend/src/routes/dashboard/+layout.svelte @@ -1,5 +1,6 @@ diff --git a/frontend/src/routes/dashboard/general_catalogs/company_information/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/company_information/+page.svelte index d2a23635..eb45884d 100644 --- a/frontend/src/routes/dashboard/general_catalogs/company_information/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/company_information/+page.svelte @@ -2,7 +2,7 @@ import { page } from '$app/stores'; import DataTable from '$lib/components/dashboard/general_catalogs/company/data-table.svelte'; import { createColumns } from '$lib/components/dashboard/general_catalogs/company/columns.js'; - import CreateEditDialog from '$lib/components/dashboard/general_catalogs/company/create-edit-dialog.svelte'; + //import CreateEditDialog from '$lib/components/dashboard/general_catalogs/company/create-edit-dialog.svelte'; import { Button } from '$lib/components/ui/button'; import { Input } from '$lib/components/ui/input'; import { Plus } from 'lucide-svelte'; @@ -43,12 +43,13 @@
-

company_information

+

Información de Empresas

Gestión de información de empresas

- @@ -80,8 +81,9 @@ />
- + /> --> +
diff --git a/frontend/src/routes/dashboard/general_catalogs/company_information/new/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/company_information/new/+page.svelte new file mode 100644 index 00000000..2ff93ec1 --- /dev/null +++ b/frontend/src/routes/dashboard/general_catalogs/company_information/new/+page.svelte @@ -0,0 +1,247 @@ + + +
+
+ +
+

Nueva Empresa

+

Crea la información de la empresa.

+
+
+ + {#if error} +
+ ⚠️ {error} +
+ {/if} + +
+ + + + +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ + + + General + Programas + Responsable + Config + + + + + +
+
+ + +
+
+ +
diff --git a/frontend/src/routes/dashboard/general_catalogs/doda/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/doda/+page.svelte index 4f1cf031..525c6b3c 100644 --- a/frontend/src/routes/dashboard/general_catalogs/doda/+page.svelte +++ b/frontend/src/routes/dashboard/general_catalogs/doda/+page.svelte @@ -43,7 +43,8 @@ Gestión de Documentos de Operación de Aduana

- diff --git a/frontend/src/routes/dashboard/general_catalogs/doda/new/+page.svelte b/frontend/src/routes/dashboard/general_catalogs/doda/new/+page.svelte new file mode 100644 index 00000000..9483a076 --- /dev/null +++ b/frontend/src/routes/dashboard/general_catalogs/doda/new/+page.svelte @@ -0,0 +1,277 @@ + + +
+
+ +
+

Nuevo DODA

+

Captura la información del documento.

+
+
+ + {#if error} +
+ ⚠️ {error} +
+ {/if} + +
+ + + + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ +