diff --git a/app/scodoc/sco_moduleimpl.py b/app/scodoc/sco_moduleimpl.py index 2ffed0f4..cd884564 100644 --- a/app/scodoc/sco_moduleimpl.py +++ b/app/scodoc/sco_moduleimpl.py @@ -35,6 +35,7 @@ import app.scodoc.notesdb as ndb from app.scodoc.sco_permissions import Permission from app.scodoc.sco_exceptions import ScoValueError, AccessDenied from app import log +from app import models from app.scodoc import scolog from app.scodoc import sco_formsemestre from app.scodoc import sco_cache @@ -124,11 +125,11 @@ def do_moduleimpl_edit(args, formsemestre_id=None, cnx=None): def moduleimpl_withmodule_list( moduleimpl_id=None, formsemestre_id=None, module_id=None -): +) -> list: """Liste les moduleimpls et ajoute dans chacun l'UE, la matière et le module auxquels ils appartiennent. Tri la liste par semestre/UE/numero_matiere/numero_module. - + (sauf pour le BUT: ignore UEs et matières dans le tri) Attention: Cette fonction fait partie de l'API ScoDoc 7 et est publiée. """ from app.scodoc import sco_edit_ue @@ -142,6 +143,8 @@ def moduleimpl_withmodule_list( "module_id": module_id, } ) + if not modimpls: + return [] ues = {} matieres = {} modules = {} @@ -163,17 +166,30 @@ def moduleimpl_withmodule_list( )[0] mi["matiere"] = matieres[matiere_id] - # tri par semestre/UE/numero_matiere/numero_module - modimpls.sort( - key=lambda x: ( - x["ue"]["numero"], - x["ue"]["ue_id"], - x["matiere"]["numero"], - x["matiere"]["matiere_id"], - x["module"]["numero"], - x["module"]["code"], + mod = modimpls[0]["module"] + formation = models.Formation.query.get(mod["formation_id"]) + + if formation.is_apc(): + # tri par numero_module + modimpls.sort( + key=lambda x: ( + x["module"]["numero"], + x["module"]["code"], + ) + ) + else: + # Formations classiques, avec matières: + # tri par semestre/UE/numero_matiere/numero_module + modimpls.sort( + key=lambda x: ( + x["ue"]["numero"], + x["ue"]["ue_id"], + x["matiere"]["numero"], + x["matiere"]["matiere_id"], + x["module"]["numero"], + x["module"]["code"], + ) ) - ) return modimpls