454 lines
9.3 KiB
Python
454 lines
9.3 KiB
Python
from datetime import datetime, date
|
|
from typing import List, Optional, Union
|
|
|
|
from pydantic import constr
|
|
|
|
from schemas.attribute import CardAttributeSchema
|
|
from schemas.base import BaseSchema, OkMessageSchema
|
|
from schemas.billing import CardBillRequestSchema
|
|
from schemas.board import BoardSchema
|
|
from schemas.card_tag import CardTagSchema
|
|
from schemas.client import ClientSchema
|
|
from schemas.group import CardGroupSchema
|
|
from schemas.marketplace import BaseMarketplaceSchema
|
|
from schemas.product import ProductSchema
|
|
from schemas.service import ServiceSchema
|
|
from schemas.shipping import PalletSchema, BoxSchema
|
|
from schemas.shipping_warehouse import ShippingWarehouseSchema, BaseShippingWarehouseSchema
|
|
from schemas.status import StatusSchema, CardStatusHistorySchema
|
|
from schemas.user import UserSchema
|
|
|
|
|
|
# region Entities
|
|
|
|
class BaseSchemaWithAttributes(BaseSchema):
|
|
attributes: dict[str, Union[bool, str, int, float, date, datetime, None]] = None
|
|
|
|
def validate_attributes(cls, value):
|
|
for attr_name, attr_value in value.items():
|
|
if not isinstance(attr_value, (str, int, float, date, datetime, None)):
|
|
raise ValueError(f"Invalid type for attribute '{attr_name}': {type(attr_value)}")
|
|
return value
|
|
|
|
|
|
class CardSummary(BaseSchema):
|
|
id: int
|
|
name: str
|
|
client_name: Optional[str]
|
|
created_at: datetime
|
|
status: StatusSchema
|
|
board: BoardSchema
|
|
total_price: int
|
|
rank: int
|
|
base_marketplace: Optional[BaseMarketplaceSchema] = None
|
|
total_products: int
|
|
tags: list[CardTagSchema]
|
|
|
|
shipment_warehouse_id: Optional[int]
|
|
shipment_warehouse_name: Optional[str]
|
|
|
|
bill_request: Optional[CardBillRequestSchema] = None
|
|
group: Optional[CardGroupSchema] = None
|
|
|
|
|
|
class CardServiceSchema(BaseSchema):
|
|
service: ServiceSchema
|
|
quantity: int
|
|
price: int
|
|
employees: List[UserSchema]
|
|
is_fixed_price: bool
|
|
|
|
|
|
class CardProductServiceSchema(BaseSchema):
|
|
service: ServiceSchema
|
|
price: int
|
|
employees: List[UserSchema]
|
|
is_fixed_price: bool
|
|
|
|
|
|
class CardProductSchema(BaseSchema):
|
|
product: ProductSchema
|
|
services: List[CardProductServiceSchema]
|
|
quantity: int
|
|
comment: str = ""
|
|
|
|
|
|
class CardEmployeesSchema(BaseSchema):
|
|
user: UserSchema
|
|
created_at: datetime
|
|
|
|
|
|
class BaseCardSchema(BaseSchema):
|
|
id: int
|
|
name: str
|
|
comment: str
|
|
created_at: datetime
|
|
status: StatusSchema
|
|
board: BoardSchema
|
|
status_history: List[CardStatusHistorySchema]
|
|
is_deleted: bool
|
|
is_completed: bool
|
|
|
|
is_services_profit_accounted: bool
|
|
is_locked: bool
|
|
services: List[CardServiceSchema]
|
|
products: List[CardProductSchema]
|
|
client_id: Optional[int]
|
|
client: Optional[ClientSchema]
|
|
shipping_warehouse: Optional[Union[ShippingWarehouseSchema, str]] = None
|
|
bill_request: Optional[CardBillRequestSchema] = None
|
|
group: Optional[CardGroupSchema] = None
|
|
manager: Optional[UserSchema] = None
|
|
pallets: List[PalletSchema] = []
|
|
boxes: List[BoxSchema] = []
|
|
employees: List[CardEmployeesSchema] = []
|
|
tags: List[CardTagSchema] = []
|
|
|
|
|
|
class CardSchema(BaseCardSchema):
|
|
attributes: list[CardAttributeSchema]
|
|
|
|
|
|
class CardGeneralInfoSchema(BaseSchemaWithAttributes):
|
|
name: str
|
|
is_deleted: bool
|
|
is_completed: bool
|
|
comment: str
|
|
manager: Optional[UserSchema] = None
|
|
board_id: int
|
|
status_id: int
|
|
client_id: Optional[int]
|
|
tags: List[str]
|
|
|
|
|
|
class ProductsAndServicesGeneralInfoSchema(BaseSchema):
|
|
shipping_warehouse: Optional[str] = None
|
|
is_services_profit_accounted: bool
|
|
|
|
|
|
class OptionalShippingWarehouseSchema(BaseShippingWarehouseSchema):
|
|
id: Optional[int] = None
|
|
|
|
|
|
class ParsedCityBreakdownSchema(BaseSchema):
|
|
base_marketplace: BaseMarketplaceSchema
|
|
shipping_warehouse: OptionalShippingWarehouseSchema
|
|
quantity: int
|
|
|
|
|
|
class ParsedProductRowSchema(BaseSchema):
|
|
barcode: str
|
|
products: list[ProductSchema]
|
|
breakdowns: list[ParsedCityBreakdownSchema]
|
|
|
|
|
|
class CityBreakdownFromExcelSchema(BaseSchema):
|
|
base_marketplace: BaseMarketplaceSchema
|
|
shipping_warehouse: OptionalShippingWarehouseSchema
|
|
quantity: int
|
|
|
|
|
|
class ProductFromExcelSchema(BaseSchema):
|
|
product_id: int
|
|
cities_breakdown: list[CityBreakdownFromExcelSchema]
|
|
|
|
|
|
# endregion Entities
|
|
|
|
# region Requests
|
|
class CardChangeStatusRequest(BaseSchema):
|
|
card_id: int
|
|
new_status: int
|
|
|
|
|
|
class CardCreateRequest(BaseSchema):
|
|
name: str
|
|
status_id: int
|
|
|
|
|
|
class CardQuickCreateRequest(BaseSchema):
|
|
name: constr(strip_whitespace=True)
|
|
client_name: Optional[constr(strip_whitespace=True)]
|
|
comment: str
|
|
acceptance_date: datetime
|
|
shipping_warehouse: Optional[constr(strip_whitespace=True)]
|
|
base_marketplace: Optional[BaseMarketplaceSchema]
|
|
status_id: int
|
|
|
|
|
|
class CardAddServicesRequest(BaseSchema):
|
|
card_id: int
|
|
services: list[CardServiceSchema]
|
|
|
|
|
|
class CardUpdateServiceQuantityRequest(BaseSchema):
|
|
card_id: int
|
|
service_id: int
|
|
quantity: int
|
|
|
|
|
|
class CardUpdateServiceRequest(BaseSchema):
|
|
card_id: int
|
|
service: CardServiceSchema
|
|
|
|
|
|
class CardAddServiceRequest(BaseSchema):
|
|
card_id: int
|
|
service_id: int
|
|
quantity: int
|
|
price: int
|
|
|
|
|
|
class CardDeleteServiceRequest(BaseSchema):
|
|
card_id: int
|
|
service_id: int
|
|
|
|
|
|
class CardDeleteServicesRequest(BaseSchema):
|
|
card_id: int
|
|
service_ids: List[int]
|
|
|
|
|
|
class CardUpdateProductQuantityRequest(BaseSchema):
|
|
card_id: int
|
|
product_id: int
|
|
quantity: int
|
|
|
|
|
|
class CardAddProductRequest(BaseSchema):
|
|
card_id: int
|
|
product: CardProductSchema
|
|
|
|
|
|
class CardDeleteProductRequest(BaseSchema):
|
|
card_id: int
|
|
product_id: int
|
|
|
|
|
|
class CardDeleteProductsRequest(BaseSchema):
|
|
card_id: int
|
|
product_ids: List[int]
|
|
|
|
|
|
class CardUpdateGeneralInfoRequest(BaseSchema):
|
|
card_id: int
|
|
data: CardGeneralInfoSchema
|
|
|
|
|
|
class ProductsAndServicesGeneralInfoRequest(BaseSchema):
|
|
card_id: int
|
|
data: ProductsAndServicesGeneralInfoSchema
|
|
|
|
|
|
class UpdateCardManagerRequest(BaseSchema):
|
|
card_id: int
|
|
manager_id: Optional[int]
|
|
|
|
|
|
class UpdateCardClientRequest(BaseSchema):
|
|
card_id: int
|
|
client_id: int
|
|
|
|
|
|
class CardSummaryReorderRequest(BaseSchema):
|
|
card_id: int
|
|
status_id: int
|
|
index: int
|
|
deadline: datetime | None = None
|
|
comment: str | None = None
|
|
|
|
|
|
class CardDeleteRequest(BaseSchema):
|
|
card_id: int
|
|
|
|
|
|
class CardUpdateProductRequest(BaseSchema):
|
|
card_id: int
|
|
product: CardProductSchema
|
|
|
|
|
|
class CardServicesCopyRequest(BaseSchema):
|
|
card_id: int
|
|
source_product_id: int
|
|
destination_product_ids: List[int]
|
|
|
|
|
|
class CardProductAddKitRequest(BaseSchema):
|
|
card_id: int
|
|
product_id: int
|
|
kit_id: int
|
|
|
|
|
|
class CardAddKitRequest(BaseSchema):
|
|
card_id: int
|
|
kit_id: int
|
|
|
|
|
|
class CardCreateGuestUrlRequest(BaseSchema):
|
|
card_id: int
|
|
|
|
|
|
class CardCompleteRequest(BaseSchema):
|
|
card_id: int
|
|
|
|
|
|
class CardPrefillRequest(BaseSchema):
|
|
old_card_id: int
|
|
new_card_id: int
|
|
|
|
|
|
class CardRecalculatePriceRequest(BaseSchema):
|
|
card_id: int
|
|
|
|
|
|
class ManageEmployeeRequest(BaseSchema):
|
|
card_id: int
|
|
user_id: int
|
|
is_assign: bool
|
|
|
|
|
|
class CreateCardsFromExcelRequest(BaseSchema):
|
|
client_id: int
|
|
status_id: int
|
|
products: list[ProductFromExcelSchema]
|
|
|
|
|
|
# endregion Requests
|
|
|
|
# region Responses
|
|
class CardUpdateProductQuantityResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardDeleteServicesResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardGetAllResponse(BaseSchema):
|
|
cards: List[CardSchema]
|
|
|
|
|
|
class CardChangeStatusResponse(BaseSchema):
|
|
ok: bool
|
|
|
|
|
|
class CardCreateResponse(BaseSchema):
|
|
ok: bool
|
|
|
|
|
|
class CardQuickCreateResponse(BaseSchema):
|
|
card_id: int
|
|
|
|
|
|
class CardSummaryResponse(BaseSchema):
|
|
summaries: List[CardSummary]
|
|
|
|
|
|
class CardAddServicesResponse(BaseSchema):
|
|
ok: bool
|
|
message: str
|
|
|
|
|
|
class CardUpdateServiceQuantityResponse(BaseSchema):
|
|
ok: bool
|
|
message: str
|
|
|
|
|
|
class CardUpdateServiceResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardAddServiceResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardDeleteServiceResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardDeleteProductResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardDeleteProductsResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardAddProductResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardUpdateGeneralInfoResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class ProductsAndServicesGeneralInfoResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class UpdateCardManagerResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class UpdateCardClientResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardSummaryReorderResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardDeleteResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardUpdateProductResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardServicesCopyResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardProductAddKitResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardAddKitResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardCreateGuestUrlResponse(OkMessageSchema):
|
|
url: str
|
|
|
|
|
|
class CardCompleteResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardPrefillResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class CardRecalculatePriceResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class ManageEmployeeResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class GetAvailableEmployeesToAssignResponse(BaseSchema):
|
|
employees: list[UserSchema]
|
|
|
|
|
|
class ParseCardsExcelResponse(BaseSchema):
|
|
rows: list[ParsedProductRowSchema]
|
|
errors: list[str]
|
|
|
|
|
|
class CreateCardsFromExcelResponse(OkMessageSchema):
|
|
pass
|
|
|
|
# endregion Responses
|