Przeglądaj źródła

feat(pl): add plan contract gap side computation helpers

Co-authored-by: Cursor <cursoragent@cursor.com>
zlwu 2 miesięcy temu
rodzic
commit
a79e8a3e12

+ 24 - 0
backend/app/services/pl_plan_contract_gap.py

@@ -0,0 +1,24 @@
+from __future__ import annotations
+
+from typing import List, Optional
+
+from app.services.pl_internal_customer import is_internal_customer_name
+
+
+def compute_contract_gap_sides(
+    *,
+    supplier_name: Optional[str],
+    customer_name: Optional[str],
+    supplier_contract_count: int,
+    demander_contract_count: int,
+) -> List[str]:
+    gaps: List[str] = []
+    if not is_internal_customer_name(supplier_name) and supplier_contract_count <= 0:
+        gaps.append("supplier")
+    if not is_internal_customer_name(customer_name) and demander_contract_count <= 0:
+        gaps.append("demander")
+    return gaps
+
+
+def side_is_exempt(name: Optional[str]) -> bool:
+    return is_internal_customer_name(name)

+ 44 - 0
backend/tests/test_pl_plan_contract_gap.py

@@ -0,0 +1,44 @@
+from app.services.pl_internal_customer import INTERNAL_CUSTOMER_NAMES
+from app.services.pl_plan_contract_gap import compute_contract_gap_sides
+
+INTERNAL = next(iter(INTERNAL_CUSTOMER_NAMES))
+
+
+def test_both_external_no_contracts_gaps_both():
+    sides = compute_contract_gap_sides(
+        supplier_name="外部供方A",
+        customer_name="外部需方B",
+        supplier_contract_count=0,
+        demander_contract_count=0,
+    )
+    assert sides == ["supplier", "demander"]
+
+
+def test_internal_supplier_external_demander_missing_only_demander():
+    sides = compute_contract_gap_sides(
+        supplier_name=INTERNAL,
+        customer_name="外部需方B",
+        supplier_contract_count=0,
+        demander_contract_count=0,
+    )
+    assert sides == ["demander"]
+
+
+def test_both_internal_no_gap():
+    sides = compute_contract_gap_sides(
+        supplier_name=INTERNAL,
+        customer_name=INTERNAL,
+        supplier_contract_count=0,
+        demander_contract_count=0,
+    )
+    assert sides == []
+
+
+def test_external_with_contracts_no_gap():
+    sides = compute_contract_gap_sides(
+        supplier_name="外部供方A",
+        customer_name="外部需方B",
+        supplier_contract_count=1,
+        demander_contract_count=2,
+    )
+    assert sides == []