forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -401,9 +401,11 @@ class RowAssiJusti(tb.Row):
|
|||||||
self.add_cell(
|
self.add_cell(
|
||||||
"entry_date",
|
"entry_date",
|
||||||
"Saisie le",
|
"Saisie le",
|
||||||
self.ligne["entry_date"].strftime("%d/%m/%y à %H:%M")
|
(
|
||||||
if self.ligne["entry_date"]
|
self.ligne["entry_date"].strftime("%d/%m/%y à %H:%M")
|
||||||
else "?",
|
if self.ligne["entry_date"]
|
||||||
|
else "?"
|
||||||
|
),
|
||||||
data={"order": self.ligne["entry_date"] or ""},
|
data={"order": self.ligne["entry_date"] or ""},
|
||||||
raw_content=self.ligne["entry_date"],
|
raw_content=self.ligne["entry_date"],
|
||||||
classes=["small-font"],
|
classes=["small-font"],
|
||||||
|
@ -19,6 +19,8 @@ from app.scodoc import sco_utils as scu
|
|||||||
class TableAssi(tb.Table):
|
class TableAssi(tb.Table):
|
||||||
"""Table listant les statistiques d'assiduité des étudiants
|
"""Table listant les statistiques d'assiduité des étudiants
|
||||||
L'id de la ligne est etuid, et le row stocke etud.
|
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__(
|
def __init__(
|
||||||
@ -26,12 +28,17 @@ class TableAssi(tb.Table):
|
|||||||
etuds: list[Identite] = None,
|
etuds: list[Identite] = None,
|
||||||
dates: tuple[str, str] = None,
|
dates: tuple[str, str] = None,
|
||||||
formsemestre: FormSemestre = None,
|
formsemestre: FormSemestre = None,
|
||||||
|
convert_values=False,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
):
|
):
|
||||||
self.rows: list["RowEtud"] = [] # juste pour que VSCode nous aide sur .rows
|
self.rows: list["RowEtud"] = [] # juste pour que VSCode nous aide sur .rows
|
||||||
classes = ["gt_table"]
|
classes = ["gt_table"]
|
||||||
self.dates = [str(dates[0]) + "T00:00", str(dates[1]) + "T23:59"]
|
self.dates = [str(dates[0]) + "T00:00", str(dates[1]) + "T23:59"]
|
||||||
self.formsemestre = formsemestre
|
self.formsemestre = formsemestre
|
||||||
|
if convert_values:
|
||||||
|
self.fmt_num = lambda x: f"{x:2.3g}"
|
||||||
|
else:
|
||||||
|
self.fmt_num = lambda x: x
|
||||||
super().__init__(
|
super().__init__(
|
||||||
row_class=RowAssi,
|
row_class=RowAssi,
|
||||||
classes=classes,
|
classes=classes,
|
||||||
@ -71,6 +78,7 @@ class RowAssi(tb.Row):
|
|||||||
def add_etud_cols(self):
|
def add_etud_cols(self):
|
||||||
"""Ajoute les colonnes"""
|
"""Ajoute les colonnes"""
|
||||||
etud = self.etud
|
etud = self.etud
|
||||||
|
fmt_num = self.table.fmt_num
|
||||||
self.table.group_titles.update(
|
self.table.group_titles.update(
|
||||||
{
|
{
|
||||||
"etud_codes": "Codes",
|
"etud_codes": "Codes",
|
||||||
@ -104,12 +112,12 @@ class RowAssi(tb.Row):
|
|||||||
)
|
)
|
||||||
stats = self._get_etud_stats(etud)
|
stats = self._get_etud_stats(etud)
|
||||||
for key, value in stats.items():
|
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":
|
if key != "present":
|
||||||
self.add_cell(
|
self.add_cell(
|
||||||
key + "_justi",
|
key + "_justi",
|
||||||
value[0] + " Justifiées",
|
value[0] + " Justifiées",
|
||||||
f"{value[2]}",
|
fmt_num(value[2]),
|
||||||
"assi_stats",
|
"assi_stats",
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -122,15 +130,16 @@ class RowAssi(tb.Row):
|
|||||||
self.add_cell(
|
self.add_cell(
|
||||||
"justificatifs_att",
|
"justificatifs_att",
|
||||||
"Justificatifs en Attente",
|
"Justificatifs en Attente",
|
||||||
f"{compte_justificatifs_att.count()}",
|
fmt_num(compte_justificatifs_att.count()),
|
||||||
)
|
)
|
||||||
self.add_cell(
|
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]]:
|
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 :
|
Returns :
|
||||||
{
|
{
|
||||||
|
@ -874,9 +874,11 @@ def choix_date() -> str:
|
|||||||
if ok:
|
if ok:
|
||||||
return redirect(
|
return redirect(
|
||||||
url_for(
|
url_for(
|
||||||
"assiduites.signal_assiduites_group"
|
(
|
||||||
if request.args.get("readonly") is None
|
"assiduites.signal_assiduites_group"
|
||||||
else "assiduites.visu_assiduites_group",
|
if request.args.get("readonly") is None
|
||||||
|
else "assiduites.visu_assiduites_group"
|
||||||
|
),
|
||||||
scodoc_dept=g.scodoc_dept,
|
scodoc_dept=g.scodoc_dept,
|
||||||
formsemestre_id=formsemestre_id,
|
formsemestre_id=formsemestre_id,
|
||||||
group_ids=group_ids,
|
group_ids=group_ids,
|
||||||
@ -1294,7 +1296,12 @@ def etat_abs_date():
|
|||||||
@scodoc
|
@scodoc
|
||||||
@permission_required(Permission.ScoView)
|
@permission_required(Permission.ScoView)
|
||||||
def visu_assi_group():
|
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
|
# Récupération des paramètres de la requête
|
||||||
dates = {
|
dates = {
|
||||||
@ -1317,7 +1324,10 @@ def visu_assi_group():
|
|||||||
|
|
||||||
# Génération du tableau des assiduités
|
# Génération du tableau des assiduités
|
||||||
table: TableAssi = TableAssi(
|
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
|
# Export en XLS
|
||||||
@ -2150,9 +2160,9 @@ def _module_selector_multiple(
|
|||||||
return render_template(
|
return render_template(
|
||||||
"assiduites/widgets/moduleimpl_selector_multiple.j2",
|
"assiduites/widgets/moduleimpl_selector_multiple.j2",
|
||||||
choices=choices,
|
choices=choices,
|
||||||
formsemestre_id=only_form.id
|
formsemestre_id=(
|
||||||
if only_form
|
only_form.id if only_form else list(modimpls_by_formsemestre.keys())[0]
|
||||||
else list(modimpls_by_formsemestre.keys())[0],
|
),
|
||||||
moduleimpl_id=moduleimpl_id,
|
moduleimpl_id=moduleimpl_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# -*- mode: python -*-
|
# -*- mode: python -*-
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
SCOVERSION = "9.6.936"
|
SCOVERSION = "9.6.937"
|
||||||
|
|
||||||
SCONAME = "ScoDoc"
|
SCONAME = "ScoDoc"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user