diff --git a/app/tables/liste_assiduites.py b/app/tables/liste_assiduites.py index e2f937888..c720fac72 100644 --- a/app/tables/liste_assiduites.py +++ b/app/tables/liste_assiduites.py @@ -401,9 +401,11 @@ class RowAssiJusti(tb.Row): self.add_cell( "entry_date", "Saisie le", - self.ligne["entry_date"].strftime("%d/%m/%y à %H:%M") - if self.ligne["entry_date"] - else "?", + ( + self.ligne["entry_date"].strftime("%d/%m/%y à %H:%M") + if self.ligne["entry_date"] + else "?" + ), data={"order": self.ligne["entry_date"] or ""}, raw_content=self.ligne["entry_date"], classes=["small-font"], diff --git a/app/tables/visu_assiduites.py b/app/tables/visu_assiduites.py index f9acbd839..357fd9c82 100644 --- a/app/tables/visu_assiduites.py +++ b/app/tables/visu_assiduites.py @@ -19,6 +19,8 @@ from app.scodoc import sco_utils as scu class TableAssi(tb.Table): """Table listant les statistiques d'assiduité des étudiants L'id de la ligne est etuid, et le row stocke etud. + + Si convert_values, transforme les nombre en chaines ("12.34"), pour le html. """ def __init__( @@ -26,12 +28,17 @@ class TableAssi(tb.Table): etuds: list[Identite] = None, dates: tuple[str, str] = None, formsemestre: FormSemestre = None, + convert_values=False, **kwargs, ): self.rows: list["RowEtud"] = [] # juste pour que VSCode nous aide sur .rows classes = ["gt_table"] self.dates = [str(dates[0]) + "T00:00", str(dates[1]) + "T23:59"] self.formsemestre = formsemestre + if convert_values: + self.fmt_num = lambda x: f"{x:2.3g}" + else: + self.fmt_num = lambda x: x super().__init__( row_class=RowAssi, classes=classes, @@ -71,6 +78,7 @@ class RowAssi(tb.Row): def add_etud_cols(self): """Ajoute les colonnes""" etud = self.etud + fmt_num = self.table.fmt_num self.table.group_titles.update( { "etud_codes": "Codes", @@ -104,12 +112,12 @@ class RowAssi(tb.Row): ) stats = self._get_etud_stats(etud) for key, value in stats.items(): - self.add_cell(key, value[0], f"{value[1] - value[2]}", "assi_stats") + self.add_cell(key, value[0], fmt_num(value[1] - value[2]), "assi_stats") if key != "present": self.add_cell( key + "_justi", value[0] + " Justifiées", - f"{value[2]}", + fmt_num(value[2]), "assi_stats", ) @@ -122,15 +130,16 @@ class RowAssi(tb.Row): self.add_cell( "justificatifs_att", "Justificatifs en Attente", - f"{compte_justificatifs_att.count()}", + fmt_num(compte_justificatifs_att.count()), ) self.add_cell( - "justificatifs", "Justificatifs", f"{compte_justificatifs.count()}" + "justificatifs", "Justificatifs", fmt_num(compte_justificatifs.count()) ) def _get_etud_stats(self, etud: Identite) -> dict[str, list[str, float, float]]: """ - Renvoie le comptage (dans la métrique du département) des différents états d'assiduité d'un étudiant + Renvoie le comptage (dans la métrique du département) des différents états + d'assiduité d'un étudiant. Returns : { diff --git a/app/views/assiduites.py b/app/views/assiduites.py index d4762a586..c58c0a849 100644 --- a/app/views/assiduites.py +++ b/app/views/assiduites.py @@ -874,9 +874,11 @@ def choix_date() -> str: if ok: return redirect( url_for( - "assiduites.signal_assiduites_group" - if request.args.get("readonly") is None - else "assiduites.visu_assiduites_group", + ( + "assiduites.signal_assiduites_group" + if request.args.get("readonly") is None + else "assiduites.visu_assiduites_group" + ), scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id, group_ids=group_ids, @@ -1294,7 +1296,12 @@ def etat_abs_date(): @scodoc @permission_required(Permission.ScoView) def visu_assi_group(): - """Visualisation de l'assiduité d'un groupe entre deux dates""" + """Visualisation de l'assiduité d'un groupe entre deux dates. + Paramètres: + - date_debut, date_fin (format ISO) + - fmt : format d'export, html (défaut) ou xls + - group_ids : liste des groupes + """ # Récupération des paramètres de la requête dates = { @@ -1317,7 +1324,10 @@ def visu_assi_group(): # Génération du tableau des assiduités table: TableAssi = TableAssi( - etuds=etuds, dates=list(dates.values()), formsemestre=formsemestre + etuds=etuds, + dates=list(dates.values()), + formsemestre=formsemestre, + convert_values=fmt == "html", ) # Export en XLS @@ -2150,9 +2160,9 @@ def _module_selector_multiple( return render_template( "assiduites/widgets/moduleimpl_selector_multiple.j2", choices=choices, - formsemestre_id=only_form.id - if only_form - else list(modimpls_by_formsemestre.keys())[0], + formsemestre_id=( + only_form.id if only_form else list(modimpls_by_formsemestre.keys())[0] + ), moduleimpl_id=moduleimpl_id, ) diff --git a/sco_version.py b/sco_version.py index 7b00890aa..13ed35a50 100644 --- a/sco_version.py +++ b/sco_version.py @@ -1,7 +1,7 @@ # -*- mode: python -*- # -*- coding: utf-8 -*- -SCOVERSION = "9.6.936" +SCOVERSION = "9.6.937" SCONAME = "ScoDoc"