# -*- 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