diff --git a/app/tables/liste_assiduites.py b/app/tables/liste_assiduites.py
index 8e9ece7a8..ea808c53f 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 db77984f1..1a0a8b974 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 d5d23afd1..b060aa77e 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