From 4ae138c496781b86a8896ef01bddc8e4976e72a2 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Wed, 26 Jan 2022 11:51:13 +0100 Subject: [PATCH] Ajout description bonus sur bulletin BUT json --- app/but/bulletin_but.py | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/app/but/bulletin_but.py b/app/but/bulletin_but.py index c81f36782e..5df158068c 100644 --- a/app/but/bulletin_but.py +++ b/app/but/bulletin_but.py @@ -59,9 +59,9 @@ class BulletinBUT(ResultatsSemestreBUT): "competence": None, # XXX TODO lien avec référentiel "moyenne": None, # Le bonus sport appliqué sur cette UE - "bonus": self.bonus_ues[ue.id][etud.id] + "bonus": fmt_note(self.bonus_ues[ue.id][etud.id]) if self.bonus_ues is not None and ue.id in self.bonus_ues - else 0.0, + else fmt_note(0.0), "malus": None, # XXX TODO voir ce qui est ici "capitalise": None, # "AAAA-MM-JJ" TODO "ressources": self.etud_ue_mod_results(etud, ue, self.ressources), @@ -74,6 +74,16 @@ class BulletinBUT(ResultatsSemestreBUT): "max": fmt_note(self.etud_moy_ue[ue.id].max()), "moy": fmt_note(self.etud_moy_ue[ue.id].mean()), } + else: + # ceci suppose que l'on a une seule UE bonus, + # en tous cas elles auront la même description + d["bonus_description"] = self.etud_bonus_description(etud.id) + modimpls_spo = [ + modimpl + for modimpl in self.formsemestre.modimpls_sorted + if modimpl.module.ue.type == UE_SPORT + ] + d["modules"] = self.etud_mods_results(etud, modimpls_spo) return d def etud_mods_results(self, etud, modimpls) -> dict: @@ -152,6 +162,27 @@ class BulletinBUT(ResultatsSemestreBUT): } return d + def etud_bonus_description(self, etudid): + """description du bonus affichée dans la section "UE bonus".""" + if self.bonus_ues is None or self.bonus_ues.shape[1] == 0: + return "" + import random + + bonus_vect = self.bonus_ues.loc[etudid] + [random.random() for i in range(3)] + if bonus_vect.nunique() > 1: + # détail UE par UE + details = [ + f"{fmt_note(bonus_vect[ue.id])} sur {ue.acronyme}" + for ue in self.ues + if ue.id in self.bonus_ues and bonus_vect[ue.id] > 0.0 + ] + if details: + return "Bonus de " + ", ".join(details) + else: + return "" # aucun bonus + else: + return f"Bonus de {fmt_note(bonus_vect.iloc[0])}" + def bulletin_etud(self, etud, formsemestre, force_publishing=False) -> dict: """Le bulletin de l'étudiant dans ce semestre. Si force_publishing, rempli le bulletin même si bul_hide_xml est vrai