1
0
forked from ScoDoc/ScoDoc

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:
modules = formation.modules.all()
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:
default_num = 10
@ -767,7 +767,6 @@ def module_edit(
module_dict["semestre_id"] = 1
else:
module_dict["semestre_id"] = module.ue.semestre_idx
tf = TrivialFormulator(
request.base_url,
scu.get_request_args(),
@ -809,7 +808,7 @@ def module_edit(
else ""
),
)
elif tf[0] == -1:
if tf[0] == -1:
return flask.redirect(
url_for(
"notes.ue_table",
@ -818,81 +817,82 @@ def module_edit(
semestre_idx=orig_semestre_idx,
)
)
else:
if isinstance(tf[2]["numero"], str):
tf[2]["numero"] = tf[2]["numero"].strip()
if not isinstance(tf[2]["numero"], int) and not tf[2]["numero"]:
tf[2]["numero"] = tf[2]["numero"] or default_num
if create:
if not matiere_id:
# formulaire avec choix UE de rattachement
ue = db.session.get(UniteEns, tf[2]["ue_id"])
if ue is None:
raise ValueError("UE invalide")
matiere = ue.matieres.first()
if matiere:
tf[2]["matiere_id"] = matiere.id
else:
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()
if isinstance(tf[2]["numero"], str):
tf[2]["numero"] = tf[2]["numero"].strip()
if not isinstance(tf[2]["numero"], int) and not tf[2]["numero"]:
tf[2]["numero"] = tf[2]["numero"] or default_num
# Les parcours sont affectés ensuite
form_parcours = tf[2].pop("parcours", [])
if create:
if not matiere_id:
# formulaire avec choix UE de rattachement
ue = db.session.get(UniteEns, tf[2]["ue_id"])
if ue is None:
raise ValueError("UE invalide")
matiere = ue.matieres.first()
if matiere:
tf[2]["matiere_id"] = matiere.id
else:
module.parcours = [
db.session.get(ApcParcours, int(parcour_id_str))
for parcour_id_str in tf[2]["parcours"]
]
# Modifie les AC
if "app_critiques" in tf[2]:
module.app_critiques = [
db.session.get(ApcAppCritique, int(ac_id_str))
for ac_id_str in tf[2]["app_critiques"]
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 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)
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,
)
# Modifie les AC
if "app_critiques" in tf[2]:
module.app_critiques = [
db.session.get(ApcAppCritique, int(ac_id_str))
for ac_id_str in tf[2]["app_critiques"]
]
db.session.add(module)
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):