1 file + 70 − 2 Side-by-side Compare changes Side-by-side Inline Show whitespace changes Files 1 app/scodoc/sco_formsemestre_status.py +70 −2 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,9 @@ import datetime import datetime from app import db from sqlalchemy import text from flask import current_app from flask import current_app from flask import g from flask import g from flask import request from flask import request Loading Loading @@ -889,6 +892,7 @@ def _make_listes_sem(formsemestre: FormSemestre) -> str: }">Ajouter une partition</a>""" }">Ajouter une partition</a>""" ) ) # --- Formulaire importation Assiduité excel (si autorisé) # --- Formulaire importation Assiduité excel (si autorisé) if current_user.has_permission(Permission.AbsChange) and not disable_abs: if current_user.has_permission(Permission.AbsChange) and not disable_abs: autres_liens.append( autres_liens.append( Loading Loading @@ -978,6 +982,8 @@ def formsemestre_status_head(formsemestre_id: int = None, page_title: str = None formation.acronyme}, v{formation.version}">{formation.titre}</a> formation.acronyme}, v{formation.version}">{formation.titre}</a> """, """, ] ] if formsemestre.semestre_id >= 0: if formsemestre.semestre_id >= 0: H.append(f", {parcours.SESSION_NAME} {formsemestre.semestre_id}") H.append(f", {parcours.SESSION_NAME} {formsemestre.semestre_id}") if formsemestre.modalite: if formsemestre.modalite: Loading Loading @@ -1022,6 +1028,8 @@ def formsemestre_status_head(formsemestre_id: int = None, page_title: str = None ) ) H.append("</td></tr>") H.append("</td></tr>") H.append("</table>") H.append("</table>") warnings = [] warnings = [] if evals["attente"]: if evals["attente"]: warnings.append( warnings.append( Loading @@ -1043,7 +1051,64 @@ def formsemestre_status_head(formsemestre_id: int = None, page_title: str = None return "".join(H) 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): def formsemestre_status(formsemestre_id=None, check_parcours=True): """Tableau de bord semestre HTML""" """Tableau de bord semestre HTML""" # porté du DTML # porté du DTML if formsemestre_id is not None and not isinstance(formsemestre_id, int): if formsemestre_id is not None and not isinstance(formsemestre_id, int): Loading Loading @@ -1140,7 +1205,7 @@ def formsemestre_status(formsemestre_id=None, check_parcours=True): </tr> """, </tr> """, formsemestre_tableau_modules( formsemestre_tableau_modules( saes, nt, formsemestre, can_edit=can_edit, show_ues=False saes, nt, formsemestre, can_edit=can_edit, show_ues=False ), ),generate_html_table(formsemestre) ] ] if autres: if autres: H += [ H += [ Loading Loading @@ -1210,6 +1275,7 @@ _TABLEAU_MODULES_HEAD = """ _TABLEAU_MODULES_FOOT = """</table>""" _TABLEAU_MODULES_FOOT = """</table>""" def formsemestre_tableau_modules( def formsemestre_tableau_modules( modimpls: list[ModuleImpl], modimpls: list[ModuleImpl], nt, nt, Loading Loading @@ -1504,3 +1570,5 @@ def formsemestre_note_etuds_sans_notes( sco=ScoData(formsemestre=formsemestre, etud=etud), sco=ScoData(formsemestre=formsemestre, etud=etud), title=f"{formsemestre.sem_modalite()} {formsemestre.titre_annee()}", title=f"{formsemestre.sem_modalite()} {formsemestre.titre_annee()}", ) )
app/scodoc/sco_formsemestre_status.py +70 −2 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,9 @@ import datetime import datetime from app import db from sqlalchemy import text from flask import current_app from flask import current_app from flask import g from flask import g from flask import request from flask import request Loading Loading @@ -889,6 +892,7 @@ def _make_listes_sem(formsemestre: FormSemestre) -> str: }">Ajouter une partition</a>""" }">Ajouter une partition</a>""" ) ) # --- Formulaire importation Assiduité excel (si autorisé) # --- Formulaire importation Assiduité excel (si autorisé) if current_user.has_permission(Permission.AbsChange) and not disable_abs: if current_user.has_permission(Permission.AbsChange) and not disable_abs: autres_liens.append( autres_liens.append( Loading Loading @@ -978,6 +982,8 @@ def formsemestre_status_head(formsemestre_id: int = None, page_title: str = None formation.acronyme}, v{formation.version}">{formation.titre}</a> formation.acronyme}, v{formation.version}">{formation.titre}</a> """, """, ] ] if formsemestre.semestre_id >= 0: if formsemestre.semestre_id >= 0: H.append(f", {parcours.SESSION_NAME} {formsemestre.semestre_id}") H.append(f", {parcours.SESSION_NAME} {formsemestre.semestre_id}") if formsemestre.modalite: if formsemestre.modalite: Loading Loading @@ -1022,6 +1028,8 @@ def formsemestre_status_head(formsemestre_id: int = None, page_title: str = None ) ) H.append("</td></tr>") H.append("</td></tr>") H.append("</table>") H.append("</table>") warnings = [] warnings = [] if evals["attente"]: if evals["attente"]: warnings.append( warnings.append( Loading @@ -1043,7 +1051,64 @@ def formsemestre_status_head(formsemestre_id: int = None, page_title: str = None return "".join(H) 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): def formsemestre_status(formsemestre_id=None, check_parcours=True): """Tableau de bord semestre HTML""" """Tableau de bord semestre HTML""" # porté du DTML # porté du DTML if formsemestre_id is not None and not isinstance(formsemestre_id, int): if formsemestre_id is not None and not isinstance(formsemestre_id, int): Loading Loading @@ -1140,7 +1205,7 @@ def formsemestre_status(formsemestre_id=None, check_parcours=True): </tr> """, </tr> """, formsemestre_tableau_modules( formsemestre_tableau_modules( saes, nt, formsemestre, can_edit=can_edit, show_ues=False saes, nt, formsemestre, can_edit=can_edit, show_ues=False ), ),generate_html_table(formsemestre) ] ] if autres: if autres: H += [ H += [ Loading Loading @@ -1210,6 +1275,7 @@ _TABLEAU_MODULES_HEAD = """ _TABLEAU_MODULES_FOOT = """</table>""" _TABLEAU_MODULES_FOOT = """</table>""" def formsemestre_tableau_modules( def formsemestre_tableau_modules( modimpls: list[ModuleImpl], modimpls: list[ModuleImpl], nt, nt, Loading Loading @@ -1504,3 +1570,5 @@ def formsemestre_note_etuds_sans_notes( sco=ScoData(formsemestre=formsemestre, etud=etud), sco=ScoData(formsemestre=formsemestre, etud=etud), title=f"{formsemestre.sem_modalite()} {formsemestre.titre_annee()}", title=f"{formsemestre.sem_modalite()} {formsemestre.titre_annee()}", ) )