diff --git a/app/models/assiduites.py b/app/models/assiduites.py new file mode 100644 index 000000000..7ceddcfe2 --- /dev/null +++ b/app/models/assiduites.py @@ -0,0 +1,115 @@ +# -*- 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