affichage non conformité
This commit is contained in:
parent
ab1898b185
commit
aeb0d67f38
@ -123,11 +123,15 @@ def notes_sem_load_cube(formsemestre):
|
|||||||
"""Calcule le cube des notes du semestre
|
"""Calcule le cube des notes du semestre
|
||||||
(charge toutes les notes, calcule les moyenne des modules
|
(charge toutes les notes, calcule les moyenne des modules
|
||||||
et assemble le cube)
|
et assemble le cube)
|
||||||
Resultat: ndarray (etuds x modimpls x UEs)
|
Resultat:
|
||||||
|
sem_cube : ndarray (etuds x modimpls x UEs)
|
||||||
|
modimpls_evals_poids dict { modimpl.id : evals_poids }
|
||||||
|
modimpls_evals_notes dict { modimpl.id : evals_notes }
|
||||||
|
modimpls_evaluations dict { modimpl.id : liste des évaluations }
|
||||||
"""
|
"""
|
||||||
modimpls_evals_poids = {} # modimpl.id : evals_poids
|
modimpls_evals_poids = {}
|
||||||
modimpls_evals_notes = {} # modimpl.id : evals_notes
|
modimpls_evals_notes = {}
|
||||||
modimpls_evaluations = {} # modimpl.id : liste des évaluations
|
modimpls_evaluations = {}
|
||||||
modimpls_notes = []
|
modimpls_notes = []
|
||||||
for modimpl in formsemestre.modimpls:
|
for modimpl in formsemestre.modimpls:
|
||||||
evals_notes, evaluations, evaluations_completes = moy_mod.df_load_modimpl_notes(
|
evals_notes, evaluations, evaluations_completes = moy_mod.df_load_modimpl_notes(
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
# -*- coding: UTF-8 -*
|
# -*- coding: UTF-8 -*
|
||||||
|
|
||||||
"""ScoDoc models: moduleimpls
|
"""ScoDoc models: moduleimpls
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
from app import db
|
from app import db
|
||||||
|
@ -1172,6 +1172,8 @@ def formsemestre_tableau_modules(
|
|||||||
fontorange = ""
|
fontorange = ""
|
||||||
|
|
||||||
etat = sco_evaluations.do_evaluation_etat_in_mod(nt, modimpl["moduleimpl_id"])
|
etat = sco_evaluations.do_evaluation_etat_in_mod(nt, modimpl["moduleimpl_id"])
|
||||||
|
# if nt.parcours.APC_SAE:
|
||||||
|
# tbd style si module non conforme
|
||||||
if (
|
if (
|
||||||
etat["nb_evals_completes"] > 0
|
etat["nb_evals_completes"] > 0
|
||||||
and etat["nb_evals_en_cours"] == 0
|
and etat["nb_evals_en_cours"] == 0
|
||||||
|
@ -32,6 +32,7 @@ import flask
|
|||||||
from flask import url_for, g, request
|
from flask import url_for, g, request
|
||||||
|
|
||||||
from app import models
|
from app import models
|
||||||
|
from app.models.moduleimpls import ModuleImpl
|
||||||
import app.scodoc.sco_utils as scu
|
import app.scodoc.sco_utils as scu
|
||||||
import app.scodoc.notesdb as ndb
|
import app.scodoc.notesdb as ndb
|
||||||
from app import log
|
from app import log
|
||||||
@ -227,16 +228,19 @@ def _make_table_notes(
|
|||||||
return "<p>Aucune évaluation !</p>"
|
return "<p>Aucune évaluation !</p>"
|
||||||
E = evals[0]
|
E = evals[0]
|
||||||
moduleimpl_id = E["moduleimpl_id"]
|
moduleimpl_id = E["moduleimpl_id"]
|
||||||
modimpl = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
modimpl_o = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
module = models.Module.query.get(modimpl["module_id"])
|
module = models.Module.query.get(modimpl_o["module_id"])
|
||||||
is_apc = module.formation.get_parcours().APC_SAE
|
is_apc = module.formation.get_parcours().APC_SAE
|
||||||
if is_apc:
|
if is_apc:
|
||||||
|
modimpl = ModuleImpl.query.get(moduleimpl_id)
|
||||||
|
is_conforme = modimpl.check_apc_conformity()
|
||||||
evals_poids, ues = moy_mod.df_load_evaluations_poids(moduleimpl_id)
|
evals_poids, ues = moy_mod.df_load_evaluations_poids(moduleimpl_id)
|
||||||
if not ues:
|
if not ues:
|
||||||
is_apc = False
|
is_apc = False
|
||||||
else:
|
else:
|
||||||
evals_poids, ues = None, None
|
evals_poids, ues = None, None
|
||||||
sem = sco_formsemestre.get_formsemestre(modimpl["formsemestre_id"])
|
is_conforme = True
|
||||||
|
sem = sco_formsemestre.get_formsemestre(modimpl_o["formsemestre_id"])
|
||||||
# (debug) check that all evals are in same module:
|
# (debug) check that all evals are in same module:
|
||||||
for e in evals:
|
for e in evals:
|
||||||
if e["moduleimpl_id"] != moduleimpl_id:
|
if e["moduleimpl_id"] != moduleimpl_id:
|
||||||
@ -248,7 +252,7 @@ def _make_table_notes(
|
|||||||
keep_numeric = False
|
keep_numeric = False
|
||||||
# Si pas de groupe, affiche tout
|
# Si pas de groupe, affiche tout
|
||||||
if not group_ids:
|
if not group_ids:
|
||||||
group_ids = [sco_groups.get_default_group(modimpl["formsemestre_id"])]
|
group_ids = [sco_groups.get_default_group(modimpl_o["formsemestre_id"])]
|
||||||
groups = sco_groups.listgroups(group_ids)
|
groups = sco_groups.listgroups(group_ids)
|
||||||
|
|
||||||
gr_title = sco_groups.listgroups_abbrev(groups)
|
gr_title = sco_groups.listgroups_abbrev(groups)
|
||||||
@ -326,7 +330,7 @@ def _make_table_notes(
|
|||||||
"etudid": etudid,
|
"etudid": etudid,
|
||||||
"nom": etud["nom"].upper(),
|
"nom": etud["nom"].upper(),
|
||||||
"_nomprenom_target": "formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s"
|
"_nomprenom_target": "formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s"
|
||||||
% (modimpl["formsemestre_id"], etudid),
|
% (modimpl_o["formsemestre_id"], etudid),
|
||||||
"_nomprenom_td_attrs": 'id="%s" class="etudinfo"' % (etud["etudid"]),
|
"_nomprenom_td_attrs": 'id="%s" class="etudinfo"' % (etud["etudid"]),
|
||||||
"prenom": etud["prenom"].lower().capitalize(),
|
"prenom": etud["prenom"].lower().capitalize(),
|
||||||
"nomprenom": etud["nomprenom"],
|
"nomprenom": etud["nomprenom"],
|
||||||
@ -426,6 +430,7 @@ def _make_table_notes(
|
|||||||
rows,
|
rows,
|
||||||
columns_ids,
|
columns_ids,
|
||||||
titles,
|
titles,
|
||||||
|
is_conforme,
|
||||||
row_coefs,
|
row_coefs,
|
||||||
row_poids,
|
row_poids,
|
||||||
row_note_max,
|
row_note_max,
|
||||||
@ -536,6 +541,10 @@ def _make_table_notes(
|
|||||||
scodoc_dept=g.scodoc_dept, moduleimpl_id=moduleimpl_id)
|
scodoc_dept=g.scodoc_dept, moduleimpl_id=moduleimpl_id)
|
||||||
}">{module.code} {module.titre}</a></h2>
|
}">{module.code} {module.titre}</a></h2>
|
||||||
"""
|
"""
|
||||||
|
if not is_conforme:
|
||||||
|
html_title += (
|
||||||
|
"""<div class="warning">Poids des évaluations non conformes !</div>"""
|
||||||
|
)
|
||||||
base_url = "evaluation_listenotes?moduleimpl_id=%s" % moduleimpl_id + gl
|
base_url = "evaluation_listenotes?moduleimpl_id=%s" % moduleimpl_id + gl
|
||||||
# display
|
# display
|
||||||
tab = GenTable(
|
tab = GenTable(
|
||||||
@ -554,7 +563,7 @@ def _make_table_notes(
|
|||||||
html_title=html_title,
|
html_title=html_title,
|
||||||
pdf_title=pdf_title,
|
pdf_title=pdf_title,
|
||||||
html_class="table_leftalign notes_evaluation",
|
html_class="table_leftalign notes_evaluation",
|
||||||
preferences=sco_preferences.SemPreferences(modimpl["formsemestre_id"]),
|
preferences=sco_preferences.SemPreferences(modimpl_o["formsemestre_id"]),
|
||||||
# html_generate_cells=False # la derniere ligne (moyennes) est incomplete
|
# html_generate_cells=False # la derniere ligne (moyennes) est incomplete
|
||||||
)
|
)
|
||||||
if format == "bordereau":
|
if format == "bordereau":
|
||||||
@ -797,6 +806,7 @@ def _add_apc_columns(
|
|||||||
rows,
|
rows,
|
||||||
columns_ids,
|
columns_ids,
|
||||||
titles,
|
titles,
|
||||||
|
is_conforme: bool,
|
||||||
row_coefs,
|
row_coefs,
|
||||||
row_poids,
|
row_poids,
|
||||||
row_note_max,
|
row_note_max,
|
||||||
@ -809,19 +819,26 @@ def _add_apc_columns(
|
|||||||
# => On recharge tout dans les nouveaux modèles
|
# => On recharge tout dans les nouveaux modèles
|
||||||
# rows est une liste de dict avec une clé "etudid"
|
# rows est une liste de dict avec une clé "etudid"
|
||||||
# on va y ajouter une clé par UE du semestre
|
# on va y ajouter une clé par UE du semestre
|
||||||
|
modimpl = ModuleImpl.query.get(moduleimpl_id)
|
||||||
evals_notes, evaluations, evaluations_completes = moy_mod.df_load_modimpl_notes(
|
evals_notes, evaluations, evaluations_completes = moy_mod.df_load_modimpl_notes(
|
||||||
moduleimpl_id
|
moduleimpl_id
|
||||||
)
|
)
|
||||||
etuds_moy_module = moy_mod.compute_module_moy(
|
etuds_moy_module = moy_mod.compute_module_moy(
|
||||||
evals_notes, evals_poids, evaluations, evaluations_completes
|
evals_notes, evals_poids, evaluations, evaluations_completes
|
||||||
)
|
)
|
||||||
ue_coefs = models.ModuleImpl.query.get(moduleimpl_id).module.ue_coefs
|
if is_conforme:
|
||||||
|
# valeur des moyennes vers les UEs:
|
||||||
for row in rows:
|
for row in rows:
|
||||||
for ue in ues:
|
for ue in ues:
|
||||||
moy_ue = etuds_moy_module[ue.id].get(row["etudid"], "?")
|
moy_ue = 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"
|
||||||
|
# Nom et coefs des UE (lignes titres):
|
||||||
|
ue_coefs = modimpl.module.ue_coefs
|
||||||
|
if is_conforme:
|
||||||
|
coef_class = "coef_mod_ue"
|
||||||
|
else:
|
||||||
|
coef_class = "coef_mod_ue_non_conforme"
|
||||||
for ue in ues:
|
for ue in ues:
|
||||||
col_id = f"moy_ue_{ue.id}"
|
col_id = f"moy_ue_{ue.id}"
|
||||||
titles[col_id] = ue.acronyme
|
titles[col_id] = ue.acronyme
|
||||||
@ -829,4 +846,4 @@ def _add_apc_columns(
|
|||||||
coefs = [uc for uc in ue_coefs if uc.ue_id == ue.id]
|
coefs = [uc for uc in ue_coefs if uc.ue_id == ue.id]
|
||||||
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"] = ' class="coef_mod_ue" '
|
row_coefs[f"_moy_ue_{ue.id}_td_attrs"] = f' class="{coef_class}" '
|
||||||
|
@ -1072,6 +1072,13 @@ td.coef_mod_ue {
|
|||||||
color: rgb(1, 116, 96);
|
color: rgb(1, 116, 96);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
td.coef_mod_ue_non_conforme {
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: bold;
|
||||||
|
color: red;
|
||||||
|
background-color: yellow;
|
||||||
|
}
|
||||||
|
|
||||||
h2.formsemestre, #gtrcontent h2 {
|
h2.formsemestre, #gtrcontent h2 {
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
font-size: 130%;
|
font-size: 130%;
|
||||||
|
Loading…
Reference in New Issue
Block a user