This commit is contained in:
2026-03-08 22:58:25 +08:00
parent 3e19e45e9a
commit 1bdc75cee2
25 changed files with 1086 additions and 790 deletions
+27
View File
@@ -0,0 +1,27 @@
from .product_schemas import ProductCreate, ProductResponse
from .supplier_schemas import SupplierCreate, SupplierResponse
from .customer_schemas import CustomerCreate, CustomerResponse
from .warehouse_schemas import WarehouseCreate, WarehouseResponse
from .inventory_schemas import InventoryResponse
from .stock_movement_schemas import StockMovementCreate, StockMovementResponse
from .purchase_order_schemas import (
PurchaseOrderCreate,
PurchaseOrderResponse,
PurchaseOrderItemCreate
)
from .sales_order_schemas import (
SalesOrderCreate,
SalesOrderResponse,
SalesOrderItemCreate
)
__all__ = [
"ProductCreate", "ProductResponse",
"SupplierCreate", "SupplierResponse",
"CustomerCreate", "CustomerResponse",
"WarehouseCreate", "WarehouseResponse",
"InventoryResponse",
"StockMovementCreate", "StockMovementResponse",
"PurchaseOrderCreate", "PurchaseOrderResponse", "PurchaseOrderItemCreate",
"SalesOrderCreate", "SalesOrderResponse", "SalesOrderItemCreate",
]
@@ -0,0 +1,24 @@
from pydantic import BaseModel
from typing import Optional
class CustomerCreate(BaseModel):
code: Optional[str] = None
name: str
contact_person: Optional[str] = None
phone: Optional[str] = None
email: Optional[str] = None
address: Optional[str] = None
class CustomerResponse(BaseModel):
id: int
code: Optional[str]
name: str
contact_person: Optional[str]
phone: Optional[str]
email: Optional[str]
is_active: bool
class Config:
from_attributes = True
@@ -0,0 +1,16 @@
from pydantic import BaseModel
class InventoryResponse(BaseModel):
id: int
product_id: int
product_name: str
product_sku: str
warehouse_id: int
warehouse_name: str
quantity: int
locked_quantity: int
available_quantity: int
class Config:
from_attributes = True
@@ -0,0 +1,33 @@
from pydantic import BaseModel
from typing import Optional
from datetime import datetime
class ProductCreate(BaseModel):
sku: str
name: str
description: Optional[str] = None
category: Optional[str] = None
unit: str = "件"
cost_price: float = 0
sale_price: float = 0
min_stock: int = 0
max_stock: int = 1000
class ProductResponse(BaseModel):
id: int
sku: str
name: str
description: Optional[str]
category: Optional[str]
unit: str
cost_price: float
sale_price: float
min_stock: int
max_stock: int
is_active: bool
created_at: datetime
class Config:
from_attributes = True
@@ -0,0 +1,33 @@
from pydantic import BaseModel
from typing import Optional, List
from datetime import datetime
class PurchaseOrderItemCreate(BaseModel):
product_id: int
quantity: int
unit_price: float
remark: Optional[str] = None
class PurchaseOrderCreate(BaseModel):
supplier_id: int
expected_date: Optional[datetime] = None
remark: Optional[str] = None
items: List[PurchaseOrderItemCreate]
class PurchaseOrderResponse(BaseModel):
id: int
order_no: str
supplier_name: str
order_date: datetime
expected_date: Optional[datetime]
status: str
total_amount: float
paid_amount: float
remark: Optional[str]
created_at: datetime
class Config:
from_attributes = True
@@ -0,0 +1,33 @@
from pydantic import BaseModel
from typing import Optional, List
from datetime import datetime
class SalesOrderItemCreate(BaseModel):
product_id: int
quantity: int
unit_price: float
remark: Optional[str] = None
class SalesOrderCreate(BaseModel):
customer_id: int
delivery_date: Optional[datetime] = None
remark: Optional[str] = None
items: List[SalesOrderItemCreate]
class SalesOrderResponse(BaseModel):
id: int
order_no: str
customer_name: str
order_date: datetime
delivery_date: Optional[datetime]
status: str
total_amount: float
received_amount: float
remark: Optional[str]
created_at: datetime
class Config:
from_attributes = True
@@ -0,0 +1,27 @@
from pydantic import BaseModel
from typing import Optional
from datetime import datetime
class StockMovementCreate(BaseModel):
product_id: int
warehouse_id: int
movement_type: str
quantity: int
unit_price: Optional[float] = None
remark: Optional[str] = None
class StockMovementResponse(BaseModel):
id: int
product_name: str
movement_type: str
quantity: int
before_quantity: int
after_quantity: int
reference_no: Optional[str]
remark: Optional[str]
created_at: datetime
class Config:
from_attributes = True
@@ -0,0 +1,24 @@
from pydantic import BaseModel
from typing import Optional
class SupplierCreate(BaseModel):
code: Optional[str] = None
name: str
contact_person: Optional[str] = None
phone: Optional[str] = None
email: Optional[str] = None
address: Optional[str] = None
class SupplierResponse(BaseModel):
id: int
code: Optional[str]
name: str
contact_person: Optional[str]
phone: Optional[str]
email: Optional[str]
is_active: bool
class Config:
from_attributes = True
@@ -0,0 +1,23 @@
from pydantic import BaseModel
from typing import Optional
class WarehouseCreate(BaseModel):
code: Optional[str] = None
name: str
address: Optional[str] = None
manager: Optional[str] = None
phone: Optional[str] = None
class WarehouseResponse(BaseModel):
id: int
code: Optional[str]
name: str
address: Optional[str]
manager: Optional[str]
is_active: bool
is_default: bool
class Config:
from_attributes = True