diff --git a/app/but/jury_but_recap.py b/app/but/jury_but_recap.py index 7b9335a1..672603d2 100644 --- a/app/but/jury_but_recap.py +++ b/app/but/jury_but_recap.py @@ -152,6 +152,28 @@ class RowCollector: self.titles[f"_{col_id}_class"] = classes 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): "cell de moyenne d'UE" col_id = f"moy_ue_{ue.id}" @@ -190,40 +212,20 @@ def get_table_jury_but( ) -> tuple[list[dict], list[str], list[str]]: """Construit la table des résultats annuels pour le jury BUT""" res2: ResultatsSemestreBUT = res_sem.load_formsemestre_results(formsemestre2) - rcues = [] - titles = {} # column_id : title rows = [] for etudid in formsemestre2.etuds_inscriptions: - etud = Identite.query.get(etudid) + etud: Identite = Identite.query.get(etudid) deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre2) row = RowCollector(titles=titles) - # --- Codes (seront cachés, mais exportés en excel) - 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"] + row.add_etud_cells(etud, formsemestre2) + # --- Les RCUEs for rcue in deca.rcues_annee: row.add_ue_cell(rcue.ue_1, rcue.moy_ue_1) row.add_ue_cell(rcue.ue_2, rcue.moy_ue_2) row.add_rcue_cell(rcue) - - # Le lien de saisie + # --- Le lien de saisie if not readonly: row.add_cell( "lien_saisie", @@ -237,6 +239,8 @@ def get_table_jury_but( """, ) rows.append(row.row) + res2.recap_add_partitions(rows, titles) 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)) + rows.sort(key=lambda row: row["_nom_disp_order"]) return rows, titles, column_ids diff --git a/app/comp/res_common.py b/app/comp/res_common.py index 56a10d3f..722d4ecb 100644 --- a/app/comp/res_common.py +++ b/app/comp/res_common.py @@ -664,7 +664,7 @@ class ResultatsSemestre(ResultatsCache): ) rows.append(row) - self._recap_add_partitions(rows, titles) + self.recap_add_partitions(rows, titles) self._recap_add_admissions(rows, titles) # tri par rang croissant @@ -771,7 +771,9 @@ class ResultatsSemestre(ResultatsCache): "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""" # dec = self.get_etud_decision_sem(etudid) # if dec: @@ -827,7 +829,7 @@ class ResultatsSemestre(ResultatsCache): else: 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 rows est une liste de dict avec une clé "etudid" Les colonnes ont la classe css "partition"