feat: complete group of deals
This commit is contained in:
		@@ -9,11 +9,13 @@ import models.deal
 | 
			
		||||
import models.secondary
 | 
			
		||||
from models import User, Service, Client, DealProductService, deal_relations
 | 
			
		||||
from models.deal import *
 | 
			
		||||
from models.deal_group import DealGroup
 | 
			
		||||
from schemas.client import ClientDetailsSchema
 | 
			
		||||
from schemas.deal import *
 | 
			
		||||
from services.auth import AuthService
 | 
			
		||||
from services.base import BaseService
 | 
			
		||||
from services.client import ClientService
 | 
			
		||||
from services.deal_group import DealGroupService
 | 
			
		||||
from services.service import ServiceService
 | 
			
		||||
from services.shipping_warehouse import ShippingWarehouseService
 | 
			
		||||
 | 
			
		||||
@@ -1044,8 +1046,13 @@ class DealService(BaseService):
 | 
			
		||||
            deal = await self._get_deal_by_id(request.deal_id)
 | 
			
		||||
            if not deal:
 | 
			
		||||
                return DealCompleteResponse(ok=False, message="Сделка не найдена")
 | 
			
		||||
            deal.is_completed = True
 | 
			
		||||
            await self.session.commit()
 | 
			
		||||
 | 
			
		||||
            if deal.group:
 | 
			
		||||
                await DealGroupService(self.session).complete_group(deal.group.id)
 | 
			
		||||
            else:
 | 
			
		||||
                deal.is_completed = True
 | 
			
		||||
                await self.session.commit()
 | 
			
		||||
 | 
			
		||||
            return DealCompleteResponse(ok=True, message="Сделка успешно завершена")
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            await self.session.rollback()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										32
									
								
								services/deal_group.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								services/deal_group.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
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) -> None:
 | 
			
		||||
        deals = await self.get_deals_by_group_id(group_id)
 | 
			
		||||
        for deal in deals:
 | 
			
		||||
            deal.is_completed = True
 | 
			
		||||
        await self.session.commit()
 | 
			
		||||
		Reference in New Issue
	
	Block a user