Fix: evaluation completes avec démissionnaires. Fixes #227

This commit is contained in:
Emmanuel Viennet 2021-12-16 14:40:24 +01:00
parent ef8e9b4ef0
commit d89d1be041

View File

@ -112,15 +112,20 @@ def df_load_modimpl_notes(moduleimpl_id: int) -> tuple:
N'utilise pas de cache ScoDoc. N'utilise pas de cache ScoDoc.
""" """
# L'index du dataframe est la liste des étudiants inscrits au semestre, sans les démissionnaires # L'index du dataframe est la liste des étudiants inscrits au semestre, sans les démissionnaires
etudids = [ etudids = {
e.etudid e.etudid
for e in ModuleImpl.query.get(moduleimpl_id).formsemestre.get_inscrits( for e in ModuleImpl.query.get(moduleimpl_id).formsemestre.get_inscrits(
include_dem=False include_dem=False
) )
] }
evaluations = Evaluation.query.filter_by(moduleimpl_id=moduleimpl_id).all() evaluations = Evaluation.query.filter_by(moduleimpl_id=moduleimpl_id).all()
# --- Calcul nombre d'inscrits pour détermnier si évaluation "complete":
if evaluations: 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: else:
nb_inscrits_module = 0 nb_inscrits_module = 0
evals_notes = pd.DataFrame(index=etudids, dtype=float) # empty df with all students 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, "moduleimpl_id": evaluation.moduleimpl.id,
}, },
index_col="etudid", 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 = ( 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) evaluations_completes.append(is_complete)
# NULL en base => ABS (= -999) # NULL en base => ABS (= -999)
eval_df.fillna(scu.NOTES_ABSENCE, inplace=True) eval_df.fillna(scu.NOTES_ABSENCE, inplace=True)