fixes: modalite, ...

This commit is contained in:
Emmanuel Viennet 2021-08-09 11:33:04 +02:00
parent 379b2591fd
commit cae4686fc4
7 changed files with 29 additions and 33 deletions

View File

@ -33,7 +33,7 @@ from app.models.formations import (
from app.models.formsemestre import ( from app.models.formsemestre import (
FormSemestre, FormSemestre,
NotesFormsemestreEtape, NotesFormsemestreEtape,
FormModalite, NotesFormModalite,
NotesFormsemestreUECoef, NotesFormsemestreUECoef,
NotesFormsemestreUEComputationExpr, NotesFormsemestreUEComputationExpr,
NotesFormsemestreCustomMenu, NotesFormsemestreCustomMenu,

View File

@ -88,6 +88,7 @@ class NotesModule(db.Model):
heures_td = db.Column(db.Float) heures_td = db.Column(db.Float)
heures_tp = db.Column(db.Float) heures_tp = db.Column(db.Float)
coefficient = db.Column(db.Float) # coef PPN coefficient = db.Column(db.Float) # coef PPN
ects = db.Column(db.Float) # Crédits ECTS
ue_id = db.Column(db.Integer, db.ForeignKey("notes_ue.id"), index=True) ue_id = db.Column(db.Integer, db.ForeignKey("notes_ue.id"), index=True)
formation_id = db.Column(db.Integer, db.ForeignKey("notes_formations.id")) formation_id = db.Column(db.Integer, db.ForeignKey("notes_formations.id"))
matiere_id = db.Column(db.Integer, db.ForeignKey("notes_matieres.id")) matiere_id = db.Column(db.Integer, db.ForeignKey("notes_matieres.id"))

View File

@ -25,7 +25,7 @@ class FormSemestre(db.Model):
date_debut = db.Column(db.Date()) date_debut = db.Column(db.Date())
date_fin = 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) # False si verrouillé
modalite = db.Column(db.String(16), db.ForeignKey("form_modalite.modalite")) modalite = db.Column(db.String(16), db.ForeignKey("notes_form_modalites.modalite"))
# gestion compensation sem DUT: # gestion compensation sem DUT:
gestion_compensation = db.Column(db.Boolean(), nullable=False, default=False) gestion_compensation = db.Column(db.Boolean(), nullable=False, default=False)
# ne publie pas le bulletin XML: # ne publie pas le bulletin XML:
@ -52,7 +52,7 @@ class FormSemestre(db.Model):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super(FormSemestre, self).__init__(**kwargs) super(FormSemestre, self).__init__(**kwargs)
if self.modalite is None: if self.modalite is None:
self.modalite = FormModalite.DEFAULT_MODALITE self.modalite = NotesFormModalite.DEFAULT_MODALITE
# Association id des utilisateurs responsables (aka directeurs des etudes) du semestre # Association id des utilisateurs responsables (aka directeurs des etudes) du semestre
@ -79,11 +79,13 @@ class NotesFormsemestreEtape(db.Model):
etape_apo = db.Column(db.String(APO_CODE_STR_LEN)) etape_apo = db.Column(db.String(APO_CODE_STR_LEN))
class FormModalite(db.Model): class NotesFormModalite(db.Model):
"""Modalités de formation, utilisées pour la présentation """Modalités de formation, utilisées pour la présentation
(grouper les semestres, générer des codes, etc.) (grouper les semestres, générer des codes, etc.)
""" """
__tablename__ = "notes_form_modalites"
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
modalite = db.Column(db.String(16), unique=True, index=True) # code modalite = db.Column(db.String(16), unique=True, index=True) # code
titre = db.Column(db.Text()) # texte explicatif titre = db.Column(db.Text()) # texte explicatif
@ -97,7 +99,7 @@ class FormModalite(db.Model):
"""Create default modalities""" """Create default modalities"""
numero = 0 numero = 0
for (code, titre) in ( for (code, titre) in (
(FormModalite.DEFAULT_MODALITE, "Formation Initiale"), (NotesFormModalite.DEFAULT_MODALITE, "Formation Initiale"),
("FAP", "Apprentissage"), ("FAP", "Apprentissage"),
("FC", "Formation Continue"), ("FC", "Formation Continue"),
("DEC", "Formation Décalées"), ("DEC", "Formation Décalées"),
@ -108,9 +110,9 @@ class FormModalite(db.Model):
("EXT", "Extérieur"), ("EXT", "Extérieur"),
("OTHER", "Autres formations"), ("OTHER", "Autres formations"),
): ):
modalite = FormModalite.query.filter_by(modalite=code).first() modalite = NotesFormModalite.query.filter_by(modalite=code).first()
if modalite is None: if modalite is None:
modalite = FormModalite(modalite=code, titre=titre, numero=numero) modalite = NotesFormModalite(modalite=code, titre=titre, numero=numero)
db.session.add(modalite) db.session.add(modalite)
numero += 1 numero += 1
db.session.commit() db.session.commit()
@ -249,7 +251,7 @@ class NotesEvaluation(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
evaluation_id = db.synonym("id") evaluation_id = db.synonym("id")
moduleimpl_id = db.Column( moduleimpl_id = db.Column(
db.Integer, db.ForeignKey("notes_moduleimpl.moduleimpl_id"), index=True db.Integer, db.ForeignKey("notes_moduleimpl.id"), index=True
) )
jour = db.Column(db.Date) jour = db.Column(db.Date)
heure_debut = db.Column(db.Time) heure_debut = db.Column(db.Time)

View File

@ -195,10 +195,12 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
) )
# Liste des ID de semestres # Liste des ID de semestres
cnx = ndb.GetDBConnexion() if F["type_parcours"] is not None:
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor) parcours = sco_codes_parcours.get_parcours_from_code(F["type_parcours"])
cursor.execute("select semestre_id from notes_semestres") NB_SEM = parcours.NB_SEM
semestre_id_list = [str(x[0]) for x in cursor.fetchall()] else:
NB_SEM = 10 # fallback, max 10 semestres
semestre_id_list = [-1] + [str(x) for x in range(1, NB_SEM + 1)]
semestre_id_labels = [] semestre_id_labels = []
for sid in semestre_id_list: for sid in semestre_id_list:
if sid == "-1": if sid == "-1":
@ -680,10 +682,10 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
if tf[0] == 0 or msg: if tf[0] == 0 or msg:
return ( return (
'<p>Formation <a class="discretelink" href="ue_list?formation_id=%(formation_id)s"><em>%(titre)s</em> (%(acronyme)s), version %(version)d, code %(formation_code)s</a></p>' '<p>Formation <a class="discretelink" href="ue_list?formation_id=%(formation_id)s"><em>%(titre)s</em> (%(acronyme)s), version %(version)s, code %(formation_code)s</a></p>'
% F % F
+ msg + msg
+ tf[1] + str(tf[1])
) )
elif tf[0] == -1: elif tf[0] == -1:
return "<h4>annulation</h4>" return "<h4>annulation</h4>"

View File

@ -156,7 +156,6 @@ class SemSet(dict):
) )
ndb.SimpleQuery( ndb.SimpleQuery(
self.context,
"INSERT INTO notes_semset_formsemestre (formsemestre_id, semset_id) VALUES (%(formsemestre_id)s, %(semset_id)s)", "INSERT INTO notes_semset_formsemestre (formsemestre_id, semset_id) VALUES (%(formsemestre_id)s, %(semset_id)s)",
{"formsemestre_id": formsemestre_id, "semset_id": self.semset_id}, {"formsemestre_id": formsemestre_id, "semset_id": self.semset_id},
) )
@ -164,7 +163,6 @@ class SemSet(dict):
def remove(self, formsemestre_id): def remove(self, formsemestre_id):
ndb.SimpleQuery( ndb.SimpleQuery(
self.context,
"DELETE FROM notes_semset_formsemestre WHERE semset_id=%(semset_id)s AND formsemestre_id=%(formsemestre_id)s", "DELETE FROM notes_semset_formsemestre WHERE semset_id=%(semset_id)s AND formsemestre_id=%(formsemestre_id)s",
{"formsemestre_id": formsemestre_id, "semset_id": self.semset_id}, {"formsemestre_id": formsemestre_id, "semset_id": self.semset_id},
) )

View File

@ -73,7 +73,9 @@ class ScoTag(object):
if not self.title: if not self.title:
raise ScoValueError("invalid empty tag") raise ScoValueError("invalid empty tag")
r = ndb.SimpleDictFetch( r = ndb.SimpleDictFetch(
"SELECT * FROM " + self.tag_table + " WHERE title = %(title)s", "SELECT id as tag_id, * FROM "
+ self.tag_table
+ " WHERE title = %(title)s",
{"title": self.title}, {"title": self.title},
) )
if r: if r:
@ -97,8 +99,7 @@ class ScoTag(object):
""" """
args = {"tag_id": self.tag_id} args = {"tag_id": self.tag_id}
ndb.SimpleQuery( ndb.SimpleQuery(
self.context, "DELETE FROM " + self.tag_table + " t WHERE t.id = %(tag_id)s",
"DELETE FROM " + self.tag_table + " t WHERE t.tag_id = %(tag_id)s",
args, args,
) )
@ -106,7 +107,6 @@ class ScoTag(object):
"""Associate tag to given object""" """Associate tag to given object"""
args = {self.obj_colname: object_id, "tag_id": self.tag_id} args = {self.obj_colname: object_id, "tag_id": self.tag_id}
r = ndb.SimpleDictFetch( r = ndb.SimpleDictFetch(
self.context,
"SELECT * FROM " "SELECT * FROM "
+ self.assoc_table + self.assoc_table
+ " a WHERE a." + " a WHERE a."
@ -120,7 +120,7 @@ class ScoTag(object):
# log("tag %s with %s" % (object_id, self.title)) # log("tag %s with %s" % (object_id, self.title))
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
query = f"""INSERT INTO {self.assoc_table} query = f"""INSERT INTO {self.assoc_table}
(tag_id, f{self.obj_colname}) (tag_id, {self.obj_colname})
VALUES""" VALUES"""
ndb.SimpleQuery( ndb.SimpleQuery(
query + " (%(tag_id)s, %(object_id)s)", query + " (%(tag_id)s, %(object_id)s)",
@ -136,7 +136,6 @@ class ScoTag(object):
# log("removing tag %s from %s" % (self.title, object_id)) # log("removing tag %s from %s" % (self.title, object_id))
args = {"object_id": object_id, "tag_id": self.tag_id} args = {"object_id": object_id, "tag_id": self.tag_id}
ndb.SimpleQuery( ndb.SimpleQuery(
self.context,
"DELETE FROM " "DELETE FROM "
+ self.assoc_table + self.assoc_table
+ " a WHERE a." + " a WHERE a."
@ -145,7 +144,6 @@ class ScoTag(object):
args, args,
) )
r = ndb.SimpleDictFetch( r = ndb.SimpleDictFetch(
self.context,
"""SELECT * FROM notes_modules_tags mt WHERE tag_id = %(tag_id)s """SELECT * FROM notes_modules_tags mt WHERE tag_id = %(tag_id)s
""", """,
args, args,
@ -153,8 +151,7 @@ class ScoTag(object):
if not r: if not r:
# tag no more used, delete # tag no more used, delete
ndb.SimpleQuery( ndb.SimpleQuery(
self.context, """DELETE FROM notes_tags t WHERE t.id = %(tag_id)s""",
"""DELETE FROM notes_tags t WHERE t.tag_id = %(tag_id)s""",
args, args,
) )
@ -172,7 +169,6 @@ class ModuleTag(ScoTag):
if not formation_code: if not formation_code:
# tous les modules de toutes les formations ! # tous les modules de toutes les formations !
r = ndb.SimpleDictFetch( r = ndb.SimpleDictFetch(
self.context,
"SELECT id AS" "SELECT id AS"
+ self.obj_colname + self.obj_colname
+ " FROM " + " FROM "
@ -184,7 +180,6 @@ class ModuleTag(ScoTag):
args["formation_code"] = formation_code args["formation_code"] = formation_code
r = ndb.SimpleDictFetch( r = ndb.SimpleDictFetch(
self.context,
"""SELECT mt.module_id """SELECT mt.module_id
FROM notes_modules_tags mt, notes_modules m, notes_formations f FROM notes_modules_tags mt, notes_modules m, notes_formations f
WHERE mt.tag_id = %(tag_id)s WHERE mt.tag_id = %(tag_id)s
@ -220,7 +215,7 @@ def module_tag_list(context, module_id=""):
r = ndb.SimpleDictFetch( r = ndb.SimpleDictFetch(
"""SELECT t.title """SELECT t.title
FROM notes_modules_tags mt, notes_tags t FROM notes_modules_tags mt, notes_tags t
WHERE mt.tag_id = t.tag_id WHERE mt.tag_id = t.id
AND mt.module_id = %(module_id)s AND mt.module_id = %(module_id)s
""", """,
{"module_id": module_id}, {"module_id": module_id},

View File

@ -19,9 +19,8 @@ from flask.cli import with_appcontext
from app import create_app, cli, db from app import create_app, cli, db
from app.auth.models import User, Role, UserRole from app.auth.models import User, Role, UserRole
from app import models from app import models
from app.models import ScoPreferences, FormSemestre, FormModalite
from app.views import notes, scolar, absences from app.views import notes, scolar, absences
import app.utils as utils import app.utils as utils
@ -67,9 +66,6 @@ def make_shell_context():
"logout_user": logout_user, "logout_user": logout_user,
"admin": admin, "admin": admin,
"ctx": app.test_request_context(), "ctx": app.test_request_context(),
# "FormModalite": FormModalite,
# "ScoPreferences": ScoPreferences,
# "FormSemestre": FormSemestre,
"models": models, "models": models,
} }
@ -98,6 +94,8 @@ def user_db_init(): # user-db-init
u=user u=user
) )
) )
# Modalités:
models.NotesFormModalite.insert_modalites()
@app.cli.command() @app.cli.command()