diff --git a/backend/api/v1/modules/a76/general_catalogs/company/service.py b/backend/api/v1/modules/a76/general_catalogs/company/service.py index c66602f0..e042cea9 100644 --- a/backend/api/v1/modules/a76/general_catalogs/company/service.py +++ b/backend/api/v1/modules/a76/general_catalogs/company/service.py @@ -3,6 +3,7 @@ Capa de servicio para lógica de negocio de empresa """ import logging +from datetime import datetime from typing import List, Optional, Tuple, Dict, Any from fastapi import HTTPException @@ -37,7 +38,7 @@ class CompanyService: filters: Optional[Dict[str, Any]] = None, ) -> Tuple[List[Company], int]: """Get all companies for a tenant with pagination""" - query = db.query(Company).filter(Company.tenant_id == tenant_id) + query = db.query(Company).filter(Company.tenant_id == tenant_id, Company.deleted_at.is_(None)) # Apply filters if provided if filters: @@ -65,6 +66,7 @@ class CompanyService: .filter( Company.id == company_id, Company.tenant_id == tenant_id, + Company.deleted_at.is_(None) ) .first() ) @@ -590,17 +592,9 @@ class CompanyService: # ---------------------- try: - # Cascading deletes are handled by relationship settings, but manual is safer here - if company.certification: db.delete(company.certification) - if company.prevalidator: db.delete(company.prevalidator) - if company.electronic_agent: db.delete(company.electronic_agent) - if company.ventanilla_unica: db.delete(company.ventanilla_unica) - if company.cfdi: db.delete(company.cfdi) - for cert in company.digital_certificates: db.delete(cert) - for addr in company.addresses: db.delete(addr) - + company.deleted_at = datetime.utcnow() + db.flush() - db.delete(company) db.commit() # --- Audit Log --- @@ -765,7 +759,7 @@ class CompanyService: """Get all companies for a tenant""" return ( self.db.query(Company) - .filter(Company.tenant_id == tenant_id) + .filter(Company.tenant_id == tenant_id, Company.deleted_at.is_(None)) .order_by(Company.name) .all() ) @@ -774,7 +768,7 @@ class CompanyService: """Check if a company exists for a tenant""" return ( self.db.query(Company) - .filter(Company.tenant_id == tenant_id) + .filter(Company.tenant_id == tenant_id, Company.deleted_at.is_(None)) .first() is not None ) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 5ae2e394..268074e0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -268,12 +268,6 @@ services: options: max-size: "10m" max-file: "3" - deploy: - resources: - limits: - memory: 1G - reservations: - memory: 512M # celery celery_worker: diff --git a/frontend/src/lib/components/dashboard/customs_brokers/data-table-actions.svelte b/frontend/src/lib/components/dashboard/customs_brokers/data-table-actions.svelte index d32046fc..5e203e5b 100644 --- a/frontend/src/lib/components/dashboard/customs_brokers/data-table-actions.svelte +++ b/frontend/src/lib/components/dashboard/customs_brokers/data-table-actions.svelte @@ -1,16 +1,16 @@ - - + + diff --git a/frontend/src/lib/components/keyboard/ShortcutsHelpModal.svelte b/frontend/src/lib/components/keyboard/ShortcutsHelpModal.svelte index 00f9a73a..826d421c 100644 --- a/frontend/src/lib/components/keyboard/ShortcutsHelpModal.svelte +++ b/frontend/src/lib/components/keyboard/ShortcutsHelpModal.svelte @@ -7,11 +7,11 @@ // Group local shortcuts let localShortcuts = $derived($store.shortcuts); - let globalList: HTMLDivElement; - let localList: HTMLDivElement; - let modalRef: HTMLDivElement; + let globalList = $state(); + let localList = $state(); + let modalRef = $state(); - function handleArrowScroll(event: KeyboardEvent, target: HTMLDivElement) { + function handleArrowScroll(event: KeyboardEvent, target: HTMLDivElement | undefined) { if (!target) return; if (event.key === 'ArrowDown' || event.key === 'ArrowUp') { event.preventDefault(); @@ -50,8 +50,9 @@ aria-modal="true" >