Tableaux recap: corrige nb UE validables en BUT selon parcours. Fix #987

This commit is contained in:
Emmanuel Viennet 2024-09-08 09:52:22 +02:00
parent 495aac82ae
commit faf09af63c
3 changed files with 43 additions and 14 deletions

View File

@ -260,6 +260,7 @@ def formsemestre_recapcomplet(
<div><tt>=</tt></div><div>UE dispensée</div>
<div><tt>nan</tt></div><div>valeur non disponible</div>
<div>📍</div><div>code jury non enregistré</div>
<div><span class="ue_hors_parcours">12.34</span></div><div>UE hors parcours</div>
</div>
</div>
"""

View File

@ -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;

View File

@ -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"""<span class="green-arrow-up"></span><span class="sp2l">{
@ -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"