diff --git a/app/scodoc/sco_formsemestre_status.py b/app/scodoc/sco_formsemestre_status.py index d9a4009a1..4ebf44750 100644 --- a/app/scodoc/sco_formsemestre_status.py +++ b/app/scodoc/sco_formsemestre_status.py @@ -38,7 +38,7 @@ from flask_login import current_user from app import log from app.comp import res_sem from app.comp.res_compat import NotesTableCompat -from app.models import Module +from app.models import Evaluation, Module from app.models.formsemestre import FormSemestre import app.scodoc.sco_utils as scu from app.scodoc.sco_utils import ModuleType @@ -606,77 +606,108 @@ def formsemestre_description_table( 0 ] parcours = sco_codes_parcours.get_parcours_from_code(F["type_parcours"]) - Mlist = sco_moduleimpl.moduleimpl_withmodule_list( - formsemestre_id=formsemestre_id, sort_by_ue=True - ) + # --- Colonnes à proposer: + columns_ids = ["UE", "Code", "Module"] + if with_parcours: + columns_ids += ["parcours"] + if not formsemestre.formation.is_apc(): + columns_ids += ["Coef."] + ues = [] # liste des UE, seulement en APC pour les coefs + else: + ues = formsemestre.query_ues().all() + columns_ids += [f"ue_{ue.id}" for ue in ues] + if sco_preferences.get_preference("bul_show_ects", formsemestre_id): + columns_ids += ["ects"] + columns_ids += ["Inscrits", "Responsable", "Enseignants"] + if with_evals: + columns_ids += [ + "jour", + "description", + "coefficient", + "evalcomplete_str", + "publish_incomplete_str", + ] + + titles = {title: title for title in columns_ids} + titles.update({f"ue_{ue.id}": ue.acronyme for ue in ues}) + titles["ects"] = "ECTS" + titles["jour"] = "Evaluation" + titles["description"] = "" + titles["coefficient"] = "Coef. éval." + titles["evalcomplete_str"] = "Complète" + titles["parcours"] = "Parcours" + titles["publish_incomplete_str"] = "Toujours Utilisée" + title = f"{parcours.SESSION_NAME.capitalize()} {formsemestre.titre_mois()}" R = [] sum_coef = 0 sum_ects = 0 last_ue_id = None - for M in Mlist: + for modimpl in formsemestre.modimpls_sorted: # Ligne UE avec ECTS: - ue = M["ue"] - if ue["ue_id"] != last_ue_id: - last_ue_id = ue["ue_id"] - if ue["ects"] is None: + ue = modimpl.module.ue + if ue.id != last_ue_id: + last_ue_id = ue.id + if ue.ects is None: ects_str = "-" else: - sum_ects += ue["ects"] - ects_str = ue["ects"] + sum_ects += ue.ects + ects_str = ue.ects ue_info = { - "UE": ue["acronyme"], + "UE": ue.acronyme, "ects": ects_str, - "Module": ue["titre"], + "Module": ue.titre, "_css_row_class": "table_row_ue", } if use_ue_coefs: - ue_info["Coef."] = ue["coefficient"] + ue_info["Coef."] = ue.coefficient ue_info["Coef._class"] = "ue_coef" R.append(ue_info) mod_inscrits = sco_moduleimpl.do_moduleimpl_inscription_list( - moduleimpl_id=M["moduleimpl_id"] - ) - enseignants = ", ".join( - [sco_users.user_info(m["ens_id"])["nomprenom"] for m in M["ens"]] + moduleimpl_id=modimpl.id ) + enseignants = ", ".join(ens.get_prenomnom() for ens in modimpl.enseignants) + l = { - "UE": M["ue"]["acronyme"], - "Code": M["module"]["code"] or "", - "Module": M["module"]["abbrev"] or M["module"]["titre"], + "UE": modimpl.module.ue.acronyme, + "Code": modimpl.module.code or "", + "Module": modimpl.module.abbrev or modimpl.module.titre, "_Module_class": "scotext", "Inscrits": len(mod_inscrits), - "Responsable": sco_users.user_info(M["responsable_id"])["nomprenom"], + "Responsable": sco_users.user_info(modimpl.responsable_id)["nomprenom"], "_Responsable_class": "scotext", "Enseignants": enseignants, "_Enseignants_class": "scotext", - "Coef.": M["module"]["coefficient"], + "Coef.": modimpl.module.coefficient, # 'ECTS' : M['module']['ects'], # Lien sur titre -> module "_Module_target": url_for( "notes.moduleimpl_status", scodoc_dept=g.scodoc_dept, - moduleimpl_id=M["moduleimpl_id"], + moduleimpl_id=modimpl.id, ), "_Code_target": url_for( "notes.moduleimpl_status", scodoc_dept=g.scodoc_dept, - moduleimpl_id=M["moduleimpl_id"], + moduleimpl_id=modimpl.id, ), } - if M["module"]["coefficient"]: - sum_coef += M["module"]["coefficient"] - + if modimpl.module.coefficient is not None: + sum_coef += modimpl.module.coefficient + coef_dict = modimpl.module.get_ue_coef_dict() + for ue in ues: + l[f"ue_{ue.id}"] = coef_dict.get(ue.id, 0.0) or "" if with_parcours: - module = Module.query.get(M["module_id"]) - l["parcours"] = ", ".join(sorted([pa.code for pa in module.parcours])) + l["parcours"] = ", ".join( + sorted([pa.code for pa in modimpl.module.parcours]) + ) R.append(l) if with_evals: # Ajoute lignes pour evaluations - evals = nt.get_mod_evaluation_etat_list(M["moduleimpl_id"]) + evals = nt.get_mod_evaluation_etat_list(modimpl.id) evals.reverse() # ordre chronologique # Ajoute etat: for e in evals: @@ -694,45 +725,21 @@ def formsemestre_description_table( else: e["publish_incomplete_str"] = "Non" e["_publish_incomplete_str_td_attrs"] = 'style="color: red;"' + # Poids vers UEs (en APC) + evaluation: Evaluation = Evaluation.query.get(e["evaluation_id"]) + for ue_id, poids in evaluation.get_ue_poids_dict().items(): + e[f"ue_{ue_id}"] = poids or "" + R += evals sums = {"_css_row_class": "moyenne sortbottom", "ects": sum_ects, "Coef.": sum_coef} R.append(sums) - columns_ids = ["UE", "Code", "Module"] - if with_parcours: - columns_ids += ["parcours"] - if not formsemestre.formation.is_apc(): - columns_ids += ["Coef."] - if sco_preferences.get_preference("bul_show_ects", formsemestre_id): - columns_ids += ["ects"] - columns_ids += ["Inscrits", "Responsable", "Enseignants"] - if with_evals: - columns_ids += [ - "jour", - "description", - "coefficient", - "evalcomplete_str", - "publish_incomplete_str", - ] - - titles = {title: title for title in columns_ids} - - titles["ects"] = "ECTS" - titles["jour"] = "Evaluation" - titles["description"] = "" - titles["coefficient"] = "Coef. éval." - titles["evalcomplete_str"] = "Complète" - titles["parcours"] = "Parcours" - titles["publish_incomplete_str"] = "Toujours Utilisée" - title = "%s %s" % (parcours.SESSION_NAME.capitalize(), formsemestre.titre_mois()) return GenTable( columns_ids=columns_ids, rows=R, titles=titles, - origin="Généré par %s le " % sco_version.SCONAME - + scu.timedate_human_repr() - + "", + origin=f"Généré par {sco_version.SCONAME} le {scu.timedate_human_repr()}", caption=title, html_caption=title, html_class="table_leftalign formsemestre_description",