diff --git a/app/models/formsemestre.py b/app/models/formsemestre.py index 060c859ff4..3b1c35d0b9 100644 --- a/app/models/formsemestre.py +++ b/app/models/formsemestre.py @@ -401,7 +401,7 @@ class FormSemestre(db.Model): @cached_property 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} @cached_property diff --git a/app/scodoc/sco_liste_notes.py b/app/scodoc/sco_liste_notes.py index 4ac234d9c7..1a4d1aa928 100644 --- a/app/scodoc/sco_liste_notes.py +++ b/app/scodoc/sco_liste_notes.py @@ -597,14 +597,15 @@ def _make_table_notes( if not e["eval_state"]["evalcomplete"]: all_complete = False if all_complete: - eval_info = 'Evaluations prises en compte dans les moyennes' + eval_info = 'Evaluations prises en compte dans les moyennes.' else: eval_info = """ Les évaluations en vert et orange sont prises en compte dans les moyennes. Celles en rouge n'ont pas toutes leurs notes.""" - 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 += """""" + if is_apc: + eval_info += """ 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.""" + eval_info += """""" return html_form + eval_info + t + "

" else: # Une seule evaluation: ajoute histogramme @@ -669,6 +670,7 @@ def _add_eval_columns( notes = [] # liste des notes numeriques, pour calcul histogramme uniquement evaluation_id = e["evaluation_id"] 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) for row in rows: etudid = row["etudid"] @@ -678,8 +680,13 @@ def _add_eval_columns( nb_abs += 1 if val == scu.NOTES_ATTENTE: nb_att += 1 - # calcul moyenne SANS LES ABSENTS - if val != None and val != scu.NOTES_NEUTRALISE and val != scu.NOTES_ATTENTE: + # calcul moyenne SANS LES ABSENTS ni les DEMISSIONNAIRES + if ( + (etudid in inscrits) + and val != None + and val != scu.NOTES_NEUTRALISE + and val != scu.NOTES_ATTENTE + ): if e["note_max"] > 0: valsur20 = val * 20.0 / e["note_max"] # remet sur 20 else: @@ -803,6 +810,7 @@ def _add_moymod_column( col_id = "moymod" formsemestre = FormSemestre.query.get_or_404(formsemestre_id) nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre) + inscrits = formsemestre.etudids_actifs nb_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' row[col_id] = scu.fmt_note(val, keep_numeric=keep_numeric) row["_" + col_id + "_td_attrs"] = ' class="moyenne" ' - if not isinstance(val, str): + if etudid in inscrits and not isinstance(val, str): notes.append(val) nb_notes = nb_notes + 1 sum_notes += val @@ -854,6 +862,7 @@ def _add_apc_columns( # on va y ajouter une clé par UE du semestre nt: ResultatsSemestreBUT = res_sem.load_formsemestre_results(modimpl.formsemestre) modimpl_results: ModuleImplResults = nt.modimpls_results[modimpl.id] + inscrits = modimpl.formsemestre.etudids_actifs # les UE dans lesquelles ce module a un coef non nul: ues_with_coef = nt.modimpl_coefs_df[modimpl.id][ 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"], "?") row[f"moy_ue_{ue.id}"] = scu.fmt_note(moy_ue, keep_numeric=keep_numeric) 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 nb_notes_by_ue[ue.id] += 1 # Nom et coefs des UE (lignes titres): @@ -885,7 +898,6 @@ def _add_apc_columns( if coefs: row_coefs[f"moy_ue_{ue.id}"] = coefs[0].coef 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: row_moys[col_id] = "%.3g" % (sum_by_ue[ue.id] / nb_notes_by_ue[ue.id]) row_moys["_" + col_id + "_help"] = "moyenne des moyennes" diff --git a/sco_version.py b/sco_version.py index 469c31229b..3609665625 100644 --- a/sco_version.py +++ b/sco_version.py @@ -1,7 +1,7 @@ # -*- mode: python -*- # -*- coding: utf-8 -*- -SCOVERSION = "9.1.85" +SCOVERSION = "9.1.86" SCONAME = "ScoDoc"