forked from ScoDoc/ScoDoc
fusion col type/etat + col utilisateur + etudiant_seul
This commit is contained in:
parent
bb4a427207
commit
69e25952e3
@ -1,5 +1,6 @@
|
||||
from app.tables import table_builder as tb
|
||||
from app.models import Identite, Assiduite, Justificatif
|
||||
from app.auth.models import User
|
||||
from datetime import datetime
|
||||
from app.scodoc.sco_utils import EtatAssiduite, EtatJustificatif
|
||||
from flask_sqlalchemy.query import Query, Pagination
|
||||
@ -50,9 +51,11 @@ class ListeAssiJusti(tb.Table):
|
||||
|
||||
self.ajouter_lignes()
|
||||
|
||||
def etudiant_seul(self) -> bool:
|
||||
return len(self.etudiants) == 1
|
||||
|
||||
def ajouter_lignes(self):
|
||||
# Générer les query assiduités et justificatifs
|
||||
|
||||
assiduites_query_etudiants: Query = None
|
||||
justificatifs_query_etudiants: Query = None
|
||||
|
||||
@ -121,6 +124,8 @@ class ListeAssiJusti(tb.Table):
|
||||
- date_fin: la date de fin de l'objet
|
||||
- etat: l'état de l'objet
|
||||
- type: le type de l'objet ("assiduite" pour les assiduités, "justificatif" pour les justificatifs)
|
||||
- est_just : si l'assiduité est justifié (booléen) None pour les justificatifs
|
||||
- user_id : l'identifiant de l'utilisateur qui a signalé l'assiduité ou le justificatif
|
||||
|
||||
Args:
|
||||
query_assiduite (sqlalchemy.orm.Query, optional): Une requête SQLAlchemy pour les assiduités.
|
||||
@ -146,6 +151,8 @@ class ListeAssiJusti(tb.Table):
|
||||
Assiduite.date_fin.label("date_fin"),
|
||||
Assiduite.etat.label("etat"),
|
||||
literal("assiduite").label("type"),
|
||||
Assiduite.est_just.label("est_just"),
|
||||
Assiduite.user_id.label("user_id"),
|
||||
)
|
||||
queries.append(query_assiduite)
|
||||
|
||||
@ -159,6 +166,10 @@ class ListeAssiJusti(tb.Table):
|
||||
Justificatif.date_fin.label("date_fin"),
|
||||
Justificatif.etat.label("etat"),
|
||||
literal("justificatif").label("type"),
|
||||
# On doit avoir les mêmes colonnes sur les deux requêtes,
|
||||
# donc on la met en nul car un justifcatif ne peut être justifié
|
||||
literal(None).label("est_just"),
|
||||
Justificatif.user_id.label("user_id"),
|
||||
)
|
||||
queries.append(query_justificatif)
|
||||
|
||||
@ -187,6 +198,67 @@ class RowAssiJusti(tb.Row):
|
||||
)
|
||||
|
||||
def ajouter_colonnes(self, lien_redirection: str = None):
|
||||
# Ajout de l'étudiant
|
||||
self.table: ListeAssiJusti
|
||||
if not self.table.etudiant_seul():
|
||||
self._etud()
|
||||
|
||||
# Type d'objet
|
||||
self._type()
|
||||
|
||||
# Date de début
|
||||
self.add_cell(
|
||||
"date_debut",
|
||||
"Date de début",
|
||||
self.ligne["date_debut"].strftime("%d/%m/%y à %H:%M"),
|
||||
data={"order": self.ligne["date_debut"]},
|
||||
)
|
||||
# Date de fin
|
||||
self.add_cell(
|
||||
"date_fin",
|
||||
"Date de fin",
|
||||
self.ligne["date_fin"].strftime("%d/%m/%y à %H:%M"),
|
||||
data={"order": self.ligne["date_fin"]},
|
||||
)
|
||||
# Date de saisie
|
||||
self.add_cell(
|
||||
"entry_date",
|
||||
"Saisie le",
|
||||
self.ligne["entry_date"].strftime("%d/%m/%y à %H:%M"),
|
||||
data={"order": self.ligne["entry_date"]},
|
||||
)
|
||||
|
||||
# Ajout de l'utilisateur ayant saisie l'objet
|
||||
self._utilisateur()
|
||||
|
||||
# Ajout colonne actions
|
||||
self._actions()
|
||||
|
||||
def _type(self) -> None:
|
||||
obj_type: str = ""
|
||||
is_assiduite: bool = self.ligne["type"] == "assiduite"
|
||||
if is_assiduite:
|
||||
etat: str = {
|
||||
EtatAssiduite.PRESENT: "Présence",
|
||||
EtatAssiduite.ABSENT: "Absence",
|
||||
EtatAssiduite.RETARD: "Retard",
|
||||
}.get(self.ligne["etat"])
|
||||
|
||||
justifiee: str = "Justifiée" if self.ligne["est_just"] else ""
|
||||
obj_type = f"{etat} {justifiee}"
|
||||
else:
|
||||
etat: str = {
|
||||
EtatJustificatif.VALIDE: "valide",
|
||||
EtatJustificatif.ATTENTE: "soumis",
|
||||
EtatJustificatif.MODIFIE: "modifié",
|
||||
EtatJustificatif.NON_VALIDE: "invalide",
|
||||
}.get(self.ligne["etat"])
|
||||
|
||||
obj_type = f"Justificatif {etat}"
|
||||
|
||||
self.add_cell("obj_type", "Type", obj_type)
|
||||
|
||||
def _etud(self) -> None:
|
||||
etud = self.etud
|
||||
self.table.group_titles.update(
|
||||
{
|
||||
@ -218,44 +290,19 @@ class RowAssiJusti(tb.Row):
|
||||
target=lien_redirection,
|
||||
target_attrs={"class": "discretelink"},
|
||||
)
|
||||
# Type d'objet
|
||||
self.add_cell(
|
||||
"type",
|
||||
"Type",
|
||||
self.ligne["type"].capitalize(),
|
||||
)
|
||||
# Etat de l'objet
|
||||
objEnum: EtatAssiduite | EtatJustificatif = (
|
||||
EtatAssiduite if self.ligne["type"] == "assiduite" else EtatJustificatif
|
||||
)
|
||||
|
||||
def _utilisateur(self) -> None:
|
||||
utilisateur: User = User.query.get(self.ligne["user_id"])
|
||||
|
||||
self.add_cell(
|
||||
"etat",
|
||||
"État",
|
||||
objEnum.inverse().get(self.ligne["etat"]).name.capitalize(),
|
||||
"user",
|
||||
"Saisie par",
|
||||
"Inconnu" if utilisateur is None else utilisateur.get_nomprenom(),
|
||||
)
|
||||
|
||||
# Date de début
|
||||
self.add_cell(
|
||||
"date_debut",
|
||||
"Date de début",
|
||||
self.ligne["date_debut"].strftime("%d/%m/%y à %H:%M"),
|
||||
data={"order": self.ligne["date_debut"]},
|
||||
)
|
||||
# Date de fin
|
||||
self.add_cell(
|
||||
"date_fin",
|
||||
"Date de fin",
|
||||
self.ligne["date_fin"].strftime("%d/%m/%y à %H:%M"),
|
||||
data={"order": self.ligne["date_fin"]},
|
||||
)
|
||||
# Date de saisie
|
||||
self.add_cell(
|
||||
"entry_date",
|
||||
"Saisie le",
|
||||
self.ligne["entry_date"].strftime("%d/%m/%y à %H:%M"),
|
||||
data={"order": self.ligne["entry_date"]},
|
||||
)
|
||||
def _actions(self) -> None:
|
||||
# XXX Ajouter une colonne avec les liens d'action (supprimer, modifier)
|
||||
pass
|
||||
|
||||
|
||||
class Filtre:
|
||||
|
@ -1033,9 +1033,11 @@ def test():
|
||||
"""Visualisation de l'assiduité d'un groupe entre deux dates"""
|
||||
fmt = request.args.get("fmt", "html")
|
||||
|
||||
etudid = request.args.get("etudid", 18114)
|
||||
|
||||
from app.tables.liste_assiduites import ListeAssiJusti
|
||||
|
||||
table: ListeAssiJusti = ListeAssiJusti(Identite.get_etud(18114))
|
||||
table: ListeAssiJusti = ListeAssiJusti(Identite.get_etud(etudid))
|
||||
|
||||
if fmt.startswith("xls"):
|
||||
return scu.send_file(
|
||||
@ -1286,12 +1288,12 @@ def generate_bul_list(etud: Identite, semestre: FormSemestre) -> str:
|
||||
assiduites, metric=metrique, filtered={"split": True}
|
||||
)
|
||||
|
||||
# On sépare :
|
||||
# On sépare :
|
||||
# - abs_j = absences justifiées
|
||||
# - abs_nj = absences non justifiées
|
||||
# - retards = les retards
|
||||
# - justifs = les justificatifs
|
||||
|
||||
|
||||
abs_j: list[str] = [
|
||||
{"date": _get_date_str(assi.date_debut, assi.date_fin)}
|
||||
for assi in assiduites
|
||||
|
Loading…
Reference in New Issue
Block a user