调价后的新价格写入报价单;多段段前的货物带到各段,协同群不再把体积里的星号吃掉。海运字段齐了先核对再查价。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user