From 00df7cbd0b31703384c0170c6c993f3975a52e57 Mon Sep 17 00:00:00 2001 From: Fred Pauchet Date: Mon, 21 Jun 2021 21:37:37 +0200 Subject: [PATCH] Create a new `ClubStatistics` class to store data This will allow to make the location/views.py file more readable --- src/location/views.py | 56 +++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/src/location/views.py b/src/location/views.py index cd92c35..b01a832 100644 --- a/src/location/views.py +++ b/src/location/views.py @@ -153,6 +153,21 @@ def chooseStatistics(request): return render(request, "club_statistics.html", context) +class GymnastStatistics(): + def __init__(self, gymnast): + self.gymnast = gymnast + self.number_of_courses_by_week = 0 + self.number_of_hours_by_week = timedelta() + self.number_of_trainings = 0 + self.number_of_attendance = 0 + self.number_of_absences = 0 + self.number_of_training_hours = 0 + self.number_of_attendance_hours = timedelta() + self.percentage_of_attendance = 0 + self.number_of_hours_of_absence = 0 + self.percentage_of_absence = 0 + + @login_required def club_statistics(request, clubid): """ @@ -172,6 +187,7 @@ def club_statistics(request, clubid): gymnastsDict = {} gymnasts = [] courseList = [] + for course in courses: nbtrainer = course.trainers.count() list_of_gymnasts = Gymnast.objects.filter(to_gym__in=course.to_subgroup.all()) @@ -215,43 +231,25 @@ def club_statistics(request, clubid): ) for gymnast in list_of_gymnasts: - # print(gymnast) - if gymnast.id not in gymnastsDict: - gymnastsDict[gymnast.id] = { - "gymnast": gymnast, - "nbcoursebyweek": 0, - "nbhourbyweek": timedelta(), - "nbtraining": 0, - "nbattendance": 0, - "nbabsence": 0, - "nbhourtraining": 0, - "nbhourattendance": timedelta(), - "percentageattendance": 0, - "nbhourabsence": 0, - "percentageabsence": 0, - } - attendanceList = Training.objects.filter(course=course, gymnast=gymnast) - nbattendance = len(attendanceList) + gymnast_stats = gymnastsDict.setdefault(gymnast.id, GymnastStatistics(gymnast)) - # print(str(gymnast) + ' : ' + str(nbattendance) + ' for ' + str(course) ) + attendance_list = Training.objects.filter(course=course, gymnast=gymnast) + number_of_attendance = attendance_list.count() - gymnastsDict[gymnast.id]["nbcoursebyweek"] += 1 - gymnastsDict[gymnast.id]["nbhourbyweek"] += nbhour # timedelta - gymnastsDict[gymnast.id]["nbtraining"] += counted - gymnastsDict[gymnast.id]["nbattendance"] += nbattendance - gymnastsDict[gymnast.id]["nbhourtraining"] += totalHourForCourse - gymnastsDict[gymnast.id]["nbhourattendance"] += ( - nbhour * nbattendance - ) # timedelta - - # print(gymnastsDict[gymnast.id]) + gymnast_stats.number_of_courses_by_week += 1 + gymnast_stats.number_of_hours_by_week += nbhour + gymnast_stats.number_of_trainings += counted + gymnast_stats.number_of_attendance += number_of_attendance + gymnast_stats.number_of_training_hours += totalHourForCourse + gymnast_stats.number_of_attendance_hours += ( + nbhour * number_of_attendance + ) # tous les cours ont été traités totalHoursByWeek = totalHoursByWeek / 3600 gymnasts = set(gymnasts) - # print(gymnasts) for gymnast in gymnasts: tmp = int(gymnastsDict[gymnast.id]["nbhourbyweek"].seconds / 3600)