49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
from typing import List, Optional
|
|
from pydantic import BaseModel
|
|
from datetime import datetime
|
|
|
|
class PurchaseItem(BaseModel):
|
|
product_id: int
|
|
unit_price: float
|
|
quantity: int
|
|
is_case: bool
|
|
num_boxes: Optional[int] = None
|
|
# TODO: remove is_case and num_boxes, should derive from product_id
|
|
|
|
class SaleItem(BaseModel):
|
|
inventory_item_id: int
|
|
unit_price: float
|
|
|
|
class PurchaseTransactionCreate(BaseModel):
|
|
vendor_id: int
|
|
transaction_date: datetime
|
|
items: List[PurchaseItem]
|
|
transaction_notes: Optional[str] = None
|
|
|
|
class SaleTransactionCreate(BaseModel):
|
|
customer_id: int
|
|
marketplace_id: Optional[int] = None
|
|
transaction_date: datetime
|
|
items: List[SaleItem]
|
|
transaction_notes: Optional[str] = None
|
|
|
|
class TransactionItemResponse(BaseModel):
|
|
id: int
|
|
transaction_id: int
|
|
physical_item_id: int
|
|
unit_price: float
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
class TransactionResponse(BaseModel):
|
|
id: int
|
|
vendor_id: Optional[int] = None
|
|
customer_id: Optional[int] = None
|
|
marketplace_id: Optional[int] = None
|
|
transaction_type: str
|
|
transaction_date: datetime
|
|
transaction_total_amount: float
|
|
transaction_notes: Optional[str] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
transaction_items: List[TransactionItemResponse] |