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()
 |