Edition module: fix regression (app_critiques)

This commit is contained in:
Emmanuel Viennet 2024-10-21 19:48:42 +02:00
parent 30f2888881
commit 74f3a7399f
2 changed files with 33 additions and 10 deletions

View File

@ -720,14 +720,21 @@ def module_edit(
raise ScoValueError( raise ScoValueError(
"Module utilisé: il ne peut pas être changé de semestre !" "Module utilisé: il ne peut pas être changé de semestre !"
) )
# En APC, force le semestre égal à celui de l'UE if not tf[2].get("code"):
raise ScoValueError("Le code du module doit être spécifié.")
if is_apc: if is_apc:
# En APC, force le semestre égal à celui de l'UE
selected_ue = db.session.get(UniteEns, tf[2]["ue_id"]) selected_ue = db.session.get(UniteEns, tf[2]["ue_id"])
if selected_ue is None: if selected_ue is None:
raise ValueError("UE invalide") raise ValueError("UE invalide")
tf[2]["semestre_id"] = selected_ue.semestre_idx tf[2]["semestre_id"] = selected_ue.semestre_idx
if not tf[2].get("code"): # Et vérifie que les AC sont bien dans ce ref. comp.
raise ScoValueError("Le code du module doit être spécifié.") if "app_critiques" in tf[2]:
tf[2]["app_critiques"] = Module.convert_app_critiques(
tf[2]["app_critiques"], formation.referentiel_competence
)
# Check unicité code module dans la formation # Check unicité code module dans la formation
# ??? TODO # ??? TODO
# #
@ -741,12 +748,6 @@ def module_edit(
db.session.get(ApcParcours, int(parcour_id_str)) db.session.get(ApcParcours, int(parcour_id_str))
for parcour_id_str in form_parcours for parcour_id_str in form_parcours
] ]
# Modifie les AC
if "app_critiques" in tf[2]:
module.app_critiques = [
db.session.get(ApcAppCritique, int(ac_id_str))
for ac_id_str in tf[2]["app_critiques"]
]
db.session.add(module) db.session.add(module)
db.session.commit() db.session.commit()
module.formation.invalidate_cached_sems() module.formation.invalidate_cached_sems()

View File

@ -8,6 +8,7 @@ from app import db, log
from app import models from app import models
from app.models import APO_CODE_STR_LEN from app.models import APO_CODE_STR_LEN
from app.models.but_refcomp import ( from app.models.but_refcomp import (
ApcAppCritique,
ApcParcours, ApcParcours,
ApcReferentielCompetences, ApcReferentielCompetences,
app_critiques_modules, app_critiques_modules,
@ -110,9 +111,30 @@ class Module(models.ScoDocModel):
if key in fs_empty_stored_as_nulls and value == "": if key in fs_empty_stored_as_nulls and value == "":
value = None value = None
args_dict[key] = value args_dict[key] = value
if key == "app_critiques": # peut être liste d'ApcAppCritique ou d'ids
args_dict[key] = cls.convert_app_critiques(value)
return args_dict return args_dict
@staticmethod
def convert_app_critiques(
app_crits: list, ref_comp: ApcReferentielCompetences | None = None
) -> list[ApcAppCritique]:
""" """
res = []
for x in app_crits:
app_crit = (
x
if isinstance(x, ApcAppCritique)
else db.session.get(ApcAppCritique, x)
)
if app_crit is None:
raise ScoValueError("app_critiques invalid")
if ref_comp and app_crit.niveau.competence.referentiel_id != ref_comp.id:
raise ScoValueError("app_critique hors référentiel !")
res.append(app_crit)
return res
@classmethod @classmethod
def filter_model_attributes(cls, args: dict, excluded: set[str] = None) -> dict: def filter_model_attributes(cls, args: dict, excluded: set[str] = None) -> dict:
"""Returns a copy of dict with only the keys belonging to the Model and not in excluded. """Returns a copy of dict with only the keys belonging to the Model and not in excluded.