forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -148,6 +148,7 @@ class ModuleImplResults:
|
|||||||
evals_notes = pd.DataFrame(index=self.etudids, dtype=float)
|
evals_notes = pd.DataFrame(index=self.etudids, dtype=float)
|
||||||
self.evaluations_completes = []
|
self.evaluations_completes = []
|
||||||
self.evaluations_completes_dict = {}
|
self.evaluations_completes_dict = {}
|
||||||
|
self.etudids_attente = set() # empty
|
||||||
for evaluation in moduleimpl.evaluations:
|
for evaluation in moduleimpl.evaluations:
|
||||||
eval_df = self._load_evaluation_notes(evaluation)
|
eval_df = self._load_evaluation_notes(evaluation)
|
||||||
# is_complete ssi
|
# is_complete ssi
|
||||||
@ -155,13 +156,13 @@ class ModuleImplResults:
|
|||||||
# ou évaluation déclarée "à prise en compte immédiate"
|
# ou évaluation déclarée "à prise en compte immédiate"
|
||||||
# ou rattrapage, 2eme session, bonus
|
# ou rattrapage, 2eme session, bonus
|
||||||
# ET pas bloquée par date (is_blocked)
|
# 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.
|
etudids_sans_note = inscrits_module - set(eval_df.index) # sans les dem.
|
||||||
is_complete = (
|
is_complete = (
|
||||||
(evaluation.evaluation_type != Evaluation.EVALUATION_NORMALE)
|
(evaluation.evaluation_type != Evaluation.EVALUATION_NORMALE)
|
||||||
or (evaluation.publish_incomplete)
|
or (evaluation.publish_incomplete)
|
||||||
or (not etudids_sans_note)
|
or (not etudids_sans_note)
|
||||||
) and not evaluation.is_blocked()
|
) and not is_blocked
|
||||||
self.evaluations_completes.append(is_complete)
|
self.evaluations_completes.append(is_complete)
|
||||||
self.evaluations_completes_dict[evaluation.id] = is_complete
|
self.evaluations_completes_dict[evaluation.id] = is_complete
|
||||||
self.evals_etudids_sans_note[evaluation.id] = etudids_sans_note
|
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)]
|
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
|
if is_blocked:
|
||||||
eval_etudids_attente = set(
|
eval_etudids_attente = set()
|
||||||
eval_notes_inscr.iloc[
|
else:
|
||||||
(eval_notes_inscr == scu.NOTES_ATTENTE).to_numpy()
|
# Etudiants avec notes en attente:
|
||||||
].index
|
# = ceux avec note ATT
|
||||||
)
|
eval_etudids_attente = set(
|
||||||
if evaluation.publish_incomplete:
|
eval_notes_inscr.iloc[
|
||||||
# et en "immédiat", tous ceux sans note
|
(eval_notes_inscr == scu.NOTES_ATTENTE).to_numpy()
|
||||||
eval_etudids_attente |= etudids_sans_note
|
].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:
|
# Synthèse 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(
|
||||||
|
@ -209,6 +209,7 @@ class ResultatsSemestre(ResultatsCache):
|
|||||||
"evalcomplete" : bool,
|
"evalcomplete" : bool,
|
||||||
"last_modif" : datetime.datetime | None, # saisie de note la plus récente
|
"last_modif" : datetime.datetime | None, # saisie de note la plus récente
|
||||||
"nb_notes" : int, # nb notes d'étudiants inscrits
|
"nb_notes" : int, # nb notes d'étudiants inscrits
|
||||||
|
"nb_attente" : int, # nb de notes en ATTente (même si bloquée)
|
||||||
},
|
},
|
||||||
"evaluation_id" : int,
|
"evaluation_id" : int,
|
||||||
"jour" : datetime.datetime, # e.date_debut or datetime.datetime(1900, 1, 1)
|
"jour" : datetime.datetime, # e.date_debut or datetime.datetime(1900, 1, 1)
|
||||||
@ -236,6 +237,7 @@ class ResultatsSemestre(ResultatsCache):
|
|||||||
"etat": {
|
"etat": {
|
||||||
"blocked": evaluation.is_blocked(),
|
"blocked": evaluation.is_blocked(),
|
||||||
"evalcomplete": etat.is_complete,
|
"evalcomplete": etat.is_complete,
|
||||||
|
"nb_attente": etat.nb_attente,
|
||||||
"nb_notes": etat.nb_notes,
|
"nb_notes": etat.nb_notes,
|
||||||
"last_modif": last_modif,
|
"last_modif": last_modif,
|
||||||
},
|
},
|
||||||
|
@ -279,11 +279,18 @@ def _summarize_evals_etats(etat_evals: list[dict]) -> dict:
|
|||||||
nb_eval_completes (= prises en compte)
|
nb_eval_completes (= prises en compte)
|
||||||
nb_evals_en_cours (= avec des notes, mais pas complete)
|
nb_evals_en_cours (= avec des notes, mais pas complete)
|
||||||
nb_evals_vides (= sans aucune note)
|
nb_evals_vides (= sans aucune note)
|
||||||
|
nb_evals_attente (= avec des notes en ATTente et pas bloquée)
|
||||||
date derniere modif
|
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, 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 = []
|
dates = []
|
||||||
for e in etat_evals:
|
for e in etat_evals:
|
||||||
if e["etat"]["blocked"]:
|
if e["etat"]["blocked"]:
|
||||||
@ -294,6 +301,8 @@ def _summarize_evals_etats(etat_evals: list[dict]) -> dict:
|
|||||||
nb_evals_vides += 1
|
nb_evals_vides += 1
|
||||||
elif not e["etat"]["blocked"]:
|
elif not e["etat"]["blocked"]:
|
||||||
nb_evals_en_cours += 1
|
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"]
|
last_modif = e["etat"]["last_modif"]
|
||||||
if last_modif is not None:
|
if last_modif is not None:
|
||||||
dates.append(e["etat"]["last_modif"])
|
dates.append(e["etat"]["last_modif"])
|
||||||
@ -303,6 +312,7 @@ def _summarize_evals_etats(etat_evals: list[dict]) -> dict:
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
"nb_evals": len(etat_evals),
|
"nb_evals": len(etat_evals),
|
||||||
|
"nb_evals_attente": nb_evals_attente,
|
||||||
"nb_evals_blocked": nb_evals_blocked,
|
"nb_evals_blocked": nb_evals_blocked,
|
||||||
"nb_evals_completes": nb_evals_completes,
|
"nb_evals_completes": nb_evals_completes,
|
||||||
"nb_evals_en_cours": nb_evals_en_cours,
|
"nb_evals_en_cours": nb_evals_en_cours,
|
||||||
|
@ -1312,7 +1312,9 @@ def formsemestre_tableau_modules(
|
|||||||
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"><span class="evals_attente">en attente</span></a></span>"""
|
title="Il y a des notes en attente"><span class="evals_attente">{
|
||||||
|
etat["nb_evals_attente"]
|
||||||
|
} en attente</span></a></span>"""
|
||||||
)
|
)
|
||||||
if not mod_is_conforme:
|
if not mod_is_conforme:
|
||||||
H.append(
|
H.append(
|
||||||
|
Loading…
Reference in New Issue
Block a user