from pydantic import BaseModel from typing import Optional, List from datetime import datetime from decimal import Decimal from app.models.invoice import InvoiceStatus class InvoiceItemBase(BaseModel): description: str quantity: Decimal unit_price: Decimal class InvoiceItemCreate(InvoiceItemBase): pass class InvoiceItemUpdate(BaseModel): description: Optional[str] = None quantity: Optional[Decimal] = None unit_price: Optional[Decimal] = None class InvoiceItemInDB(InvoiceItemBase): id: int invoice_id: int total_price: Decimal created_at: datetime class Config: from_attributes = True class InvoiceItem(InvoiceItemInDB): pass class InvoiceBase(BaseModel): customer_id: int due_date: datetime tax_rate: Optional[Decimal] = Decimal("0") notes: Optional[str] = None class InvoiceCreate(InvoiceBase): items: List[InvoiceItemCreate] class InvoiceUpdate(BaseModel): customer_id: Optional[int] = None due_date: Optional[datetime] = None status: Optional[InvoiceStatus] = None tax_rate: Optional[Decimal] = None notes: Optional[str] = None items: Optional[List[InvoiceItemCreate]] = None class InvoiceInDB(InvoiceBase): id: int invoice_number: str user_id: int issue_date: datetime status: InvoiceStatus subtotal: Decimal tax_amount: Decimal total: Decimal created_at: datetime updated_at: Optional[datetime] = None class Config: from_attributes = True class Invoice(InvoiceInDB): items: List[InvoiceItem] = [] class InvoiceWithCustomer(Invoice): customer: Optional[dict] = None