forked from ScoDoc/ScoDoc
PN: édition UE de rattachement des modules
This commit is contained in:
parent
aa78346a06
commit
1e96d72ab1
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user