from typing import Optional, List from utils.exceptions import NotFound from purchase_orders.repositories.purchase_orders_repository import ProjectsRepository from purchase_orders.schemas import ( PurchaseOrderDetailsSchema, BlanketPurchaseOrdersListQueryParams, PurchaseOrdersResponseSchema, PurchaseOrderProviderSchema, ) class PurchaseOrdersService: purchase_orders_repository = ProjectsRepository() def purchase_orders( self, project_id: int, params: BlanketPurchaseOrdersListQueryParams ) -> PurchaseOrdersResponseSchema: purchase_orders, total = self.purchase_orders_repository.get_purchase_orders_list( filters=params, project_id=project_id ) orders = list(map(PurchaseOrderDetailsSchema, purchase_orders)) return PurchaseOrdersResponseSchema(items=orders, limit=params.limit, offset=params.offset, total=total) def providers_list(self, project_id: int) -> List[PurchaseOrderProviderSchema]: providers = self.purchase_orders_repository.get_providers(project_id=project_id) return list(map(PurchaseOrderProviderSchema, providers)) def purchase_order_details(self, purchase_order_id: int) -> Optional[PurchaseOrderDetailsSchema]: purchase_order = self.purchase_orders_repository.get_purchase_order_details(purchase_order_id) if not purchase_order: raise NotFound() return PurchaseOrderDetailsSchema(purchase_order) def blanket_purchase_order_items( self, purchase_order_id: int, params: BlanketPurchaseOrdersListQueryParams ) -> PurchaseOrdersResponseSchema: blankets, total = self.purchase_orders_repository.get_purchase_orders_blankets( filters=params, purchase_order_id=purchase_order_id ) orders = list(map(PurchaseOrderDetailsSchema, blankets)) return PurchaseOrdersResponseSchema(items=orders, limit=params.limit, offset=params.offset, total=total)