Files
Fulfillment-Backend/schemas/deal.py

262 lines
5.0 KiB
Python

import datetime
from typing import List, Optional
from pydantic import constr
from schemas.base import CustomModelCamel, OkMessageSchema
from schemas.client import ClientSchema
from schemas.product import ProductSchema
from schemas.service import ServiceSchema
from schemas.shipping_warehouse import ShippingWarehouseSchema
from schemas.user import UserSchema
# region Entities
class FastDeal(CustomModelCamel):
name: str
client: ClientSchema
comment: str
acceptance_date: datetime.datetime
class DealSummary(CustomModelCamel):
id: int
name: str
client_name: str
changed_at: datetime.datetime
deadline: datetime.datetime
status: int
total_price: int
rank: int
class DealServiceSchema(CustomModelCamel):
service: ServiceSchema
quantity: int
price: int
class DealProductServiceSchema(CustomModelCamel):
service: ServiceSchema
price: int
class DealProductSchema(CustomModelCamel):
product: ProductSchema
services: List[DealProductServiceSchema]
quantity: int
class DealStatusHistorySchema(CustomModelCamel):
user: UserSchema
changed_at: datetime.datetime
from_status: int
to_status: int
next_status_deadline: datetime.datetime | None
comment: str | None = None
class DealSchema(CustomModelCamel):
id: int
name: str
client_id: int
created_at: datetime.datetime
current_status: int
services: List[DealServiceSchema]
products: List[DealProductSchema]
status_history: List[DealStatusHistorySchema]
is_deleted: bool
is_completed: bool
client: ClientSchema
comment: str
shipping_warehouse: Optional[ShippingWarehouseSchema] = None
class DealGeneralInfoSchema(CustomModelCamel):
name: str
is_deleted: bool
is_completed: bool
comment: str
# endregion Entities
# region Requests
class DealChangeStatusRequest(CustomModelCamel):
deal_id: int
new_status: int
class DealCreateRequest(CustomModelCamel):
name: str
class DealQuickCreateRequest(CustomModelCamel):
name: constr(strip_whitespace=True)
client_name: constr(strip_whitespace=True)
comment: str
acceptance_date: datetime.datetime
shipping_warehouse: constr(strip_whitespace=True)
class DealSummaryRequest(CustomModelCamel):
pass
class DealAddServicesRequest(CustomModelCamel):
deal_id: int
services: list[DealServiceSchema]
class DealUpdateServiceQuantityRequest(CustomModelCamel):
deal_id: int
service_id: int
quantity: int
class DealUpdateServiceRequest(CustomModelCamel):
deal_id: int
service: DealServiceSchema
class DealAddServiceRequest(CustomModelCamel):
deal_id: int
service_id: int
quantity: int
price: int
class DealDeleteServiceRequest(CustomModelCamel):
deal_id: int
service_id: int
class DealDeleteServicesRequest(CustomModelCamel):
deal_id: int
service_ids: List[int]
class DealUpdateProductQuantityRequest(CustomModelCamel):
deal_id: int
product_id: int
quantity: int
class DealAddProductRequest(CustomModelCamel):
deal_id: int
product: DealProductSchema
class DealDeleteProductRequest(CustomModelCamel):
deal_id: int
product_id: int
class DealDeleteProductsRequest(CustomModelCamel):
deal_id: int
product_ids: List[int]
class DealUpdateGeneralInfoRequest(CustomModelCamel):
deal_id: int
data: DealGeneralInfoSchema
class DealSummaryReorderRequest(CustomModelCamel):
deal_id: int
status: int
index: int
deadline: datetime.datetime | None = None
comment: str | None = None
class DealDeleteRequest(CustomModelCamel):
deal_id: int
class DealUpdateProductRequest(CustomModelCamel):
deal_id: int
product: DealProductSchema
# endregion Requests
# region Responses
class DealUpdateProductQuantityResponse(OkMessageSchema):
pass
class DealDeleteServicesResponse(OkMessageSchema):
pass
class DealGetAllResponse(CustomModelCamel):
deals: List[DealSchema]
class DealChangeStatusResponse(CustomModelCamel):
ok: bool
class DealCreateResponse(CustomModelCamel):
ok: bool
class DealQuickCreateResponse(CustomModelCamel):
deal_id: int
class DealSummaryResponse(CustomModelCamel):
summaries: List[DealSummary]
class DealAddServicesResponse(CustomModelCamel):
ok: bool
message: str
class DealUpdateServiceQuantityResponse(CustomModelCamel):
ok: bool
message: str
class DealUpdateServiceResponse(OkMessageSchema):
pass
class DealAddServiceResponse(OkMessageSchema):
pass
class DealDeleteServiceResponse(OkMessageSchema):
pass
class DealDeleteProductResponse(OkMessageSchema):
pass
class DealDeleteProductsResponse(OkMessageSchema):
pass
class DealAddProductResponse(OkMessageSchema):
pass
class DealUpdateGeneralInfoResponse(OkMessageSchema):
pass
class DealSummaryReorderResponse(OkMessageSchema):
pass
class DealDeleteResponse(OkMessageSchema):
pass
class DealUpdateProductResponse(OkMessageSchema):
pass
# endregion Responses