From b5e93ab4e8a50423c974c281a3a814b785fc3724 Mon Sep 17 00:00:00 2001 From: shahzeydyfah Date: Thu, 16 Jan 2025 21:50:07 +0330 Subject: [PATCH] feat(report):add /donut/add/time --- app/repositories/report.py | 43 +++++++++++++++++++++++++++++++------- app/urls/report.py | 29 +++++++++++++++++-------- 2 files changed, 56 insertions(+), 16 deletions(-) diff --git a/app/repositories/report.py b/app/repositories/report.py index 04b4872..f8626e4 100644 --- a/app/repositories/report.py +++ b/app/repositories/report.py @@ -215,6 +215,35 @@ class ReportRepository(): i["title"] = _obj[str(i["_id"])] return report + async def categorize_deviation(self): + report = await use_collection(TaskEnv.CLN_MONITOR_PYSICAL).aggregate( + [{"$match": {"deviation": {"$exists": True, "$ne": None}}}, + {"$group": { + "_id": { + "$cond": [ + {"$lt": ["$deviation", 10]}, + "less_than_10", + { + "$cond": [ + {"$and": [{"$gte": ["$deviation", 10]}, {"$lt": ["$deviation", 25]}]}, + "between_10_and_25", + { + "$cond": [ + {"$and": [{"$gte": ["$deviation", 25]}, + {"$lt": ["$deviation", 40]}]}, + "between_25_and_40", + "greater_than_40" + ] + } + ] + } + ] + }, + "count": {"$sum": 1}, + "projectIds": { "$addToSet": "$project_id" }, + "totalDeviation": {"$sum": "$deviation"}, }}]).to_list(None) + return report + async def list_delay_donut(self, _select: str): get_list = [] _map = {'1': 'financial.total', '2': 'force_major.total', '3': 'technical.total', '4': 'extra_new_work', @@ -229,7 +258,7 @@ class ReportRepository(): # projects = await use_collection(TaskEnv.CLN_PROJECT).find({"_id":{"$in":get_list}}).to_list(None) return get_list - async def sum_delay_percent(self): + async def sum_add_time_end_project(self): result = {} result['less_than_20'] = [] result['bet_20_50']= [] @@ -245,16 +274,16 @@ class ReportRepository(): list_project = await use_collection(TaskEnv.CLN_PROJECT).find({"_id":{"$in":get_list_project_id}}).to_list(None) if list_project: for i in list_project: - if i['monitor']['detail']['first_time']: + if i['monitor']['detail']['first_time'] and i['monitor']['sts'] == 5: cal = (get_dict_project_id[str(i["_id"])]['sum']/i['monitor']['detail']['first_time'])*100 if cal < 20 : - result['less_than_20'].append(i) + result['less_than_20'].append(i["_id"]) elif cal < 50: - result['bet_20_50'].append(i) + result['bet_20_50'].append(i["_id"]) elif cal < 100: - result['bet_50_100'].append(i) + result['bet_50_100'].append(i["_id"]) elif cal < 200: - result['bet_100_200'].append(i) + result['bet_100_200'].append(i["_id"]) else: - result['upper_than_200'].append(i) + result['upper_than_200'].append(i["_id"]) return result diff --git a/app/urls/report.py b/app/urls/report.py index 5ac870e..1f329a4 100644 --- a/app/urls/report.py +++ b/app/urls/report.py @@ -34,11 +34,7 @@ def report_country(_inp: ReportCountry = Body(...)): @shrink(repo.exist_project_state) def exist_project_state(_inp: StatusReport = Body(...)): pass -#نمودار تاخیرات بر اساس پروژه انتخاب شده -@router.get('/donut/delay/{project_id}', tags=_tag_base) -@shrink(repo.delay_donut) -def delay_donut(project_id:uuid.UUID): - pass + #وقتی روی نمودار تاخیرات کلیک کرد جزئیات را بهش نمایش بده @router.post('/donut/delay/detail', tags=_tag_base) @shrink(repo.delay_donut_detail) @@ -50,15 +46,24 @@ def delay_donut_detail(_inp: DelayDonutDetail = Body(...)): def progress_activity(project_id:uuid.UUID): pass -@router.get('/donut/delay/percent', tags=_tag_base) -@shrink(repo.sum_delay_percent) -def sum_delay_percent(): +# درصد انحراف و برنامه زمان بندی +@router.get('/deviation', tags=_tag_base) +@shrink(repo.categorize_deviation) +def categorize_deviation(): pass +# درصد افزایش زمان پروژه های خاتمه یافته +@router.get('/donut/add/time', tags=_tag_base) +@shrink(repo.sum_add_time_end_project) +def sum_add_time_end_project(): + pass + +#لیست پروژه ها را نمایش میده @router.get('/donut/delay/{_select}', tags=_tag_base) @shrink(repo.list_delay_donut) def list_delay_donut(_select): pass +#تفکیک پروژه ها بر حسب زیربنا و تفکیک ماهیت پروژه و تفکیک بر حسب نوع پروژه @router.get('/donut/{_select}', tags=_tag_base) @shrink(repo.donut) def donut(_select:int): @@ -66,7 +71,13 @@ def donut(_select:int): @router.post('/list-donut', tags=_tag_base) @shrink(repo.list_donut) -def list_donut(_inp: DonutList): +def list_donut(_inp: DonutList = Body(...)): + pass + +#نمودار تاخیرات بر اساس پروژه انتخاب شده +@router.get('/donut/delay/project/{project_id}', tags=_tag_base) +@shrink(repo.delay_donut) +def delay_donut(project_id:uuid.UUID): pass