diff --git a/app/config/__init__.py b/app/config/__init__.py index b08f3fc..1a78d41 100644 --- a/app/config/__init__.py +++ b/app/config/__init__.py @@ -19,5 +19,6 @@ class TaskEnv: CLN_PROJECT_STS = 'project_sts' CLN_PROJECT = 'project' CLN_PROJECT_PRICE_REPORT = 'price_report' + CLN_PROJECT_AGREEMENT = 'project_agreement' diff --git a/app/models/project.py b/app/models/project.py index 8d9dcfd..c0e0c14 100644 --- a/app/models/project.py +++ b/app/models/project.py @@ -141,5 +141,10 @@ class ProjectPriceReport(BaseModel): amount_adjust: Optional[int] = Field(description='مبلغ تعدیل') first_amount: Optional[int] = Field(description=' مبلغ اولیه پیمان') +class ProjectStatusAgreement(BaseModel): + id: Optional[uuid.UUID] = Field(alias='_id') + project_id: Optional[uuid.UUID] = Field(description="کد شناسایی پروژه در این فیلد قرار می گیرد") + status:str + diff --git a/app/repositories/project.py b/app/repositories/project.py index a181807..8bab95d 100644 --- a/app/repositories/project.py +++ b/app/repositories/project.py @@ -6,7 +6,7 @@ import requests from fastapi import HTTPException from app.config import TaskEnv -from app.models.project import ProjectModel, UpdateSts, ProjectSts, Design +from app.models.project import ProjectModel, UpdateSts, ProjectSts, Design, ProjectStatusAgreement from core.repositories.base import BaseRepository from core.service.mongo_db import use_collection from core.utils.table_engine import TableEngineRequestType, TableEngineExport @@ -66,6 +66,13 @@ class ProjectRepository(BaseRepository[ProjectModel]): coding.has_monitor = False await use_collection(COLLECTION).insert_one(coding.mongo_dict()) + if coding.design.status_agreement: + _model=ProjectStatusAgreement( + project_id= coding.id, + status= coding.design.status_agreement + ).init_id().cu_at() + await use_collection(TaskEnv.CLN_PROJECT_AGREEMENT).insert_one(_model.mongo_dict()) + return await self.get(coding.id) @@ -83,9 +90,14 @@ class ProjectRepository(BaseRepository[ProjectModel]): if update.monitor: update.has_monitor = True await self.update_report_price(update) - update.u_at() await use_collection(COLLECTION).update_one({"_id":_id},{"$set":update.mongo_dict()}) + if old_project.design.status_agreement != update.design.status_agreement: + _model = ProjectStatusAgreement( + project_id=_id, + status=update.design.status_agreement + ).init_id().cu_at() + await use_collection(TaskEnv.CLN_PROJECT_AGREEMENT).insert_one(_model.mongo_dict()) return await self.get(_id) async def update_design_sts(self, _id: UUID, update: UpdateSts): diff --git a/app/repositories/report.py b/app/repositories/report.py index 585671b..752bcff 100644 --- a/app/repositories/report.py +++ b/app/repositories/report.py @@ -433,4 +433,18 @@ class ReportRepository(): ]).to_list(None) return result + async def design_sts(self): + result = await use_collection(TaskEnv.CLN_PROJECT).aggregate([ + {"$group":{"_id":'$design.sts','count':{'$sum':1},"projectIds": {"$addToSet": "$_id"}}} + ]) + return result + + async def status_agreement(self): + result = await use_collection(TaskEnv.CLN_PROJECT).aggregate([ + {"$group":{"_id":'$design.status_agreement','count':{'$sum':1},"projectIds": {"$addToSet": "$_id"}}} + ]) + return result + + + diff --git a/app/urls/report.py b/app/urls/report.py index e3de63c..e93b4c9 100644 --- a/app/urls/report.py +++ b/app/urls/report.py @@ -117,4 +117,9 @@ def design_progress_status(): def design_progress_status_state(): pass +@router.get('/status_agreement/donut', tags=_tag_base) +@shrink(repo.status_agreement) +def status_agreement(): + pass + app.include_router(router) \ No newline at end of file