Fix: evaluation completes en présence de DEM ou DEF

This commit is contained in:
Emmanuel Viennet 2022-01-30 13:11:17 +01:00
parent 3ef1f155b7
commit 8bccdd3ae2
2 changed files with 12 additions and 7 deletions

View File

@ -66,7 +66,7 @@ class ModuleImplResults:
self.moduleimpl_id = moduleimpl.id self.moduleimpl_id = moduleimpl.id
self.module_id = moduleimpl.module.id self.module_id = moduleimpl.module.id
self.etudids = None self.etudids = None
"liste des étudiants inscrits au SEMESTRE" "liste des étudiants inscrits au SEMESTRE (incluant dem et def)"
self.nb_inscrits_module = None self.nb_inscrits_module = None
"nombre d'inscrits (non DEM) à ce module" "nombre d'inscrits (non DEM) à ce module"
@ -120,7 +120,7 @@ class ModuleImplResults:
# --- Calcul nombre d'inscrits pour déterminer les évaluations "completes": # --- Calcul nombre d'inscrits pour déterminer les évaluations "completes":
# on prend les inscrits au module ET au semestre (donc sans démissionnaires) # on prend les inscrits au module ET au semestre (donc sans démissionnaires)
inscrits_module = {ins.etud.id for ins in moduleimpl.inscriptions}.intersection( inscrits_module = {ins.etud.id for ins in moduleimpl.inscriptions}.intersection(
self.etudids moduleimpl.formsemestre.etudids_actifs
) )
self.nb_inscrits_module = len(inscrits_module) self.nb_inscrits_module = len(inscrits_module)
@ -128,14 +128,14 @@ 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 = {}
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 tous les inscrits (non dem) au semestre ont une note # is_complete ssi tous les inscrits (non dem) au semestre ont une note
# ou évaluaton déclarée "à prise en compte immédiate" # ou évaluation déclarée "à prise en compte immédiate"
is_complete = ( is_complete = evaluation.publish_incomplete or (
len(set(eval_df.index).intersection(self.etudids)) not (inscrits_module - set(eval_df.index))
== self.nb_inscrits_module )
) or evaluation.publish_incomplete # immédiate
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

View File

@ -313,6 +313,11 @@ class FormSemestre(db.Model):
else: else:
return [ins.etud for ins in self.inscriptions if ins.etat == scu.INSCRIT] return [ins.etud for ins in self.inscriptions if ins.etat == scu.INSCRIT]
@cached_property
def etudids_actifs(self) -> set:
"Set des etudids inscrits non démissionnaires"
return {ins.etudid for ins in self.inscriptions if ins.etat == scu.INSCRIT}
@cached_property @cached_property
def etuds_inscriptions(self) -> dict: def etuds_inscriptions(self) -> dict:
"""Map { etudid : inscription } (incluant DEM et DEF)""" """Map { etudid : inscription } (incluant DEM et DEF)"""