amélioration liste_notes: ignore démissionnaires dans moy. de groupes

This commit is contained in:
Emmanuel Viennet 2022-03-24 14:01:57 +01:00
parent 41778d5918
commit d9f87d8528
3 changed files with 23 additions and 11 deletions

View File

@ -401,7 +401,7 @@ class FormSemestre(db.Model):
@cached_property @cached_property
def etudids_actifs(self) -> set: def etudids_actifs(self) -> set:
"Set des etudids inscrits non démissionnaires" "Set des etudids inscrits non démissionnaires et non défaillants"
return {ins.etudid for ins in self.inscriptions if ins.etat == scu.INSCRIT} return {ins.etudid for ins in self.inscriptions if ins.etat == scu.INSCRIT}
@cached_property @cached_property

View File

@ -597,13 +597,14 @@ def _make_table_notes(
if not e["eval_state"]["evalcomplete"]: if not e["eval_state"]["evalcomplete"]:
all_complete = False all_complete = False
if all_complete: if all_complete:
eval_info = '<span class="eval_info eval_complete">Evaluations prises en compte dans les moyennes</span>' eval_info = '<span class="eval_info"><span class="eval_complete">Evaluations prises en compte dans les moyennes.</span>'
else: else:
eval_info = """<span class="eval_info help"> eval_info = """<span class="eval_info help">
Les évaluations en vert et orange sont prises en compte dans les moyennes. Les évaluations en vert et orange sont prises en compte dans les moyennes.
Celles en rouge n'ont pas toutes leurs notes.""" Celles en rouge n'ont pas toutes leurs notes."""
if is_apc: if is_apc:
eval_info += " La moyenne indicative est la moyenne des moyennes d'UE, et n'est pas utilisée en BUT." eval_info += """ <span>La moyenne indicative est la moyenne des moyennes d'UE, et n'est pas utilisée en BUT.
Les moyennes sur le groupe sont estimées sans les absents (sauf pour les moyennes des moyennes d'UE) ni les démissionnaires.</span>"""
eval_info += """</span>""" eval_info += """</span>"""
return html_form + eval_info + t + "<p></p>" return html_form + eval_info + t + "<p></p>"
else: else:
@ -669,6 +670,7 @@ def _add_eval_columns(
notes = [] # liste des notes numeriques, pour calcul histogramme uniquement notes = [] # liste des notes numeriques, pour calcul histogramme uniquement
evaluation_id = e["evaluation_id"] evaluation_id = e["evaluation_id"]
e_o = Evaluation.query.get(evaluation_id) # XXX en attendant ré-écriture e_o = Evaluation.query.get(evaluation_id) # XXX en attendant ré-écriture
inscrits = e_o.moduleimpl.formsemestre.etudids_actifs # set d'etudids
notes_db = sco_evaluation_db.do_evaluation_get_all_notes(evaluation_id) notes_db = sco_evaluation_db.do_evaluation_get_all_notes(evaluation_id)
for row in rows: for row in rows:
etudid = row["etudid"] etudid = row["etudid"]
@ -678,8 +680,13 @@ def _add_eval_columns(
nb_abs += 1 nb_abs += 1
if val == scu.NOTES_ATTENTE: if val == scu.NOTES_ATTENTE:
nb_att += 1 nb_att += 1
# calcul moyenne SANS LES ABSENTS # calcul moyenne SANS LES ABSENTS ni les DEMISSIONNAIRES
if val != None and val != scu.NOTES_NEUTRALISE and val != scu.NOTES_ATTENTE: if (
(etudid in inscrits)
and val != None
and val != scu.NOTES_NEUTRALISE
and val != scu.NOTES_ATTENTE
):
if e["note_max"] > 0: if e["note_max"] > 0:
valsur20 = val * 20.0 / e["note_max"] # remet sur 20 valsur20 = val * 20.0 / e["note_max"] # remet sur 20
else: else:
@ -803,6 +810,7 @@ def _add_moymod_column(
col_id = "moymod" col_id = "moymod"
formsemestre = FormSemestre.query.get_or_404(formsemestre_id) formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre) nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre)
inscrits = formsemestre.etudids_actifs
nb_notes = 0 nb_notes = 0
sum_notes = 0 sum_notes = 0
@ -812,7 +820,7 @@ def _add_moymod_column(
val = nt.get_etud_mod_moy(moduleimpl_id, etudid) # note sur 20, ou 'NA','NI' val = nt.get_etud_mod_moy(moduleimpl_id, etudid) # note sur 20, ou 'NA','NI'
row[col_id] = scu.fmt_note(val, keep_numeric=keep_numeric) row[col_id] = scu.fmt_note(val, keep_numeric=keep_numeric)
row["_" + col_id + "_td_attrs"] = ' class="moyenne" ' row["_" + col_id + "_td_attrs"] = ' class="moyenne" '
if not isinstance(val, str): if etudid in inscrits and not isinstance(val, str):
notes.append(val) notes.append(val)
nb_notes = nb_notes + 1 nb_notes = nb_notes + 1
sum_notes += val sum_notes += val
@ -854,6 +862,7 @@ def _add_apc_columns(
# on va y ajouter une clé par UE du semestre # on va y ajouter une clé par UE du semestre
nt: ResultatsSemestreBUT = res_sem.load_formsemestre_results(modimpl.formsemestre) nt: ResultatsSemestreBUT = res_sem.load_formsemestre_results(modimpl.formsemestre)
modimpl_results: ModuleImplResults = nt.modimpls_results[modimpl.id] modimpl_results: ModuleImplResults = nt.modimpls_results[modimpl.id]
inscrits = modimpl.formsemestre.etudids_actifs
# les UE dans lesquelles ce module a un coef non nul: # les UE dans lesquelles ce module a un coef non nul:
ues_with_coef = nt.modimpl_coefs_df[modimpl.id][ ues_with_coef = nt.modimpl_coefs_df[modimpl.id][
nt.modimpl_coefs_df[modimpl.id] > 0 nt.modimpl_coefs_df[modimpl.id] > 0
@ -868,7 +877,11 @@ def _add_apc_columns(
moy_ue = modimpl_results.etuds_moy_module[ue.id].get(row["etudid"], "?") moy_ue = modimpl_results.etuds_moy_module[ue.id].get(row["etudid"], "?")
row[f"moy_ue_{ue.id}"] = scu.fmt_note(moy_ue, keep_numeric=keep_numeric) row[f"moy_ue_{ue.id}"] = scu.fmt_note(moy_ue, keep_numeric=keep_numeric)
row[f"_moy_ue_{ue.id}_class"] = "moy_ue" row[f"_moy_ue_{ue.id}_class"] = "moy_ue"
if isinstance(moy_ue, float) and not np.isnan(moy_ue): if (
isinstance(moy_ue, float)
and not np.isnan(moy_ue)
and row["etudid"] in inscrits
):
sum_by_ue[ue.id] += moy_ue sum_by_ue[ue.id] += moy_ue
nb_notes_by_ue[ue.id] += 1 nb_notes_by_ue[ue.id] += 1
# Nom et coefs des UE (lignes titres): # Nom et coefs des UE (lignes titres):
@ -885,7 +898,6 @@ def _add_apc_columns(
if coefs: if coefs:
row_coefs[f"moy_ue_{ue.id}"] = coefs[0].coef row_coefs[f"moy_ue_{ue.id}"] = coefs[0].coef
row_coefs[f"_moy_ue_{ue.id}_td_attrs"] = f' class="{coef_class}" ' row_coefs[f"_moy_ue_{ue.id}_td_attrs"] = f' class="{coef_class}" '
modimpl_results.etuds_moy_module[ue.id]
if nb_notes_by_ue[ue.id] > 0: if nb_notes_by_ue[ue.id] > 0:
row_moys[col_id] = "%.3g" % (sum_by_ue[ue.id] / nb_notes_by_ue[ue.id]) row_moys[col_id] = "%.3g" % (sum_by_ue[ue.id] / nb_notes_by_ue[ue.id])
row_moys["_" + col_id + "_help"] = "moyenne des moyennes" row_moys["_" + col_id + "_help"] = "moyenne des moyennes"

View File

@ -1,7 +1,7 @@
# -*- mode: python -*- # -*- mode: python -*-
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
SCOVERSION = "9.1.85" SCOVERSION = "9.1.86"
SCONAME = "ScoDoc" SCONAME = "ScoDoc"