From 02df06c29afc004508e89a7e2476458ed68c1c09 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Tue, 10 Aug 2021 00:23:30 +0200 Subject: [PATCH] Specify server-side SQL default values --- README.md | 6 ++--- app/models/absences.py | 4 ++-- app/models/etudiants.py | 4 +++- app/models/formations.py | 10 ++++---- app/models/formsemestre.py | 48 +++++++++++++++++++++++++++----------- app/models/groups.py | 8 +++++-- app/models/notes.py | 2 +- 7 files changed, 55 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 2ea54b0405..29f77cb75b 100644 --- a/README.md +++ b/README.md @@ -126,9 +126,9 @@ En tant qu'utilisateur `scodoc`: su scodoc # si besoin cd /opt/scodoc source venv/bin/activate - flask db init - flask db migrate -m "users and roles tables" - flask db upgrade + #flask db init + #flask db migrate -m "initial database" + #flask db upgrade Puis initialisation de l'appli: diff --git a/app/models/absences.py b/app/models/absences.py index a1c1e45ff0..8653e5265c 100644 --- a/app/models/absences.py +++ b/app/models/absences.py @@ -69,7 +69,7 @@ class BilletAbsence(db.Model): # raison de l'absence: description = db.Column(db.Text()) # False: new, True: processed - etat = db.Column(db.Boolean(), default=False) + etat = db.Column(db.Boolean(), default=False, server_default="false") entry_date = db.Column(db.DateTime(timezone=True), server_default=db.func.now()) # true si l'absence _pourrait_ etre justifiée - justified = db.Column(db.Boolean(), default=False) + justified = db.Column(db.Boolean(), default=False, server_default="false") diff --git a/app/models/etudiants.py b/app/models/etudiants.py index 053749bf40..2b6f6d6524 100644 --- a/app/models/etudiants.py +++ b/app/models/etudiants.py @@ -58,7 +58,9 @@ class Adresse(db.Model): telephone = db.Column(db.Text) telephonemobile = db.Column(db.Text) fax = db.Column(db.Text) - typeadresse = db.Column(db.Text, default="domicile", nullable=False) + typeadresse = db.Column( + db.Text, default="domicile", server_default="domicile", nullable=False + ) description = db.Column(db.Text) diff --git a/app/models/formations.py b/app/models/formations.py index b92d113c48..65c7d06a59 100644 --- a/app/models/formations.py +++ b/app/models/formations.py @@ -18,14 +18,14 @@ class NotesFormation(db.Model): acronyme = db.Column(db.String(SHORT_STR_LEN), nullable=False) titre = db.Column(db.Text(), nullable=False) titre_officiel = db.Column(db.Text(), nullable=False) - version = db.Column(db.Integer, default=1) + version = db.Column(db.Integer, default=1, server_default="1") formation_code = db.Column( db.String(SHORT_STR_LEN), server_default=db.text("notes_newid_fcod()"), nullable=False, ) # nb: la fonction SQL notes_newid_fcod doit être créée à part - type_parcours = db.Column(db.Integer, default=0) + type_parcours = db.Column(db.Integer, default=0, server_default="0") code_specialite = db.Column(db.String(SHORT_STR_LEN)) @@ -42,7 +42,7 @@ class NotesUE(db.Model): titre = db.Column(db.Text()) # Type d'UE: 0 normal ("fondamentale"), 1 "sport", 2 "projet et stage (LP)", # 4 "élective" - type = db.Column(db.Integer, default=0) + type = db.Column(db.Integer, default=0, server_default="0") # Les UE sont "compatibles" (pour la capitalisation) ssi elles ont ^m code # note: la fonction SQL notes_newid_ucod doit être créée à part ue_code = db.Column( @@ -51,7 +51,7 @@ class NotesUE(db.Model): nullable=False, ) ects = db.Column(db.Float) # nombre de credits ECTS - is_external = db.Column(db.Boolean(), default=False) + is_external = db.Column(db.Boolean(), default=False, server_default="false") # id de l'element pedagogique Apogee correspondant: code_apogee = db.Column(db.String(APO_CODE_STR_LEN)) # coef UE, utilise seulement si l'option use_ue_coefs est activée: @@ -93,7 +93,7 @@ class NotesModule(db.Model): formation_id = db.Column(db.Integer, db.ForeignKey("notes_formations.id")) matiere_id = db.Column(db.Integer, db.ForeignKey("notes_matieres.id")) # pas un id mais le numéro du semestre: 1, 2, ... - semestre_id = db.Column(db.Integer, nullable=False, default=1) + semestre_id = db.Column(db.Integer, nullable=False, default=1, server_default="1") numero = db.Column(db.Integer) # ordre de présentation # id de l'element pedagogique Apogee correspondant: code_apogee = db.Column(db.String(APO_CODE_STR_LEN)) diff --git a/app/models/formsemestre.py b/app/models/formsemestre.py index 53e5b66433..a62e5745c5 100644 --- a/app/models/formsemestre.py +++ b/app/models/formsemestre.py @@ -20,26 +20,42 @@ class FormSemestre(db.Model): id = db.Column(db.Integer, primary_key=True) formsemestre_id = db.synonym("id") formation_id = db.Column(db.Integer, db.ForeignKey("notes_formations.id")) - semestre_id = db.Column(db.Integer, nullable=False, default=1) + semestre_id = db.Column(db.Integer, nullable=False, default=1, server_default="1") titre = db.Column(db.Text()) date_debut = db.Column(db.Date()) date_fin = db.Column(db.Date()) - etat = db.Column(db.Boolean(), nullable=False, default=True) # False si verrouillé + etat = db.Column( + db.Boolean(), nullable=False, default=True, server_default="true" + ) # False si verrouillé modalite = db.Column(db.String(16), db.ForeignKey("notes_form_modalites.modalite")) # gestion compensation sem DUT: - gestion_compensation = db.Column(db.Boolean(), nullable=False, default=False) + gestion_compensation = db.Column( + db.Boolean(), nullable=False, default=False, server_default="false" + ) # ne publie pas le bulletin XML: - bul_hide_xml = db.Column(db.Boolean(), nullable=False, default=False) + bul_hide_xml = db.Column( + db.Boolean(), nullable=False, default=False, server_default="false" + ) # semestres decales (pour gestion jurys): - gestion_semestrielle = db.Column(db.Boolean(), nullable=False, default=False) + gestion_semestrielle = db.Column( + db.Boolean(), nullable=False, default=False, server_default="false" + ) # couleur fond bulletins HTML: - bul_bgcolor = db.Column(db.String(SHORT_STR_LEN), default="white") + bul_bgcolor = db.Column( + db.String(SHORT_STR_LEN), default="white", server_default="white" + ) # autorise resp. a modifier semestre: - resp_can_edit = db.Column(db.Boolean(), nullable=False, default=False) + resp_can_edit = db.Column( + db.Boolean(), nullable=False, default=False, server_default="false" + ) # autorise resp. a modifier slt les enseignants: - resp_can_change_ens = db.Column(db.Boolean(), nullable=False, default=True) + resp_can_change_ens = db.Column( + db.Boolean(), nullable=False, default=True, server_default="true" + ) # autorise les ens a creer des evals: - ens_can_edit_eval = db.Column(db.Boolean(), nullable=False, default=False) + ens_can_edit_eval = db.Column( + db.Boolean(), nullable=False, default=False, server_default="False" + ) # code element semestre Apogee, eg VRTW1 ou V2INCS4,V2INLS4 elt_sem_apo = db.Column(db.String(APO_CODE_STR_LEN)) # code element annee Apogee, eg VRT1A ou V2INLA,V2INCA @@ -176,7 +192,7 @@ class NotesFormsemestreCustomMenu(db.Model): ) title = db.Column(db.Text()) url = db.Column(db.Text()) - idx = db.Column(db.Integer, default=0) # rang dans le menu + idx = db.Column(db.Integer, default=0, server_default="0") # rang dans le menu class NotesFormsemestreInscription(db.Model): @@ -265,10 +281,16 @@ class NotesEvaluation(db.Model): description = db.Column(db.Text) note_max = db.Column(db.Float) coefficient = db.Column(db.Float) - visibulletin = db.Column(db.Boolean, nullable=False, default=True) - publish_incomplete = db.Column(db.Boolean, nullable=False, default=False) + visibulletin = db.Column( + db.Boolean, nullable=False, default=True, server_default="true" + ) + publish_incomplete = db.Column( + db.Boolean, nullable=False, default=False, server_default="false" + ) # type d'evaluation: False normale, True rattrapage: - evaluation_type = db.Column(db.Boolean, nullable=False, default=False) + evaluation_type = db.Column( + db.Boolean, nullable=False, default=False, server_default="false" + ) # ordre de presentation (par défaut, le plus petit numero # est la plus ancienne eval): numero = db.Column(db.Integer) diff --git a/app/models/groups.py b/app/models/groups.py index 0092208a25..48e5b38f0b 100644 --- a/app/models/groups.py +++ b/app/models/groups.py @@ -26,8 +26,12 @@ class Partition(db.Model): partition_name = db.Column(db.String(SHORT_STR_LEN)) # numero = ordre de presentation) numero = db.Column(db.Integer) - bul_show_rank = db.Column(db.Boolean(), nullable=False, default=False) - show_in_lists = db.Column(db.Boolean(), nullable=False, default=True) + bul_show_rank = db.Column( + db.Boolean(), nullable=False, default=False, server_default="false" + ) + show_in_lists = db.Column( + db.Boolean(), nullable=False, default=True, server_default="true" + ) def __init__(self, **kwargs): super(Partition, self).__init__(**kwargs) diff --git a/app/models/notes.py b/app/models/notes.py index 8abe9cae41..5c9164a949 100644 --- a/app/models/notes.py +++ b/app/models/notes.py @@ -76,7 +76,7 @@ class ScolarFormsemestreValidation(db.Model): # 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) + is_external = db.Column(db.Boolean, default=False, server_default="false") class ScolarAutorisationInscription(db.Model):