# -*- coding: UTF-8 -* """ScoDoc models : departements """ from typing import Any from app import db from app.models import SHORT_STR_LEN from app.scodoc.sco_exceptions import ScoValueError class Departement(db.Model): """Un département ScoDoc""" id = db.Column(db.Integer, primary_key=True) acronym = db.Column( db.String(SHORT_STR_LEN), nullable=False, index=True, unique=True ) # ne change jamais, voir la pref. DeptName description = db.Column(db.Text()) # pas utilisé par ScoDoc : voir DeptFullName date_creation = db.Column(db.DateTime(timezone=True), server_default=db.func.now()) visible = db.Column( db.Boolean(), nullable=False, default=True, server_default="true" ) # sur page d'accueil # entreprises = db.relationship("Entreprise", lazy="dynamic", backref="departement") etudiants = db.relationship("Identite", lazy="dynamic", backref="departement") formations = db.relationship("Formation", lazy="dynamic", backref="departement") formsemestres = db.relationship( "FormSemestre", lazy="dynamic", backref="departement" ) preferences = db.relationship( "ScoPreference", lazy="dynamic", backref="departement" ) semsets = db.relationship("NotesSemSet", lazy="dynamic", backref="departement") referentiels = db.relationship( "ApcReferentielCompetences", lazy="dynamic", backref="departement" ) def __repr__(self): return f"<{self.__class__.__name__}(id={self.id}, acronym='{self.acronym}')>" def to_dict(self): data = { "id": self.id, "acronym": self.acronym, "description": self.description, "visible": self.visible, "date_creation": self.date_creation, } return data @classmethod def from_acronym(cls, acronym): dept = cls.query.filter_by(acronym=acronym).first_or_404() return dept def create_dept(acronym: str, visible=True) -> Departement: "Create new departement" from app.models import ScoPreference existing = Departement.query.filter_by(acronym=acronym).count() if existing: raise ScoValueError(f"acronyme {acronym} déjà existant") departement = Departement(acronym=acronym, visible=visible) p1 = ScoPreference(name="DeptName", value=acronym, departement=departement) db.session.add(p1) db.session.add(departement) db.session.commit() return departement