forked from ScoDoc/ScoDoc
Correctif pour changement de l'UE d'un module. Autorisé aussi via API. + bug fix.
This commit is contained in:
parent
f34996c8a7
commit
c4d45ae358
@ -21,6 +21,7 @@ from app import db, log
|
|||||||
from app.api import api_bp as bp, api_web_bp
|
from app.api import api_bp as bp, api_web_bp
|
||||||
from app.api import api_permission_required as permission_required
|
from app.api import api_permission_required as permission_required
|
||||||
from app.decorators import scodoc
|
from app.decorators import scodoc
|
||||||
|
from app.formations import edit_module
|
||||||
from app.models import APO_CODE_STR_LEN
|
from app.models import APO_CODE_STR_LEN
|
||||||
from app.scodoc.sco_utils import json_error
|
from app.scodoc.sco_utils import json_error
|
||||||
from app.models import (
|
from app.models import (
|
||||||
@ -493,8 +494,7 @@ def formation_module_edit(module_id: int):
|
|||||||
query = query.join(Formation).filter_by(dept_id=g.scodoc_dept_id)
|
query = query.join(Formation).filter_by(dept_id=g.scodoc_dept_id)
|
||||||
module: Module = query.first_or_404()
|
module: Module = query.first_or_404()
|
||||||
args = request.get_json(force=True) # may raise 400 Bad Request
|
args = request.get_json(force=True) # may raise 400 Bad Request
|
||||||
module.from_dict(args)
|
edit_module.do_module_edit(args, module=module)
|
||||||
db.session.commit()
|
|
||||||
db.session.refresh(module)
|
db.session.refresh(module)
|
||||||
log(f"API module_edit: module_id={module.id} args={args}")
|
log(f"API module_edit: module_id={module.id} args={args}")
|
||||||
r = module.to_dict(convert_objects=True, with_parcours_ids=True)
|
r = module.to_dict(convert_objects=True, with_parcours_ids=True)
|
||||||
|
@ -33,7 +33,7 @@ from flask import flash, 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 import db
|
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 import Formation, Matiere, Module, UniteEns
|
from app.models import Formation, Matiere, Module, UniteEns
|
||||||
@ -98,14 +98,42 @@ def module_delete(module_id=None):
|
|||||||
return flask.redirect(dest_url)
|
return flask.redirect(dest_url)
|
||||||
|
|
||||||
|
|
||||||
def do_module_edit(vals: dict) -> None:
|
def do_module_edit(vals: dict, module: Module | None = None) -> None:
|
||||||
"edit a module"
|
"""edit a module (donné par module ou vals["module_id"]).
|
||||||
|
Gère les changements d'UEs.
|
||||||
|
commit et inval cache.
|
||||||
|
"""
|
||||||
# check
|
# check
|
||||||
module = Module.get_instance(vals["module_id"])
|
if module is None:
|
||||||
|
module: Module = Module.get_instance(vals["module_id"])
|
||||||
|
# Changement d'UE ?
|
||||||
|
if (
|
||||||
|
not module.is_locked()
|
||||||
|
and "ue_id" in vals
|
||||||
|
and vals["ue_id"]
|
||||||
|
and vals["ue_id"] != module.ue_id
|
||||||
|
):
|
||||||
|
# Affecte le module à la première matière de l'UE destination
|
||||||
|
ue_dest = UniteEns.get_ue(vals["ue_id"])
|
||||||
|
log(f"do_module_edit: changing UE of {module} to {ue_dest}")
|
||||||
|
mat_dest = ue_dest.matieres.first()
|
||||||
|
if not mat_dest:
|
||||||
|
log("do_module_edit: creating new Matiere in dest UE")
|
||||||
|
mat_dest = Matiere.create_from_dict(
|
||||||
|
{
|
||||||
|
"ue_id": ue_dest.id,
|
||||||
|
"titre": ue_dest.titre or "",
|
||||||
|
"numero": 1,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
db.session.add(mat_dest)
|
||||||
|
module.matiere = mat_dest
|
||||||
|
module.ue = ue_dest
|
||||||
# edit
|
# edit
|
||||||
modif = module.from_dict(vals)
|
modif = module.from_dict(vals)
|
||||||
if modif:
|
if modif:
|
||||||
module.formation.invalidate_cached_sems()
|
module.formation.invalidate_cached_sems()
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
|
||||||
def module_create(
|
def module_create(
|
||||||
@ -735,9 +763,8 @@ def module_edit(
|
|||||||
tf[2]["app_critiques"], formation.referentiel_competence
|
tf[2]["app_critiques"], formation.referentiel_competence
|
||||||
)
|
)
|
||||||
|
|
||||||
# Check unicité code module dans la formation
|
# Le check unicité code module dans la formation
|
||||||
# ??? TODO
|
# est fait par Module.from_dict
|
||||||
#
|
|
||||||
do_module_edit(tf[2])
|
do_module_edit(tf[2])
|
||||||
# Modifie les parcours
|
# Modifie les parcours
|
||||||
if form_parcours is not None and formation.referentiel_competence:
|
if form_parcours is not None and formation.referentiel_competence:
|
||||||
|
@ -216,6 +216,7 @@ class FormSemestre(models.ScoDocModel):
|
|||||||
except (TypeError, ValueError):
|
except (TypeError, ValueError):
|
||||||
if accept_none:
|
if accept_none:
|
||||||
return None
|
return None
|
||||||
|
log("get_formsemestre: formsemestre_id invalide")
|
||||||
abort(404, "formsemestre_id invalide")
|
abort(404, "formsemestre_id invalide")
|
||||||
|
|
||||||
dept_id = (
|
dept_id = (
|
||||||
|
@ -183,6 +183,7 @@ class Module(models.ScoDocModel):
|
|||||||
|
|
||||||
matiere = db.session.get(Matiere, new_matiere_id)
|
matiere = db.session.get(Matiere, new_matiere_id)
|
||||||
if matiere is None or matiere.ue_id != self.ue_id:
|
if matiere is None or matiere.ue_id != self.ue_id:
|
||||||
|
log("Module.from_dict: invalid matiere")
|
||||||
raise ScoValueError("invalid matiere")
|
raise ScoValueError("invalid matiere")
|
||||||
|
|
||||||
modified = super().from_dict(
|
modified = super().from_dict(
|
||||||
|
@ -1694,11 +1694,13 @@ def confirm_dialog(
|
|||||||
if add_headers:
|
if add_headers:
|
||||||
formsemestre = (
|
formsemestre = (
|
||||||
FormSemestre.get_formsemestre(parameters["formsemestre_id"])
|
FormSemestre.get_formsemestre(parameters["formsemestre_id"])
|
||||||
if "formsemestre_id" in parameters
|
if parameters.get("formsemestre_id")
|
||||||
else None
|
else None
|
||||||
)
|
)
|
||||||
etud = (
|
etud = (
|
||||||
Identite.get_etud(parameters["etudid"]) if "etudid" in parameters else None
|
Identite.get_etud(parameters["etudid"])
|
||||||
|
if parameters.get("etudid")
|
||||||
|
else None
|
||||||
)
|
)
|
||||||
return render_template(
|
return render_template(
|
||||||
template,
|
template,
|
||||||
|
@ -388,14 +388,6 @@ def test_api_module_edit(api_admin_headers):
|
|||||||
assert module["heures_cours"] == 16
|
assert module["heures_cours"] == 16
|
||||||
assert module["semestre_id"] == 1
|
assert module["semestre_id"] == 1
|
||||||
assert module["abbrev"] == "ALLO"
|
assert module["abbrev"] == "ALLO"
|
||||||
# tente de changer l'UE: ne devrait rien faire:
|
|
||||||
ue_id = module["ue_id"]
|
|
||||||
module = POST(
|
|
||||||
f"/formation/module/{module_id}/edit",
|
|
||||||
{"ue_id": 666},
|
|
||||||
api_admin_headers,
|
|
||||||
)
|
|
||||||
assert module["ue_id"] == ue_id
|
|
||||||
# tente de changer la formation: ne devrait rien faire:
|
# tente de changer la formation: ne devrait rien faire:
|
||||||
formation_id = module["formation_id"]
|
formation_id = module["formation_id"]
|
||||||
module = POST(
|
module = POST(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user