from datetime import datetime from typing import Optional from schemas.base import BaseSchema, OkMessageSchema from schemas.product import ProductSchema # region Entities class ProductAndQuantitySchema(BaseSchema): product_id: Optional[int] quantity: Optional[int] class ResidualProductSchema(BaseSchema): id: int quantity: int product: ProductSchema pallet_id: Optional[int] box_id: Optional[int] class ResidualBoxSchema(BaseSchema): id: int created_at: datetime pallet_id: Optional[int] client_id: Optional[int] residual_products: list[ResidualProductSchema] class ResidualPalletSchema(BaseSchema): id: int created_at: datetime boxes: list[ResidualBoxSchema] residual_products: list[ResidualProductSchema] class CreateResidualProductSchema(ProductAndQuantitySchema): pallet_id: Optional[int] box_id: Optional[int] class UpdateResidualProductSchema(ProductAndQuantitySchema): pass class ReceiptBoxSchema(BaseSchema): products: list[ProductAndQuantitySchema] class ReceiptPalletSchema(BaseSchema): products: list[ProductAndQuantitySchema] boxes: list[ReceiptBoxSchema] # endregion # region Requests class CreateResidualPalletRequest(BaseSchema): client_id: int class CreateResidualProductRequest(BaseSchema): data: CreateResidualProductSchema class UpdateResidualProductRequest(BaseSchema): data: UpdateResidualProductSchema class CreateResidualBoxRequest(BaseSchema): client_id: Optional[int] pallet_id: Optional[int] class LoadReceiptRequest(BaseSchema): pallets: list[ReceiptPalletSchema] boxes: list[ReceiptBoxSchema] client_id: int class GetPdfRequest(BaseSchema): pallet_ids: list[int] box_ids: list[int] # endregion # region Responses class GetResidualPalletResponse(BaseSchema): pallet: ResidualPalletSchema client_id: int class CreateResidualPalletResponse(OkMessageSchema): pass class DeleteResidualPalletResponse(OkMessageSchema): pass class CreateResidualProductResponse(OkMessageSchema): pass class UpdateResidualProductResponse(OkMessageSchema): pass class GetResidualBoxResponse(BaseSchema): box: ResidualBoxSchema client_id: int class CreateResidualBoxResponse(OkMessageSchema): pass class DeleteResidualBoxResponse(OkMessageSchema): pass class DeleteResidualProductResponse(OkMessageSchema): pass class LoadReceiptResponse(OkMessageSchema): pass # endregion