提交
This commit is contained in:
1 parent
c2cba3e668
commit
2142b33cfa
24 files changed
+4834
-3684
No files matched your search
@@ -26,6 +26,7 @@ from app.schemas.pl import (
|
||||
CarrierRead,
|
||||
CarrierUpdate,
|
||||
carrier_to_read,
|
||||
CertRead,
|
||||
DriverCreate,
|
||||
DriverListResponse,
|
||||
DriverRead,
|
||||
@@ -45,6 +46,7 @@ from app.schemas.pl import (
|
||||
from app.services.pl_cert_service import (
|
||||
certs_to_read,
|
||||
list_owner_certs,
|
||||
list_owner_certs_batch,
|
||||
nearest_expire_date,
|
||||
save_owner_certs,
|
||||
)
|
||||
@@ -276,12 +278,16 @@ def _vehicle_to_read(
|
||||
vehicle: PlVehicle,
|
||||
summary: Optional[str] = None,
|
||||
default_driver_name: Optional[str] = None,
|
||||
*,
|
||||
cert_list: Optional[list[CertRead]] = None,
|
||||
) -> VehicleRead:
|
||||
data = VehicleRead.model_validate(vehicle)
|
||||
if summary is not None:
|
||||
data.personnel_summary = summary
|
||||
if default_driver_name is not None:
|
||||
data.default_driver_name = default_driver_name
|
||||
if cert_list is not None:
|
||||
data.cert_list = cert_list
|
||||
return data
|
||||
|
||||
|
||||
@@ -296,7 +302,7 @@ def _vehicle_to_detail(
|
||||
)
|
||||
base = _vehicle_to_read(vehicle, summary, default_name)
|
||||
return VehicleDetailRead(
|
||||
**base.model_dump(by_alias=False),
|
||||
**base.model_dump(by_alias=False, exclude={"cert_list"}),
|
||||
personnel_list=personnel_list,
|
||||
cert_list=cert_list,
|
||||
)
|
||||
@@ -373,8 +379,15 @@ def list_vehicles(
|
||||
summaries = load_vehicle_personnel_summaries(
|
||||
db, tenant_no, [v.id for v in vehicles]
|
||||
)
|
||||
certs_by_owner = list_owner_certs_batch(
|
||||
db, tenant_no, "vehicle", [v.id for v in vehicles]
|
||||
)
|
||||
items = [
|
||||
_vehicle_to_read(v, *summaries.get(v.id, ("", None)))
|
||||
_vehicle_to_read(
|
||||
v,
|
||||
*summaries.get(v.id, ("", None)),
|
||||
cert_list=certs_to_read(certs_by_owner.get(v.id, [])),
|
||||
)
|
||||
for v in vehicles
|
||||
]
|
||||
return VehicleListResponse(total=len(items), list=items)
|
||||
@@ -385,10 +398,17 @@ def list_vehicles(
|
||||
summaries = load_vehicle_personnel_summaries(
|
||||
db, tenant_no, [v.id for v in vehicles]
|
||||
)
|
||||
certs_by_owner = list_owner_certs_batch(
|
||||
db, tenant_no, "vehicle", [v.id for v in vehicles]
|
||||
)
|
||||
return VehicleListResponse(
|
||||
total=total,
|
||||
list=[
|
||||
_vehicle_to_read(v, *summaries.get(v.id, ("", None)))
|
||||
_vehicle_to_read(
|
||||
v,
|
||||
*summaries.get(v.id, ("", None)),
|
||||
cert_list=certs_to_read(certs_by_owner.get(v.id, [])),
|
||||
)
|
||||
for v in vehicles
|
||||
],
|
||||
)
|
||||
@@ -591,11 +611,17 @@ def _get_vehicle(db: Session, tenant_no: str, vehicle_id: str, user: DbUserConte
|
||||
|
||||
|
||||
def _personnel_to_read(
|
||||
db: Session, tenant_no: str, personnel: PlPersonnel
|
||||
db: Session,
|
||||
tenant_no: str,
|
||||
personnel: PlPersonnel,
|
||||
*,
|
||||
cert_list: Optional[list[CertRead]] = None,
|
||||
) -> PersonnelRead:
|
||||
nearest = nearest_expire_date(db, tenant_no, "personnel", personnel.id)
|
||||
data = PersonnelRead.model_validate(personnel)
|
||||
data.nearest_expire_date = nearest
|
||||
if cert_list is not None:
|
||||
data.cert_list = cert_list
|
||||
return data
|
||||
|
||||
|
||||
@@ -607,7 +633,7 @@ def _personnel_to_detail(
|
||||
list_owner_certs(db, tenant_no, "personnel", personnel.id)
|
||||
)
|
||||
return PersonnelDetailRead(
|
||||
**base.model_dump(by_alias=False),
|
||||
**base.model_dump(by_alias=False, exclude={"cert_list"}),
|
||||
cert_list=cert_list,
|
||||
)
|
||||
|
||||
@@ -653,9 +679,19 @@ def list_personnel(
|
||||
total = query.count()
|
||||
offset = (page - 1) * page_size
|
||||
rows = query.offset(offset).limit(page_size).all()
|
||||
personnel_ids = [p.id for p in rows]
|
||||
certs_by_owner = list_owner_certs_batch(db, tenant_no, "personnel", personnel_ids)
|
||||
return PersonnelListResponse(
|
||||
total=total,
|
||||
list=[_personnel_to_read(db, tenant_no, p) for p in rows],
|
||||
list=[
|
||||
_personnel_to_read(
|
||||
db,
|
||||
tenant_no,
|
||||
p,
|
||||
cert_list=certs_to_read(certs_by_owner.get(p.id, [])),
|
||||
)
|
||||
for p in rows
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user