| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- """送(提)货单按客户聚合打印"""
- from datetime import datetime
- from decimal import Decimal
- from app.schemas.pl.plan import PlanDeliveryRead, PlanStopProductRead
- from app.services.pl_plan_print_service import (
- build_delivery_slip_print,
- list_delivery_print_customers,
- )
- def _stop_product(**kwargs) -> PlanStopProductRead:
- now = datetime(2026, 8, 26, 10, 0, 0)
- return PlanStopProductRead(
- id=kwargs.get("id", "sp1"),
- plan_id="p1",
- product_id=kwargs["product_id"],
- product_no=kwargs.get("product_no", "PN"),
- product_name=kwargs.get("product_name", "产品"),
- unit=kwargs.get("unit", "吨"),
- plan_qty=kwargs.get("plan_qty"),
- outbound_qty=kwargs.get("outbound_qty"),
- tenant_no="t1",
- create_time=now,
- update_time=now,
- )
- def _delivery(**kwargs) -> PlanDeliveryRead:
- now = datetime(2026, 8, 26, 10, 0, 0)
- return PlanDeliveryRead(
- id=kwargs["id"],
- plan_id="p1",
- seq=kwargs.get("seq", 1),
- customer_id=kwargs.get("customer_id"),
- customer_name=kwargs.get("customer_name"),
- address=kwargs.get("address"),
- contact=kwargs.get("contact"),
- products=kwargs.get("products") or [],
- tenant_no="t1",
- create_time=now,
- update_time=now,
- )
- def test_list_delivery_print_customers_three_distinct():
- deliveries = [
- _delivery(id="d1", seq=1, customer_id="c1", customer_name="客户A"),
- _delivery(id="d2", seq=2, customer_id="c2", customer_name="客户B"),
- _delivery(id="d3", seq=3, customer_id="c3", customer_name="客户C"),
- ]
- rows = list_delivery_print_customers(deliveries)
- assert len(rows) == 3
- assert [r.customer_id for r in rows] == ["c1", "c2", "c3"]
- assert all(r.delivery_count == 1 for r in rows)
- def test_list_delivery_print_customers_dedupes_by_customer_id():
- deliveries = [
- _delivery(id="d1", seq=2, customer_id="c1", customer_name="客户A"),
- _delivery(id="d2", seq=1, customer_id="c1", customer_name="客户A"),
- _delivery(id="d3", seq=3, customer_id="c2", customer_name="客户B"),
- ]
- rows = list_delivery_print_customers(deliveries)
- assert len(rows) == 2
- assert rows[0].customer_id == "c1"
- assert rows[0].delivery_count == 2
- assert rows[1].customer_id == "c2"
- def test_build_delivery_slip_print_merges_same_customer_and_uses_min_seq_contact(monkeypatch):
- deliveries = [
- _delivery(
- id="d2",
- seq=2,
- customer_id="c1",
- customer_name="客户A",
- address="地址B",
- contact="联系B",
- products=[
- _stop_product(id="sp2", product_id="prod1", plan_qty=Decimal("5"), outbound_qty=Decimal("5"))
- ],
- ),
- _delivery(
- id="d1",
- seq=1,
- customer_id="c1",
- customer_name="客户A",
- address="地址A",
- contact="联系A",
- products=[
- _stop_product(id="sp1", product_id="prod1", plan_qty=Decimal("10"), outbound_qty=Decimal("10"))
- ],
- ),
- ]
- monkeypatch.setattr(
- "app.services.pl_plan_print_service.load_plan_stops_grouped",
- lambda db, tenant_no, plan_ids: {"p1": (None, deliveries)},
- )
- result = build_delivery_slip_print(
- db=None, # type: ignore[arg-type]
- tenant_no="t1",
- plan_id="p1",
- plan_no="PL001",
- plan_date="2026-08-26",
- customer_id="c1",
- )
- assert result.receiving_unit == "客户A"
- assert result.receive_contact == "联系A"
- assert result.delivery_address == "地址A"
- assert len(result.products) == 1
- assert result.products[0].plan_qty == Decimal("15")
- assert result.products[0].outbound_qty == Decimal("15")
|