diff --git a/app/api/departements.py b/app/api/departements.py index a5d87bb5..95a9c4e9 100644 --- a/app/api/departements.py +++ b/app/api/departements.py @@ -281,7 +281,15 @@ def dept_formsemestres_courants(acronym: str): FormSemestre.date_debut <= test_date, FormSemestre.date_fin >= test_date, ) - return [d.to_dict_api() for d in formsemestres] + return [ + d.to_dict_api() + for d in formsemestres.order_by( + FormSemestre.date_debut.desc(), + FormSemestre.modalite, + FormSemestre.semestre_id, + FormSemestre.titre, + ) + ] @bp.route("/departement/id//formsemestres_courants") diff --git a/app/api/formsemestres.py b/app/api/formsemestres.py index 18b98738..d4954566 100644 --- a/app/api/formsemestres.py +++ b/app/api/formsemestres.py @@ -99,18 +99,20 @@ def formsemestre_infos(formsemestre_id: int): def formsemestres_query(): """ Retourne les formsemestres filtrés par - étape Apogée ou année scolaire ou département (acronyme ou id) + étape Apogée ou année scolaire ou département (acronyme ou id) ou état ou code étudiant etape_apo : un code étape apogée annee_scolaire : année de début de l'année scolaire dept_acronym : acronyme du département (eg "RT") dept_id : id du département ine ou nip: code d'un étudiant: ramène alors tous les semestres auxquels il est inscrit. + etat: 0 si verrouillé, 1 sinon """ etape_apo = request.args.get("etape_apo") annee_scolaire = request.args.get("annee_scolaire") dept_acronym = request.args.get("dept_acronym") dept_id = request.args.get("dept_id") + etat = request.args.get("etat") nip = request.args.get("nip") ine = request.args.get("ine") formsemestres = FormSemestre.query @@ -126,6 +128,12 @@ def formsemestres_query(): formsemestres = formsemestres.filter( FormSemestre.date_fin >= debut_annee, FormSemestre.date_debut <= fin_annee ) + if etat is not None: + try: + etat = bool(int(etat)) + except ValueError: + return json_error(404, "invalid etat: integer expected") + formsemestres = formsemestres.filter_by(etat=etat) if dept_acronym is not None: formsemestres = formsemestres.join(Departement).filter_by(acronym=dept_acronym) if dept_id is not None: @@ -151,7 +159,15 @@ def formsemestres_query(): formsemestres = formsemestres.join(FormSemestreInscription).join(Identite) formsemestres = formsemestres.filter_by(code_ine=ine) - return [formsemestre.to_dict_api() for formsemestre in formsemestres] + return [ + formsemestre.to_dict_api() + for formsemestre in formsemestres.order_by( + FormSemestre.date_debut.desc(), + FormSemestre.modalite, + FormSemestre.semestre_id, + FormSemestre.titre, + ) + ] @bp.route("/formsemestre//bulletins")