dingdanquanliucheng/backend/app/schemas/pricing.py

97 lines
2.6 KiB
Python
Raw Normal View History

2026-05-26 15:24:41 +08:00
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
2026-05-26 15:24:41 +08:00
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
2026-05-26 15:24:41 +08:00
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