diff --git a/app/but/cursus_but.py b/app/but/cursus_but.py index 7b5b430ba..f3c19925e 100644 --- a/app/but/cursus_but.py +++ b/app/but/cursus_but.py @@ -408,7 +408,7 @@ def but_validations_ues( etud: Identite, referentiel_competence_id: int, annees_but: None | Iterable[str] = None, -) -> Query: +) -> list[ScolarFormSemestreValidation]: """Query les validations d'UEs pour cet étudiant dans des UEs appartenant à ce référentiel de compétence et en option pour les années BUT indiquées. @@ -417,18 +417,25 @@ def but_validations_ues( validations = ( ScolarFormSemestreValidation.query.filter_by(etudid=etud.id) .filter(ScolarFormSemestreValidation.ue_id != None) - .join(FormSemestre, ScolarFormSemestreValidation.formsemestre) .join(UniteEns) .join(ApcNiveau) ) # restreint à certaines années (utile pour les ECTS du DUT120) if annees_but: validations = validations.filter(ApcNiveau.annee.in_(annees_but)) - # restreint au référentiel de compétence et trie - return ( - validations.join(ApcCompetence) - .filter_by(referentiel_id=referentiel_competence_id) - .order_by(FormSemestre.semestre_id, UniteEns.numero, UniteEns.acronyme) + # restreint au référentiel de compétence + validations = validations.join(ApcCompetence).filter_by( + referentiel_id=referentiel_competence_id + ) + + # Tri (nb: fait en python pour gérer les validations externes qui n'ont pas de formsemestre) + return sorted( + validations, + key=lambda v: ( + (v.formsemestre.semestre_id, v.ue.numero, v.ue.acronyme) + if v.formsemestre + else (v.ue.semestre_idx or -2, v.ue.numero, v.ue.acronyme) + ), ) diff --git a/sco_version.py b/sco_version.py index 60714411b..1f3a33211 100644 --- a/sco_version.py +++ b/sco_version.py @@ -1,7 +1,7 @@ # -*- mode: python -*- # -*- coding: utf-8 -*- -SCOVERSION = "9.7.0" +SCOVERSION = "9.7.1" SCONAME = "ScoDoc"