feat(pl): aggregate unique delivery dates from stop rows
Provide YYYY-MM-DD dedupe helper for plan list deliveryTimes. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
efe8aed409
commit
9c5a1cfb8e
2 files changed
+52
-1
No files matched your search
@@ -2,7 +2,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections import defaultdict
|
||||
from datetime import datetime
|
||||
from datetime import date, datetime
|
||||
from decimal import Decimal
|
||||
from typing import Optional
|
||||
|
||||
@@ -434,6 +434,28 @@ def resolve_delivery_customer_summary(
|
||||
return legacy or None
|
||||
|
||||
|
||||
def collect_unique_delivery_date_strings(deliveries) -> list[str]:
|
||||
"""送货段 delivery_time → 去重升序 YYYY-MM-DD。"""
|
||||
days: set[date] = set()
|
||||
for row in deliveries or []:
|
||||
raw = getattr(row, "delivery_time", None)
|
||||
if raw is None or raw == "":
|
||||
continue
|
||||
if isinstance(raw, datetime):
|
||||
days.add(raw.date())
|
||||
elif isinstance(raw, date):
|
||||
days.add(raw)
|
||||
else:
|
||||
text = str(raw).strip()
|
||||
if not text:
|
||||
continue
|
||||
try:
|
||||
days.add(datetime.strptime(text[:10], "%Y-%m-%d").date())
|
||||
except ValueError:
|
||||
continue
|
||||
return [d.isoformat() for d in sorted(days)]
|
||||
|
||||
|
||||
def attach_plan_stops_to_item(
|
||||
plan_item,
|
||||
plan: PlPlan,
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
from datetime import date, datetime
|
||||
|
||||
from app.services.pl_plan_stop_service import collect_unique_delivery_date_strings
|
||||
|
||||
|
||||
class _D:
|
||||
def __init__(self, delivery_time):
|
||||
self.delivery_time = delivery_time
|
||||
|
||||
|
||||
def test_collect_unique_sorted_yyyy_mm_dd():
|
||||
rows = [
|
||||
_D(datetime(2026, 9, 14, 10, 0, 0)),
|
||||
_D(datetime(2026, 9, 12, 8, 0, 0)),
|
||||
_D(date(2026, 9, 12)),
|
||||
_D(None),
|
||||
_D(""),
|
||||
_D("2026-09-13"),
|
||||
]
|
||||
assert collect_unique_delivery_date_strings(rows) == [
|
||||
"2026-09-12",
|
||||
"2026-09-13",
|
||||
"2026-09-14",
|
||||
]
|
||||
|
||||
|
||||
def test_collect_empty():
|
||||
assert collect_unique_delivery_date_strings([]) == []
|
||||
assert collect_unique_delivery_date_strings([_D(None)]) == []
|
||||
Reference in new issue
Block a user