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
1 changed files with 76 additions and 34 deletions

View File

@ -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