forked from ScoDoc/ScoDoc
Merge pull request 'Ajout du filtre de module dans la page de bilan étudiant + résolution bug d'affichage des tableaux' (#949) from iziram/ScoDoc:master into master
Reviewed-on: ScoDoc/ScoDoc#949
This commit is contained in:
commit
408c340525
@ -168,9 +168,11 @@ class ListeAssiJusti(tb.Table):
|
|||||||
self.options.show_desc,
|
self.options.show_desc,
|
||||||
self.options.order[0],
|
self.options.order[0],
|
||||||
self.options.order[1],
|
self.options.order[1],
|
||||||
|
self.options.moduleimpl_id,
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
r = RequeteTableauAssiduiteCache().get(cle_cache)
|
r = RequeteTableauAssiduiteCache().get(cle_cache)
|
||||||
|
|
||||||
if r is None:
|
if r is None:
|
||||||
@ -194,6 +196,15 @@ class ListeAssiJusti(tb.Table):
|
|||||||
Assiduite.etat != EtatAssiduite.RETARD
|
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]:
|
if type_obj in [0, 2]:
|
||||||
justificatifs_query_etudiants = self.table_data.justificatifs_query
|
justificatifs_query_etudiants = self.table_data.justificatifs_query
|
||||||
|
|
||||||
@ -497,8 +508,7 @@ class RowAssiJusti(tb.Row):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
# Ajout de l'étudid dans la version excel
|
# Ajout de l'étudid dans la version excel
|
||||||
if self.table.no_pagination:
|
self.add_cell("etudid", "Etudid", etud.id, only_excel=True)
|
||||||
self.add_cell("etudid", "Etudid", etud.id)
|
|
||||||
|
|
||||||
# Ajout des informations de l'étudiant
|
# Ajout des informations de l'étudiant
|
||||||
|
|
||||||
@ -544,45 +554,56 @@ class RowAssiJusti(tb.Row):
|
|||||||
if self.table.options.show_module:
|
if self.table.options.show_module:
|
||||||
if self.ligne["type"] == "assiduite":
|
if self.ligne["type"] == "assiduite":
|
||||||
assi: Assiduite = Assiduite.query.get(self.ligne["obj_id"])
|
assi: Assiduite = Assiduite.query.get(self.ligne["obj_id"])
|
||||||
if self.table.no_pagination:
|
# Gestion des colonnes concernant le module
|
||||||
mod: Module = assi.get_module(False)
|
mod: Module = assi.get_module(False)
|
||||||
code = mod.code if isinstance(mod, Module) else ""
|
code = mod.code if isinstance(mod, Module) else ""
|
||||||
titre = ""
|
titre = ""
|
||||||
if isinstance(mod, Module):
|
if isinstance(mod, Module):
|
||||||
titre = mod.titre
|
titre = mod.titre
|
||||||
elif isinstance(mod, str):
|
elif isinstance(mod, str):
|
||||||
titre = mod
|
titre = mod
|
||||||
else:
|
else:
|
||||||
titre = "Non Spécifié"
|
titre = "Non Spécifié"
|
||||||
|
|
||||||
self.add_cell(
|
self.add_cell(
|
||||||
"code_module", "Code Module", code, data={"order": code}
|
"code_module",
|
||||||
)
|
"Code Module",
|
||||||
self.add_cell(
|
code,
|
||||||
"titre_module",
|
data={"order": code},
|
||||||
"Titre Module",
|
only_excel=True,
|
||||||
titre,
|
)
|
||||||
data={"order": titre},
|
self.add_cell(
|
||||||
)
|
"titre_module",
|
||||||
else:
|
"Titre Module",
|
||||||
mod: Module = assi.get_module(True)
|
titre,
|
||||||
self.add_cell(
|
data={"order": titre},
|
||||||
"module",
|
only_excel=True,
|
||||||
"Module",
|
)
|
||||||
mod,
|
|
||||||
data={"order": mod},
|
mod: Module = assi.get_module(True)
|
||||||
)
|
self.add_cell(
|
||||||
|
"module",
|
||||||
|
"Module",
|
||||||
|
mod,
|
||||||
|
data={"order": mod},
|
||||||
|
no_excel=True,
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
if self.table.no_pagination:
|
self.add_cell("module", "Module", "", data={"order": ""}, no_excel=True)
|
||||||
self.add_cell("module", "Module", "", data={"order": ""})
|
self.add_cell(
|
||||||
else:
|
"code_module",
|
||||||
self.add_cell("code_module", "Code Module", "", data={"order": ""})
|
"Code Module",
|
||||||
self.add_cell(
|
"",
|
||||||
"titre_module",
|
data={"order": ""},
|
||||||
"Titre Module",
|
only_excel=True,
|
||||||
"",
|
)
|
||||||
data={"order": ""},
|
self.add_cell(
|
||||||
)
|
"titre_module",
|
||||||
|
"Titre Module",
|
||||||
|
"",
|
||||||
|
data={"order": ""},
|
||||||
|
only_excel=True,
|
||||||
|
)
|
||||||
|
|
||||||
def _utilisateur(self) -> None:
|
def _utilisateur(self) -> None:
|
||||||
utilisateur: User = (
|
utilisateur: User = (
|
||||||
@ -764,6 +785,7 @@ class AssiDisplayOptions:
|
|||||||
show_module: str | bool = False,
|
show_module: str | bool = False,
|
||||||
order: tuple[str, str | bool] = None,
|
order: tuple[str, str | bool] = None,
|
||||||
annee_sco: int = None,
|
annee_sco: int = None,
|
||||||
|
moduleimpl_id: int = None,
|
||||||
):
|
):
|
||||||
self.page: int = page
|
self.page: int = page
|
||||||
self.nb_ligne_page: int = nb_ligne_page
|
self.nb_ligne_page: int = nb_ligne_page
|
||||||
@ -778,6 +800,7 @@ class AssiDisplayOptions:
|
|||||||
self.show_module = to_bool(show_module)
|
self.show_module = to_bool(show_module)
|
||||||
|
|
||||||
self.annee_sco: int | None = annee_sco
|
self.annee_sco: int | None = annee_sco
|
||||||
|
self.moduleimpl_id: int | None = moduleimpl_id
|
||||||
|
|
||||||
self.order = (
|
self.order = (
|
||||||
("date_debut", False) if order is None else (order[0], to_bool(order[1]))
|
("date_debut", False) if order is None else (order[0], to_bool(order[1]))
|
||||||
|
@ -1,8 +1,12 @@
|
|||||||
<select name="moduleimpl_select" id="moduleimpl_select">
|
<select name="moduleimpl_select" id="moduleimpl_select">
|
||||||
|
|
||||||
{% with moduleimpl_id=moduleimpl_id %}
|
{% if not no_default %}
|
||||||
{% include "assiduites/widgets/simplemoduleimpl_select.j2" %}
|
{% with moduleimpl_id=moduleimpl_id %}
|
||||||
{% endwith %}
|
{% include "assiduites/widgets/simplemoduleimpl_select.j2" %}
|
||||||
|
{% endwith %}
|
||||||
|
{% else %}
|
||||||
|
<option value="">Pas de filtre</option>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% for cat, mods in choices.items() %}
|
{% for cat, mods in choices.items() %}
|
||||||
<optgroup label="{{cat}}">
|
<optgroup label="{{cat}}">
|
||||||
|
@ -43,6 +43,13 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
<br>
|
<br>
|
||||||
|
{% if moduleimpl_select %}
|
||||||
|
<label for="moduleimpl_select">
|
||||||
|
Filtrage du module
|
||||||
|
{{moduleimpl_select | safe}}
|
||||||
|
</label>
|
||||||
|
{% endif %}
|
||||||
|
<br>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="div-tableau">
|
<div class="div-tableau">
|
||||||
@ -205,6 +212,15 @@
|
|||||||
location.href = url.href
|
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
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -589,12 +589,26 @@ def bilan_etud():
|
|||||||
Returns:
|
Returns:
|
||||||
str: l'html généré
|
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
|
# Récupération de l'étudiant
|
||||||
etudid = request.args.get("etudid", -1)
|
etudid = request.args.get("etudid", -1)
|
||||||
etud: Identite = Identite.query.get_or_404(etudid)
|
etud: Identite = Identite.query.get_or_404(etudid)
|
||||||
if etud.dept_id != g.scodoc_dept_id:
|
if etud.dept_id != g.scodoc_dept_id:
|
||||||
abort(404, "étudiant inexistant dans ce département")
|
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)
|
# Gestion des dates du bilan (par défaut l'année scolaire)
|
||||||
date_debut = scu.date_debut_annee_scolaire().strftime(scu.DATE_FMT)
|
date_debut = scu.date_debut_annee_scolaire().strftime(scu.DATE_FMT)
|
||||||
date_fin: str = scu.date_fin_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),
|
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
|
# Préparation de la page
|
||||||
tableau = _prepare_tableau(
|
tableau = _prepare_tableau(
|
||||||
liste_assi.AssiJustifData.from_etudiants(
|
liste_assi.AssiJustifData.from_etudiants(etud),
|
||||||
etud,
|
|
||||||
),
|
|
||||||
filename=f"assiduites-justificatifs-{etud.id}",
|
filename=f"assiduites-justificatifs-{etud.id}",
|
||||||
afficher_etu=False,
|
afficher_etu=False,
|
||||||
filtre=liste_assi.AssiFiltre(type_obj=0),
|
filtre=liste_assi.AssiFiltre(type_obj=0),
|
||||||
options=liste_assi.AssiDisplayOptions(show_module=True),
|
options=options,
|
||||||
cache_key=f"tableau-etud-{etud.id}",
|
cache_key=f"tableau-etud-{etud.id}",
|
||||||
|
moduleimpl_select=moduleimpl_select,
|
||||||
)
|
)
|
||||||
if not tableau[0]:
|
if not tableau[0]:
|
||||||
return tableau[1]
|
return tableau[1]
|
||||||
@ -1359,6 +1378,7 @@ def _prepare_tableau(
|
|||||||
filtre: liste_assi.AssiFiltre = None,
|
filtre: liste_assi.AssiFiltre = None,
|
||||||
options: liste_assi.AssiDisplayOptions = None,
|
options: liste_assi.AssiDisplayOptions = None,
|
||||||
afficher_options: bool = True,
|
afficher_options: bool = True,
|
||||||
|
moduleimpl_select: str = None,
|
||||||
titre="Évènements enregistrés pour cet étudiant",
|
titre="Évènements enregistrés pour cet étudiant",
|
||||||
cache_key: str = "",
|
cache_key: str = "",
|
||||||
force_options: dict[str, object] = None,
|
force_options: dict[str, object] = None,
|
||||||
@ -1454,6 +1474,7 @@ def _prepare_tableau(
|
|||||||
options=options,
|
options=options,
|
||||||
afficher_options=afficher_options,
|
afficher_options=afficher_options,
|
||||||
titre=titre,
|
titre=titre,
|
||||||
|
moduleimpl_select=moduleimpl_select,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -2270,7 +2291,10 @@ def _module_selector(formsemestre: FormSemestre, moduleimpl_id: int = None) -> s
|
|||||||
|
|
||||||
|
|
||||||
def _module_selector_multiple(
|
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:
|
) -> str:
|
||||||
"""menu HTML <select> pour choix moduleimpl
|
"""menu HTML <select> pour choix moduleimpl
|
||||||
Prend les semestres de l'année, sauf si only_form est indiqué.
|
Prend les semestres de l'année, sauf si only_form est indiqué.
|
||||||
@ -2298,6 +2322,7 @@ def _module_selector_multiple(
|
|||||||
"assiduites/widgets/moduleimpl_selector_multiple.j2",
|
"assiduites/widgets/moduleimpl_selector_multiple.j2",
|
||||||
choices=choices,
|
choices=choices,
|
||||||
moduleimpl_id=moduleimpl_id,
|
moduleimpl_id=moduleimpl_id,
|
||||||
|
no_default=no_default,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user