ScoDoc-PE/app/models/assiduites.py
2022-10-28 11:42:52 +02:00

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