This commit is contained in:
2024-03-19 09:01:46 +03:00
parent aafa1050a7
commit 6ba041a839
23 changed files with 369 additions and 39 deletions

View File

@@ -2,6 +2,7 @@ import datetime
from typing import Type, Union
from sqlalchemy import select
from sqlalchemy.orm import joinedload, selectinload
from models import User, Deal
from models.deal import *
@@ -16,7 +17,9 @@ 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 change_status(self, deal: Deal, status: DealStatus, user: User,
async def change_status(self, deal: Deal,
status: DealStatus,
user: User,
deadline: datetime.datetime = None) -> DealStatusHistory:
deadline = deadline
status_change = DealStatusHistory(
@@ -75,3 +78,24 @@ class DealService(BaseService):
await self.change_status(deal, DealStatus(request.new_status), user)
await self.session.commit()
return DealChangeStatusResponse(ok=True)
async def get_summary(self) -> DealSummaryResponse:
deals_query = await self.session.scalars(select(Deal)
.options(selectinload(Deal.status_history),
joinedload(Deal.client))
.where(Deal.is_deleted == False,
Deal.is_completed == False))
summaries = []
for deal in deals_query.all():
deal: Deal
last_status: DealStatusHistory = max(deal.status_history, key=lambda status: status.changed_at)
summaries.append(
DealSummary(
id=deal.id,
client_name=deal.client.name,
name=deal.name,
changed_at=last_status.changed_at,
status=last_status.to_status
)
)
return DealSummaryResponse(summaries=summaries)