116 lines
3.1 KiB
Python
116 lines
3.1 KiB
Python
|
# -*- coding: UTF-8 -*
|
||
|
"""Gestion de l'assiduité (assiduités + justificatifs)
|
||
|
"""
|
||
|
|
||
|
from app import db
|
||
|
from app.models import CODE_STR_LEN, SHORT_STR_LEN
|
||
|
|
||
|
|
||
|
class Assiduite(db.Model):
|
||
|
"""
|
||
|
Représente une assiduité:
|
||
|
- une plage horaire lié à un état et un étudiant
|
||
|
- un module si spécifiée
|
||
|
"""
|
||
|
|
||
|
__tablename__ = "assiduites"
|
||
|
|
||
|
assiduiteid = db.Column(db.Integer, primary_key=True)
|
||
|
|
||
|
date_debut = db.Column(
|
||
|
db.DateTime(timezone=True), server_default=db.func.now(), nullable=False
|
||
|
)
|
||
|
date_fin = db.Column(
|
||
|
db.DateTime(timezone=True), server_default=db.func.now(), nullable=False
|
||
|
)
|
||
|
|
||
|
moduleimpl_id = db.Column(
|
||
|
db.Integer,
|
||
|
db.ForeignKey("notes_moduleimpl.id", ondelete="SET NULL"),
|
||
|
)
|
||
|
etudid = db.Column(
|
||
|
db.Integer,
|
||
|
db.ForeignKey("identite.id", ondelete="CASCADE"),
|
||
|
index=True,
|
||
|
nullable=False,
|
||
|
)
|
||
|
|
||
|
etat = db.Column(db.String(CODE_STR_LEN), nullable=False)
|
||
|
|
||
|
def to_dict(self) -> dict:
|
||
|
data = {
|
||
|
"assiduiteid": self.assiduiteid,
|
||
|
"etudid": self.etudid,
|
||
|
"moduleid": self.moduleimpl_id,
|
||
|
"date_debut": self.date_debut,
|
||
|
"date_fin": self.date_fin,
|
||
|
"etat": self.etat,
|
||
|
}
|
||
|
return data
|
||
|
|
||
|
|
||
|
class EtatJustificatif(db.Model):
|
||
|
"""
|
||
|
Représente les différents états de validation d'un justificatif:
|
||
|
- un couple ID et description (32 caractères max)
|
||
|
Par Défaut :
|
||
|
0 -> Non validé
|
||
|
1 -> Validé
|
||
|
|
||
|
Tout id différent de 1 sera considéré par ScoDoc comme "Non Justifié"
|
||
|
mais cela permet d'avoir des états transitoires (Modifié, en attente, etc)
|
||
|
"""
|
||
|
|
||
|
__tablename__ = "etat_justificatif"
|
||
|
|
||
|
id = db.Column(db.Integer, primary_key=True)
|
||
|
description = db.Column(db.String(SHORT_STR_LEN), nullable=False)
|
||
|
|
||
|
|
||
|
class Justificatif(db.Model):
|
||
|
"""
|
||
|
Représente un justificatif:
|
||
|
- une plage horaire lié à un état et un étudiant
|
||
|
- une raison si spécifiée
|
||
|
- un fichier si spécifié
|
||
|
"""
|
||
|
|
||
|
__tablename__ = "justificatifs"
|
||
|
|
||
|
justifid = db.Column(db.Integer, primary_key=True)
|
||
|
|
||
|
date_debut = db.Column(
|
||
|
db.DateTime(timezone=True), server_default=db.func.now(), nullable=False
|
||
|
)
|
||
|
date_fin = db.Column(
|
||
|
db.DateTime(timezone=True), server_default=db.func.now(), nullable=False
|
||
|
)
|
||
|
|
||
|
etudid = db.Column(
|
||
|
db.Integer,
|
||
|
db.ForeignKey("identite.id", ondelete="CASCADE"),
|
||
|
index=True,
|
||
|
nullable=False,
|
||
|
)
|
||
|
etat = db.Column(
|
||
|
db.Integer,
|
||
|
db.ForeignKey("etat_justificatif.id", ondelete="SET NULL"),
|
||
|
)
|
||
|
|
||
|
raison = db.Column(db.Text())
|
||
|
fichier = db.Column(db.Integer())
|
||
|
|
||
|
def to_dict(self) -> dict:
|
||
|
data = {
|
||
|
"justifid": self.assiduiteid,
|
||
|
"etudid": self.etudid,
|
||
|
"date_debut": self.date_debut,
|
||
|
"date_fin": self.date_fin,
|
||
|
"etat": self.etat,
|
||
|
}
|
||
|
if self.raison != None:
|
||
|
data["raison"] = self.raison
|
||
|
if self.fichier != None:
|
||
|
data["fichier"] = self.fichier
|
||
|
return data
|