from typing import Optional, List from pydantic import BaseModel, Field class ItemBase(BaseModel): sku: Optional[str] = None name: Optional[str] = None description: Optional[str] = None quantity: Optional[int] = 0 reorder_level: Optional[int] = 5 unit_price: Optional[float] = None category_id: Optional[int] = None supplier_id: Optional[int] = None location: Optional[str] = None is_active: Optional[bool] = True class ItemCreate(ItemBase): sku: str name: str unit_price: float class ItemUpdate(ItemBase): pass class ItemInDBBase(ItemBase): id: int class Config: from_attributes = True class Item(ItemInDBBase): pass class TransactionItemBase(BaseModel): item_id: int quantity: int unit_price: float class TransactionItemCreate(TransactionItemBase): pass class TransactionItemUpdate(TransactionItemBase): pass class TransactionItemInDBBase(TransactionItemBase): id: int transaction_id: int class Config: from_attributes = True class TransactionItem(TransactionItemInDBBase): pass class TransactionBase(BaseModel): transaction_type: str reference_number: Optional[str] = None notes: Optional[str] = None class TransactionCreate(TransactionBase): items: List[TransactionItemCreate] class TransactionUpdate(TransactionBase): pass class TransactionInDBBase(TransactionBase): id: int class Config: from_attributes = True class Transaction(TransactionInDBBase): items: List[TransactionItem] = [] class InventoryAdjustment(BaseModel): item_id: int quantity: int = Field(..., description="Positive for additions, negative for subtractions") reason: Optional[str] = None