
- Set up project structure with modular organization - Implement database models for users, organizations, clients, invoices - Create Alembic migration scripts for database setup - Implement JWT-based authentication and authorization - Create API endpoints for users, organizations, clients, invoices - Add PDF generation for invoices using ReportLab - Add comprehensive documentation in README
86 lines
1.9 KiB
Python
86 lines
1.9 KiB
Python
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 |