diff --git a/app/tables/liste_assiduites.py b/app/tables/liste_assiduites.py index 7b0204b9..ea808c53 100644 --- a/app/tables/liste_assiduites.py +++ b/app/tables/liste_assiduites.py @@ -168,9 +168,11 @@ class ListeAssiJusti(tb.Table): self.options.show_desc, self.options.order[0], self.options.order[1], + self.options.moduleimpl_id, ], ) ) + r = RequeteTableauAssiduiteCache().get(cle_cache) if r is None: @@ -194,6 +196,15 @@ class ListeAssiJusti(tb.Table): Assiduite.etat != EtatAssiduite.RETARD ) + # Filtrage par moduleimpl_id + if ( + self.options.moduleimpl_id is not None + and assiduites_query_etudiants is not None + ): + assiduites_query_etudiants = assiduites_query_etudiants.filter( + Assiduite.moduleimpl_id == self.options.moduleimpl_id + ) + if type_obj in [0, 2]: justificatifs_query_etudiants = self.table_data.justificatifs_query @@ -497,8 +508,7 @@ class RowAssiJusti(tb.Row): } ) # Ajout de l'étudid dans la version excel - if self.table.no_pagination: - self.add_cell("etudid", "Etudid", etud.id) + self.add_cell("etudid", "Etudid", etud.id, only_excel=True) # Ajout des informations de l'étudiant @@ -544,45 +554,56 @@ class RowAssiJusti(tb.Row): if self.table.options.show_module: if self.ligne["type"] == "assiduite": assi: Assiduite = Assiduite.query.get(self.ligne["obj_id"]) - if self.table.no_pagination: - mod: Module = assi.get_module(False) - code = mod.code if isinstance(mod, Module) else "" - titre = "" - if isinstance(mod, Module): - titre = mod.titre - elif isinstance(mod, str): - titre = mod - else: - titre = "Non Spécifié" + # Gestion des colonnes concernant le module + mod: Module = assi.get_module(False) + code = mod.code if isinstance(mod, Module) else "" + titre = "" + if isinstance(mod, Module): + titre = mod.titre + elif isinstance(mod, str): + titre = mod + else: + titre = "Non Spécifié" - self.add_cell( - "code_module", "Code Module", code, data={"order": code} - ) - self.add_cell( - "titre_module", - "Titre Module", - titre, - data={"order": titre}, - ) - else: - mod: Module = assi.get_module(True) - self.add_cell( - "module", - "Module", - mod, - data={"order": mod}, - ) + self.add_cell( + "code_module", + "Code Module", + code, + data={"order": code}, + only_excel=True, + ) + self.add_cell( + "titre_module", + "Titre Module", + titre, + data={"order": titre}, + only_excel=True, + ) + + mod: Module = assi.get_module(True) + self.add_cell( + "module", + "Module", + mod, + data={"order": mod}, + no_excel=True, + ) else: - if self.table.no_pagination: - self.add_cell("module", "Module", "", data={"order": ""}) - else: - self.add_cell("code_module", "Code Module", "", data={"order": ""}) - self.add_cell( - "titre_module", - "Titre Module", - "", - data={"order": ""}, - ) + self.add_cell("module", "Module", "", data={"order": ""}, no_excel=True) + self.add_cell( + "code_module", + "Code Module", + "", + data={"order": ""}, + only_excel=True, + ) + self.add_cell( + "titre_module", + "Titre Module", + "", + data={"order": ""}, + only_excel=True, + ) def _utilisateur(self) -> None: utilisateur: User = ( @@ -764,6 +785,7 @@ class AssiDisplayOptions: show_module: str | bool = False, order: tuple[str, str | bool] = None, annee_sco: int = None, + moduleimpl_id: int = None, ): self.page: int = page self.nb_ligne_page: int = nb_ligne_page @@ -778,6 +800,7 @@ class AssiDisplayOptions: self.show_module = to_bool(show_module) self.annee_sco: int | None = annee_sco + self.moduleimpl_id: int | None = moduleimpl_id self.order = ( ("date_debut", False) if order is None else (order[0], to_bool(order[1])) diff --git a/app/templates/assiduites/widgets/moduleimpl_selector_multiple.j2 b/app/templates/assiduites/widgets/moduleimpl_selector_multiple.j2 index db77984f..1a0a8b97 100644 --- a/app/templates/assiduites/widgets/moduleimpl_selector_multiple.j2 +++ b/app/templates/assiduites/widgets/moduleimpl_selector_multiple.j2 @@ -1,8 +1,12 @@
+ {% if moduleimpl_select %} + + {% endif %} +
@@ -205,6 +212,15 @@ location.href = url.href })); + + const selecteur = document.querySelector("#moduleimpl_select"); + console.log(selecteur); + selecteur.addEventListener('change', ()=>{ + console.log("selecteur", selecteur.value) + const url = new URL(location.href); + url.searchParams.set("moduleimpl_id", selecteur.value); + location.href = url.href + }); }); diff --git a/app/views/assiduites.py b/app/views/assiduites.py index d5d23afd..b060aa77 100644 --- a/app/views/assiduites.py +++ b/app/views/assiduites.py @@ -589,12 +589,26 @@ def bilan_etud(): Returns: str: l'html généré """ + # Initialisation des options du tableau + options: liste_assi.AssiDisplayOptions = liste_assi.AssiDisplayOptions( + show_module=True + ) + # Récupération de l'étudiant etudid = request.args.get("etudid", -1) etud: Identite = Identite.query.get_or_404(etudid) if etud.dept_id != g.scodoc_dept_id: abort(404, "étudiant inexistant dans ce département") + # Gestion du filtre de module + moduleimpl_id = request.args.get("moduleimpl_id", None) + if moduleimpl_id is not None: + try: + moduleimpl_id = int(moduleimpl_id) + except ValueError: + moduleimpl_id = None + options.moduleimpl_id = moduleimpl_id + # Gestion des dates du bilan (par défaut l'année scolaire) date_debut = scu.date_debut_annee_scolaire().strftime(scu.DATE_FMT) date_fin: str = scu.date_fin_annee_scolaire().strftime(scu.DATE_FMT) @@ -604,16 +618,21 @@ def bilan_etud(): sco_preferences.get_preference("assi_metrique", dept_id=g.scodoc_dept_id), ) + # préparation du selecteur de moduleimpl + + moduleimpl_select: str = _module_selector_multiple( + etud, moduleimpl_id, no_default=True + ) + # Préparation de la page tableau = _prepare_tableau( - liste_assi.AssiJustifData.from_etudiants( - etud, - ), + liste_assi.AssiJustifData.from_etudiants(etud), filename=f"assiduites-justificatifs-{etud.id}", afficher_etu=False, filtre=liste_assi.AssiFiltre(type_obj=0), - options=liste_assi.AssiDisplayOptions(show_module=True), + options=options, cache_key=f"tableau-etud-{etud.id}", + moduleimpl_select=moduleimpl_select, ) if not tableau[0]: return tableau[1] @@ -1359,6 +1378,7 @@ def _prepare_tableau( filtre: liste_assi.AssiFiltre = None, options: liste_assi.AssiDisplayOptions = None, afficher_options: bool = True, + moduleimpl_select: str = None, titre="Évènements enregistrés pour cet étudiant", cache_key: str = "", force_options: dict[str, object] = None, @@ -1454,6 +1474,7 @@ def _prepare_tableau( options=options, afficher_options=afficher_options, titre=titre, + moduleimpl_select=moduleimpl_select, ) @@ -2270,7 +2291,10 @@ def _module_selector(formsemestre: FormSemestre, moduleimpl_id: int = None) -> s def _module_selector_multiple( - etud: Identite, moduleimpl_id: int = None, only_form: FormSemestre = None + etud: Identite, + moduleimpl_id: int = None, + only_form: FormSemestre = None, + no_default: bool = False, ) -> str: """menu HTML