diff --git a/src/location/views.py b/src/location/views.py index 0859b4e..61bf99d 100644 --- a/src/location/views.py +++ b/src/location/views.py @@ -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 +