Retrieve original version of club_statistics view

This commit is contained in:
Fred 2021-06-23 19:06:51 +02:00
parent 0a515fdf3a
commit 107b364028
1 changed files with 148 additions and 1 deletions

View File

@ -145,7 +145,7 @@ def chooseStatistics(request):
@login_required
def club_statistics(request, clubid):
def club_statistics_new(request, clubid):
"""Construit les statistiques d'un club, pour une saison choisie
Questions:
@ -266,3 +266,150 @@ def club_statistics(request, clubid):
"totalHoursPaid": totalHoursPaid,
}
return context
@login_required
def club_statistics(request, clubid):
"""
Renvoie les statistiques d'un club pour une saison choisie.
.. todo:: tenir compte de la saison.
"""
courses = Course.objects.filter(club__in=clubid).order_by(
"iso_day_number", "hour_begin"
)
totalHours = 0
totalCourses = 0
totalHoursByWeek = 0
totalHoursPaid = 0
gymnastsDict = {}
gymnasts = []
courseList = []
for course in courses:
nbtrainer = course.trainers.count()
list_of_gymnasts = Gymnast.objects.filter(to_gym__in=course.to_subgroup.all())
gymnasts.extend(list_of_gymnasts)
nbgymnast = len(list_of_gymnasts)
# gymnasts = set(gymnasts.extend(Gymnast.objects.filter(to_gym__in=course.to_subgroup.all())))
nbhour = __diffTime(course.hour_end, course.hour_begin) # timedelta
totalHoursByWeek += nbhour.seconds
counted = course.get_total_occurence()
# select tous les unavailables liés au cours
unavailabilities = Unavailability.objects.filter(course=course)
for unavailable in unavailabilities:
counted -= unavailable.get_total_occurence()
totalCourses += counted
totalTimeForCourse = nbhour * counted # timedelta
totalHourForCourse = (totalTimeForCourse.days * 24) + (
totalTimeForCourse.seconds / 3600
)
totalHours += totalHourForCourse
totalHoursPaidForCourse = totalHourForCourse * nbtrainer
totalHoursPaid += totalHoursPaidForCourse
# tmp = int(nbhour.seconds/3600)
# hour = "%d:%02d" % (tmp, (nbhour.seconds - (tmp * 3600)) / 60)
hour = nbhour.seconds / 3600
courseList.append(
(
course,
nbtrainer,
nbgymnast,
hour,
counted,
totalHourForCourse,
totalHoursPaidForCourse,
)
)
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)
# print(str(gymnast) + ' : ' + str(nbattendance) + ' for ' + str(course) )
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])
# 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)
gymnastsDict[gymnast.id]["nbhourbyweek"] = "%d:%02d" % (
tmp,
(gymnastsDict[gymnast.id]["nbhourbyweek"].seconds - (tmp * 3600)) / 60,
)
gymnastsDict[gymnast.id]["nbabsence"] = (
gymnastsDict[gymnast.id]["nbtraining"]
- gymnastsDict[gymnast.id]["nbattendance"]
)
# tmp = (gymnastsDict[gymnast.id]['nbhourattendance'].days * 24) + (gymnastsDict[gymnast.id]['nbhourattendance'].seconds/3600)
gymnastsDict[gymnast.id]["nbhourattendance"] = (
gymnastsDict[gymnast.id]["nbhourattendance"].days * 24
) + (gymnastsDict[gymnast.id]["nbhourattendance"].seconds / 3600)
gymnastsDict[gymnast.id]["nbhourabsence"] = (
gymnastsDict[gymnast.id]["nbhourtraining"]
- gymnastsDict[gymnast.id]["nbhourattendance"]
)
gymnastsDict[gymnast.id]["percentageattendance"] = int(
(
gymnastsDict[gymnast.id]["nbhourattendance"]
/ gymnastsDict[gymnast.id]["nbhourtraining"]
)
* 100
)
gymnastsDict[gymnast.id]["percentageabsence"] = int(
(
gymnastsDict[gymnast.id]["nbhourabsence"]
/ gymnastsDict[gymnast.id]["nbhourtraining"]
)
* 100
)
context = {
"courses": courseList,
"gymnasts": gymnastsDict,
"totalHoursByWeek": totalHoursByWeek,
"totalCourses": totalCourses,
"totalHours": totalHours,
"totalHoursPaid": totalHoursPaid,
}
return context