[WIP] refactoring/location-club-statistics #71
|
@ -145,7 +145,7 @@ def chooseStatistics(request):
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def club_statistics(request, clubid):
|
def club_statistics_new(request, clubid):
|
||||||
"""Construit les statistiques d'un club, pour une saison choisie
|
"""Construit les statistiques d'un club, pour une saison choisie
|
||||||
|
|
||||||
Questions:
|
Questions:
|
||||||
|
@ -266,3 +266,150 @@ def club_statistics(request, clubid):
|
||||||
"totalHoursPaid": totalHoursPaid,
|
"totalHoursPaid": totalHoursPaid,
|
||||||
}
|
}
|
||||||
return context
|
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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue