zalupka
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import lexorank
|
||||
|
||||
import models.secondary
|
||||
from typing import Union
|
||||
import models.deal
|
||||
@@ -19,6 +21,14 @@ class DealService(BaseService):
|
||||
async def _get_deal_by_id(self, deal_id) -> Union[Deal, None]:
|
||||
return await self.session.get(Deal, deal_id)
|
||||
|
||||
async def _get_rank(self):
|
||||
query = await self.session.execute(select(Deal.rank).order_by(Deal.rank.desc()))
|
||||
result = query.scalar_one_or_none()
|
||||
if not result:
|
||||
return str(lexorank.Bucket.BUCEKT_0.next())
|
||||
rank = lexorank.parse(result)
|
||||
return str(rank.next())
|
||||
|
||||
async def change_status(self, deal: Deal,
|
||||
status: DealStatus,
|
||||
user: User,
|
||||
@@ -37,10 +47,12 @@ class DealService(BaseService):
|
||||
return status_change
|
||||
|
||||
async def create(self, request: DealCreateRequest, user: User) -> DealCreateResponse:
|
||||
rank = await self._get_rank()
|
||||
deal = Deal(
|
||||
name=request.name,
|
||||
created_at=datetime.datetime.now(),
|
||||
current_status=DealStatus.CREATED
|
||||
current_status=DealStatus.CREATED,
|
||||
rank=rank
|
||||
)
|
||||
self.session.add(deal)
|
||||
await self.session.flush()
|
||||
@@ -60,11 +72,13 @@ class DealService(BaseService):
|
||||
request.client_name,
|
||||
ClientDetailsSchema(address=request.client_address))
|
||||
await client_service.update_details(user, client, ClientDetailsSchema(address=request.client_address))
|
||||
rank = await self._get_rank()
|
||||
deal = Deal(
|
||||
name=request.name,
|
||||
created_at=datetime.datetime.now(),
|
||||
client_id=client.id,
|
||||
current_status=DealStatus.CREATED
|
||||
current_status=DealStatus.CREATED,
|
||||
rank=rank
|
||||
)
|
||||
self.session.add(deal)
|
||||
await self.session.flush()
|
||||
@@ -91,15 +105,25 @@ class DealService(BaseService):
|
||||
.group_by(models.secondary.DealService.deal_id)
|
||||
.subquery()
|
||||
)
|
||||
q = (select(
|
||||
Deal,
|
||||
func.coalesce(service_subquery.c.total_price, 0)
|
||||
q = (
|
||||
select(
|
||||
Deal,
|
||||
func.coalesce(service_subquery.c.total_price, 0)
|
||||
)
|
||||
.order_by(
|
||||
Deal.rank.desc()
|
||||
)
|
||||
.options(
|
||||
selectinload(Deal.status_history),
|
||||
joinedload(Deal.client)
|
||||
)
|
||||
.outerjoin(
|
||||
service_subquery, Deal.id == service_subquery.c.deal_id)
|
||||
.where(
|
||||
Deal.is_deleted == False,
|
||||
Deal.is_completed == False
|
||||
)
|
||||
)
|
||||
.options(selectinload(Deal.status_history),
|
||||
joinedload(Deal.client))
|
||||
.outerjoin(service_subquery, Deal.id == service_subquery.c.deal_id)
|
||||
.where(Deal.is_deleted == False,
|
||||
Deal.is_completed == False))
|
||||
deals_query = await self.session.execute(q)
|
||||
summaries = []
|
||||
for deal, total_price in deals_query.all():
|
||||
@@ -112,7 +136,8 @@ class DealService(BaseService):
|
||||
name=deal.name,
|
||||
changed_at=last_status.changed_at,
|
||||
status=last_status.to_status,
|
||||
total_price=total_price
|
||||
total_price=total_price,
|
||||
rank=deal.rank
|
||||
)
|
||||
)
|
||||
return DealSummaryResponse(summaries=summaries)
|
||||
@@ -156,6 +181,7 @@ class DealService(BaseService):
|
||||
if not deal:
|
||||
raise HTTPException(status_code=404, detail="Сделка не найдена")
|
||||
deal.name = request.data.name
|
||||
deal.comment = request.data.comment
|
||||
deal.is_deleted = request.data.is_deleted
|
||||
deal.is_completed = request.data.is_completed
|
||||
await self.session.commit()
|
||||
@@ -164,6 +190,9 @@ class DealService(BaseService):
|
||||
await self.session.rollback()
|
||||
return DealUpdateGeneralInfoResponse(ok=False, message=str(e))
|
||||
|
||||
async def reorder(self, request: DealSummaryReorderRequest, user: User) -> DealSummaryReorderResponse:
|
||||
pass
|
||||
|
||||
# endregion
|
||||
|
||||
# region Deal services
|
||||
|
||||
Reference in New Issue
Block a user