feature/catalogo-driver

This commit is contained in:
hreyes
2026-03-06 09:52:20 -07:00
parent 8ecc926ed1
commit 3175383442
11 changed files with 874 additions and 53 deletions

View File

@@ -36,6 +36,33 @@ class DriverCreateDTO(DriverBaseDTO):
pass
class DriverUpdateDTO(BaseModel):
"""All fields optional; transporter_key, line, company_id, tenant_id are not updated."""
driver_name: Optional[str] = None
license_number: Optional[str] = None
express_line_id: Optional[str] = None
ace_id: Optional[str] = None
birth_date: Optional[int] = None
gender: Optional[str] = None
birth_country: Optional[str] = None
hazardous_material_auth: Optional[str] = None
hazardous_material_state: Optional[str] = None
first_name: Optional[str] = None
last_name: Optional[str] = None
id_key1: Optional[str] = None
id_number1: Optional[str] = None
id_state1: Optional[str] = None
id_country1: Optional[str] = None
id_key2: Optional[str] = None
id_number2: Optional[str] = None
id_state2: Optional[str] = None
id_country2: Optional[str] = None
badge_number: Optional[str] = None
class_type: Optional[str] = None
unique_badge_number: Optional[str] = None
class DriverResponseDTO(DriverBaseDTO):
class Config:
from_attributes = True

View File

@@ -5,7 +5,7 @@ from core.security import get_current_user, validate_access_to_resource
from fastapi import APIRouter, Depends, HTTPException, Query, status
from sqlalchemy.orm import Session
from .dto import DriverCreateDTO, DriverResponseDTO
from .dto import DriverCreateDTO, DriverResponseDTO, DriverUpdateDTO
from .models import Driver
from .services import DriverService
from api.v1.modules.a76.layouts_csv.drivers.routes import router as imports_router
@@ -66,6 +66,29 @@ async def create_driver(
return DriverService.create_driver(db, driver_data)
@router.put("/{transporter_key}/{line}", response_model=DriverResponseDTO)
async def update_driver(
transporter_key: str,
line: int,
driver_data: DriverUpdateDTO,
company_id: int = Query(..., description="Company ID for filtering"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
driver = DriverService.update_driver(
db,
transporter_key,
line,
str(company_id),
tenant_id,
driver_data,
)
if not driver:
raise HTTPException(status_code=404, detail="Driver not found")
return driver
@router.delete("/{transporter_key}/{line}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_driver(
transporter_key: str,

View File

@@ -40,6 +40,27 @@ class DriverService:
db.refresh(new_driver)
return new_driver
@staticmethod
def update_driver(
db: Session,
transporter_key: str,
line: int,
company_id: str,
tenant_id: Optional[str],
data: dto.DriverUpdateDTO,
) -> Optional[models.Driver]:
driver = DriverService.get_driver_by_key_and_line(
db, transporter_key, line, company_id, tenant_id
)
if not driver:
return None
update_data = data.model_dump(exclude_unset=True)
for key, value in update_data.items():
setattr(driver, key, value)
db.commit()
db.refresh(driver)
return driver
@staticmethod
def delete_driver(
db: Session,