fix(pl): 取消承运商审核与资质协议准入门禁
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
b071687a71
commit
d92bd7940e
3 files changed
+29
-68
No files matched your search
@@ -54,10 +54,7 @@ from app.services.pl_cert_required_service import (
|
||||
validate_personnel_required_certs,
|
||||
validate_vehicle_save_certs,
|
||||
)
|
||||
from app.services.pl_carrier_service import (
|
||||
carrier_eligible_for_transport,
|
||||
carrier_qualification_complete,
|
||||
)
|
||||
from app.services.pl_carrier_service import carrier_eligible_for_transport
|
||||
from app.services.pl_personnel_service import (
|
||||
load_vehicle_personnel_rows,
|
||||
load_vehicle_personnel_summaries,
|
||||
@@ -169,23 +166,10 @@ def update_carrier(
|
||||
carrier = _get_carrier(db, tenant_no, id, user)
|
||||
|
||||
payload_data = payload.model_dump(exclude_unset=True)
|
||||
qual_keys = (
|
||||
"business_license_urls",
|
||||
"road_transport_license_urls",
|
||||
"transport_agreement_urls",
|
||||
"transport_agreement_expire_date",
|
||||
)
|
||||
qual_changed = any(key in payload_data for key in qual_keys)
|
||||
|
||||
for key, value in payload_data.items():
|
||||
setattr(carrier, key, value)
|
||||
|
||||
if qual_changed and carrier.audit_status == "approved":
|
||||
carrier.audit_status = "pending"
|
||||
carrier.audit_by = None
|
||||
carrier.audit_time = None
|
||||
carrier.audit_remark = None
|
||||
|
||||
carrier.update_by = user.id
|
||||
db.commit()
|
||||
db.refresh(carrier)
|
||||
@@ -212,22 +196,7 @@ def approve_carrier(
|
||||
db: Session = Depends(get_db),
|
||||
user: DbUserContext = Depends(get_db_current_user),
|
||||
) -> CarrierRead:
|
||||
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
|
||||
carrier = _get_carrier(db, tenant_no, id, user)
|
||||
|
||||
if carrier.audit_status == "approved":
|
||||
raise HTTPException(status_code=400, detail="承运商已审核通过")
|
||||
if not carrier_qualification_complete(carrier):
|
||||
raise HTTPException(status_code=400, detail="承运商资质附件不完整,无法审核通过")
|
||||
|
||||
carrier.audit_status = "approved"
|
||||
carrier.audit_by = user.id
|
||||
carrier.audit_time = datetime.now()
|
||||
carrier.audit_remark = None
|
||||
carrier.update_by = user.id
|
||||
db.commit()
|
||||
db.refresh(carrier)
|
||||
return carrier_to_read(carrier)
|
||||
raise HTTPException(status_code=400, detail="承运商审核流程已停用")
|
||||
|
||||
|
||||
@router.post("/carrier/{id}/reject", response_model=CarrierRead)
|
||||
@@ -237,20 +206,7 @@ def reject_carrier(
|
||||
db: Session = Depends(get_db),
|
||||
user: DbUserContext = Depends(get_db_current_user),
|
||||
) -> CarrierRead:
|
||||
tenant_no = get_tenant_no(db, user.to_tenant_user_dict())
|
||||
carrier = _get_carrier(db, tenant_no, id, user)
|
||||
|
||||
if carrier.audit_status == "approved":
|
||||
raise HTTPException(status_code=400, detail="承运商已审核通过,无法驳回")
|
||||
|
||||
carrier.audit_status = "rejected"
|
||||
carrier.audit_by = user.id
|
||||
carrier.audit_time = datetime.now()
|
||||
carrier.audit_remark = (payload.remark or "").strip() or None
|
||||
carrier.update_by = user.id
|
||||
db.commit()
|
||||
db.refresh(carrier)
|
||||
return carrier_to_read(carrier)
|
||||
raise HTTPException(status_code=400, detail="承运商审核流程已停用")
|
||||
|
||||
|
||||
def _get_carrier(db: Session, tenant_no: str, carrier_id: str, user: DbUserContext) -> PlCarrier:
|
||||
|
||||
@@ -34,14 +34,6 @@ def carrier_audit_approved(carrier: PlCarrier) -> bool:
|
||||
|
||||
|
||||
def carrier_eligible_for_transport(carrier: PlCarrier, today: Optional[date] = None) -> bool:
|
||||
if carrier.status != "1":
|
||||
return False
|
||||
if not carrier_audit_approved(carrier):
|
||||
return False
|
||||
if not carrier_qualification_complete(carrier):
|
||||
return False
|
||||
if carrier_agreement_expired(carrier, today):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
@@ -50,19 +42,7 @@ def assert_carrier_eligible_for_transport(
|
||||
*,
|
||||
rearrange: bool = False,
|
||||
) -> None:
|
||||
if carrier.status != "1":
|
||||
raise HTTPException(status_code=400, detail="该承运商已终止合作,无法安排运输")
|
||||
if not carrier_audit_approved(carrier):
|
||||
raise HTTPException(status_code=400, detail="该承运商尚未审核通过,无法安排运输")
|
||||
if not carrier_qualification_complete(carrier):
|
||||
raise HTTPException(status_code=400, detail="该承运商资质附件不完整,无法安排运输")
|
||||
if carrier_agreement_expired(carrier):
|
||||
if rearrange:
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail="该承运商运输协议已过期,请先更新协议后再调整运输",
|
||||
)
|
||||
raise HTTPException(status_code=400, detail="该承运商运输协议已过期,无法安排运输")
|
||||
return
|
||||
|
||||
|
||||
def normalize_carrier_urls(value: Optional[str]) -> Optional[str]:
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
from types import SimpleNamespace
|
||||
|
||||
from app.services.pl_carrier_service import (
|
||||
assert_carrier_eligible_for_transport,
|
||||
carrier_eligible_for_transport,
|
||||
)
|
||||
|
||||
|
||||
def _carrier(**kwargs):
|
||||
base = dict(
|
||||
status="1",
|
||||
audit_status="pending",
|
||||
business_license_urls="",
|
||||
road_transport_license_urls="",
|
||||
transport_agreement_urls="",
|
||||
transport_agreement_expire_date=None,
|
||||
)
|
||||
base.update(kwargs)
|
||||
return SimpleNamespace(**base)
|
||||
|
||||
|
||||
def test_eligible_ignores_audit_qualification_agreement():
|
||||
c = _carrier(audit_status="pending")
|
||||
assert carrier_eligible_for_transport(c) is True
|
||||
assert_carrier_eligible_for_transport(c) # 不抛
|
||||
Reference in new issue
Block a user