# -*- coding: UTF-8 -* """Notes, décisions de jury, évènements scolaires """ from app import db from app.models import APO_CODE_STR_LEN from app.models import SHORT_STR_LEN from app.models import CODE_STR_LEN class ScolarEvent(db.Model): """Evenement dans le parcours scolaire d'un étudiant""" __tablename__ = "scolar_events" id = db.Column(db.Integer, primary_key=True) event_id = db.synonym("id") etudid = db.Column( db.Integer, db.ForeignKey("identite.id"), ) event_date = db.Column(db.DateTime(timezone=True), server_default=db.func.now()) formsemestre_id = db.Column( db.Integer, db.ForeignKey("notes_formsemestre.id"), ) ue_id = db.Column( db.Integer, db.ForeignKey("notes_ue.id"), ) # 'CREATION', 'INSCRIPTION', 'DEMISSION', # 'AUT_RED', 'EXCLUS', 'VALID_UE', 'VALID_SEM' # 'ECHEC_SEM' # 'UTIL_COMPENSATION' event_type = db.Column(db.String(SHORT_STR_LEN)) # Semestre compensé par formsemestre_id: comp_formsemestre_id = db.Column( db.Integer, db.ForeignKey("notes_formsemestre.id"), ) class ScolarFormsemestreValidation(db.Model): """Décisions de jury""" __tablename__ = "scolar_formsemestre_validation" # Assure unicité de la décision: __table_args__ = (db.UniqueConstraint("etudid", "formsemestre_id", "ue_id"),) id = db.Column(db.Integer, primary_key=True) formsemestre_validation_id = db.synonym("id") etudid = db.Column( db.Integer, db.ForeignKey("identite.id"), ) formsemestre_id = db.Column( db.Integer, db.ForeignKey("notes_formsemestre.id"), ) ue_id = db.Column( db.Integer, db.ForeignKey("notes_ue.id"), ) code = db.Column(db.String(CODE_STR_LEN), nullable=False) # NULL pour les UE, True|False pour les semestres: assidu = db.Column(db.Boolean) event_date = db.Column(db.DateTime(timezone=True), server_default=db.func.now()) # NULL sauf si compense un semestre: compense_formsemestre_id = db.Column( db.Integer, db.ForeignKey("notes_formsemestre.id"), ) moy_ue = db.Column(db.Float) # (normalement NULL) indice du semestre, utile seulement pour # UE "antérieures" et si la formation définit des UE utilisées # dans plusieurs semestres (cas R&T IUTV v2) semestre_id = db.Column(db.Integer) # Si UE validée dans le cursus d'un autre etablissement is_external = db.Column(db.Boolean, default=False, server_default="false") class ScolarAutorisationInscription(db.Model): """Autorisation d'inscription dans un semestre""" __tablename__ = "scolar_autorisation_inscription" id = db.Column(db.Integer, primary_key=True) autorisation_inscription_id = db.synonym("id") etudid = db.Column( db.Integer, db.ForeignKey("identite.id"), ) formation_code = db.Column(db.String(SHORT_STR_LEN), nullable=False) # semestre ou on peut s'inscrire: semestre_id = db.Column(db.Integer) date = db.Column(db.DateTime(timezone=True), server_default=db.func.now()) origin_formsemestre_id = db.Column( db.Integer, db.ForeignKey("notes_formsemestre.id"), ) class NotesAppreciations(db.Model): """Appréciations sur bulletins""" id = db.Column(db.Integer, primary_key=True) date = db.Column(db.DateTime(timezone=True), server_default=db.func.now()) etudid = db.Column( db.Integer, db.ForeignKey("identite.id"), index=True, ) formsemestre_id = db.Column( db.Integer, db.ForeignKey("notes_formsemestre.id"), ) author = db.Column(db.Text) # le pseudo (user_name), sans contrainte comment = db.Column(db.Text) # texte libre class NotesNotes(db.Model): """Une note""" __tablename__ = "notes_notes" __table_args__ = (db.UniqueConstraint("etudid", "evaluation_id"),) id = db.Column(db.Integer, primary_key=True) etudid = db.Column( db.Integer, db.ForeignKey("identite.id"), ) evaluation_id = db.Column( db.Integer, db.ForeignKey("notes_evaluation.id"), index=True ) value = db.Column(db.Float) # infos sur saisie de cette note: comment = db.Column(db.Text) # texte libre date = db.Column(db.DateTime(timezone=True), server_default=db.func.now()) uid = db.Column(db.Integer, db.ForeignKey("user.id")) class NotesNotesLog(db.Model): """Historique des modifs sur notes (anciennes entrees de notes_notes)""" __tablename__ = "notes_notes_log" id = db.Column(db.Integer, primary_key=True) etudid = db.Column( db.Integer, db.ForeignKey("identite.id"), ) evaluation_id = db.Column( db.Integer, # db.ForeignKey("notes_evaluation.id"), index=True, ) value = db.Column(db.Float) # infos sur saisie de cette note: comment = db.Column(db.Text) # texte libre date = db.Column(db.DateTime(timezone=True), server_default=db.func.now()) uid = db.Column(db.Integer, db.ForeignKey("user.id"))