From ad754ebd2434af3d6f1b9545bc7a3f55f8395ed9 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Tue, 3 Sep 2024 08:24:09 +0200 Subject: [PATCH] =?UTF-8?q?Fix:=20choix=20du=20parcours=20sur=20cr=C3=A9at?= =?UTF-8?q?ion/=C3=A9dition=20Module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scodoc/sco_edit_module.py | 150 +++++++++++++++++----------------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/app/scodoc/sco_edit_module.py b/app/scodoc/sco_edit_module.py index 4b2c0bd6..27b197e9 100644 --- a/app/scodoc/sco_edit_module.py +++ b/app/scodoc/sco_edit_module.py @@ -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):