from typing import Optional from pydantic import BaseModel, Field class InboundOutboundBase(BaseModel): date: str = Field(max_length=255) partner_company: str = Field(max_length=255, alias="partnerCompany") 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) quantity: float = Field() plan_no: Optional[str] = Field(default=None, max_length=255, alias="planNo") batch_no: Optional[str] = Field(default=None, max_length=255, alias="batchNo") vehicle_no: str = Field(max_length=255, alias="vehicleNo") status: Optional[str] = Field(default=None, max_length=50) remarks: Optional[str] = Field(default=None) purchase_plan_id: Optional[str] = Field(default=None, alias="purchasePlanId") model_config = {"from_attributes": True, "populate_by_name": True} class InboundOutboundCreate(BaseModel): date: str = Field(max_length=255) partner_company: str = Field(max_length=255, alias="partnerCompany") business_type: str = Field(max_length=255, alias="businessType") product_id: str = Field(alias="productId") quantity: float = Field() plan_no: Optional[str] = Field(default=None, max_length=255, alias="planNo") batch_no: Optional[str] = Field(default=None, max_length=255, alias="batchNo") vehicle_no: str = Field(max_length=255, alias="vehicleNo") status: Optional[str] = Field(default=None, max_length=50) remarks: Optional[str] = Field(default=None) purchase_plan_id: Optional[str] = Field(default=None, alias="purchasePlanId") model_config = {"populate_by_name": True} class InboundOutboundUpdate(BaseModel): date: Optional[str] = Field(default=None, max_length=255) partner_company: Optional[str] = Field(default=None, max_length=255, alias="partnerCompany") 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) quantity: Optional[float] = Field(default=None) plan_no: Optional[str] = Field(default=None, max_length=255, alias="planNo") batch_no: Optional[str] = Field(default=None, max_length=255, alias="batchNo") vehicle_no: Optional[str] = Field(default=None, max_length=255, alias="vehicleNo") status: Optional[str] = Field(default=None, max_length=50) remarks: Optional[str] = Field(default=None) purchase_plan_id: Optional[str] = Field(default=None, alias="purchasePlanId") model_config = {"populate_by_name": True} class CreateLinkForPlanPayload(BaseModel): purchase_plan_id: str = Field(alias="purchasePlanId") remarks: Optional[str] = None model_config = {"populate_by_name": True} class InboundOutboundRead(InboundOutboundBase): 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") gross_weight: Optional[float] = Field(default=None, alias="grossWeight") tare_weight: Optional[float] = Field(default=None, alias="tareWeight") deduction: Optional[float] = Field(default=None) net_weight: Optional[float] = Field(default=None, alias="netWeight") gross_weight_time: Optional[str] = Field(default=None, alias="grossWeightTime") tare_weight_time: Optional[str] = Field(default=None, alias="tareWeightTime") has_weighing_slip: bool = Field(default=False, alias="hasWeighingSlip") site_feedback_remark: Optional[str] = Field(default=None, alias="siteFeedbackRemark") site_feedback_images: Optional[list[str]] = Field(default=None, alias="siteFeedbackImages") site_feedback_time: Optional[str] = Field(default=None, alias="siteFeedbackTime")