diff --git a/app/tables/liste_assiduites.py b/app/tables/liste_assiduites.py index 8e9ece7a..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 @@ -774,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 @@ -788,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