diff --git a/app/comp/moy_mod.py b/app/comp/moy_mod.py index 1a64809fa..bf4afe7a0 100644 --- a/app/comp/moy_mod.py +++ b/app/comp/moy_mod.py @@ -66,7 +66,7 @@ class ModuleImplResults: self.moduleimpl_id = moduleimpl.id self.module_id = moduleimpl.module.id self.etudids = None - "liste des étudiants inscrits au SEMESTRE" + "liste des étudiants inscrits au SEMESTRE (incluant dem et def)" self.nb_inscrits_module = None "nombre d'inscrits (non DEM) à ce module" @@ -120,7 +120,7 @@ class ModuleImplResults: # --- Calcul nombre d'inscrits pour déterminer les évaluations "completes": # on prend les inscrits au module ET au semestre (donc sans démissionnaires) inscrits_module = {ins.etud.id for ins in moduleimpl.inscriptions}.intersection( - self.etudids + moduleimpl.formsemestre.etudids_actifs ) self.nb_inscrits_module = len(inscrits_module) @@ -128,14 +128,14 @@ class ModuleImplResults: evals_notes = pd.DataFrame(index=self.etudids, dtype=float) self.evaluations_completes = [] self.evaluations_completes_dict = {} + for evaluation in moduleimpl.evaluations: eval_df = self._load_evaluation_notes(evaluation) # is_complete ssi tous les inscrits (non dem) au semestre ont une note - # ou évaluaton déclarée "à prise en compte immédiate" - is_complete = ( - len(set(eval_df.index).intersection(self.etudids)) - == self.nb_inscrits_module - ) or evaluation.publish_incomplete # immédiate + # ou évaluation déclarée "à prise en compte immédiate" + is_complete = evaluation.publish_incomplete or ( + not (inscrits_module - set(eval_df.index)) + ) self.evaluations_completes.append(is_complete) self.evaluations_completes_dict[evaluation.id] = is_complete diff --git a/app/models/formsemestre.py b/app/models/formsemestre.py index a6016031e..d059701ae 100644 --- a/app/models/formsemestre.py +++ b/app/models/formsemestre.py @@ -313,6 +313,11 @@ class FormSemestre(db.Model): else: 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 def etuds_inscriptions(self) -> dict: """Map { etudid : inscription } (incluant DEM et DEF)"""