From 1e96d72ab167d1cfa6ee044e718d1b66fcb70895 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sat, 11 Dec 2021 18:37:13 +0100 Subject: [PATCH] =?UTF-8?q?PN:=20=C3=A9dition=20UE=20de=20rattachement=20d?= =?UTF-8?q?es=20modules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scodoc/sco_edit_module.py | 110 +++++++++++++++++++++++----------- 1 file changed, 76 insertions(+), 34 deletions(-) diff --git a/app/scodoc/sco_edit_module.py b/app/scodoc/sco_edit_module.py index e5e22f95..b5721371 100644 --- a/app/scodoc/sco_edit_module.py +++ b/app/scodoc/sco_edit_module.py @@ -32,7 +32,7 @@ import flask from flask import url_for, render_template from flask import g, request from flask_login import current_user -from app.models import Matiere, Module +from app.models import Matiere, Module, UniteEns import app.scodoc.notesdb as ndb import app.scodoc.sco_utils as scu @@ -112,12 +112,22 @@ def module_create(matiere_id=None, module_type=None, semestre_id=None): from app.scodoc import sco_formations from app.scodoc import sco_edit_ue - matiere = Matiere.query.get(matiere_id) + matiere = Matiere.query.get_or_404(matiere_id) if matiere is None: raise ScoValueError("invalid matiere !") ue = matiere.ue parcours = ue.formation.get_parcours() is_apc = parcours.APC_SAE + ues = ue.formation.ues.order_by( + UniteEns.semestre_idx, UniteEns.numero, UniteEns.acronyme + ).all() + # cherche le numero adéquat (pour placer le module en fin de liste) + modules = matiere.ue.formation.modules.all() + if modules: + default_num = max([m.numero for m in modules]) + 10 + else: + default_num = 10 + if is_apc and module_type is not None: object_name = scu.MODULE_TYPE_NAMES[module_type] else: @@ -144,12 +154,7 @@ def module_create(matiere_id=None, module_type=None, semestre_id=None): semestre_id=semestre_id, ) ] - # cherche le numero adéquat (pour placer le module en fin de liste) - modules = Matiere.query.get(1).modules.all() - if modules: - default_num = max([m.numero for m in modules]) + 10 - else: - default_num = 10 + descr = [ ( "code", @@ -178,19 +183,35 @@ def module_create(matiere_id=None, module_type=None, semestre_id=None): ), ] semestres_indices = list(range(1, parcours.NB_SEM + 1)) - descr += [ - ( - "semestre_id", - { - "input_type": "menu", - "type": "int", - "title": parcours.SESSION_NAME.capitalize(), - "explanation": "%s du module" % parcours.SESSION_NAME, - "labels": [str(x) for x in semestres_indices], - "allowed_values": semestres_indices, - }, - ), - ] + if is_apc: # BUT: choix de l'UE de rattachement (qui donnera le semestre) + descr += [ + ( + "ue_id", + { + "input_type": "menu", + "type": "int", + "title": "UE de rattachement", + "explanation": "utilisée pour la présentation dans certains documents", + "labels": [f"{u.acronyme} {u.titre}" for u in ues], + "allowed_values": [u.id for u in ues], + }, + ), + ] + else: + # Formations classiques: choix du semestre + descr += [ + ( + "semestre_id", + { + "input_type": "menu", + "type": "int", + "title": parcours.SESSION_NAME.capitalize(), + "explanation": "%s du module" % parcours.SESSION_NAME, + "labels": [str(x) for x in semestres_indices], + "allowed_values": semestres_indices, + }, + ), + ] descr += [ ( "module_type", @@ -288,7 +309,15 @@ def module_create(matiere_id=None, module_type=None, semestre_id=None): if tf[0] == 0: return "\n".join(H) + tf[1] + html_sco_header.sco_footer() else: + if is_apc: + # BUT: l'UE indique le semestre + selected_ue = UniteEns.query.get(tf[2]["ue_id"]) + if selected_ue is None: + raise ValueError("UE invalide") + tf[2]["semestre_id"] = selected_ue.semestre_idx + module_id = do_module_create(tf[2]) + mod = Module.query.get(module_id) return flask.redirect( url_for( @@ -426,11 +455,7 @@ def module_edit(module_id=None): module["ue_matiere_id"] = "%s!%s" % (module["ue_id"], module["matiere_id"]) semestres_indices = list(range(1, parcours.NB_SEM + 1)) - dest_url = url_for( - "notes.ue_table", - scodoc_dept=g.scodoc_dept, - formation_id=str(formation_id), - ) + H = [ html_sco_header.sco_header( page_title="Modification du module %(titre)s" % module, @@ -533,12 +558,14 @@ def module_edit(module_id=None): ( "ue_matiere_id", { - "input_type": "menu" if not is_apc else "hidden", - "title": "Matière", - "explanation": "un module appartient à une seule matière.", + "input_type": "menu", + "title": "Rattachement :" if is_apc else "Matière :", + "explanation": "UE de rattachement, utilisée pour la présentation" + if is_apc + else "un module appartient à une seule matière.", "labels": mat_names, "allowed_values": ue_mat_ids, - "enabled": unlocked and not is_apc, # pas d'édition des matieres en BUT + "enabled": unlocked, }, ), ] @@ -604,18 +631,33 @@ def module_edit(module_id=None): initvalues=module, submitlabel="Modifier ce module", ) - if tf[0] == 0: return "\n".join(H) + tf[1] + html_sco_header.sco_footer() elif tf[0] == -1: - return flask.redirect(dest_url) + return flask.redirect( + url_for( + "notes.ue_table", + scodoc_dept=g.scodoc_dept, + formation_id=formation_id, + semestre_idx=module["semestre_id"], + ) + ) else: # l'UE peut changer tf[2]["ue_id"], tf[2]["matiere_id"] = tf[2]["ue_matiere_id"].split("!") # Check unicité code module dans la formation - do_module_edit(tf[2]) - return flask.redirect(dest_url) + # recharge au cas où le semestre ait changé: + mod = Module.query.get(module_id) + + return flask.redirect( + url_for( + "notes.ue_table", + scodoc_dept=g.scodoc_dept, + formation_id=formation_id, + semestre_idx=mod.semestre_id, + ) + ) # Edition en ligne du code Apogee