forked from ScoDoc/ScoDoc
amélioration liste_notes: ignore démissionnaires dans moy. de groupes
This commit is contained in:
parent
41778d5918
commit
d9f87d8528
@ -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
|
||||||
|
@ -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"
|
||||||
|
@ -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"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user