from typing import Optional, List from datetime import datetime from decimal import Decimal from pydantic import BaseModel, Field, condecimal # Shared properties for sale item class SaleItemBase(BaseModel): product_id: int quantity: int = Field(..., gt=0) unit_price: condecimal(decimal_places=2, ge=0) # Properties for sale item creation class SaleItemCreate(SaleItemBase): pass # Properties for sale item in DB class SaleItemInDBBase(SaleItemBase): id: int sale_id: int class Config: from_attributes = True # Properties to return via API class SaleItem(SaleItemInDBBase): pass # Shared properties for sale class SaleBase(BaseModel): customer_name: Optional[str] = None notes: Optional[str] = None status: str = "completed" # completed, cancelled, returned # Properties for sale creation class SaleCreate(SaleBase): items: List[SaleItemCreate] # Properties for sale update class SaleUpdate(BaseModel): customer_name: Optional[str] = None notes: Optional[str] = None status: Optional[str] = None # Properties for sale in DB class SaleInDBBase(SaleBase): id: int created_at: datetime updated_at: Optional[datetime] = None created_by: int class Config: from_attributes = True # Properties to return via API class Sale(SaleInDBBase): items: List[SaleItem] total_amount: condecimal(decimal_places=2)