1
0
forked from ScoDoc/ScoDoc

Assiduites : WIP tableaux options

This commit is contained in:
Iziram 2023-11-22 16:49:13 +01:00
parent 1e98dd125e
commit c0253bd05d
3 changed files with 74 additions and 12 deletions

View File

@ -16,13 +16,14 @@ class ListeAssiJusti(tb.Table):
L'affichage par défaut se fait par ordre de date de fin décroissante. L'affichage par défaut se fait par ordre de date de fin décroissante.
""" """
NB_PAR_PAGE: int = 50 NB_PAR_PAGE: int = 2
def __init__( def __init__(
self, self,
*etudiants: tuple[Identite], *etudiants: tuple[Identite],
filtre: "Filtre" = None, filtre: "Filtre" = None,
page: int = 1, page: int = 1,
nb_par_page: int = None,
**kwargs, **kwargs,
) -> None: ) -> None:
""" """
@ -36,7 +37,12 @@ class ListeAssiJusti(tb.Table):
# Gestion du filtre, par défaut un filtre vide # Gestion du filtre, par défaut un filtre vide
self.filtre = filtre if filtre is not None else Filtre() self.filtre = filtre if filtre is not None else Filtre()
# Gestion de la pagination (par défaut page 1) # Gestion de la pagination (par défaut page 1)
self.page = page self.page: int = page
self.nb_par_page: int = (
nb_par_page if nb_par_page is not None else ListeAssiJusti.NB_PAR_PAGE
)
self.total_page: int = None
# les lignes du tableau # les lignes du tableau
self.rows: list["RowAssiJusti"] = [] self.rows: list["RowAssiJusti"] = []
@ -80,7 +86,7 @@ class ListeAssiJusti(tb.Table):
# Paginer la requête pour ne pas envoyer trop d'informations au client # Paginer la requête pour ne pas envoyer trop d'informations au client
pagination: Pagination = self.paginer(query_finale) pagination: Pagination = self.paginer(query_finale)
self.total_pages: int = pagination.pages
# Générer les lignes de la page # Générer les lignes de la page
for ligne in pagination.items: for ligne in pagination.items:
row: RowAssiJusti = self.row_class(self, ligne._asdict()) row: RowAssiJusti = self.row_class(self, ligne._asdict())
@ -106,7 +112,7 @@ class ListeAssiJusti(tb.Table):
résultats paginés. résultats paginés.
""" """
return query.paginate( return query.paginate(
page=self.page, per_page=ListeAssiJusti.NB_PAR_PAGE, error_out=False page=self.page, per_page=self.nb_par_page, error_out=False
) )
def joindre(self, query_assiduite: Query = None, query_justificatif: Query = None): def joindre(self, query_assiduite: Query = None, query_justificatif: Query = None):

View File

@ -7,6 +7,37 @@
{% block app_content %} {% block app_content %}
<legend>
Options
<form action="" method="get">
<label for="show_pres">afficher les présences</label>
{% if show_pres %}
<input type="checkbox" id="show_pres" name="show_pres" checked>
{% else %}
<input type="checkbox" id="show_pres" name="show_pres">
{% endif %}
<label for="show_reta">afficher les retards</label>
{% if show_reta %}
<input type="checkbox" id="show_reta" name="show_reta" checked>
{% else %}
<input type="checkbox" id="show_reta" name="show_reta">
{% endif %}
<br>
<label for="nb_ligne_page">Nombre de ligne par page : </label>
<input type="number" name="nb_ligne_page" id="nb_ligne_page" value="{{nb_ligne_page}}">
<label for="n_page">Page n°</label>
<select name="n_page" id="n_page">
{% for n in range(1,total_pages+1) %}
<option value="{{n}}">{{n}}</option>
{% endfor %}
</select>
<br>
<input type="submit" value="valider">
</form>
</legend>
{{tableau | safe}} {{tableau | safe}}

View File

@ -327,7 +327,6 @@ def signal_assiduites_etud():
), ),
assi_morning=ScoDocSiteConfig.get("assi_morning_time", "08:00"), assi_morning=ScoDocSiteConfig.get("assi_morning_time", "08:00"),
assi_evening=ScoDocSiteConfig.get("assi_afternoon_time", "18:00"), assi_evening=ScoDocSiteConfig.get("assi_afternoon_time", "18:00"),
saisie_eval=saisie_eval, saisie_eval=saisie_eval,
date_deb=date_deb, date_deb=date_deb,
date_fin=date_fin, date_fin=date_fin,
@ -1045,18 +1044,39 @@ def visu_assi_group():
) )
@bp.route("/Test") @bp.route("/testTableau")
@scodoc @scodoc
@permission_required(Permission.ScoView) @permission_required(Permission.ScoView)
def test(): def testTableau():
"""Visualisation de l'assiduité d'un groupe entre deux dates""" """Visualisation de l'assiduité d'un groupe entre deux dates"""
fmt = request.args.get("fmt", "html")
etudid = request.args.get("etudid", 18114) etudid = request.args.get(
"etudid", 18114
) # TODO retirer la valeur par défaut de test
fmt = request.args.get("fmt", "html")
show_pres: bool | str = request.args.get("show_pres", False)
show_reta: bool | str = request.args.get("show_reta", False)
nb_ligne_page: int = request.args.get("nb_ligne_page")
# Vérification de nb_ligne_page
try:
nb_ligne_page: int = int(nb_ligne_page)
except (ValueError, TypeError):
nb_ligne_page = None
page_number: int = request.args.get("n_page", 1)
# Vérification de page_number
try:
page_number: int = int(page_number)
except (ValueError, TypeError):
page_number = 1
from app.tables.liste_assiduites import ListeAssiJusti from app.tables.liste_assiduites import ListeAssiJusti
table: ListeAssiJusti = ListeAssiJusti(Identite.get_etud(etudid)) table: ListeAssiJusti = ListeAssiJusti(
Identite.get_etud(etudid), page=page_number, nb_par_page=nb_ligne_page
)
if fmt.startswith("xls"): if fmt.startswith("xls"):
return scu.send_file( return scu.send_file(
@ -1071,6 +1091,11 @@ def test():
sco=ScoData(), sco=ScoData(),
tableau=table.html(), tableau=table.html(),
title=f"Test tableau", title=f"Test tableau",
total_pages=table.total_pages,
page_number=page_number,
show_pres=show_pres,
show_reta=show_reta,
nb_ligne_page=nb_ligne_page,
) )
@ -1354,10 +1379,10 @@ def generate_bul_list(etud: Identite, semestre: FormSemestre) -> str:
) )
@bp.route("/test", methods=["GET", "POST"]) @bp.route("/testDate", methods=["GET", "POST"])
@scodoc @scodoc
@permission_required(Permission.ScoView) @permission_required(Permission.ScoView)
def test(): def testDateutils():
"""XXX fonction de test a retirer""" """XXX fonction de test a retirer"""
if request.method == "POST": if request.method == "POST":
print("test date_utils : ", request.form) print("test date_utils : ", request.form)