陆运选项不全时改为复制填空清单,方便销售按编号回填。
停发填写样例图,同群只跟当前工单,重量体积统一为 KG/CBM。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -167,6 +167,20 @@ class AirGroupCollabTests(unittest.TestCase):
|
||||
self.assertIn("起运地:ZUH", text)
|
||||
self.assertIn("\n\n协同补充字段:\n是否含电:-", text)
|
||||
self.assertIn("是否含磁:-", text)
|
||||
general = copy.air_group_brief(
|
||||
work_order_no="WO202609230017",
|
||||
facts={
|
||||
"起运地": "上海",
|
||||
"目的地": "洛杉矶",
|
||||
"品名": "普货",
|
||||
},
|
||||
quote=None,
|
||||
collab_facts={},
|
||||
has_price=False,
|
||||
)
|
||||
self.assertIn("是否含电:否", general)
|
||||
self.assertIn("是否含磁:否", general)
|
||||
self.assertNotIn("是否含电:-", general)
|
||||
self.assertIn("\n\nTMS报价:\nTMS 暂无匹配报价", text)
|
||||
self.assertNotIn("当前工单:", text)
|
||||
self.assertNotIn("贸易条款", text)
|
||||
@@ -402,6 +416,78 @@ class AirGroupCollabTests(unittest.TestCase):
|
||||
self.assertIn("是否含磁:是", joined)
|
||||
self.assertIn("是否含电:-", joined)
|
||||
|
||||
def test_activate_general_cargo_defaults_battery_and_magnet(self) -> None:
|
||||
"""品名是普货:群内激活后含电、含磁都是否,报价单也带上。"""
|
||||
created = self.ledger.create_ticket(
|
||||
sender_id="sales1",
|
||||
business_line="AIR",
|
||||
facts={
|
||||
"起运地": "上海",
|
||||
"目的地": "洛杉矶",
|
||||
"品名": "普货",
|
||||
"件数": "3",
|
||||
"毛重": "100",
|
||||
"体积": "2",
|
||||
"包装类型": "纸箱",
|
||||
"报价日期": "2026-09-16",
|
||||
},
|
||||
)
|
||||
wo = created["work_order_no"]
|
||||
self.ledger.upsert_quote(
|
||||
work_order_no=wo,
|
||||
quote={"total": "USD 800", "source": "TMS", "quoteId": "QT-AIR-1"},
|
||||
to_status="已报价",
|
||||
)
|
||||
handle_air_group(
|
||||
self._msg(sender="sales1", text=wo, chat="wr_air_1", mid="gc1"),
|
||||
flow=self.flow,
|
||||
ledger=self.ledger,
|
||||
)
|
||||
ticket = self.ledger.get_ticket(work_order_no=wo)
|
||||
self.assertEqual(ticket.collab_facts.get("是否含电"), "否")
|
||||
self.assertEqual(ticket.collab_facts.get("是否含磁"), "否")
|
||||
joined = "\n".join(self._texts())
|
||||
self.assertIn("是否含电:否", joined)
|
||||
self.assertIn("是否含磁:否", joined)
|
||||
fill = dict(getattr(self.ledger, "last_render", {}).get("facts") or {})
|
||||
self.assertEqual(fill.get("是否含电") or fill.get("has_battery"), "否")
|
||||
self.assertEqual(fill.get("是否含磁") or fill.get("has_magnet"), "否")
|
||||
|
||||
def test_activate_general_cargo_keeps_explicit_battery(self) -> None:
|
||||
"""普货只补空着的项;私聊已经说含电,激活不能改成否。"""
|
||||
created = self.ledger.create_ticket(
|
||||
sender_id="sales1",
|
||||
business_line="AIR",
|
||||
facts={
|
||||
"起运地": "上海",
|
||||
"目的地": "洛杉矶",
|
||||
"品名": "普货",
|
||||
"件数": "3",
|
||||
"毛重": "100",
|
||||
"体积": "2",
|
||||
"包装类型": "纸箱",
|
||||
"报价日期": "2026-09-16",
|
||||
"是否含电": "是",
|
||||
},
|
||||
)
|
||||
wo = created["work_order_no"]
|
||||
self.ledger.upsert_quote(
|
||||
work_order_no=wo,
|
||||
quote={"total": "USD 800", "source": "TMS", "quoteId": "QT-AIR-1"},
|
||||
to_status="已报价",
|
||||
)
|
||||
handle_air_group(
|
||||
self._msg(sender="sales1", text=wo, chat="wr_air_1", mid="gc2"),
|
||||
flow=self.flow,
|
||||
ledger=self.ledger,
|
||||
)
|
||||
ticket = self.ledger.get_ticket(work_order_no=wo)
|
||||
self.assertEqual(ticket.collab_facts.get("是否含电"), "是")
|
||||
self.assertEqual(ticket.collab_facts.get("是否含磁"), "否")
|
||||
joined = "\n".join(self._texts())
|
||||
self.assertIn("是否含电:是", joined)
|
||||
self.assertIn("是否含磁:否", joined)
|
||||
|
||||
def test_second_group_occupied(self) -> None:
|
||||
wo = self._create_air()
|
||||
handle_air_group(
|
||||
@@ -460,6 +546,57 @@ class AirGroupCollabTests(unittest.TestCase):
|
||||
self.assertLess(texts[-1], files[-1])
|
||||
self.assertEqual(len(files), 2)
|
||||
|
||||
def test_collab_after_activate_does_not_use_old_land_ticket(self) -> None:
|
||||
"""
|
||||
测服 WO202609230023:空运进原群激活后补含电含磁,
|
||||
不能写到同群更早的陆运单 WO202609230007,摘要也不能变成空字段。
|
||||
"""
|
||||
land = self.ledger.create_ticket(
|
||||
sender_id="sales1",
|
||||
business_line="LAND",
|
||||
facts={
|
||||
"运输类型": "国内运输整车",
|
||||
"始发站": "深圳",
|
||||
"目的站": "上海",
|
||||
"品名": "配件",
|
||||
},
|
||||
)["work_order_no"]
|
||||
self.ledger.bind_collab_group(
|
||||
work_order_no=land,
|
||||
chat_id="wr_air_1",
|
||||
member_ids=["sales1"],
|
||||
)
|
||||
air = self._create_air()
|
||||
handle_air_group(
|
||||
self._msg(sender="sales1", text=air, chat="wr_air_1", mid="mix0"),
|
||||
flow=self.flow,
|
||||
ledger=self.ledger,
|
||||
)
|
||||
self.assertEqual(self.ledger.find_by_collab_chat(chat_id="wr_air_1").work_order_no, air)
|
||||
self.assertEqual(
|
||||
str(self.ledger.get_ticket(work_order_no=land).collab_chat_id or ""),
|
||||
"",
|
||||
)
|
||||
self.groups.sent.clear()
|
||||
phase = handle_air_group(
|
||||
self._msg(sender="sales1", text="含电 不含磁", chat="wr_air_1", mid="mix1"),
|
||||
flow=self.flow,
|
||||
ledger=self.ledger,
|
||||
injected_intent="collab_fields",
|
||||
)
|
||||
self.assertEqual(phase, "fields_saved")
|
||||
air_ticket = self.ledger.get_ticket(work_order_no=air)
|
||||
land_ticket = self.ledger.get_ticket(work_order_no=land)
|
||||
self.assertEqual(air_ticket.collab_facts.get("是否含电"), "是")
|
||||
self.assertEqual(air_ticket.collab_facts.get("是否含磁"), "否")
|
||||
self.assertFalse(land_ticket.collab_facts.get("是否含电"))
|
||||
joined = "\n".join(self._texts())
|
||||
self.assertIn(f"工单号:{air}", joined)
|
||||
self.assertNotIn(f"工单号:{land}", joined)
|
||||
self.assertIn("起运地:上海", joined)
|
||||
self.assertIn("重量(KG):100", joined)
|
||||
self.assertNotIn("起运地:-", joined)
|
||||
|
||||
def test_sales_quote_rejected(self) -> None:
|
||||
wo = self._create_air()
|
||||
handle_air_group(
|
||||
|
||||
Reference in New Issue
Block a user