diff --git a/app/but/bulletin_but.py b/app/but/bulletin_but.py index f9dbb8706..3c58157e0 100644 --- a/app/but/bulletin_but.py +++ b/app/but/bulletin_but.py @@ -274,6 +274,13 @@ class BulletinBUT: etat_inscription = etud.inscription_etat(formsemestre.id) nb_inscrits = self.res.get_inscriptions_counts()[scu.INSCRIT] published = (not formsemestre.bul_hide_xml) or force_publishing + if formsemestre.formation.referentiel_competence is None: + etud_ues_ids = { + ue.id for ue in res.ues if res.modimpls_in_ue(ue.id, etud.id) + } + else: + etud_ues_ids = res.etud_ues_ids(etud.id) + d = { "version": "0", "type": "BUT", @@ -365,10 +372,7 @@ class BulletinBUT: ) for ue in res.ues # si l'UE comporte des modules auxquels on est inscrit: - if ( - (ue.type == UE_SPORT) - or self.res.modimpls_in_ue(ue.id, etud.id) - ) + if ((ue.type == UE_SPORT) or ue.id in etud_ues_ids) }, "semestre": semestre_infos, }, diff --git a/app/comp/res_but.py b/app/comp/res_but.py index d86d10e79..330f01918 100644 --- a/app/comp/res_but.py +++ b/app/comp/res_but.py @@ -6,6 +6,7 @@ """Résultats semestres BUT """ +from collections.abc import Generator import time import numpy as np import pandas as pd @@ -216,9 +217,13 @@ class ResultatsSemestreBUT(NotesTableCompat): ] return ues_inscr_parcours_df - def etud_ues(self, etudid: int) -> list[int]: + def etud_ues_ids(self, etudid: int) -> list[int]: """Liste des id d'UE auxquelles l'étudiant est inscrit (sans bonus). (surchargée en BUT pour prendre en compte les parcours) """ s = self.ues_inscr_parcours_df.loc[etudid] return s.index[s.notna()] + + def etud_ues(self, etudid: int) -> Generator[UniteEns]: + """Liste des UE auxquelles l'étudiant est inscrit (sans bonus).""" + return (UniteEns.query.get(ue_id) for ue_id in self.etud_ues_ids(etudid)) diff --git a/app/comp/res_common.py b/app/comp/res_common.py index 3c9eb810f..56a10d3f4 100644 --- a/app/comp/res_common.py +++ b/app/comp/res_common.py @@ -112,7 +112,7 @@ class ResultatsSemestre(ResultatsCache): "dict { etudid : indice dans les inscrits }" return {e.id: idx for idx, e in enumerate(self.etuds)} - def etud_ues(self, etudid: int) -> list[int]: + def etud_ues_ids(self, etudid: int) -> list[int]: """Liste des UE auxquelles l'etudiant est inscrit, sans bonus (surchargée en BUT pour prendre en compte les parcours) """ @@ -630,7 +630,7 @@ class ResultatsSemestre(ResultatsCache): f"_{col_id}_target_attrs" ] = f""" title="{modimpl.module.titre} ({nom_resp})" """ modimpl_ids.add(modimpl.id) - nb_ues_etud_parcours = len(self.etud_ues(etudid)) + nb_ues_etud_parcours = len(self.etud_ues_ids(etudid)) ue_valid_txt = ( ue_valid_txt_html ) = f"{nb_ues_validables}/{nb_ues_etud_parcours}" diff --git a/app/templates/pn/form_modules_ue_coefs.html b/app/templates/pn/form_modules_ue_coefs.html index f022eccd3..75ed3de6e 100644 --- a/app/templates/pn/form_modules_ue_coefs.html +++ b/app/templates/pn/form_modules_ue_coefs.html @@ -2,10 +2,12 @@

{% if not read_only %}Édition des c{% else %}C{%endif%}oefficients des modules vers les UEs

{% if not read_only %} - Double-cliquer pour changer une valeur. +

Double-cliquer pour changer une valeur. Les valeurs sont automatiquement enregistrées au fur et à mesure. +

{% endif %} - +

Chaque ligne représente une ressource ou SAÉ, et chaque colonne une Unité d'Enseignement (UE). +

Semestre: