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 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
|
||||||
|
Loading…
Reference in New Issue
Block a user