调价后的新价格写入报价单;多段段前的货物带到各段,协同群不再把体积里的星号吃掉。海运字段齐了先核对再查价。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-03 22:39:54 +08:00
co-authored by Cursor
parent 0a14b4cc15
commit 7c77e45e03
32 changed files with 1384 additions and 75 deletions
+98
View File
@@ -5,6 +5,7 @@
from __future__ import annotations
import json
import os
import sys
import unittest
@@ -618,5 +619,102 @@ class QuoteAdjustTests(unittest.TestCase):
self.assertIn("费用合计:CNY 100.00", text.split("销售调价:", 1)[1])
class SheetPriceStampTests(unittest.TestCase):
"""报价单读的是线路表和舱位明细,不是只读 fee_lines。"""
def test_sales_adjust_writes_land_route_copies(self) -> None:
src = {
"source": "TMS",
"source_label": "TMS标准报价",
"currency": "CNY",
"total": "CNY 16500",
"fee_lines": [{"name": "运输费", "amount": "16500.00", "currency": "CNY"}],
"feeItems": [{"feeName": "运输费", "amount": 16500.0, "currency": "CNY"}],
"landSegments": [
{"origin": "上海", "destination": "谅山", "costPrice": 16500.0, "currency": "CNY"}
],
"route_rows": [
{
"origin": "上海",
"destination": "谅山",
"costPrice": "16500.00",
"amount": "16500.00",
}
],
"selected_land_route": json.dumps(
{"legs": [{"origin": "上海", "destination": "谅山", "costPrice": 16500.0}]},
ensure_ascii=False,
),
}
got = apply_adjust(
src,
extract_adjust("运输费改为28150", fee_names=["运输费"], allow_model=False),
business_line="LAND",
tms_cost="16500",
tms_sale="16500",
)
self.assertTrue(got.ok)
self.assertIn("28150", str(got.quote["route_rows"][0]["amount"]))
self.assertIn("28150", str(got.quote["route_rows"][0]["costPrice"]))
self.assertIn("28150", str(got.quote["landSegments"][0]["costPrice"]))
selected = json.loads(got.quote["selected_land_route"])
self.assertIn("28150", str(selected["legs"][0]["costPrice"]))
self.assertIn("28150", str(got.quote["feeItems"][0]["amount"]))
def test_product_and_airline_sheet_copies_follow_new_fee(self) -> None:
from agent.policy.sea_group_ops import merge_quote_fees
from agent.schema.quote_adjust import stamp_prices_for_sheet
base = {
"source": "TMS",
"source_label": "TMS标准报价",
"currency": "CNY",
"total": "16500",
"fee_lines": [{"name": "运输费", "amount": "16500", "currency": "CNY"}],
"route_rows": [{"costPrice": "16500", "amount": "16500"}],
"oceanCostItems": [{"name": "海运费", "amount": "100", "currency": "USD"}],
}
merged = merge_quote_fees(
base,
{"fee_lines": [{"name": "运输费", "amount": "18000"}], "source_label": "产品报价"},
)
self.assertIn("18000", str(merged["route_rows"][0]["amount"]))
self.assertEqual(merged["source_label"], "产品报价")
air = stamp_prices_for_sheet(
{
"source_label": "航线报价",
"total": "900",
"currency": "CNY",
"fee_lines": [{"name": "空运费", "amount": "900", "currency": "CNY"}],
"airOptions": [
{
"salePrice": "7918.25",
"departureCharges": [
{"chargeName": "空运费", "unitPrice": "1000", "amount": "1000"}
],
}
],
}
)
self.assertEqual(air["airOptions"][0]["salePrice"], "900")
self.assertIn("900", str(air["airOptions"][0]["departureCharges"][0]["amount"]))
kept = stamp_prices_for_sheet(
{
"source_label": "航线确认TMS",
"total": "200",
"fee_lines": [{"name": "增点费", "amount": "200"}],
"airOptions": [
{
"salePrice": "7918.25",
"departureCharges": [{"chargeName": "增点费", "unitPrice": "100", "amount": "100"}],
}
],
}
)
self.assertEqual(kept["airOptions"][0]["salePrice"], "7918.25")
self.assertEqual(kept["airOptions"][0]["departureCharges"][0]["amount"], "100")
if __name__ == "__main__":
unittest.main()