1
0
forked from ScoDoc/ScoDoc

Jurys BUT: corrige tri étudiants, ajout des groupes

This commit is contained in:
Emmanuel Viennet 2022-06-23 10:13:18 +02:00
parent baccf122fe
commit f1d8b6dedf
2 changed files with 33 additions and 27 deletions

View File

@ -152,6 +152,28 @@ class RowCollector:
self.titles[f"_{col_id}_class"] = classes self.titles[f"_{col_id}_class"] = classes
self.idx += 1 self.idx += 1
def add_etud_cells(self, etud: Identite, formsemestre: FormSemestre):
"Les cells code, nom, prénom etc."
# --- Codes (seront cachés, mais exportés en excel)
self.add_cell("etudid", "etudid", etud.id, "codes")
self.add_cell("code_nip", "code_nip", etud.code_nip or "", "codes")
# --- Identité étudiant (adapté de res_comon/get_table_recap, à factoriser XXX TODO)
self.add_cell("civilite_str", "Civ.", etud.civilite_str, "identite_detail")
self.add_cell("nom_disp", "Nom", etud.nom_disp(), "identite_detail")
self["_nom_disp_order"] = etud.sort_key
self.add_cell("prenom", "Prénom", etud.prenom, "identite_detail")
self.add_cell("nom_short", "Nom", etud.nom_short, "identite_court")
self["_nom_short_order"] = etud.sort_key
self["_nom_short_target"] = url_for(
"notes.formsemestre_bulletinetud",
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre.id,
etudid=etud.id,
)
self["_nom_short_target_attrs"] = f'class="etudinfo" id="{etud.id}"'
self["_nom_disp_target"] = self["_nom_short_target"]
self["_nom_disp_target_attrs"] = self["_nom_short_target_attrs"]
def add_ue_cell(self, ue: UniteEns, val): def add_ue_cell(self, ue: UniteEns, val):
"cell de moyenne d'UE" "cell de moyenne d'UE"
col_id = f"moy_ue_{ue.id}" col_id = f"moy_ue_{ue.id}"
@ -190,40 +212,20 @@ def get_table_jury_but(
) -> tuple[list[dict], list[str], list[str]]: ) -> tuple[list[dict], list[str], list[str]]:
"""Construit la table des résultats annuels pour le jury BUT""" """Construit la table des résultats annuels pour le jury BUT"""
res2: ResultatsSemestreBUT = res_sem.load_formsemestre_results(formsemestre2) res2: ResultatsSemestreBUT = res_sem.load_formsemestre_results(formsemestre2)
rcues = []
titles = {} # column_id : title titles = {} # column_id : title
rows = [] rows = []
for etudid in formsemestre2.etuds_inscriptions: for etudid in formsemestre2.etuds_inscriptions:
etud = Identite.query.get(etudid) etud: Identite = Identite.query.get(etudid)
deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre2) deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre2)
row = RowCollector(titles=titles) row = RowCollector(titles=titles)
# --- Codes (seront cachés, mais exportés en excel) row.add_etud_cells(etud, formsemestre2)
row.add_cell("etudid", "etudid", etudid, "codes")
row.add_cell("code_nip", "code_nip", etud.code_nip or "", "codes")
# --- Identité étudiant (adapté de res_comon/get_table_recap, à factoriser XXX TODO)
row.add_cell("civilite_str", "Civ.", etud.civilite_str, "identite_detail")
row.add_cell("nom_disp", "Nom", etud.nom_disp(), "identite_detail")
row["_nom_disp_order"] = etud.sort_key
row.add_cell("prenom", "Prénom", etud.prenom, "identite_detail")
row.add_cell("nom_short", "Nom", etud.nom_short, "identite_court")
row["_nom_short_order"] = etud.sort_key
row["_nom_short_target"] = url_for(
"notes.formsemestre_bulletinetud",
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre2.id,
etudid=etudid,
)
row["_nom_short_target_attrs"] = f'class="etudinfo" id="{etudid}"'
row["_nom_disp_target"] = row["_nom_short_target"]
row["_nom_disp_target_attrs"] = row["_nom_short_target_attrs"]
# --- Les RCUEs # --- Les RCUEs
for rcue in deca.rcues_annee: for rcue in deca.rcues_annee:
row.add_ue_cell(rcue.ue_1, rcue.moy_ue_1) row.add_ue_cell(rcue.ue_1, rcue.moy_ue_1)
row.add_ue_cell(rcue.ue_2, rcue.moy_ue_2) row.add_ue_cell(rcue.ue_2, rcue.moy_ue_2)
row.add_rcue_cell(rcue) row.add_rcue_cell(rcue)
# --- Le lien de saisie
# Le lien de saisie
if not readonly: if not readonly:
row.add_cell( row.add_cell(
"lien_saisie", "lien_saisie",
@ -237,6 +239,8 @@ def get_table_jury_but(
""", """,
) )
rows.append(row.row) rows.append(row.row)
res2.recap_add_partitions(rows, titles)
column_ids = [title for title in titles if not title.startswith("_")] column_ids = [title for title in titles if not title.startswith("_")]
column_ids.sort(key=lambda col_id: titles.get("_" + col_id + "_col_order", 1000)) column_ids.sort(key=lambda col_id: titles.get("_" + col_id + "_col_order", 1000))
rows.sort(key=lambda row: row["_nom_disp_order"])
return rows, titles, column_ids return rows, titles, column_ids

View File

@ -664,7 +664,7 @@ class ResultatsSemestre(ResultatsCache):
) )
rows.append(row) rows.append(row)
self._recap_add_partitions(rows, titles) self.recap_add_partitions(rows, titles)
self._recap_add_admissions(rows, titles) self._recap_add_admissions(rows, titles)
# tri par rang croissant # tri par rang croissant
@ -771,7 +771,9 @@ class ResultatsSemestre(ResultatsCache):
"apo": row_apo, "apo": row_apo,
} }
def _recap_etud_groups_infos(self, etudid: int, row: dict, titles: dict): def _recap_etud_groups_infos(
self, etudid: int, row: dict, titles: dict
): # XXX non utilisé
"""Table recap: ajoute à row les colonnes sur les groupes pour cet etud""" """Table recap: ajoute à row les colonnes sur les groupes pour cet etud"""
# dec = self.get_etud_decision_sem(etudid) # dec = self.get_etud_decision_sem(etudid)
# if dec: # if dec:
@ -827,7 +829,7 @@ class ResultatsSemestre(ResultatsCache):
else: else:
row[f"_{cid}_class"] = "admission" row[f"_{cid}_class"] = "admission"
def _recap_add_partitions(self, rows: list[dict], titles: dict): def recap_add_partitions(self, rows: list[dict], titles: dict):
"""Ajoute les colonnes indiquant les groupes """Ajoute les colonnes indiquant les groupes
rows est une liste de dict avec une clé "etudid" rows est une liste de dict avec une clé "etudid"
Les colonnes ont la classe css "partition" Les colonnes ont la classe css "partition"