This commit is contained in:
Gregory Trullemans 2022-12-03 20:06:47 +01:00
parent 44b00d94cf
commit b90ea23e2d
1 changed files with 128 additions and 21 deletions

View File

@ -696,11 +696,15 @@ def report_choice(request, gymnast_id):
@login_required
@require_http_methods(["GET"])
def generate_report(request, gymnast_id):
def generate_report(request, gymnast_id, season=None, week_number=None):
gymnast = get_object_or_404(Gymnast, pk=gymnast_id)
today = pendulum.now().date()
season, week_number = from_date_to_week_number(today)
# season = Season()
if season is None:
date_begin = pendulum.now().date()
season, week_number = from_date_to_week_number(date_begin)
else:
date_begin, _ = from_week_number_to_date(season, week_number)
date_begin = date_begin.date()
#
# PHYSIOLOGICAL INFORMATIONS
@ -769,33 +773,117 @@ def generate_report(request, gymnast_id):
.order_by("-total")
.first()
)
best_point_routine_3 = (
Point.objects.filter(gymnast=gymnast)
.filter(routine_type=3)
.order_by("-total")
.first()
)
best_point_routine_4 = (
Point.objects.filter(gymnast=gymnast)
.filter(routine_type=4)
.order_by("-total")
.first()
)
best_point_routine_5 = (
Point.objects.filter(gymnast=gymnast)
.filter(routine_type=5)
.order_by("-total")
.first()
)
#
# ROUTINES
#
routine_1 = (
gymnast.has_routine.filter(routine_type=1)
.filter(date_begin__lte=today)
.filter(Q(date_end__gte=today) | Q(date_end__isnull=True))
.filter(date_begin__lte=date_begin)
.filter(Q(date_end__gte=date_begin) | Q(date_end__isnull=True))
.first()
)
routine_1_done_stat = (
gymnast.number_of_routine_done.filter(routine_type=1)
.filter(season=season)
.filter(week_number=week_number)
.aggregate(
total_try=Sum("number_of_try"), total_succeeded=Sum("number_of_successes")
)
)
routine_2 = (
gymnast.has_routine.filter(routine_type=2)
.filter(date_begin__lte=today)
.filter(Q(date_end__gte=today) | Q(date_end__isnull=True))
.filter(date_begin__lte=date_begin)
.filter(Q(date_end__gte=date_begin) | Q(date_end__isnull=True))
.first()
)
# print(routine_2)
routine_2_done_stat = (
gymnast.number_of_routine_done.filter(routine_type=2)
.filter(season=season)
.filter(week_number=week_number)
.aggregate(
total_try=Sum("number_of_try"), total_succeeded=Sum("number_of_successes")
)
)
routine_3 = (
gymnast.has_routine.filter(routine_type=3)
.filter(date_begin__lte=date_begin)
.filter(Q(date_end__gte=date_begin) | Q(date_end__isnull=True))
.first()
)
routine_3_done_stat = (
gymnast.number_of_routine_done.filter(routine_type=3)
.filter(season=season)
.filter(week_number=week_number)
.aggregate(
total_try=Sum("number_of_try"), total_succeeded=Sum("number_of_successes")
)
)
routine_4 = (
gymnast.has_routine.filter(routine_type=4)
.filter(date_begin__lte=date_begin)
.filter(Q(date_end__gte=date_begin) | Q(date_end__isnull=True))
.first()
)
routine_4_done_stat = (
gymnast.number_of_routine_done.filter(routine_type=4)
.filter(season=season)
.filter(week_number=week_number)
.aggregate(
total_try=Sum("number_of_try"), total_succeeded=Sum("number_of_successes")
)
)
routine_5 = (
gymnast.has_routine.filter(routine_type=5)
.filter(date_begin__lte=date_begin)
.filter(Q(date_end__gte=date_begin) | Q(date_end__isnull=True))
.first()
)
routine_5_done_stat = (
gymnast.number_of_routine_done.filter(routine_type=5)
.filter(season=season)
.filter(week_number=week_number)
.aggregate(
total_try=Sum("number_of_try"), total_succeeded=Sum("number_of_successes")
)
)
#
# LAST LEARNED SKILLS
#
learned_skills = (
LearnedSkill.objects.filter(gymnast=gymnast.id)
.annotate(skill_notation=F("skill__notation"))
.order_by("skill_notation", "-date")
.distinct("skill_notation")[:6]
)
# TODO: il faudrait que ce soit classer d'abord par DATE et pas par skill.
#
# learned_skills = (
# LearnedSkill.objects.filter(gymnast=gymnast.id)
# .annotate(skill_notation=F("skill__notation"))
# .order_by("skill_notation", "-date")
# .distinct("skill_notation")[:6]
# )
learned_skills = LearnedSkill.objects.filter(gymnast=gymnast.id).order_by("-date")[
:6
]
#
# PLANNED SKILLS
@ -811,15 +899,15 @@ def generate_report(request, gymnast_id):
# NEXT EVENTS
#
next_event_list = Event.objects.filter(
gymnasts=gymnast.id, date_begin__gte=today
gymnasts=gymnast.id, date_begin__gte=date_begin
).order_by("date_begin")[:5]
#
# NOTES
#
begin_of_the_week = today
if today.weekday() != 0:
begin_of_the_week -= timedelta(today.weekday())
begin_of_the_week = date_begin
if date_begin.weekday() != 0:
begin_of_the_week -= timedelta(date_begin.weekday())
notes = (
gymnast.remarks.filter(date__gte=begin_of_the_week)
@ -838,7 +926,7 @@ def generate_report(request, gymnast_id):
"HEAD_COACH_EMAIL": settings.HEAD_COACH_EMAIL,
"week_number": week_number,
"gymnast": gymnast,
"today": today,
"today": date_begin,
"season": season,
"last_mindstate": last_mindstate,
"mindstate_analyse": mindstate_analyse,
@ -850,8 +938,19 @@ def generate_report(request, gymnast_id):
"best_tof_routine_2": best_tof_routine_2,
"best_point_routine_1": best_point_routine_1,
"best_point_routine_2": best_point_routine_2,
"best_point_routine_3": best_point_routine_3,
"best_point_routine_4": best_point_routine_4,
"best_point_routine_5": best_point_routine_5,
"routine_1": routine_1,
"routine_2": routine_2,
"routine_3": routine_3,
"routine_4": routine_4,
"routine_5": routine_5,
"routine_1_done_stat": routine_1_done_stat,
"routine_2_done_stat": routine_2_done_stat,
"routine_3_done_stat": routine_3_done_stat,
"routine_4_done_stat": routine_4_done_stat,
"routine_5_done_stat": routine_5_done_stat,
"LEARNING_STEP_CHOICES": LEARNING_STEP_CHOICES,
"learned_skills": learned_skills,
"plan_list": plan_list,
@ -864,10 +963,18 @@ def generate_report(request, gymnast_id):
response = HttpResponse(content_type="application/pdf")
response[
"Content-Disposition"
] = "inline; filename={lastname}-{firstname}-report.pdf".format(
] = "attachment; filename={lastname}-{firstname}-report.pdf".format(
lastname=gymnast.last_name,
firstname=gymnast.first_name,
)
# response["Content-Disposition"] = (
# # inline;
# 'attachment; filename="report_'
# + gymnast.first_name
# + "_"
# + gymnast.last_name
# + '.pdf"'
# )
html = render_to_string("people/gymnasts/report.html", context)