diff --git a/app/comp/moy_mod.py b/app/comp/moy_mod.py
index b1af5c062..dacc4d87b 100644
--- a/app/comp/moy_mod.py
+++ b/app/comp/moy_mod.py
@@ -148,6 +148,7 @@ class ModuleImplResults:
evals_notes = pd.DataFrame(index=self.etudids, dtype=float)
self.evaluations_completes = []
self.evaluations_completes_dict = {}
+ self.etudids_attente = set() # empty
for evaluation in moduleimpl.evaluations:
eval_df = self._load_evaluation_notes(evaluation)
# is_complete ssi
@@ -155,13 +156,13 @@ class ModuleImplResults:
# ou évaluation déclarée "à prise en compte immédiate"
# ou rattrapage, 2eme session, bonus
# ET pas bloquée par date (is_blocked)
-
+ is_blocked = evaluation.is_blocked()
etudids_sans_note = inscrits_module - set(eval_df.index) # sans les dem.
is_complete = (
(evaluation.evaluation_type != Evaluation.EVALUATION_NORMALE)
or (evaluation.publish_incomplete)
or (not etudids_sans_note)
- ) and not evaluation.is_blocked()
+ ) and not is_blocked
self.evaluations_completes.append(is_complete)
self.evaluations_completes_dict[evaluation.id] = is_complete
self.evals_etudids_sans_note[evaluation.id] = etudids_sans_note
@@ -178,16 +179,21 @@ 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 "immédiat", tous ceux sans note
- eval_etudids_attente |= etudids_sans_note
+
+ if is_blocked:
+ eval_etudids_attente = set()
+ else:
+ # 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 "immédiat", tous ceux sans note
+ eval_etudids_attente |= etudids_sans_note
+
# Synthèse pour état du module:
self.etudids_attente |= eval_etudids_attente
self.evaluations_etat[evaluation.id] = EvaluationEtat(
diff --git a/app/comp/res_common.py b/app/comp/res_common.py
index 89c0ca2a8..6e06487fc 100644
--- a/app/comp/res_common.py
+++ b/app/comp/res_common.py
@@ -209,6 +209,7 @@ class ResultatsSemestre(ResultatsCache):
"evalcomplete" : bool,
"last_modif" : datetime.datetime | None, # saisie de note la plus récente
"nb_notes" : int, # nb notes d'étudiants inscrits
+ "nb_attente" : int, # nb de notes en ATTente (même si bloquée)
},
"evaluation_id" : int,
"jour" : datetime.datetime, # e.date_debut or datetime.datetime(1900, 1, 1)
@@ -236,6 +237,7 @@ class ResultatsSemestre(ResultatsCache):
"etat": {
"blocked": evaluation.is_blocked(),
"evalcomplete": etat.is_complete,
+ "nb_attente": etat.nb_attente,
"nb_notes": etat.nb_notes,
"last_modif": last_modif,
},
diff --git a/app/scodoc/sco_evaluations.py b/app/scodoc/sco_evaluations.py
index 683c5b6f4..32f1992a8 100644
--- a/app/scodoc/sco_evaluations.py
+++ b/app/scodoc/sco_evaluations.py
@@ -279,11 +279,18 @@ def _summarize_evals_etats(etat_evals: list[dict]) -> dict:
nb_eval_completes (= prises en compte)
nb_evals_en_cours (= avec des notes, mais pas complete)
nb_evals_vides (= sans aucune note)
+ nb_evals_attente (= avec des notes en ATTente et pas bloquée)
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, nb_evals_blocked = 0, 0, 0, 0
+ (
+ nb_evals_completes,
+ nb_evals_en_cours,
+ nb_evals_vides,
+ nb_evals_blocked,
+ nb_evals_attente,
+ ) = (0, 0, 0, 0, 0)
dates = []
for e in etat_evals:
if e["etat"]["blocked"]:
@@ -294,6 +301,8 @@ def _summarize_evals_etats(etat_evals: list[dict]) -> dict:
nb_evals_vides += 1
elif not e["etat"]["blocked"]:
nb_evals_en_cours += 1
+ if e["etat"]["nb_attente"] and not e["etat"]["blocked"]:
+ nb_evals_attente += 1
last_modif = e["etat"]["last_modif"]
if last_modif is not None:
dates.append(e["etat"]["last_modif"])
@@ -303,6 +312,7 @@ def _summarize_evals_etats(etat_evals: list[dict]) -> dict:
return {
"nb_evals": len(etat_evals),
+ "nb_evals_attente": nb_evals_attente,
"nb_evals_blocked": nb_evals_blocked,
"nb_evals_completes": nb_evals_completes,
"nb_evals_en_cours": nb_evals_en_cours,
diff --git a/app/scodoc/sco_formsemestre_status.py b/app/scodoc/sco_formsemestre_status.py
index 027ac8dff..1277df533 100755
--- a/app/scodoc/sco_formsemestre_status.py
+++ b/app/scodoc/sco_formsemestre_status.py
@@ -1312,7 +1312,9 @@ def formsemestre_tableau_modules(
if etat["attente"]:
H.append(
f""" en attente"""
+ title="Il y a des notes en attente">{
+ etat["nb_evals_attente"]
+ } en attente"""
)
if not mod_is_conforme:
H.append(