115 lines
3.9 KiB
Python
115 lines
3.9 KiB
Python
from typing import Dict, Any
|
|
from fastapi import APIRouter, Depends, HTTPException, Query
|
|
from sqlalchemy.orm import Session
|
|
|
|
from core.database import get_core_db
|
|
from core.security import get_current_user, validate_access_to_resource
|
|
|
|
from api.v1.common.tenant_crud_routes import TenantCRUDRoutes
|
|
from . import dto, services
|
|
from ..layouts_csv.customs_brokers.routes import router as imports_router
|
|
|
|
router = APIRouter()
|
|
|
|
# CSV import (mismo flujo que a76.imports: upload → scan → commit)
|
|
router.include_router(imports_router, prefix="/customs-brokers/imports", tags=["customs_brokers / csv_import"])
|
|
|
|
customs_broker_crud = TenantCRUDRoutes(
|
|
service=services.CustomsBrokerService,
|
|
create_schema=dto.CustomsBrokerCreateDTO,
|
|
update_schema=dto.CustomsBrokerUpdateDTO,
|
|
response_schema=dto.CustomsBrokerResponseDTO,
|
|
prefix="/customs-brokers",
|
|
tags=[],
|
|
resource_name="Customs Broker",
|
|
id_name="broker_key",
|
|
id_type=str,
|
|
enable_list=True,
|
|
)
|
|
|
|
router.include_router(customs_broker_crud.router)
|
|
|
|
|
|
@router.patch(
|
|
"/customs-brokers/{broker_key}",
|
|
response_model=dto.CustomsBrokerResponseDTO,
|
|
)
|
|
def update_customs_broker(
|
|
broker_key: str,
|
|
broker_data: dto.CustomsBrokerUpdateDTO,
|
|
company_id: int = Query(..., description="Company ID"),
|
|
db: Session = Depends(get_core_db),
|
|
current_user: Dict[str, Any] = Depends(get_current_user),
|
|
):
|
|
"""
|
|
Actualización parcial (PATCH).
|
|
"""
|
|
tenant_id = validate_access_to_resource(db, company_id, current_user)
|
|
|
|
broker = services.CustomsBrokerService.get_by_id(db, broker_key, tenant_id, company_id)
|
|
if not broker:
|
|
raise HTTPException(status_code=404, detail="Customs Broker not found")
|
|
|
|
updated_broker = services.CustomsBrokerService.update(
|
|
db=db,
|
|
broker_key=broker_key,
|
|
tenant_id=tenant_id,
|
|
broker_data=broker_data,
|
|
company_id=company_id
|
|
)
|
|
|
|
if not updated_broker:
|
|
raise HTTPException(status_code=400, detail="Error updating Customs Broker")
|
|
|
|
return updated_broker
|
|
|
|
|
|
@router.put(
|
|
"/customs-broker-vu/{broker_key}",
|
|
response_model=dto.CustomsBrokerVUResponseDTO,
|
|
)
|
|
def update_customs_broker_vu(
|
|
broker_key: str,
|
|
vu_data: dto.CustomsBrokerVUCreateDTO,
|
|
company_id: int = Query(..., description="Company ID"),
|
|
db: Session = Depends(get_core_db),
|
|
current_user: Dict[str, Any] = Depends(get_current_user),
|
|
):
|
|
tenant_id = validate_access_to_resource(db, company_id, current_user)
|
|
|
|
broker = services.CustomsBrokerService.get_by_id(db, broker_key, tenant_id, company_id)
|
|
if not broker:
|
|
raise HTTPException(status_code=404, detail="Customs Broker not found")
|
|
|
|
updated_vu = services.CustomsBrokerVUService.update_vu(db, broker_key, vu_data, tenant_id, company_id)
|
|
if not updated_vu:
|
|
raise HTTPException(status_code=404, detail="Customs Broker VU not found")
|
|
return updated_vu
|
|
|
|
|
|
@router.put(
|
|
"/customs-broker-personnel/{broker_key}/{line}",
|
|
response_model=dto.CustomsBrokerPersonnelDTO,
|
|
)
|
|
def update_customs_broker_personnel(
|
|
broker_key: str,
|
|
line: int,
|
|
personnel_data: dto.CustomsBrokerPersonnelDTO,
|
|
company_id: int = Query(..., description="Company ID"),
|
|
db: Session = Depends(get_core_db),
|
|
current_user: Dict[str, Any] = Depends(get_current_user),
|
|
):
|
|
tenant_id = validate_access_to_resource(db, company_id, current_user)
|
|
|
|
broker = services.CustomsBrokerService.get_by_id(db, broker_key, tenant_id, company_id)
|
|
if not broker:
|
|
raise HTTPException(status_code=404, detail="Customs Broker not found")
|
|
|
|
updated_personnel = services.CustomsBrokerPersonnelService.update_personnel(
|
|
db, broker_key, line, personnel_data, tenant_id, company_id
|
|
)
|
|
if not updated_personnel:
|
|
raise HTTPException(
|
|
status_code=404, detail="Customs Broker Personnel not found"
|
|
)
|
|
return updated_personnel |