Merge remote-tracking branch 'origin/dealPrefilling'
This commit is contained in:
		@@ -207,6 +207,20 @@ async def get_detailed_deal_document(
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
# region Deal services
 | 
			
		||||
 
 | 
			
		||||
@@ -238,6 +238,11 @@ class DealCompleteRequest(BaseSchema):
 | 
			
		||||
    deal_id: int
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DealPrefillRequest(BaseSchema):
 | 
			
		||||
    old_deal_id: int
 | 
			
		||||
    new_deal_id: int
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# endregion Requests
 | 
			
		||||
 | 
			
		||||
# region Responses
 | 
			
		||||
@@ -338,4 +343,8 @@ class DealCreateGuestUrlResponse(OkMessageSchema):
 | 
			
		||||
class DealCompleteResponse(OkMessageSchema):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DealPrefillResponse(OkMessageSchema):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
# endregion Responses
 | 
			
		||||
 
 | 
			
		||||
@@ -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