############################################### Departements ########################################################## import app from app import models from app.api import bp from app.api.auth import token_permission_required from app.api.errors import error_response from app.scodoc.sco_permissions import Permission from flask import jsonify @bp.route("/departements", methods=["GET"]) @token_permission_required(Permission.APIView) def departements(): """ Retourne la liste des ids de départements visibles Exemple de résultat : [ { "id": 1, "acronym": "TAPI", "description": null, "visible": true, "date_creation": "Fri, 15 Apr 2022 12:19:28 GMT" }, { "id": 2, "acronym": "MMI", "description": null, "visible": false, "date_creation": "Fri, 18 Apr 2022 11:20:8 GMT" }, ... ] """ # Récupération de tous les départements depts = models.Departement.query.all() # Mise en place de la liste avec tous les départements data = [d.to_dict() for d in depts] return jsonify(data) @bp.route("/departements//etudiants/liste", methods=["GET"]) @bp.route( "/departements//etudiants/liste/", methods=["GET"] ) @token_permission_required(Permission.APIView) def liste_etudiants(dept: str, formsemestre_id=None): """ Retourne la liste des étudiants d'un département dept: l'acronym d'un département formsemestre_id: l'id d'un formesemestre Exemple de résultat : [ { "civilite": "X", "code_ine": null, "code_nip": null, "date_naissance": null, "email": null, "emailperso": null, "etudid": 18, "nom": "MOREL", "prenom": "JACQUES" }, { "civilite": "X", "code_ine": null, "code_nip": null, "date_naissance": null, "email": null, "emailperso": null, "etudid": 19, "nom": "FOURNIER", "prenom": "ANNE" }, ... ] """ # Si le formsemestre_id a été renseigné if formsemestre_id is not None: # Récupération du formsemestre formsemestre = models.FormSemestre.query.filter_by( id=formsemestre_id ).first_or_404() # Récupération du département departement = formsemestre.departement # Si le formsemestre_id n'a pas été renseigné else: # Récupération du formsemestre departement = models.Departement.query.filter_by(acronym=dept).first_or_404() # Récupération des étudiants etudiants = departement.etudiants.all() # Mise en forme des données list_etu = [etu.to_dict_bul(include_urls=False) for etu in etudiants] return jsonify(list_etu) @bp.route("/departements//semestres_courants", methods=["GET"]) @token_permission_required(Permission.APIView) def liste_semestres_courant(dept: str): """ Liste des semestres actifs d'un départements donné dept: l'acronym d'un département Exemple de résultat : [ { "titre": "master machine info", "gestion_semestrielle": false, "scodoc7_id": null, "date_debut": "01/09/2021", "bul_bgcolor": null, "date_fin": "15/12/2022", "resp_can_edit": false, "dept_id": 1, "etat": true, "resp_can_change_ens": false, "id": 1, "modalite": "FI", "ens_can_edit_eval": false, "formation_id": 1, "gestion_compensation": false, "elt_sem_apo": null, "semestre_id": 1, "bul_hide_xml": false, "elt_annee_apo": null, "block_moyennes": false, "formsemestre_id": 1, "titre_num": "master machine info semestre 1", "date_debut_iso": "2021-09-01", "date_fin_iso": "2022-12-15", "responsables": [ 3, 2 ] }, ... ] """ # Récupération des départements comportant l'acronym mit en paramètre dept = models.Departement.query.filter_by(acronym=dept).first_or_404() # Récupération des semestres suivant id_dept semestres = models.FormSemestre.query.filter_by(dept_id=dept.id, etat=True) # Mise en forme des données data = [d.to_dict() for d in semestres] return jsonify(data) @bp.route( "/departements//formations//referentiel_competences", methods=["GET"], ) @token_permission_required(Permission.APIView) def referenciel_competences(dept: str, formation_id: int): """ Retourne le référentiel de compétences dept : l'acronym d'un département formation_id : l'id d'une formation """ dept = models.Departement.query.filter_by(acronym=dept).first_or_404() formation = models.Formation.query.filter_by( id=formation_id, dept_id=dept.id ).first_or_404() ref_comp = formation.referentiel_competence_id if ref_comp is None: return error_response( 204, message="Pas de référenciel de compétences pour cette formation" ) else: return jsonify(ref_comp)