feat: deal prefilling

This commit is contained in:
2024-10-15 21:25:32 +04:00
parent ab5fc94e1b
commit e4d9b5ef16
3 changed files with 61 additions and 0 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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