From d5fdd5b8b87314f9cbe188a5fb35f7361529cef9 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sun, 4 Feb 2024 18:36:11 +0100 Subject: [PATCH] =?UTF-8?q?Affichage=20statut=20=C3=A9valuations=20(attent?= =?UTF-8?q?e)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/comp/moy_mod.py | 8 +++++++- app/scodoc/sco_evaluations.py | 15 +++++++++------ app/scodoc/sco_formsemestre_status.py | 12 +++++++----- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/app/comp/moy_mod.py b/app/comp/moy_mod.py index ec9c450a..13ffd15c 100644 --- a/app/comp/moy_mod.py +++ b/app/comp/moy_mod.py @@ -178,11 +178,17 @@ class ModuleImplResults: eval_notes_inscr = evals_notes[str(evaluation.id)][list(inscrits_module)] # Nombre de notes (non vides, incluant ATT etc) des inscrits: nb_notes = eval_notes_inscr.notna().sum() + # Etudiants avec notes en attente: + # = ceux avec note ATT eval_etudids_attente = set( eval_notes_inscr.iloc[ (eval_notes_inscr == scu.NOTES_ATTENTE).to_numpy() ].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.evaluations_etat[evaluation.id] = EvaluationEtat( evaluation_id=evaluation.id, @@ -190,7 +196,7 @@ class ModuleImplResults: nb_notes=nb_notes, 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) # Force columns names to integers (evaluation ids) diff --git a/app/scodoc/sco_evaluations.py b/app/scodoc/sco_evaluations.py index 487cf9ea..20ae2356 100644 --- a/app/scodoc/sco_evaluations.py +++ b/app/scodoc/sco_evaluations.py @@ -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 evals: list of mappings (etats), 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. """ nb_evals_completes, nb_evals_en_cours, nb_evals_vides = 0, 0, 0 dates = [] - for e in evals: + for e in etat_evals: if e["etat"]["evalcomplete"]: nb_evals_completes += 1 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): """état des évaluations dans ce module""" - evals = nt.get_mod_evaluation_etat_list(modimpl) - etat = _summarize_evals_etats(evals) + etat_evals = nt.get_mod_evaluation_etat_list(modimpl) + etat = _summarize_evals_etats(etat_evals) # Il y a-t-il des notes en attente dans ce module ? etat["attente"] = nt.modimpls_results[modimpl.id].en_attente return etat diff --git a/app/scodoc/sco_formsemestre_status.py b/app/scodoc/sco_formsemestre_status.py index 5e42ac75..a3941ab3 100755 --- a/app/scodoc/sco_formsemestre_status.py +++ b/app/scodoc/sco_formsemestre_status.py @@ -1262,6 +1262,7 @@ def formsemestre_tableau_modules( etat["nb_evals_completes"] > 0 and etat["nb_evals_en_cours"] == 0 and etat["nb_evals_vides"] == 0 + and not etat["attente"] ): H.append(f'') else: @@ -1315,6 +1316,7 @@ def formsemestre_tableau_modules( if nb_evals != 0: H.append( f"""{nb_evals} prévues, {etat["nb_evals_completes"]} ok""" ) @@ -1325,11 +1327,11 @@ def formsemestre_tableau_modules( etat["nb_evals_en_cours"] } en cours""" ) - if etat["attente"]: - H.append( - f""" [en attente]""" - ) + if etat["attente"]: + H.append( + f""" [en attente]""" + ) elif mod.module_type == ModuleType.MALUS: nb_malus_notes = sum( e["etat"]["nb_notes"] for e in nt.get_mod_evaluation_etat_list(modimpl)