from typing import Optional from pydantic import BaseModel, Field class PurchasePlanBase(BaseModel): plan_no: Optional[str] = Field(default=None, max_length=255, alias="planNo") plan_date: str = Field(max_length=255, alias="planDate") start_date: Optional[str] = Field(default=None, max_length=255, alias="startDate") end_date: Optional[str] = Field(default=None, max_length=255, alias="endDate") business_type: str = Field(max_length=255, alias="businessType") product_id: Optional[str] = Field(default=None, alias="productId") product: str = Field(max_length=255) specification: Optional[str] = Field(default=None, max_length=255) planned_quantity: float = Field(alias="plannedQuantity") vehicle_no: Optional[str] = Field(default="", max_length=255, alias="vehicleNo") customer_name: Optional[str] = Field(default=None, max_length=255, alias="customerName") remarks: Optional[str] = Field(default=None) execution_status: Optional[str] = Field(default=None, max_length=50, alias="executionStatus") executed_at: Optional[str] = Field(default=None, max_length=255, alias="executedAt") last_weighing_slip_id: Optional[str] = Field(default=None, alias="lastWeighingSlipId") executed_quantity: Optional[float] = Field(default=0, alias="executedQuantity") auto_generate_enabled: int = Field(default=0, alias="autoGenerateEnabled") auto_generate_end_month: Optional[str] = Field( default=None, max_length=7, alias="autoGenerateEndMonth" ) auto_generate_last_month: Optional[str] = Field( default=None, max_length=7, alias="autoGenerateLastMonth" ) model_config = {"from_attributes": True, "populate_by_name": True} class PurchasePlanCreate(BaseModel): plan_no: Optional[str] = Field(default=None, max_length=255, alias="planNo") plan_date: str = Field(max_length=255, alias="planDate") start_date: Optional[str] = Field(default=None, max_length=255, alias="startDate") end_date: Optional[str] = Field(default=None, max_length=255, alias="endDate") business_type: str = Field(max_length=255, alias="businessType") product_id: str = Field(alias="productId") planned_quantity: float = Field(alias="plannedQuantity") vehicle_no: Optional[str] = Field(default="", max_length=255, alias="vehicleNo") customer_name: Optional[str] = Field(default=None, max_length=255, alias="customerName") remarks: Optional[str] = Field(default=None) execution_status: Optional[str] = Field(default=None, max_length=50, alias="executionStatus") auto_generate_enabled: Optional[int] = Field(default=0, alias="autoGenerateEnabled") auto_generate_end_month: Optional[str] = Field( default=None, max_length=7, alias="autoGenerateEndMonth" ) model_config = {"populate_by_name": True} class PurchasePlanUpdate(BaseModel): plan_no: Optional[str] = Field(default=None, max_length=255, alias="planNo") plan_date: Optional[str] = Field(default=None, max_length=255, alias="planDate") start_date: Optional[str] = Field(default=None, max_length=255, alias="startDate") end_date: Optional[str] = Field(default=None, max_length=255, alias="endDate") business_type: Optional[str] = Field(default=None, max_length=255, alias="businessType") product_id: Optional[str] = Field(default=None, alias="productId") product: Optional[str] = Field(default=None, max_length=255) specification: Optional[str] = Field(default=None, max_length=255) planned_quantity: Optional[float] = Field(default=None, alias="plannedQuantity") vehicle_no: Optional[str] = Field(default=None, max_length=255, alias="vehicleNo") customer_name: Optional[str] = Field(default=None, max_length=255, alias="customerName") remarks: Optional[str] = Field(default=None) execution_status: Optional[str] = Field(default=None, max_length=50, alias="executionStatus") executed_at: Optional[str] = Field(default=None, max_length=255, alias="executedAt") last_weighing_slip_id: Optional[str] = Field(default=None, alias="lastWeighingSlipId") executed_quantity: Optional[float] = Field(default=None, alias="executedQuantity") auto_generate_enabled: Optional[int] = Field(default=None, alias="autoGenerateEnabled") auto_generate_end_month: Optional[str] = Field( default=None, max_length=7, alias="autoGenerateEndMonth" ) auto_generate_last_month: Optional[str] = Field( default=None, max_length=7, alias="autoGenerateLastMonth" ) model_config = {"populate_by_name": True} class PurchasePlanRead(PurchasePlanBase): id: str is_deleted: int = Field(default=0, alias="isDeleted") created_at: str = Field(alias="createdAt") create_by: Optional[str] = Field(default=None, alias="createBy") create_by_name: Optional[str] = Field(default=None, alias="createByName") class PurchasePlanWithFillLink(PurchasePlanRead): fill_link_inventory_id: Optional[str] = Field(default=None, alias="fillLinkInventoryId")