Files
zkxw/backend/app/schemas/quotation.py
T
2026-05-12 16:35:07 +08:00

107 lines
2.7 KiB
Python

"""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