From 939c2ccf360cf7d9b8a55a45388cb969840c2d36 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sun, 4 Sep 2022 11:20:25 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20UE=20capitalis=C3=A9es=20au=20bulletin?= =?UTF-8?q?=20BUT=20json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/but/bulletin_but.py | 34 ++++++++++++++++++++++++++++++++++ app/comp/jury.py | 5 +++-- app/comp/res_but.py | 1 - sco_version.py | 2 +- 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/app/but/bulletin_but.py b/app/but/bulletin_but.py index 472bb632..b5cf3be8 100644 --- a/app/but/bulletin_but.py +++ b/app/but/bulletin_but.py @@ -19,6 +19,7 @@ from app.models.ues import UniteEns from app.scodoc import sco_bulletins, sco_utils as scu from app.scodoc import sco_bulletins_json from app.scodoc import sco_bulletins_pdf +from app.scodoc import sco_codes_parcours from app.scodoc import sco_groups from app.scodoc import sco_preferences from app.scodoc.sco_codes_parcours import UE_SPORT, DEF @@ -137,6 +138,37 @@ class BulletinBUT: d["modules"] = self.etud_mods_results(etud, modimpls_spo) return d + def etud_ues_capitalisees(self, etud: Identite) -> dict: + """dict avec les UE capitalisees. la clé est l'acronyme d'UE, qui ne + peut donc être capitalisée qu'une seule fois (on prend la meilleure)""" + if not etud.id in self.res.validations.ue_capitalisees: + return {} # aucune capitalisation + d = {} + for _, ue_capitalisee in self.res.validations.ue_capitalisees.loc[ + etud.id + ].iterrows(): + if sco_codes_parcours.code_ue_validant(ue_capitalisee.code): + ue = UniteEns.query.get(ue_capitalisee.ue_id) # XXX cacher ? + # déjà capitalisé ? montre la meilleure + if (ue.acronyme in d) and ( + (ue_capitalisee.moy_ue or 0.0) < (d[ue.acronyme]["moyenne"] or 0.0) + ): + continue # skip this duplicate UE + + d[ue.acronyme] = { + "id": ue.id, + "ue_code": ue_capitalisee.ue_code, + "titre": ue.titre, + "numero": ue.numero, + "type": ue.type, + "color": ue.color, + "moyenne": ue_capitalisee.moy_ue, + "is_external": ue_capitalisee.is_external, + "date_capitalisation": ue_capitalisee.event_date, + "formsemestre_id": ue_capitalisee.formsemestre_id, + } + return d + def etud_mods_results(self, etud, modimpls, version="long") -> dict: """dict synthèse résultats des modules indiqués, avec évaluations de chacun (sauf si version == "short") @@ -377,9 +409,11 @@ class BulletinBUT: # si l'UE comporte des modules auxquels on est inscrit: if ((ue.type == UE_SPORT) or ue.id in etud_ues_ids) }, + "ues_capitalisees": self.etud_ues_capitalisees(etud), "semestre": semestre_infos, }, ) + else: semestre_infos.update( { diff --git a/app/comp/jury.py b/app/comp/jury.py index 4869d130..f7174d42 100644 --- a/app/comp/jury.py +++ b/app/comp/jury.py @@ -39,8 +39,9 @@ class ValidationsSemestre(ResultatsCache): formsemestre_id : origine de l'UE capitalisée is_external : vrai si validation effectuée dans un semestre extérieur ue_id : dans le semestre origine (pas toujours de la même formation) - ue_code : code de l'UE, moy_ue : note enregistrée, - event_date : date de la validation (jury).""" + ue_code : code de l'UE + moy_ue : note enregistrée + event_date : date de la validation (jury)""" if not self.load_cached(): self.compute() diff --git a/app/comp/res_but.py b/app/comp/res_but.py index f1292df5..4115f9af 100644 --- a/app/comp/res_but.py +++ b/app/comp/res_but.py @@ -6,7 +6,6 @@ """Résultats semestres BUT """ -from re import U import time import numpy as np import pandas as pd diff --git a/sco_version.py b/sco_version.py index e793d4d3..6b2ac7e0 100644 --- a/sco_version.py +++ b/sco_version.py @@ -1,7 +1,7 @@ # -*- mode: python -*- # -*- coding: utf-8 -*- -SCOVERSION = "9.3.31" +SCOVERSION = "9.3.32" SCONAME = "ScoDoc"