diff --git a/app/scodoc/sco_formsemestre_status.py b/app/scodoc/sco_formsemestre_status.py index f634d73baa1d3b8cf1468116d59d449a3b93d8c5..5a2a0c06d1c2756aaab4a63c25c35ca011382a4a 100755 --- a/app/scodoc/sco_formsemestre_status.py +++ b/app/scodoc/sco_formsemestre_status.py @@ -29,6 +29,9 @@ import datetime +from app import db +from sqlalchemy import text + from flask import current_app from flask import g from flask import request @@ -889,6 +892,7 @@ def _make_listes_sem(formsemestre: FormSemestre) -> str: }">Ajouter une partition</a>""" ) + # --- Formulaire importation Assiduité excel (si autorisé) if current_user.has_permission(Permission.AbsChange) and not disable_abs: autres_liens.append( @@ -978,6 +982,8 @@ def formsemestre_status_head(formsemestre_id: int = None, page_title: str = None formation.acronyme}, v{formation.version}">{formation.titre}</a> """, ] + + if formsemestre.semestre_id >= 0: H.append(f", {parcours.SESSION_NAME} {formsemestre.semestre_id}") if formsemestre.modalite: @@ -1022,6 +1028,8 @@ def formsemestre_status_head(formsemestre_id: int = None, page_title: str = None ) H.append("</td></tr>") H.append("</table>") + + warnings = [] if evals["attente"]: warnings.append( @@ -1043,7 +1051,64 @@ def formsemestre_status_head(formsemestre_id: int = None, page_title: str = None return "".join(H) + + +def get_code_apo_results(formsemestreID): + queries = [ + (text("SELECT elt_sem_apo, titre FROM notes_formsemestre WHERE elt_sem_apo IS NOT NULL AND semestre_id = :semestre_id"), "SEMESTRE"), + (text("SELECT elt_annee_apo, titre FROM notes_formsemestre WHERE elt_annee_apo IS NOT NULL AND semestre_id = :semestre_id"), "ANNEE"), + (text("SELECT elt_passage_apo, titre FROM notes_formsemestre WHERE elt_passage_apo IS NOT NULL AND semestre_id = :semestre_id"), "PASSAGE"), + (text("SELECT code_apogee, titre FROM notes_modules WHERE code_apogee IS NOT NULL AND semestre_id = :semestre_id"), "MODULE"), + (text("SELECT code_apogee, titre FROM notes_ue WHERE code_apogee IS NOT NULL AND semestre_idx = :semestre_id"), "UE"), + ] + + results = [] + for query, table_name in queries: + result = db.session.execute(query, params={"semestre_id": formsemestreID}).mappings().fetchall() + results.append((table_name, [dict(row) for row in result])) + + return results + +def generate_html_table(formsemestre): + results = get_code_apo_results(formsemestre.semestre_id) + + html_content = f""" + <table> + <thead> + <tr> + <th>Code Apogée</th> + <th>Type</th> + <th>Nom</th> + </tr> + </thead> + <tbody> + """ + + for table_name, rows in results: + for row in rows: + code_apogee = row.get("elt_sem_apo") or row.get("elt_annee_apo") or row.get("elt_passage_apo") or row.get("code_apogee") + titre = row.get("titre") + + html_content += f""" + <tr class="formsemestre_status_ue"> + <td>{code_apogee}</td> + <td>{table_name}</td> + <td>{titre}</td> + </tr> + """ + + html_content += """ + </tbody> + </table> + """ + return html_content + + + + + def formsemestre_status(formsemestre_id=None, check_parcours=True): + """Tableau de bord semestre HTML""" # porté du DTML if formsemestre_id is not None and not isinstance(formsemestre_id, int): @@ -1137,10 +1202,10 @@ def formsemestre_status(formsemestre_id=None, check_parcours=True): <td colspan="5"> <span class="status_module_cat">SAÉs</span> </td> - </tr>""", + </tr> """, formsemestre_tableau_modules( saes, nt, formsemestre, can_edit=can_edit, show_ues=False - ), + ),generate_html_table(formsemestre) ] if autres: H += [ @@ -1210,6 +1275,7 @@ _TABLEAU_MODULES_HEAD = """ _TABLEAU_MODULES_FOOT = """</table>""" + def formsemestre_tableau_modules( modimpls: list[ModuleImpl], nt, @@ -1504,3 +1570,5 @@ def formsemestre_note_etuds_sans_notes( sco=ScoData(formsemestre=formsemestre, etud=etud), title=f"{formsemestre.sem_modalite()} {formsemestre.titre_annee()}", ) + +