81 lines
1.8 KiB
Python

from typing import List, Optional
from pydantic import BaseModel
from datetime import datetime
from decimal import Decimal
class InvoiceItemBase(BaseModel):
description: str
quantity: Decimal
unit_price: Decimal
total_price: Decimal
class InvoiceItemCreate(InvoiceItemBase):
pass
class InvoiceItemUpdate(BaseModel):
description: Optional[str] = None
quantity: Optional[Decimal] = None
unit_price: Optional[Decimal] = None
total_price: Optional[Decimal] = None
class InvoiceItemInDBBase(InvoiceItemBase):
id: int
invoice_id: int
created_at: datetime
class Config:
from_attributes = True
class InvoiceItem(InvoiceItemInDBBase):
pass
class InvoiceBase(BaseModel):
invoice_number: str
issue_date: datetime
due_date: datetime
status: str = "draft"
subtotal: Decimal = Decimal("0.00")
tax_rate: Decimal = Decimal("0.00")
tax_amount: Decimal = Decimal("0.00")
total_amount: Decimal = Decimal("0.00")
notes: Optional[str] = None
class InvoiceCreate(InvoiceBase):
customer_id: int
items: List[InvoiceItemCreate] = []
class InvoiceUpdate(BaseModel):
invoice_number: Optional[str] = None
issue_date: Optional[datetime] = None
due_date: Optional[datetime] = None
status: Optional[str] = None
subtotal: Optional[Decimal] = None
tax_rate: Optional[Decimal] = None
tax_amount: Optional[Decimal] = None
total_amount: Optional[Decimal] = None
notes: Optional[str] = None
customer_id: Optional[int] = None
items: Optional[List[InvoiceItemCreate]] = None
class InvoiceInDBBase(InvoiceBase):
id: int
user_id: int
customer_id: int
created_at: datetime
updated_at: Optional[datetime] = None
class Config:
from_attributes = True
class Invoice(InvoiceInDBBase):
items: List[InvoiceItem] = []