1
0
forked from ScoDoc/ScoDoc

Affichage statut évaluations (attente)

This commit is contained in:
Emmanuel Viennet 2024-02-04 18:36:11 +01:00
parent 7162d83f39
commit d5fdd5b8b8
3 changed files with 23 additions and 12 deletions

View File

@ -178,11 +178,17 @@ class ModuleImplResults:
eval_notes_inscr = evals_notes[str(evaluation.id)][list(inscrits_module)] eval_notes_inscr = evals_notes[str(evaluation.id)][list(inscrits_module)]
# Nombre de notes (non vides, incluant ATT etc) des inscrits: # Nombre de notes (non vides, incluant ATT etc) des inscrits:
nb_notes = eval_notes_inscr.notna().sum() nb_notes = eval_notes_inscr.notna().sum()
# Etudiants avec notes en attente:
# = ceux avec note ATT
eval_etudids_attente = set( eval_etudids_attente = set(
eval_notes_inscr.iloc[ eval_notes_inscr.iloc[
(eval_notes_inscr == scu.NOTES_ATTENTE).to_numpy() (eval_notes_inscr == scu.NOTES_ATTENTE).to_numpy()
].index ].index
) )
if evaluation.publish_incomplete:
# et en "imédiat", tous ceux sans note
eval_etudids_attente |= etudids_sans_note
# Synthèe pour état du module:
self.etudids_attente |= eval_etudids_attente self.etudids_attente |= eval_etudids_attente
self.evaluations_etat[evaluation.id] = EvaluationEtat( self.evaluations_etat[evaluation.id] = EvaluationEtat(
evaluation_id=evaluation.id, evaluation_id=evaluation.id,
@ -190,7 +196,7 @@ class ModuleImplResults:
nb_notes=nb_notes, nb_notes=nb_notes,
is_complete=is_complete, is_complete=is_complete,
) )
# au moins une note en ATT dans ce modimpl: # au moins une note en attente (ATT ou manquante en mode "immédiat") dans ce modimpl:
self.en_attente = bool(self.etudids_attente) self.en_attente = bool(self.etudids_attente)
# Force columns names to integers (evaluation ids) # Force columns names to integers (evaluation ids)

View File

@ -280,18 +280,21 @@ def do_evaluation_etat(
} }
def _summarize_evals_etats(evals: list[dict]) -> dict: def _summarize_evals_etats(etat_evals: list[dict]) -> dict:
"""Synthétise les états d'une liste d'évaluations """Synthétise les états d'une liste d'évaluations
evals: list of mappings (etats), evals: list of mappings (etats),
utilise e["etat"]["evalcomplete"], e["etat"]["nb_notes"], e["etat"]["last_modif"] utilise e["etat"]["evalcomplete"], e["etat"]["nb_notes"], e["etat"]["last_modif"]
-> nb_eval_completes, nb_evals_en_cours, ->
nb_evals_vides, date derniere modif nb_eval_completes (= prises en compte)
nb_evals_en_cours (= avec des notes, mais pas complete)
nb_evals_vides (= sans aucune note)
date derniere modif
Une eval est "complete" ssi tous les etudiants *inscrits* ont une note. Une eval est "complete" ssi tous les etudiants *inscrits* ont une note.
""" """
nb_evals_completes, nb_evals_en_cours, nb_evals_vides = 0, 0, 0 nb_evals_completes, nb_evals_en_cours, nb_evals_vides = 0, 0, 0
dates = [] dates = []
for e in evals: for e in etat_evals:
if e["etat"]["evalcomplete"]: if e["etat"]["evalcomplete"]:
nb_evals_completes += 1 nb_evals_completes += 1
elif e["etat"]["nb_notes"] == 0: elif e["etat"]["nb_notes"] == 0:
@ -345,8 +348,8 @@ def do_evaluation_etat_in_sem(formsemestre: FormSemestre) -> dict:
def do_evaluation_etat_in_mod(nt, modimpl: ModuleImpl): def do_evaluation_etat_in_mod(nt, modimpl: ModuleImpl):
"""état des évaluations dans ce module""" """état des évaluations dans ce module"""
evals = nt.get_mod_evaluation_etat_list(modimpl) etat_evals = nt.get_mod_evaluation_etat_list(modimpl)
etat = _summarize_evals_etats(evals) etat = _summarize_evals_etats(etat_evals)
# Il y a-t-il des notes en attente dans ce module ? # Il y a-t-il des notes en attente dans ce module ?
etat["attente"] = nt.modimpls_results[modimpl.id].en_attente etat["attente"] = nt.modimpls_results[modimpl.id].en_attente
return etat return etat

View File

@ -1262,6 +1262,7 @@ def formsemestre_tableau_modules(
etat["nb_evals_completes"] > 0 etat["nb_evals_completes"] > 0
and etat["nb_evals_en_cours"] == 0 and etat["nb_evals_en_cours"] == 0
and etat["nb_evals_vides"] == 0 and etat["nb_evals_vides"] == 0
and not etat["attente"]
): ):
H.append(f'<tr class="formsemestre_status_green{fontorange}">') H.append(f'<tr class="formsemestre_status_green{fontorange}">')
else: else:
@ -1315,6 +1316,7 @@ def formsemestre_tableau_modules(
if nb_evals != 0: if nb_evals != 0:
H.append( H.append(
f"""<a href="{moduleimpl_status_url}" f"""<a href="{moduleimpl_status_url}"
title="les évaluations 'ok' sont celles prises en compte dans les calculs"
class="formsemestre_status_link">{nb_evals} prévues, class="formsemestre_status_link">{nb_evals} prévues,
{etat["nb_evals_completes"]} ok</a>""" {etat["nb_evals_completes"]} ok</a>"""
) )
@ -1325,11 +1327,11 @@ def formsemestre_tableau_modules(
etat["nb_evals_en_cours"] etat["nb_evals_en_cours"]
} en cours</a></span>""" } en cours</a></span>"""
) )
if etat["attente"]: if etat["attente"]:
H.append( H.append(
f""" <span><a class="redlink" href="{moduleimpl_status_url}" f""" <span><a class="redlink" href="{moduleimpl_status_url}"
title="Il y a des notes en attente">[en attente]</a></span>""" title="Il y a des notes en attente">[en attente]</a></span>"""
) )
elif mod.module_type == ModuleType.MALUS: elif mod.module_type == ModuleType.MALUS:
nb_malus_notes = sum( nb_malus_notes = sum(
e["etat"]["nb_notes"] for e in nt.get_mod_evaluation_etat_list(modimpl) e["etat"]["nb_notes"] for e in nt.get_mod_evaluation_etat_list(modimpl)