from typing import List, Optional from datetime import date from pydantic import BaseModel from app.models.invoice import InvoiceStatus # Invoice Item schemas class InvoiceItemBase(BaseModel): description: Optional[str] = None quantity: Optional[float] = None unit_price: Optional[float] = None amount: Optional[float] = None class InvoiceItemCreate(InvoiceItemBase): description: str quantity: float unit_price: float amount: float class InvoiceItemUpdate(InvoiceItemBase): pass class InvoiceItemInDBBase(InvoiceItemBase): id: Optional[int] = None invoice_id: int class Config: orm_mode = True class InvoiceItem(InvoiceItemInDBBase): pass # Invoice schemas class InvoiceBase(BaseModel): invoice_number: Optional[str] = None status: Optional[InvoiceStatus] = None issue_date: Optional[date] = None due_date: Optional[date] = None subtotal: Optional[float] = None tax_rate: Optional[float] = None tax_amount: Optional[float] = None discount: Optional[float] = None total: Optional[float] = None notes: Optional[str] = None terms: Optional[str] = None is_recurring: Optional[bool] = False recurring_interval: Optional[str] = None client_id: Optional[int] = None organization_id: Optional[int] = None class InvoiceCreate(InvoiceBase): invoice_number: str issue_date: date due_date: date subtotal: float total: float client_id: int organization_id: int items: List[InvoiceItemCreate] class InvoiceUpdate(InvoiceBase): items: Optional[List[InvoiceItemCreate]] = None class InvoiceInDBBase(InvoiceBase): id: Optional[int] = None created_by_id: Optional[int] = None class Config: orm_mode = True class Invoice(InvoiceInDBBase): items: List[InvoiceItem] = [] class InvoiceInDB(InvoiceInDBBase): pass