39 lines
1.7 KiB
Python
39 lines
1.7 KiB
Python
from sqlalchemy import select
|
|
from sqlalchemy.orm import selectinload
|
|
|
|
from models import DealService as DealServiceModel
|
|
from models.deal_group import DealGroup
|
|
from schemas.deal import *
|
|
from services.base import BaseService
|
|
|
|
|
|
class DealGroupService(BaseService):
|
|
async def get_deals_by_group_id(self, group_id) -> list[Deal]:
|
|
group: DealGroup | None = await self.session.scalar(
|
|
select(DealGroup)
|
|
.where(DealGroup.id == group_id)
|
|
.options(
|
|
selectinload(DealGroup.deals).selectinload(Deal.products).selectinload(DealProduct.services),
|
|
selectinload(DealGroup.deals).selectinload(Deal.products)
|
|
.selectinload(DealProduct.product).selectinload(Product.barcodes),
|
|
selectinload(DealGroup.deals).selectinload(Deal.services).selectinload(DealServiceModel.service),
|
|
selectinload(DealGroup.deals).selectinload(Deal.status_history),
|
|
selectinload(DealGroup.deals).selectinload(Deal.group).selectinload(DealGroup.deals),
|
|
selectinload(DealGroup.deals).joinedload(Deal.client),
|
|
selectinload(DealGroup.deals).joinedload(Deal.shipping_warehouse),
|
|
)
|
|
)
|
|
return group.deals if group else []
|
|
|
|
async def complete_group(self, group_id: int) -> list[Deal]:
|
|
deals = await self.get_deals_by_group_id(group_id)
|
|
for deal in deals:
|
|
deal.is_completed = True
|
|
return deals
|
|
|
|
async def delete_group(self, group_id: int) -> None:
|
|
deals = await self.get_deals_by_group_id(group_id)
|
|
for deal in deals:
|
|
deal.is_deleted = True
|
|
await self.session.commit()
|