Create a new `ClubStatistics` class to store data

This will allow to make the location/views.py file more readable
This commit is contained in:
Fred Pauchet 2021-06-21 21:37:37 +02:00
parent 67b2b0ccd6
commit 1a3c62d12b
1 changed files with 27 additions and 29 deletions

View File

@ -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)