126 lines
5.9 KiB
Python
126 lines
5.9 KiB
Python
"""入库单 / 出库单 Pydantic schemas"""
|
|
from __future__ import annotations
|
|
|
|
from datetime import date, datetime
|
|
from decimal import Decimal
|
|
from typing import Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class BrandOption(BaseModel):
|
|
brand_id: str = Field(alias="brandId")
|
|
brand_name: str = Field(alias="brandName")
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
class BrandQtyItem(BaseModel):
|
|
brand_id: str = Field(default="", alias="brandId")
|
|
brand_name: Optional[str] = Field(default=None, alias="brandName")
|
|
qty: Decimal = Field(..., ge=0)
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
class IoOrderItemRead(BaseModel):
|
|
id: str
|
|
order_id: str = Field(alias="orderId")
|
|
plan_product_id: str = Field(alias="planProductId")
|
|
product_id: Optional[str] = Field(default=None, alias="productId")
|
|
product_name: Optional[str] = Field(default=None, alias="productName")
|
|
alias_name: Optional[str] = Field(default=None, alias="aliasName")
|
|
brand_summary: Optional[str] = Field(default=None, alias="brandSummary")
|
|
brand_mode: Optional[str] = Field(default=None, alias="brandMode")
|
|
brand_id: Optional[str] = Field(default=None, alias="brandId")
|
|
brand_name: Optional[str] = Field(default=None, alias="brandName")
|
|
brand_options: Optional[list[BrandOption]] = Field(default=None, alias="brandOptions")
|
|
brand_qtys: Optional[list[BrandQtyItem]] = Field(default=None, alias="brandQtys")
|
|
specification: Optional[str] = None
|
|
unit: Optional[str] = None
|
|
plan_qty: Optional[Decimal] = Field(default=None, alias="planQty")
|
|
actual_qty: Optional[Decimal] = Field(default=None, alias="actualQty")
|
|
qty_source: Optional[str] = Field(default=None, alias="qtySource")
|
|
product_no: Optional[str] = Field(default=None, alias="productNo")
|
|
category_name: Optional[str] = Field(default=None, alias="categoryName")
|
|
package_spec: Optional[str] = Field(default=None, alias="packageSpec")
|
|
delivery_method: Optional[str] = Field(default=None, alias="deliveryMethod")
|
|
remark: Optional[str] = None
|
|
unit_label: Optional[str] = Field(default=None, alias="unitLabel")
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
class IoOrderItemPatch(BaseModel):
|
|
id: str
|
|
actual_qty: Decimal = Field(alias="actualQty")
|
|
brand_qtys: Optional[list[BrandQtyItem]] = Field(default=None, alias="brandQtys")
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
class IoOrderPatch(BaseModel):
|
|
status: Optional[str] = None
|
|
site_feedback_remark: Optional[str] = Field(default=None, alias="siteFeedbackRemark")
|
|
site_feedback_images: Optional[list[str]] = Field(default=None, alias="siteFeedbackImages")
|
|
remark: Optional[str] = None
|
|
items: Optional[list[IoOrderItemPatch]] = None
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
class IoOrderRead(BaseModel):
|
|
id: str
|
|
order_no: str = Field(alias="orderNo")
|
|
plan_id: str = Field(alias="planId")
|
|
transport_id: str = Field(alias="transportId")
|
|
status: str
|
|
partner_company: Optional[str] = Field(default=None, alias="partnerCompany")
|
|
vehicle_no: Optional[str] = Field(default=None, alias="vehicleNo")
|
|
plan_no: Optional[str] = Field(default=None, alias="planNo")
|
|
plan_date: Optional[date] = Field(default=None, alias="planDate")
|
|
site_access_token: Optional[str] = Field(default=None, alias="siteAccessToken")
|
|
site_url: Optional[str] = Field(default=None, alias="siteUrl")
|
|
site_feedback_remark: Optional[str] = Field(default=None, alias="siteFeedbackRemark")
|
|
site_feedback_images: list[str] = Field(default_factory=list, alias="siteFeedbackImages")
|
|
site_feedback_time: Optional[datetime] = Field(default=None, alias="siteFeedbackTime")
|
|
site_first_submitted_at: Optional[datetime] = Field(default=None, alias="siteFirstSubmittedAt")
|
|
remark: Optional[str] = None
|
|
product_summary: Optional[str] = Field(default=None, alias="productSummary")
|
|
actual_qty_total: Optional[float] = Field(default=None, alias="actualQtyTotal")
|
|
kind: str
|
|
items: list[IoOrderItemRead] = Field(default_factory=list)
|
|
business_type: Optional[str] = Field(default=None, alias="businessType")
|
|
plan_remark: Optional[str] = Field(default=None, alias="planRemark")
|
|
pickup_address: Optional[str] = Field(default=None, alias="pickupAddress")
|
|
pickup_lng: Optional[float] = Field(default=None, alias="pickupLng")
|
|
pickup_lat: Optional[float] = Field(default=None, alias="pickupLat")
|
|
pickup_time: Optional[datetime] = Field(default=None, alias="pickupTime")
|
|
pickup_contact: Optional[str] = Field(default=None, alias="pickupContact")
|
|
pickup_notes: Optional[str] = Field(default=None, alias="pickupNotes")
|
|
destination_name: Optional[str] = Field(default=None, alias="destinationName")
|
|
destination_address: Optional[str] = Field(default=None, alias="destinationAddress")
|
|
destination_lng: Optional[float] = Field(default=None, alias="destinationLng")
|
|
destination_lat: Optional[float] = Field(default=None, alias="destinationLat")
|
|
delivery_time: Optional[datetime] = Field(default=None, alias="deliveryTime")
|
|
delivery_contact: Optional[str] = Field(default=None, alias="deliveryContact")
|
|
destination_notes: Optional[str] = Field(default=None, alias="destinationNotes")
|
|
create_time: Optional[datetime] = Field(default=None, alias="createTime")
|
|
update_time: Optional[datetime] = Field(default=None, alias="updateTime")
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
class IoOrderListResponse(BaseModel):
|
|
total: int
|
|
list: list[IoOrderRead]
|
|
|
|
|
|
class PublicIoOrderItemFeedback(BaseModel):
|
|
id: str
|
|
actual_qty: Decimal = Field(alias="actualQty")
|
|
brand_qtys: Optional[list[BrandQtyItem]] = Field(default=None, alias="brandQtys")
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
class PublicIoOrderFeedback(BaseModel):
|
|
status: str
|
|
remark: Optional[str] = None
|
|
images: list[str] = Field(default_factory=list)
|
|
items: list[PublicIoOrderItemFeedback] = Field(default_factory=list)
|
|
model_config = {"populate_by_name": True}
|