定价规则新增 tax_rate(税率百分比)和 tax_inclusive(含税方式)字段, 报价引擎自动计算含税/不含税双价格,审批详情页利润计算过程展示税说明和明细行税额。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
97 lines
2.6 KiB
Python
97 lines
2.6 KiB
Python
from pydantic import BaseModel, Field
|
|
|
|
|
|
# ---- 定价规则 ----
|
|
|
|
class CreatePricingRuleRequest(BaseModel):
|
|
product_id: int
|
|
product_name: str = ""
|
|
pricing_type: str = "area"
|
|
base_unit_price: float = Field(default=0, ge=0)
|
|
pricing_unit: str = "㎡"
|
|
pricing_inputs: str | None = None # JSON string
|
|
formula_expr: str | None = None
|
|
formula_constants: str | None = None # JSON string
|
|
surcharge_json: str | None = None # JSON string
|
|
formula_note: str | None = None
|
|
tax_rate: float = Field(default=0, ge=0)
|
|
tax_inclusive: int = 0
|
|
status: int = 1
|
|
|
|
|
|
class UpdatePricingRuleRequest(BaseModel):
|
|
product_name: str | None = None
|
|
pricing_type: str | None = None
|
|
base_unit_price: float | None = None
|
|
pricing_unit: str | None = None
|
|
pricing_inputs: str | None = None
|
|
formula_expr: str | None = None
|
|
formula_constants: str | None = None
|
|
surcharge_json: str | None = None
|
|
formula_note: str | None = None
|
|
tax_rate: float | None = None
|
|
tax_inclusive: int | None = None
|
|
status: int | None = None
|
|
|
|
|
|
# ---- 供应商成本 ----
|
|
|
|
class CreateSupplierCostRequest(BaseModel):
|
|
product_id: int
|
|
supplier_id: int
|
|
supplier_model: str | None = None
|
|
our_model: str | None = None
|
|
thickness: str | None = None
|
|
weight_gsm: int | None = None
|
|
base_fabric_weight: int | None = None
|
|
cost_price: float = Field(ge=0)
|
|
cost_unit: str = "㎡"
|
|
is_primary: int = 0
|
|
remark: str | None = None
|
|
status: int = 1
|
|
|
|
|
|
class UpdateSupplierCostRequest(BaseModel):
|
|
supplier_id: int | None = None
|
|
supplier_model: str | None = None
|
|
our_model: str | None = None
|
|
thickness: str | None = None
|
|
weight_gsm: int | None = None
|
|
base_fabric_weight: int | None = None
|
|
cost_price: float | None = None
|
|
cost_unit: str | None = None
|
|
is_primary: int | None = None
|
|
remark: str | None = None
|
|
status: int | None = None
|
|
|
|
|
|
# ---- 价格层级 ----
|
|
|
|
class CreatePriceTierRequest(BaseModel):
|
|
product_id: int
|
|
tier_code: str
|
|
tier_name: str
|
|
price: float = Field(ge=0)
|
|
price_unit: str = "㎡"
|
|
remark: str | None = None
|
|
status: int = 1
|
|
|
|
|
|
class UpdatePriceTierRequest(BaseModel):
|
|
tier_name: str | None = None
|
|
price: float | None = None
|
|
price_unit: str | None = None
|
|
remark: str | None = None
|
|
status: int | None = None
|
|
|
|
|
|
# ---- 报价计算 ----
|
|
|
|
class QuotationCalculateRequest(BaseModel):
|
|
product_id: int
|
|
customer_id: int | None = None
|
|
user_inputs: dict = Field(default_factory=dict)
|
|
surcharge_selections: dict = Field(default_factory=dict)
|
|
surcharge_inputs: dict = Field(default_factory=dict)
|
|
include_tax: bool | None = None
|