feat: deal prefilling
This commit is contained in:
		@@ -207,6 +207,20 @@ async def get_detailed_deal_document(
 | 
				
			|||||||
    return Response(pdf_file.getvalue(), media_type='application/pdf')
 | 
					    return Response(pdf_file.getvalue(), media_type='application/pdf')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@deal_router.post(
 | 
				
			||||||
 | 
					    '/prefill',
 | 
				
			||||||
 | 
					    response_model=DealPrefillResponse,
 | 
				
			||||||
 | 
					    operation_id='prefill_deal',
 | 
				
			||||||
 | 
					    dependencies=[Depends(authorized_user)]
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					async def post_prefill_deal(
 | 
				
			||||||
 | 
					        session: SessionDependency,
 | 
				
			||||||
 | 
					        request: DealPrefillRequest,
 | 
				
			||||||
 | 
					        user: CurrentUserDependency
 | 
				
			||||||
 | 
					):
 | 
				
			||||||
 | 
					    return await DealService(session).prefill_deal(user, request)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# endregion
 | 
					# endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# region Deal services
 | 
					# region Deal services
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -238,6 +238,11 @@ class DealCompleteRequest(BaseSchema):
 | 
				
			|||||||
    deal_id: int
 | 
					    deal_id: int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DealPrefillRequest(BaseSchema):
 | 
				
			||||||
 | 
					    old_deal_id: int
 | 
				
			||||||
 | 
					    new_deal_id: int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# endregion Requests
 | 
					# endregion Requests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# region Responses
 | 
					# region Responses
 | 
				
			||||||
@@ -338,4 +343,8 @@ class DealCreateGuestUrlResponse(OkMessageSchema):
 | 
				
			|||||||
class DealCompleteResponse(OkMessageSchema):
 | 
					class DealCompleteResponse(OkMessageSchema):
 | 
				
			||||||
    pass
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DealPrefillResponse(OkMessageSchema):
 | 
				
			||||||
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# endregion Responses
 | 
					# endregion Responses
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -455,6 +455,44 @@ class DealService(BaseService):
 | 
				
			|||||||
        url = f"deals/{request.deal_id}?accessToken={access_token}"
 | 
					        url = f"deals/{request.deal_id}?accessToken={access_token}"
 | 
				
			||||||
        return DealCreateGuestUrlResponse(ok=True, message='Ссылка успешно создана!', url=url)
 | 
					        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
 | 
					    # endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # region Deal services
 | 
					    # region Deal services
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user