"""Pydantic schemas - 报价单管理""" from pydantic import BaseModel, Field from typing import Optional, List from datetime import datetime from decimal import Decimal class QuotationItemBase(BaseModel): """报价单项基础字段""" product_id: str = Field(..., description="商品ID") unit_id: str = Field(..., description="单位ID") price: Decimal = Field(..., description="单价") class QuotationItemCreate(QuotationItemBase): """创建报价单项请求""" pass class QuotationItemUpdate(BaseModel): """更新报价单项请求""" unit_id: Optional[str] = None price: Optional[Decimal] = None class QuotationItemResponse(QuotationItemBase): """报价单项响应""" id: str quotation_id: str is_del: int create_at: Optional[datetime] = None class Config: from_attributes = True class QuotationBase(BaseModel): """报价单基础字段""" inquiry_id: str = Field(..., description="询价单ID") items: List[QuotationItemCreate] = Field(default_factory=list, description="报价项列表") class QuotationCreate(QuotationBase): """创建报价单请求""" pass class QuotationUpdate(BaseModel): """更新报价单请求""" items: Optional[List[QuotationItemCreate]] = None class QuotationResponse(BaseModel): """报价单响应""" id: str inquiry_id: str supplier_id: str region_id: str status: str total_amount: Decimal submit_time: Optional[datetime] = None is_del: int create_at: Optional[datetime] = None create_by: Optional[str] = None create_name: Optional[str] = None update_at: Optional[datetime] = None class Config: from_attributes = True class QuotationDetailResponse(QuotationResponse): """报价单详情响应(包含报价项)""" items: List[QuotationItemResponse] = [] class QuotationListResponse(BaseModel): """报价单列表响应""" items: List[QuotationResponse] total: int page: int pageSize: int totalPages: int class QuotationStatusResponse(BaseModel): """报价单状态更新响应""" id: str status: str message: str = "操作成功" class QuotationWithSupplierResponse(QuotationResponse): """带供应商信息的报价单响应""" supplier_name: Optional[str] = None supplier_phone: Optional[str] = None region_name: Optional[str] = None class QuotationWithItemsResponse(QuotationDetailResponse): """带询价信息的报价单响应""" inquiry_title: Optional[str] = None inquiry_status: Optional[str] = None supplier_name: Optional[str] = None supplier_phone: Optional[str] = None region_name: Optional[str] = None