############################################### Departements ########################################################## import app from flask import jsonify from app import models from app.api import bp from app.api.auth import token_auth, token_permission_required from app.api.errors import error_response from app.scodoc.sco_permissions import Permission @bp.route("/departements", methods=["GET"]) @token_auth.login_required @token_permission_required(Permission.APIView) def departements(): """ Retourne la liste des ids de départements visibles Exemple de résultat : [2, 5, 8, 1, 4, 18] """ # Récupération de tous les départements depts = models.Departement.query.filter_by(visible=True).all() # Mise en place de la liste avec tous les ids de départements depts_ids = [d.id for d in depts] return jsonify(depts_ids) @bp.route("/departements//etudiants/liste", methods=["GET"]) @bp.route( "/departements//etudiants/liste/", methods=["GET"] ) @token_auth.login_required @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() # Récupération du département departement = formsemestre.departement # 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] # Si le formsemestre_id n'a pas été renseigné else: # Récupération du formsemestre departement = models.Departement.query.filter_by(acronym=dept).first() # 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_auth.login_required @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 depts = models.Departement.query.filter_by(acronym=dept).all() # Récupération de l'id id_dept = depts[0].id # Récupération des semestres suivant id_dept semestres = models.FormSemestre.query.filter_by(dept_id=id_dept, etat=True).all() # 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_auth.login_required @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 """ depts = models.Departement.query.filter_by(acronym=dept).all() id_dept = depts[0].id formations = models.Formation.query.filter_by( id=formation_id, dept_id=id_dept ).all() ref_comp = formations[0].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) # ref = ApcReferentielCompetences.query.get_or_404(formation_id) # # return jsonify(ref.to_dict()) @bp.route( "/departements//formsemestre//programme", methods=["GET"], ) @token_auth.login_required @token_permission_required(Permission.APIView) def semestre_index(dept: str, formsemestre_id: int): """ Retourne la liste des Ues, ressources et SAE d'un semestre """ app.set_sco_dept(dept) formsemestre = models.FormSemestre.query.filter_by(id=formsemestre_id).first() ues = formsemestre.query_ues() ues_dict = [] for ue in ues: ues_dict.append(ue.to_dict()) ressources = ue.get_ressources() saes = ue.get_saes() data_ressources = [] for ressource in ressources: data_ressources.append(ressource.to_dict()) data_saes = [] for sae in saes: data_saes.append(sae.to_dict()) data = { "ues": ues_dict, "ressources": data_ressources, "saes": data_saes, } return data #return error_response(501, message="not implemented")