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