311 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			311 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import datetime
 | 
						|
from typing import List, Optional, Union
 | 
						|
 | 
						|
from pydantic import constr, field_validator
 | 
						|
 | 
						|
from schemas.base import BaseSchema, OkMessageSchema
 | 
						|
from schemas.billing import DealBillRequestSchema
 | 
						|
from schemas.client import ClientSchema
 | 
						|
from schemas.marketplace import BaseMarketplaceSchema
 | 
						|
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(BaseSchema):
 | 
						|
    name: str
 | 
						|
    client: ClientSchema
 | 
						|
    comment: str
 | 
						|
    acceptance_date: datetime.datetime
 | 
						|
 | 
						|
 | 
						|
class DealSummary(BaseSchema):
 | 
						|
    id: int
 | 
						|
    name: str
 | 
						|
    client_name: str
 | 
						|
    changed_at: datetime.datetime
 | 
						|
    created_at: datetime.datetime
 | 
						|
    deadline: datetime.datetime
 | 
						|
    status: int
 | 
						|
    total_price: int
 | 
						|
    rank: int
 | 
						|
    base_marketplace: Optional[BaseMarketplaceSchema] = None
 | 
						|
 | 
						|
    shipment_warehouse_id: Optional[int]
 | 
						|
    shipment_warehouse_name: Optional[str]
 | 
						|
 | 
						|
class DealServiceSchema(BaseSchema):
 | 
						|
    service: ServiceSchema
 | 
						|
    quantity: int
 | 
						|
    price: int
 | 
						|
    employees: List[UserSchema]
 | 
						|
 | 
						|
 | 
						|
class DealProductServiceSchema(BaseSchema):
 | 
						|
    service: ServiceSchema
 | 
						|
    price: int
 | 
						|
    employees: List[UserSchema]
 | 
						|
 | 
						|
 | 
						|
class DealProductSchema(BaseSchema):
 | 
						|
    product: ProductSchema
 | 
						|
    services: List[DealProductServiceSchema]
 | 
						|
    quantity: int
 | 
						|
 | 
						|
 | 
						|
class DealStatusHistorySchema(BaseSchema):
 | 
						|
    user: UserSchema
 | 
						|
    changed_at: datetime.datetime
 | 
						|
    from_status: int
 | 
						|
    to_status: int
 | 
						|
    next_status_deadline: datetime.datetime | None
 | 
						|
    comment: str | None = None
 | 
						|
 | 
						|
 | 
						|
class DealSchema(BaseSchema):
 | 
						|
    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
 | 
						|
    is_locked: bool
 | 
						|
    client: ClientSchema
 | 
						|
    comment: str
 | 
						|
    shipping_warehouse: Optional[Union[ShippingWarehouseSchema, str]] = None
 | 
						|
    bill_request: Optional[DealBillRequestSchema] = None
 | 
						|
 | 
						|
 | 
						|
class DealGeneralInfoSchema(BaseSchema):
 | 
						|
    name: str
 | 
						|
    is_deleted: bool
 | 
						|
    is_completed: bool
 | 
						|
    comment: str
 | 
						|
    shipping_warehouse: Optional[str] = None
 | 
						|
 | 
						|
 | 
						|
# endregion Entities
 | 
						|
 | 
						|
# region Requests
 | 
						|
class DealChangeStatusRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    new_status: int
 | 
						|
 | 
						|
 | 
						|
class DealCreateRequest(BaseSchema):
 | 
						|
    name: str
 | 
						|
 | 
						|
 | 
						|
class DealQuickCreateRequest(BaseSchema):
 | 
						|
    name: constr(strip_whitespace=True)
 | 
						|
    client_name: constr(strip_whitespace=True)
 | 
						|
    comment: str
 | 
						|
    acceptance_date: datetime.datetime
 | 
						|
    shipping_warehouse: constr(strip_whitespace=True)
 | 
						|
    base_marketplace: BaseMarketplaceSchema
 | 
						|
 | 
						|
 | 
						|
class DealSummaryRequest(BaseSchema):
 | 
						|
    pass
 | 
						|
 | 
						|
 | 
						|
class DealAddServicesRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    services: list[DealServiceSchema]
 | 
						|
 | 
						|
 | 
						|
class DealUpdateServiceQuantityRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    service_id: int
 | 
						|
    quantity: int
 | 
						|
 | 
						|
 | 
						|
class DealUpdateServiceRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    service: DealServiceSchema
 | 
						|
 | 
						|
 | 
						|
class DealAddServiceRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    service_id: int
 | 
						|
    quantity: int
 | 
						|
    price: int
 | 
						|
 | 
						|
 | 
						|
class DealDeleteServiceRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    service_id: int
 | 
						|
 | 
						|
 | 
						|
class DealDeleteServicesRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    service_ids: List[int]
 | 
						|
 | 
						|
 | 
						|
class DealUpdateProductQuantityRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    product_id: int
 | 
						|
    quantity: int
 | 
						|
 | 
						|
 | 
						|
class DealAddProductRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    product: DealProductSchema
 | 
						|
 | 
						|
 | 
						|
class DealDeleteProductRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    product_id: int
 | 
						|
 | 
						|
 | 
						|
class DealDeleteProductsRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    product_ids: List[int]
 | 
						|
 | 
						|
 | 
						|
class DealUpdateGeneralInfoRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    data: DealGeneralInfoSchema
 | 
						|
 | 
						|
 | 
						|
class DealSummaryReorderRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    status: int
 | 
						|
    index: int
 | 
						|
    deadline: datetime.datetime | None = None
 | 
						|
    comment: str | None = None
 | 
						|
 | 
						|
 | 
						|
class DealDeleteRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
 | 
						|
 | 
						|
class DealUpdateProductRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    product: DealProductSchema
 | 
						|
 | 
						|
 | 
						|
class DealServicesCopyRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    source_product_id: int
 | 
						|
    destination_product_ids: List[int]
 | 
						|
 | 
						|
 | 
						|
class DealProductAddKitRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    product_id: int
 | 
						|
    kit_id: int
 | 
						|
 | 
						|
 | 
						|
class DealAddKitRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
    kit_id: int
 | 
						|
 | 
						|
 | 
						|
class DealCreateGuestUrlRequest(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
 | 
						|
 | 
						|
# endregion Requests
 | 
						|
 | 
						|
# region Responses
 | 
						|
class DealUpdateProductQuantityResponse(OkMessageSchema):
 | 
						|
    pass
 | 
						|
 | 
						|
 | 
						|
class DealDeleteServicesResponse(OkMessageSchema):
 | 
						|
    pass
 | 
						|
 | 
						|
 | 
						|
class DealGetAllResponse(BaseSchema):
 | 
						|
    deals: List[DealSchema]
 | 
						|
 | 
						|
 | 
						|
class DealChangeStatusResponse(BaseSchema):
 | 
						|
    ok: bool
 | 
						|
 | 
						|
 | 
						|
class DealCreateResponse(BaseSchema):
 | 
						|
    ok: bool
 | 
						|
 | 
						|
 | 
						|
class DealQuickCreateResponse(BaseSchema):
 | 
						|
    deal_id: int
 | 
						|
 | 
						|
 | 
						|
class DealSummaryResponse(BaseSchema):
 | 
						|
    summaries: List[DealSummary]
 | 
						|
 | 
						|
 | 
						|
class DealAddServicesResponse(BaseSchema):
 | 
						|
    ok: bool
 | 
						|
    message: str
 | 
						|
 | 
						|
 | 
						|
class DealUpdateServiceQuantityResponse(BaseSchema):
 | 
						|
    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
 | 
						|
 | 
						|
 | 
						|
class DealServicesCopyResponse(OkMessageSchema):
 | 
						|
    pass
 | 
						|
 | 
						|
 | 
						|
class DealProductAddKitResponse(OkMessageSchema):
 | 
						|
    pass
 | 
						|
 | 
						|
 | 
						|
class DealAddKitResponse(OkMessageSchema):
 | 
						|
    pass
 | 
						|
 | 
						|
 | 
						|
class DealCreateGuestUrlResponse(OkMessageSchema):
 | 
						|
    url: str
 | 
						|
# endregion Responses
 |