pl_internal_customer.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. """运输计划:内置山峡/云栋客户判定(合同可免)"""
  2. from __future__ import annotations
  3. from typing import Optional
  4. from sqlalchemy.orm import Session
  5. from app.models.pl_models import PlPlan, PlPlanDelivery, PlPlanLoad
  6. INTERNAL_CUSTOMER_NAMES = frozenset(
  7. {
  8. "安庆市山峡化工有限公司",
  9. "安徽云栋化工有限公司",
  10. }
  11. )
  12. def is_internal_customer_name(name: Optional[str]) -> bool:
  13. return (name or "").strip() in INTERNAL_CUSTOMER_NAMES
  14. def plan_requires_site_link(db: Session, *, tenant_no: str, plan: PlPlan) -> bool:
  15. """装货或送货段任一段客户为山峡/云栋时,需要生成现场链接。"""
  16. load = (
  17. db.query(PlPlanLoad)
  18. .filter(
  19. PlPlanLoad.plan_id == plan.id,
  20. PlPlanLoad.tenant_no == tenant_no,
  21. PlPlanLoad.del_flag == 0,
  22. )
  23. .first()
  24. )
  25. if load:
  26. if is_internal_customer_name(load.customer_name):
  27. return True
  28. elif is_internal_customer_name(plan.supplier_name):
  29. return True
  30. deliveries = (
  31. db.query(PlPlanDelivery)
  32. .filter(
  33. PlPlanDelivery.plan_id == plan.id,
  34. PlPlanDelivery.tenant_no == tenant_no,
  35. PlPlanDelivery.del_flag == 0,
  36. )
  37. .all()
  38. )
  39. if deliveries:
  40. return any(is_internal_customer_name(row.customer_name) for row in deliveries)
  41. return is_internal_customer_name(plan.customer_name) or is_internal_customer_name(
  42. plan.destination_name
  43. )