107 lines
2.7 KiB
Python
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
|