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