Fix: choix du parcours sur création/édition Module

This commit is contained in:
Emmanuel Viennet 2024-09-03 08:24:09 +02:00
parent 0a1e16e81a
commit ad754ebd24

View File

@ -421,7 +421,7 @@ def module_edit(
else: else:
modules = formation.modules.all() modules = formation.modules.all()
if modules: if modules:
default_num = max([m.numero or 0 for m in modules]) + 10 default_num = max(m.numero or 0 for m in modules) + 10
else: else:
default_num = 10 default_num = 10
@ -767,7 +767,6 @@ def module_edit(
module_dict["semestre_id"] = 1 module_dict["semestre_id"] = 1
else: else:
module_dict["semestre_id"] = module.ue.semestre_idx module_dict["semestre_id"] = module.ue.semestre_idx
tf = TrivialFormulator( tf = TrivialFormulator(
request.base_url, request.base_url,
scu.get_request_args(), scu.get_request_args(),
@ -809,7 +808,7 @@ def module_edit(
else "" else ""
), ),
) )
elif tf[0] == -1: if tf[0] == -1:
return flask.redirect( return flask.redirect(
url_for( url_for(
"notes.ue_table", "notes.ue_table",
@ -818,81 +817,82 @@ def module_edit(
semestre_idx=orig_semestre_idx, semestre_idx=orig_semestre_idx,
) )
) )
else: if isinstance(tf[2]["numero"], str):
if isinstance(tf[2]["numero"], str): tf[2]["numero"] = tf[2]["numero"].strip()
tf[2]["numero"] = tf[2]["numero"].strip() if not isinstance(tf[2]["numero"], int) and not tf[2]["numero"]:
if not isinstance(tf[2]["numero"], int) and not tf[2]["numero"]: tf[2]["numero"] = tf[2]["numero"] or default_num
tf[2]["numero"] = tf[2]["numero"] or default_num # Les parcours sont affectés ensuite
if create: form_parcours = tf[2].pop("parcours", [])
if not matiere_id: if create:
# formulaire avec choix UE de rattachement if not matiere_id:
ue = db.session.get(UniteEns, tf[2]["ue_id"]) # formulaire avec choix UE de rattachement
if ue is None: ue = db.session.get(UniteEns, tf[2]["ue_id"])
raise ValueError("UE invalide") if ue is None:
matiere = ue.matieres.first() raise ValueError("UE invalide")
if matiere: matiere = ue.matieres.first()
tf[2]["matiere_id"] = matiere.id if matiere:
else: tf[2]["matiere_id"] = matiere.id
matiere_id = sco_edit_matiere.do_matiere_create(
{"ue_id": ue.id, "titre": ue.titre or "", "numero": 1},
)
tf[2]["matiere_id"] = matiere_id
tf[2]["semestre_id"] = ue.semestre_idx
module_id = do_module_create(tf[2])
module = db.session.get(Module, module_id)
else: # EDITION MODULE
# l'UE de rattachement peut changer
tf[2]["ue_id"], tf[2]["matiere_id"] = tf[2]["ue_matiere_id"].split("!")
x, y = tf[2]["ue_matiere_id"].split("!")
tf[2]["ue_id"] = int(x)
tf[2]["matiere_id"] = int(y)
old_ue_id = module.ue.id
new_ue_id = tf[2]["ue_id"]
if (old_ue_id != new_ue_id) and in_use:
new_ue = UniteEns.query.get_or_404(new_ue_id)
if new_ue.semestre_idx != module.ue.semestre_idx:
# pas changer de semestre un module utilisé !
raise ScoValueError(
"Module utilisé: il ne peut pas être changé de semestre !"
)
# En APC, force le semestre égal à celui de l'UE
if is_apc:
selected_ue = db.session.get(UniteEns, tf[2]["ue_id"])
if selected_ue is None:
raise ValueError("UE invalide")
tf[2]["semestre_id"] = selected_ue.semestre_idx
if not tf[2].get("code"):
raise ScoValueError("Le code du module doit être spécifié.")
# Check unicité code module dans la formation
# ??? TODO
#
do_module_edit(tf[2])
# Modifie les parcours
if ("parcours" in tf[2]) and formation.referentiel_competence:
if "-1" in tf[2]["parcours"]: # "tous"
module.parcours = formation.referentiel_competence.parcours.all()
else: else:
module.parcours = [ matiere_id = sco_edit_matiere.do_matiere_create(
db.session.get(ApcParcours, int(parcour_id_str)) {"ue_id": ue.id, "titre": ue.titre or "", "numero": 1},
for parcour_id_str in tf[2]["parcours"] )
] tf[2]["matiere_id"] = matiere_id
# Modifie les AC
if "app_critiques" in tf[2]: tf[2]["semestre_id"] = ue.semestre_idx
module.app_critiques = [ module_id = do_module_create(tf[2])
db.session.get(ApcAppCritique, int(ac_id_str)) module = db.session.get(Module, module_id)
for ac_id_str in tf[2]["app_critiques"] else: # EDITION MODULE
# l'UE de rattachement peut changer
tf[2]["ue_id"], tf[2]["matiere_id"] = tf[2]["ue_matiere_id"].split("!")
x, y = tf[2]["ue_matiere_id"].split("!")
tf[2]["ue_id"] = int(x)
tf[2]["matiere_id"] = int(y)
old_ue_id = module.ue.id
new_ue_id = tf[2]["ue_id"]
if (old_ue_id != new_ue_id) and in_use:
new_ue = UniteEns.query.get_or_404(new_ue_id)
if new_ue.semestre_idx != module.ue.semestre_idx:
# pas changer de semestre un module utilisé !
raise ScoValueError(
"Module utilisé: il ne peut pas être changé de semestre !"
)
# En APC, force le semestre égal à celui de l'UE
if is_apc:
selected_ue = db.session.get(UniteEns, tf[2]["ue_id"])
if selected_ue is None:
raise ValueError("UE invalide")
tf[2]["semestre_id"] = selected_ue.semestre_idx
if not tf[2].get("code"):
raise ScoValueError("Le code du module doit être spécifié.")
# Check unicité code module dans la formation
# ??? TODO
#
do_module_edit(tf[2])
# Modifie les parcours
if form_parcours is not None and formation.referentiel_competence:
if "-1" in form_parcours: # "tous"
module.parcours = formation.referentiel_competence.parcours.all()
else:
module.parcours = [
db.session.get(ApcParcours, int(parcour_id_str))
for parcour_id_str in form_parcours
] ]
db.session.add(module) # Modifie les AC
db.session.commit() if "app_critiques" in tf[2]:
return flask.redirect( module.app_critiques = [
url_for( db.session.get(ApcAppCritique, int(ac_id_str))
"notes.ue_table", for ac_id_str in tf[2]["app_critiques"]
scodoc_dept=g.scodoc_dept, ]
formation_id=formation.id, db.session.add(module)
semestre_idx=tf[2]["semestre_id"] if is_apc else 1, db.session.commit()
) return flask.redirect(
url_for(
"notes.ue_table",
scodoc_dept=g.scodoc_dept,
formation_id=formation.id,
semestre_idx=tf[2]["semestre_id"] if is_apc else 1,
) )
)
def module_table(formation_id): def module_table(formation_id):