PN: édition UE de rattachement des modules

This commit is contained in:
Emmanuel Viennet 2021-12-11 18:37:13 +01:00
parent aa78346a06
commit 1e96d72ab1

View File

@ -32,7 +32,7 @@ import flask
from flask import url_for, render_template from flask import url_for, render_template
from flask import g, request from flask import g, request
from flask_login import current_user 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.notesdb as ndb
import app.scodoc.sco_utils as scu 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_formations
from app.scodoc import sco_edit_ue 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: if matiere is None:
raise ScoValueError("invalid matiere !") raise ScoValueError("invalid matiere !")
ue = matiere.ue ue = matiere.ue
parcours = ue.formation.get_parcours() parcours = ue.formation.get_parcours()
is_apc = parcours.APC_SAE 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: if is_apc and module_type is not None:
object_name = scu.MODULE_TYPE_NAMES[module_type] object_name = scu.MODULE_TYPE_NAMES[module_type]
else: else:
@ -144,12 +154,7 @@ def module_create(matiere_id=None, module_type=None, semestre_id=None):
semestre_id=semestre_id, 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 = [ descr = [
( (
"code", "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)) semestres_indices = list(range(1, parcours.NB_SEM + 1))
descr += [ if is_apc: # BUT: choix de l'UE de rattachement (qui donnera le semestre)
( descr += [
"semestre_id", (
{ "ue_id",
"input_type": "menu", {
"type": "int", "input_type": "menu",
"title": parcours.SESSION_NAME.capitalize(), "type": "int",
"explanation": "%s du module" % parcours.SESSION_NAME, "title": "UE de rattachement",
"labels": [str(x) for x in semestres_indices], "explanation": "utilisée pour la présentation dans certains documents",
"allowed_values": semestres_indices, "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 += [ descr += [
( (
"module_type", "module_type",
@ -288,7 +309,15 @@ def module_create(matiere_id=None, module_type=None, semestre_id=None):
if tf[0] == 0: if tf[0] == 0:
return "\n".join(H) + tf[1] + html_sco_header.sco_footer() return "\n".join(H) + tf[1] + html_sco_header.sco_footer()
else: 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]) module_id = do_module_create(tf[2])
mod = Module.query.get(module_id) mod = Module.query.get(module_id)
return flask.redirect( return flask.redirect(
url_for( url_for(
@ -426,11 +455,7 @@ def module_edit(module_id=None):
module["ue_matiere_id"] = "%s!%s" % (module["ue_id"], module["matiere_id"]) module["ue_matiere_id"] = "%s!%s" % (module["ue_id"], module["matiere_id"])
semestres_indices = list(range(1, parcours.NB_SEM + 1)) 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 = [ H = [
html_sco_header.sco_header( html_sco_header.sco_header(
page_title="Modification du module %(titre)s" % module, page_title="Modification du module %(titre)s" % module,
@ -533,12 +558,14 @@ def module_edit(module_id=None):
( (
"ue_matiere_id", "ue_matiere_id",
{ {
"input_type": "menu" if not is_apc else "hidden", "input_type": "menu",
"title": "Matière", "title": "Rattachement :" if is_apc else "Matière :",
"explanation": "un module appartient à une seule 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, "labels": mat_names,
"allowed_values": ue_mat_ids, "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, initvalues=module,
submitlabel="Modifier ce module", submitlabel="Modifier ce module",
) )
if tf[0] == 0: if tf[0] == 0:
return "\n".join(H) + tf[1] + html_sco_header.sco_footer() return "\n".join(H) + tf[1] + html_sco_header.sco_footer()
elif tf[0] == -1: 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: else:
# l'UE peut changer # l'UE peut changer
tf[2]["ue_id"], tf[2]["matiere_id"] = tf[2]["ue_matiere_id"].split("!") tf[2]["ue_id"], tf[2]["matiere_id"] = tf[2]["ue_matiere_id"].split("!")
# Check unicité code module dans la formation # Check unicité code module dans la formation
do_module_edit(tf[2]) 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 # Edition en ligne du code Apogee