feat: deal prefilling
This commit is contained in:
		@@ -455,6 +455,44 @@ class DealService(BaseService):
 | 
			
		||||
        url = f"deals/{request.deal_id}?accessToken={access_token}"
 | 
			
		||||
        return DealCreateGuestUrlResponse(ok=True, message='Ссылка успешно создана!', url=url)
 | 
			
		||||
 | 
			
		||||
    async def _create_deal_services_for_prefilling(self, old_deal: models.Deal, new_deal: models.Deal):
 | 
			
		||||
        for service in old_deal.services:
 | 
			
		||||
            deal_service = models.secondary.DealService(
 | 
			
		||||
                service_id=service.service_id,
 | 
			
		||||
                deal_id=new_deal.id,
 | 
			
		||||
                quantity=service.quantity,
 | 
			
		||||
                price=service.price,
 | 
			
		||||
            )
 | 
			
		||||
            self.session.add(deal_service)
 | 
			
		||||
 | 
			
		||||
    async def _create_deal_products_for_prefilling(self, old_deal: models.Deal, new_deal: models.Deal):
 | 
			
		||||
        for old_deal_product in old_deal.products:
 | 
			
		||||
            deal_product = models.secondary.DealProduct(
 | 
			
		||||
                deal_id=new_deal.id,
 | 
			
		||||
                product_id=old_deal_product.product.id,
 | 
			
		||||
                quantity=old_deal_product.quantity
 | 
			
		||||
            )
 | 
			
		||||
            self.session.add(deal_product)
 | 
			
		||||
            await self.session.flush()
 | 
			
		||||
            for old_service in old_deal_product.services:
 | 
			
		||||
                deal_product_service = models.secondary.DealProductService(
 | 
			
		||||
                    deal_id=new_deal.id,
 | 
			
		||||
                    product_id=old_deal_product.product.id,
 | 
			
		||||
                    service_id=old_service.service.id,
 | 
			
		||||
                    price=old_service.price
 | 
			
		||||
                )
 | 
			
		||||
                self.session.add(deal_product_service)
 | 
			
		||||
 | 
			
		||||
    async def prefill_deal(self, user, request: DealPrefillRequest) -> DealPrefillResponse:
 | 
			
		||||
        old_deal: models.Deal = await self.get_by_id(user, request.old_deal_id, return_raw=True)
 | 
			
		||||
        new_deal: models.Deal = await self.get_by_id(user, request.new_deal_id, return_raw=True)
 | 
			
		||||
 | 
			
		||||
        await self._create_deal_services_for_prefilling(old_deal, new_deal)
 | 
			
		||||
        await self._create_deal_products_for_prefilling(old_deal, new_deal)
 | 
			
		||||
        await self.session.commit()
 | 
			
		||||
 | 
			
		||||
        return DealPrefillResponse(ok=True, message="Сделка успешно предзаполнена")
 | 
			
		||||
 | 
			
		||||
    # endregion
 | 
			
		||||
 | 
			
		||||
    # region Deal services
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user