diff --git a/ultron/tools/pdf_generator.py b/ultron/tools/pdf_generator.py index cfc068fcd2..234b0a5d7c 100644 --- a/ultron/tools/pdf_generator.py +++ b/ultron/tools/pdf_generator.py @@ -17,12 +17,13 @@ from reportlab.lib.units import cm from reportlab.pdfgen.canvas import Canvas from reportlab.platypus import Paragraph, Table, TableStyle from ultron.followup.models import ( - Accident, - Chrono, - HeightWeight, - MindState, Plan, - Point + Point, + Chrono, + Accident, + MindState, + HeightWeight, + LearnedSkill, ) from ultron.followup.models import LEARNING_STEP_CHOICES from ultron.objective.models import Skill @@ -190,6 +191,7 @@ class GymnastReportDocument(PDFDocument): self.add_gymnast_active_routine(gymnast) # self.add_gymnast_level_information(gymnast) self.add_gymnast_next_skills(gymnast) + self.add_gymnast_last_learned_skill(gymnast) self.add_gymnast_next_events(gymnast) self.add_gymnast_week_notes(gymnast) @@ -522,6 +524,45 @@ class GymnastReportDocument(PDFDocument): "routine defined." ) + def add_gymnast_last_learned_skill(self, gymnast): + """ Ajoute les derniers skill appris par le gymnaste + + Args: + gymnast gymnaste + + Returns: + Ne retourne rien + """ + + self.y = 17*cm + self.add_new_line( + 7*cm, + "New learned skills", + font_decoration="Bold", + ) + self.add_vspace(-3) + + # le double F ne fonctionne qu'en précisant le distinct, sinon ca dédouble les résultats. + # qui lui même ne fonctionne que sur un champ présent dans le `order_by` (que le premier champ ?) + # + learned_skills = ( + LearnedSkill.objects.filter(gymnast=gymnast.id) + .annotate(skill_notation=F("skill__notation")) + .order_by("skill_notation", "-date").distinct('skill_notation')[:5] + ) + + if learned_skills: + for learned_skill in learned_skills: + self.add_new_line( + 7*cm, learned_skill.skill.short_label + " " + str(LEARNING_STEP_CHOICES[learned_skill.learning_step][1]).lower() + " (" + learned_skill.skill.notation + "), " + learned_skill.date.strftime("%d-%m-%Y") + ) + else: + self.add_new_line( + X, + "No skill to learn this week.", + ) + + def add_gymnast_next_skills(self, gymnast): """ Ajoute les prochains skill (skill planifié) à apprendre