1
0
forked from ScoDoc/ScoDoc

Assiduite: fix format cell. nombre dans exports excel

This commit is contained in:
Emmanuel Viennet 2024-02-08 11:05:57 +01:00
parent 2212990788
commit c8ac796347
4 changed files with 38 additions and 17 deletions

View File

@ -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"],

View File

@ -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 :
{

View File

@ -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,
)

View File

@ -1,7 +1,7 @@
# -*- mode: python -*-
# -*- coding: utf-8 -*-
SCOVERSION = "9.6.936"
SCOVERSION = "9.6.937"
SCONAME = "ScoDoc"