|
|
@@ -496,8 +496,8 @@ def _assert_product_rows_in_contract_allowed(
|
|
|
)
|
|
|
|
|
|
|
|
|
-def _contract_allowed_product_ids(db: Session, tenant_no: str, contract_id: str) -> set[str]:
|
|
|
- rows = (
|
|
|
+def _contract_product_rows(db: Session, tenant_no: str, contract_id: str) -> list:
|
|
|
+ return (
|
|
|
db.query(CrmContractProduct)
|
|
|
.filter(
|
|
|
CrmContractProduct.contract_id == contract_id,
|
|
|
@@ -506,6 +506,10 @@ def _contract_allowed_product_ids(db: Session, tenant_no: str, contract_id: str)
|
|
|
)
|
|
|
.all()
|
|
|
)
|
|
|
+
|
|
|
+
|
|
|
+def _contract_allowed_product_ids(db: Session, tenant_no: str, contract_id: str) -> set[str]:
|
|
|
+ rows = _contract_product_rows(db, tenant_no, contract_id)
|
|
|
return {
|
|
|
str(r.product_id).strip()
|
|
|
for r in rows
|
|
|
@@ -513,6 +517,25 @@ def _contract_allowed_product_ids(db: Session, tenant_no: str, contract_id: str)
|
|
|
}
|
|
|
|
|
|
|
|
|
+def _assert_stop_products_package_for_contract(
|
|
|
+ db: Session,
|
|
|
+ tenant_no: str,
|
|
|
+ contract_id: str,
|
|
|
+ stop_products: Optional[list],
|
|
|
+) -> None:
|
|
|
+ from app.services.pl_contract_plan_qty import (
|
|
|
+ validate_stop_products_package_against_contract,
|
|
|
+ )
|
|
|
+
|
|
|
+ rows = _contract_product_rows(db, tenant_no, contract_id)
|
|
|
+ ok, err = validate_stop_products_package_against_contract(
|
|
|
+ contract_products=rows,
|
|
|
+ stop_products=stop_products or [],
|
|
|
+ )
|
|
|
+ if not ok:
|
|
|
+ raise HTTPException(status_code=422, detail=err or "包装规格不符合合同明细")
|
|
|
+
|
|
|
+
|
|
|
def assert_load_products_in_selected_contract(
|
|
|
db: Session,
|
|
|
tenant_no: str,
|
|
|
@@ -530,6 +553,8 @@ def assert_load_products_in_selected_contract(
|
|
|
allowed = _contract_allowed_product_ids(db, tenant_no, contract_id)
|
|
|
_assert_product_rows_in_contract_allowed(load.products, allowed, row_label="装货产品")
|
|
|
_assert_product_rows_in_contract_allowed(plan_products, allowed, row_label="装货产品")
|
|
|
+ merged = list(load.products or []) + list(plan_products or [])
|
|
|
+ _assert_stop_products_package_for_contract(db, tenant_no, contract_id, merged)
|
|
|
|
|
|
|
|
|
def assert_delivery_products_in_selected_contract(
|
|
|
@@ -552,6 +577,9 @@ def assert_delivery_products_in_selected_contract(
|
|
|
allowed,
|
|
|
row_label=f"送货段#{seq}产品",
|
|
|
)
|
|
|
+ _assert_stop_products_package_for_contract(
|
|
|
+ db, tenant_no, contract_id, delivery.products
|
|
|
+ )
|
|
|
|
|
|
|
|
|
def assert_stop_contract_required(
|