From 50066e9399b9b18bf092d172de75ac027417b943 Mon Sep 17 00:00:00 2001 From: shahzeydyfah Date: Thu, 23 Jan 2025 15:29:26 +0330 Subject: [PATCH] feat(report):add progress_phisical and progress_phisica/avg --- app/repositories/report.py | 72 +++++++++++++++++++++++++++++++++++++- app/urls/report.py | 11 ++++++ 2 files changed, 82 insertions(+), 1 deletion(-) diff --git a/app/repositories/report.py b/app/repositories/report.py index 4a11dc1..7bd8d2b 100644 --- a/app/repositories/report.py +++ b/app/repositories/report.py @@ -323,4 +323,74 @@ class ReportRepository(): result['bet_100_200'].append(_model.project_id) else: result['upper_than_200'].append(_model.project_id) - return result \ No newline at end of file + return result + + async def progress_report(self): + result = await use_collection(TaskEnv.CLN_MONITOR_PYSICAL).aggregate([ + { + "$sort": {'date_at': -1} + }, + { + '$group': + { + '_id': "$project_id", + 'records': {"$push": "$$ROOT"}, + } + }, + { + "$project": { + "_id": 1, + "records": {"$slice": ["$records", 1]}, + + } + }, + ]).to_list(None) + result_report = { + 'less_than_1':[], + 'bet_1_2':[], + 'bet_2_5':[], + 'upper_than_5':[], + } + + for i in result: + print(i['records']) + if ('records' in i) and (len(i['records'])>0) and 'last_month' in i['records'][0]: + cal = i['records'][0]['last_month'] + if cal < 1: + result_report['less_than_1'].append(i["_id"]) + elif cal <= 2: + result_report['bet_1_2'].append(i["_id"]) + elif cal <= 5: + result_report['bet_2_5'].append(i["_id"]) + else: + result_report['upper_than_5'].append(i["_id"]) + return result_report + + async def progress_avg_report(self): + result = await use_collection(TaskEnv.CLN_MONITOR_PYSICAL).aggregate([ + { + '$group': + { + '_id': "$project_id", + 'avg':{'$avg': "$real"}, + } + }, + + ]).to_list(None) + result_report = { + 'less_than_1':[], + 'bet_1_2':[], + 'bet_2_5':[], + 'upper_than_5':[], + } + + for i in result: + if i['avg'] < 1: + result_report['less_than_1'].append(i["_id"]) + elif i['avg'] <= 2: + result_report['bet_1_2'].append(i["_id"]) + elif i['avg'] <= 5: + result_report['bet_2_5'].append(i["_id"]) + else: + result_report['upper_than_5'].append(i["_id"]) + return result_report diff --git a/app/urls/report.py b/app/urls/report.py index 135ee60..d872931 100644 --- a/app/urls/report.py +++ b/app/urls/report.py @@ -89,6 +89,17 @@ def delay_donut(project_id:uuid.UUID): @shrink(repo.add_cost) def add_cost(): pass +# تفکیک درصد پیشرفت ماهیانه پروژه ها +@router.get('/progress_phisical', tags=_tag_base) +@shrink(repo.progress_report) +def progress_report(): + pass + +# تفکیک درصد پیشرفت میانگین ماهیانه پروژه ها +@router.get('/progress_phisica/avg', tags=_tag_base) +@shrink(repo.progress_avg_report) +def progress_avg_report(): + pass