diff --git a/app/scodoc/sco_recapcomplet.py b/app/scodoc/sco_recapcomplet.py index 1c9bbeef..a9a10919 100644 --- a/app/scodoc/sco_recapcomplet.py +++ b/app/scodoc/sco_recapcomplet.py @@ -260,6 +260,7 @@ def formsemestre_recapcomplet(
=
UE dispensée
nan
valeur non disponible
đź“Ť
code jury non enregistré
+
12.34
UE hors parcours
""" diff --git a/app/static/css/scodoc.css b/app/static/css/scodoc.css index 2bd994ec..d27fa8a9 100644 --- a/app/static/css/scodoc.css +++ b/app/static/css/scodoc.css @@ -4636,6 +4636,14 @@ table.table_recap tr.selected td.moy_ue_warning { color: rgb(255, 0, 0); } +table.table_recap td.ue_hors_parcours a, +table.table_recap tr.selected td.ue_hors_parcours a, +span.ue_hors_parcours { + color: purple; + font-style: italic; + font-weight: bold; +} + table.table_recap td.cap table.table_recap td.col_ues_validables { white-space: nowrap; font-style: normal !important; diff --git a/app/tables/recap.py b/app/tables/recap.py index f66ddddf..6265e0d8 100644 --- a/app/tables/recap.py +++ b/app/tables/recap.py @@ -666,11 +666,21 @@ class RowRecap(tb.Row): if res.is_apc else "Moyenne générale du semestre" ) + self.add_ues_cols(ues_sans_bonus) - # --- Moyenne d'UE + def add_ues_cols(self, ues_sans_bonus: list[UniteEns]): + """Ajout des colonnes concernant les UEs + - pour chaque UE : + - sa moyenne (et son code en mode jury) + - les moyennes de modules dans l'UE + - la colonne UEs avec le nombre d'UEs validables + """ + etudid = self.etud.id + table: TableRecap = self.table + res = table.res self.nb_ues_validables, self.nb_ues_warning = 0, 0 for ue in ues_sans_bonus: - ue_status = res.get_etud_ue_status(etud.id, ue.id) + ue_status = res.get_etud_ue_status(etudid, ue.id) if ue_status is not None: self.add_ue_cols(ue, ue_status) if table.mode_jury: @@ -679,7 +689,7 @@ class RowRecap(tb.Row): # Bonus (sport) dans cette UE ? # Le bonus sport appliqué sur cette UE if (res.bonus_ues is not None) and (ue.id in res.bonus_ues): - val = res.bonus_ues[ue.id][etud.id] or "" + val = res.bonus_ues[ue.id][etudid] or "" val_fmt = val_fmt_html = table.fmt_note(val) if val: val_fmt_html = f"""{ @@ -696,7 +706,7 @@ class RowRecap(tb.Row): # Les moyennes des modules (ou ressources et SAÉs) dans cette UE self.add_ue_modimpls_cols(ue, ue_status["is_capitalized"]) - self.nb_ues_etud_parcours = len(res.etud_parcours_ues_ids(etud.id)) + self.nb_ues_etud_parcours = len(res.etud_parcours_ues_ids(etudid)) ue_valid_txt = ue_valid_txt_html = ( f"{self.nb_ues_validables}/{self.nb_ues_etud_parcours}" ) @@ -705,7 +715,7 @@ class RowRecap(tb.Row): cell_class = "" if self.nb_ues_warning: cell_class = "moy_ue_warning" - elif self.nb_ues_validables < len(ues_sans_bonus): + elif self.nb_ues_validables < self.nb_ues_etud_parcours: # len(ues_sans_bonus): cell_class = "moy_inf" self.add_cell( "ues_validables", @@ -719,7 +729,7 @@ class RowRecap(tb.Row): ) def add_ue_cols(self, ue: UniteEns, ue_status: dict, col_group: str = None): - "Ajoute résultat UE au row (colonne col_ue)" + "Ajoute résultat d'une UE au row (colonne col_ue)" # sous-classé par JuryRow pour ajouter les codes table: TableRecap = self.table formsemestre: FormSemestre = table.res.formsemestre @@ -732,26 +742,36 @@ class RowRecap(tb.Row): if (self.etud.id, ue.id) not in table.res.dispense_ues else "=" ) - note_classes = [] + cell_classes = [] + # Cette UE est-elle dans le parcours de l'étudiant (dans ce semestre) ? + ue_hors_parcours = ue.id not in self.table.res.etud_parcours_ues_ids( + self.etud.id + ) + + target_attrs = {} # pour décorer la cellule (bulle) if isinstance(val, float): if val < table.barre_moy: - note_classes = ["moy_inf"] + cell_classes = ["moy_inf"] elif val >= table.barre_valid_ue: - note_classes = ["moy_ue_valid"] - self.nb_ues_validables += 1 + cell_classes = ["moy_ue_valid"] + if not ue_hors_parcours: + self.nb_ues_validables += 1 if val < table.barre_warning_ue: - note_classes = ["moy_ue_warning"] # notes très basses + cell_classes = ["moy_ue_warning"] # notes très basses self.nb_ues_warning += 1 if ue_status["is_capitalized"]: - note_classes.append("ue_capitalized") - + cell_classes.append("ue_capitalized") + if ue_hors_parcours: + cell_classes.append("ue_hors_parcours") + target_attrs["title"] = "UE hors du parcours actuel de l'étudiant" self.add_cell( col_id, ue.acronyme, table.fmt_note(val), group=col_group or f"col_ue_{ue.id}", - classes=note_classes, + classes=cell_classes, column_classes={f"col_ue_{ue.id}", "col_moy_ue", "col_ue"}, + target_attrs=target_attrs, ) table.foot_title_row.cells[col_id].target_attrs[ "title"