from typing import List, Optional, Dict, Any from pydantic import BaseModel, Field from datetime import datetime # Supplier schemas class SupplierBase(BaseModel): name: str contact_name: Optional[str] = None email: Optional[str] = None phone: Optional[str] = None address: Optional[str] = None notes: Optional[str] = None is_active: bool = True class SupplierCreate(SupplierBase): pass class SupplierUpdate(BaseModel): name: Optional[str] = None contact_name: Optional[str] = None email: Optional[str] = None phone: Optional[str] = None address: Optional[str] = None notes: Optional[str] = None is_active: Optional[bool] = None class SupplierInDB(SupplierBase): id: int created_at: datetime updated_at: datetime class Config: from_attributes = True # Purchase schemas class PurchaseItemBase(BaseModel): product_id: int quantity: float unit_price: float total_price: float = None # Will be calculated server-side class PurchaseItemCreate(PurchaseItemBase): pass class PurchaseItemInDB(PurchaseItemBase): id: int purchase_id: int created_at: datetime updated_at: datetime class Config: from_attributes = True class PurchaseItemWithDetails(PurchaseItemInDB): product: Dict[str, Any] class PurchaseBase(BaseModel): supplier_id: int reference_number: Optional[str] = None order_date: datetime = None delivery_date: Optional[datetime] = None notes: Optional[str] = None total_amount: float = 0 class PurchaseCreate(PurchaseBase): items: List[PurchaseItemCreate] class PurchaseUpdate(BaseModel): supplier_id: Optional[int] = None reference_number: Optional[str] = None order_date: Optional[datetime] = None delivery_date: Optional[datetime] = None notes: Optional[str] = None class PurchaseInDB(PurchaseBase): id: int created_at: datetime updated_at: datetime class Config: from_attributes = True class PurchaseWithItems(PurchaseInDB): items: List[PurchaseItemWithDetails] = [] supplier: Dict[str, Any]