From d89d1be041bd673ef734d92ba28abf6b00342962 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Thu, 16 Dec 2021 14:40:24 +0100 Subject: [PATCH] =?UTF-8?q?Fix:=20evaluation=20completes=20avec=20d=C3=A9m?= =?UTF-8?q?issionnaires.=20Fixes=20#227?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/comp/moy_mod.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/app/comp/moy_mod.py b/app/comp/moy_mod.py index 851958169..58d6c1958 100644 --- a/app/comp/moy_mod.py +++ b/app/comp/moy_mod.py @@ -112,15 +112,20 @@ def df_load_modimpl_notes(moduleimpl_id: int) -> tuple: N'utilise pas de cache ScoDoc. """ # L'index du dataframe est la liste des étudiants inscrits au semestre, sans les démissionnaires - etudids = [ + etudids = { e.etudid for e in ModuleImpl.query.get(moduleimpl_id).formsemestre.get_inscrits( include_dem=False ) - ] + } evaluations = Evaluation.query.filter_by(moduleimpl_id=moduleimpl_id).all() + # --- Calcul nombre d'inscrits pour détermnier si évaluation "complete": if evaluations: - nb_inscrits_module = len(evaluations[0].moduleimpl.inscriptions) + # on prend les inscrits au module ET au semestre (donc sans démissionnaires) + inscrits_module = { + ins.etud.id for ins in evaluations[0].moduleimpl.inscriptions + }.intersection(etudids) + nb_inscrits_module = len(inscrits_module) else: nb_inscrits_module = 0 evals_notes = pd.DataFrame(index=etudids, dtype=float) # empty df with all students @@ -139,11 +144,12 @@ def df_load_modimpl_notes(moduleimpl_id: int) -> tuple: "moduleimpl_id": evaluation.moduleimpl.id, }, index_col="etudid", - dtype=np.float64, ) + eval_df[str(evaluation.id)] = pd.to_numeric(eval_df[str(evaluation.id)]) + # is_complete ssi tous les inscrits (non dem) au semestre ont une note is_complete = ( - len(eval_df) == nb_inscrits_module or evaluation.publish_incomplete - ) + len(set(eval_df.index).intersection(etudids)) == nb_inscrits_module + ) or evaluation.publish_incomplete evaluations_completes.append(is_complete) # NULL en base => ABS (= -999) eval_df.fillna(scu.NOTES_ABSENCE, inplace=True)