88 lines
2.5 KiB
Python
88 lines
2.5 KiB
Python
"""框架合同金额:有小计则累加,不再强制为 0。"""
|
|
from decimal import Decimal
|
|
|
|
from app.crud.crm.contract import _normalize_framework_contract_data
|
|
|
|
|
|
def test_framework_sale_sums_fixed_line_subtotals():
|
|
data = {
|
|
"contractType": "framework_sale",
|
|
"taxRate": 6,
|
|
"products": [
|
|
{
|
|
"quantityMode": "fixed",
|
|
"priceMode": "fixed",
|
|
"quantity": 10,
|
|
"price": 100,
|
|
"subtotal": 1000,
|
|
},
|
|
{
|
|
"quantityMode": "fixed",
|
|
"priceMode": "fixed",
|
|
"quantity": 2,
|
|
"price": 50,
|
|
"subtotal": 100,
|
|
},
|
|
],
|
|
}
|
|
_normalize_framework_contract_data(data)
|
|
assert Decimal(str(data["amount"])) == Decimal("1100")
|
|
assert Decimal(str(data["amountWithTax"])) == Decimal("1166")
|
|
|
|
|
|
def test_framework_purchase_mixed_market_rows_contribute_zero():
|
|
data = {
|
|
"contract_type": "framework_purchase",
|
|
"tax_rate": 6,
|
|
"productList": [
|
|
{
|
|
"quantity_mode": "fixed",
|
|
"price_mode": "fixed",
|
|
"quantity": 5,
|
|
"price": 200,
|
|
"subtotal": 1000,
|
|
},
|
|
{
|
|
"quantity_mode": "customer_demand",
|
|
"price_mode": "market",
|
|
"quantity": 99,
|
|
"price": 999,
|
|
"subtotal": 9999,
|
|
},
|
|
],
|
|
}
|
|
_normalize_framework_contract_data(data)
|
|
market = data["productList"][1]
|
|
assert market["quantity"] == 0
|
|
assert market["price"] == 0
|
|
assert market["subtotal"] == 0
|
|
assert Decimal(str(data["amount"])) == Decimal("1000")
|
|
|
|
|
|
def test_framework_all_market_amount_is_zero():
|
|
data = {
|
|
"contractType": "framework",
|
|
"products": [
|
|
{
|
|
"quantityMode": "customer_demand",
|
|
"priceMode": "market",
|
|
"quantity": 1,
|
|
"price": 10,
|
|
"subtotal": 10,
|
|
}
|
|
],
|
|
}
|
|
_normalize_framework_contract_data(data)
|
|
assert Decimal(str(data["amount"])) == Decimal("0")
|
|
assert Decimal(str(data["amountWithTax"])) == Decimal("0")
|
|
|
|
|
|
def test_non_framework_unchanged():
|
|
data = {
|
|
"contractType": "sale",
|
|
"amount": 500,
|
|
"products": [{"quantity": 1, "price": 500, "subtotal": 500}],
|
|
}
|
|
_normalize_framework_contract_data(data)
|
|
assert data["amount"] == 500
|