from pydantic import BaseModel from typing import Optional, List from datetime import datetime from app.models.invoice import InvoiceStatus from app.schemas.invoice_item import InvoiceItemResponse, InvoiceItemCreate class InvoiceBase(BaseModel): invoice_number: str client_id: int due_date: datetime tax_rate: float = 0.0 notes: Optional[str] = None payment_terms: str = "Net 30" class InvoiceCreate(InvoiceBase): items: List[InvoiceItemCreate] = [] class InvoiceUpdate(BaseModel): invoice_number: Optional[str] = None client_id: Optional[int] = None due_date: Optional[datetime] = None tax_rate: Optional[float] = None status: Optional[InvoiceStatus] = None notes: Optional[str] = None payment_terms: Optional[str] = None items: Optional[List[InvoiceItemCreate]] = None class InvoiceResponse(InvoiceBase): id: int owner_id: int issue_date: datetime subtotal: float tax_amount: float total_amount: float status: InvoiceStatus created_at: datetime updated_at: datetime items: List[InvoiceItemResponse] = [] class Config: from_attributes = True