1
0
forked from ScoDoc/ScoDoc

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>=</tt></div><div>UE dispensée</div>
<div><tt>nan</tt></div><div>valeur non disponible</div> <div><tt>nan</tt></div><div>valeur non disponible</div>
<div>📍</div><div>code jury non enregistré</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>
</div> </div>
""" """

View File

@ -4636,6 +4636,14 @@ table.table_recap tr.selected td.moy_ue_warning {
color: rgb(255, 0, 0); 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 { table.table_recap td.cap table.table_recap td.col_ues_validables {
white-space: nowrap; white-space: nowrap;
font-style: normal !important; font-style: normal !important;

View File

@ -666,11 +666,21 @@ class RowRecap(tb.Row):
if res.is_apc if res.is_apc
else "Moyenne générale du semestre" 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 self.nb_ues_validables, self.nb_ues_warning = 0, 0
for ue in ues_sans_bonus: 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: if ue_status is not None:
self.add_ue_cols(ue, ue_status) self.add_ue_cols(ue, ue_status)
if table.mode_jury: if table.mode_jury:
@ -679,7 +689,7 @@ class RowRecap(tb.Row):
# Bonus (sport) dans cette UE ? # Bonus (sport) dans cette UE ?
# Le bonus sport appliqué sur cette UE # Le bonus sport appliqué sur cette UE
if (res.bonus_ues is not None) and (ue.id in res.bonus_ues): 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) val_fmt = val_fmt_html = table.fmt_note(val)
if val: if val:
val_fmt_html = f"""<span class="green-arrow-up"></span><span class="sp2l">{ 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 # Les moyennes des modules (ou ressources et SAÉs) dans cette UE
self.add_ue_modimpls_cols(ue, ue_status["is_capitalized"]) 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 = ( ue_valid_txt = ue_valid_txt_html = (
f"{self.nb_ues_validables}/{self.nb_ues_etud_parcours}" f"{self.nb_ues_validables}/{self.nb_ues_etud_parcours}"
) )
@ -705,7 +715,7 @@ class RowRecap(tb.Row):
cell_class = "" cell_class = ""
if self.nb_ues_warning: if self.nb_ues_warning:
cell_class = "moy_ue_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" cell_class = "moy_inf"
self.add_cell( self.add_cell(
"ues_validables", "ues_validables",
@ -719,7 +729,7 @@ class RowRecap(tb.Row):
) )
def add_ue_cols(self, ue: UniteEns, ue_status: dict, col_group: str = None): 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 # sous-classé par JuryRow pour ajouter les codes
table: TableRecap = self.table table: TableRecap = self.table
formsemestre: FormSemestre = table.res.formsemestre 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 if (self.etud.id, ue.id) not in table.res.dispense_ues
else "=" 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 isinstance(val, float):
if val < table.barre_moy: if val < table.barre_moy:
note_classes = ["moy_inf"] cell_classes = ["moy_inf"]
elif val >= table.barre_valid_ue: elif val >= table.barre_valid_ue:
note_classes = ["moy_ue_valid"] cell_classes = ["moy_ue_valid"]
if not ue_hors_parcours:
self.nb_ues_validables += 1 self.nb_ues_validables += 1
if val < table.barre_warning_ue: 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 self.nb_ues_warning += 1
if ue_status["is_capitalized"]: 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( self.add_cell(
col_id, col_id,
ue.acronyme, ue.acronyme,
table.fmt_note(val), table.fmt_note(val),
group=col_group or f"col_ue_{ue.id}", 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"}, 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[ table.foot_title_row.cells[col_id].target_attrs[
"title" "title"