2022-03-02 16:45:47 +01:00
|
|
|
############################################### Departements ##########################################################
|
2022-05-03 13:35:17 +02:00
|
|
|
|
|
|
|
from flask import jsonify
|
2022-03-02 16:45:47 +01:00
|
|
|
|
2022-05-05 18:11:44 +02:00
|
|
|
import app
|
2022-03-02 16:45:47 +01:00
|
|
|
from app import models
|
|
|
|
from app.api import bp
|
2022-05-03 13:35:17 +02:00
|
|
|
from app.api.auth import token_auth, token_permission_required
|
2022-05-05 18:50:59 +02:00
|
|
|
from app.models import Departement, FormSemestre
|
2022-03-04 17:16:08 +01:00
|
|
|
from app.scodoc.sco_permissions import Permission
|
2022-03-02 16:45:47 +01:00
|
|
|
|
|
|
|
|
2022-05-05 18:50:59 +02:00
|
|
|
def get_departement(dept_ident: str) -> Departement:
|
|
|
|
"Le departement, par id ou acronyme. Erreur 404 si pas trouvé."
|
|
|
|
try:
|
|
|
|
dept_id = int(dept_ident)
|
|
|
|
except ValueError:
|
|
|
|
dept_id = None
|
|
|
|
if dept_id is None:
|
|
|
|
return Departement.query.filter_by(acronym=dept_ident).first_or_404()
|
|
|
|
return Departement.query.get_or_404(dept_id)
|
|
|
|
|
|
|
|
|
2022-07-21 09:59:54 +02:00
|
|
|
@bp.route("/departements", methods=["GET"])
|
|
|
|
@token_auth.login_required
|
|
|
|
@token_permission_required(Permission.APIView)
|
|
|
|
def departements():
|
|
|
|
"""Liste les départements"""
|
|
|
|
return jsonify([dept.to_dict() for dept in Departement.query])
|
|
|
|
|
|
|
|
|
2022-05-05 18:11:44 +02:00
|
|
|
@bp.route("/departements_ids", methods=["GET"])
|
2022-05-03 13:35:17 +02:00
|
|
|
@token_auth.login_required
|
2022-04-13 12:39:10 +02:00
|
|
|
@token_permission_required(Permission.APIView)
|
2022-05-05 18:11:44 +02:00
|
|
|
def departements_ids():
|
|
|
|
"""Liste des ids de départements"""
|
2022-05-05 18:50:59 +02:00
|
|
|
return jsonify([dept.id for dept in Departement.query])
|
2022-05-05 18:11:44 +02:00
|
|
|
|
|
|
|
|
2022-07-21 09:59:54 +02:00
|
|
|
@bp.route("/departement/<string:acronym>", methods=["GET"])
|
2022-05-05 18:11:44 +02:00
|
|
|
@token_auth.login_required
|
|
|
|
@token_permission_required(Permission.APIView)
|
2022-07-21 09:59:54 +02:00
|
|
|
def departement(acronym: str):
|
2022-03-02 16:45:47 +01:00
|
|
|
"""
|
2022-07-21 09:59:54 +02:00
|
|
|
Info sur un département. Accès par acronyme.
|
2022-03-02 16:45:47 +01:00
|
|
|
|
2022-04-28 09:06:20 +02:00
|
|
|
Exemple de résultat :
|
|
|
|
{
|
|
|
|
"id": 1,
|
|
|
|
"acronym": "TAPI",
|
|
|
|
"description": null,
|
|
|
|
"visible": true,
|
|
|
|
"date_creation": "Fri, 15 Apr 2022 12:19:28 GMT"
|
2022-05-05 18:11:44 +02:00
|
|
|
}
|
2022-03-02 16:45:47 +01:00
|
|
|
"""
|
2022-07-21 09:59:54 +02:00
|
|
|
dept = Departement.query.filter_by(acronym=acronym).first_or_404()
|
2022-05-05 18:11:44 +02:00
|
|
|
return jsonify(dept.to_dict())
|
2022-03-02 16:45:47 +01:00
|
|
|
|
|
|
|
|
2022-07-21 09:59:54 +02:00
|
|
|
@bp.route("/departement/id/<int:dept_id>", methods=["GET"])
|
2022-05-05 18:11:44 +02:00
|
|
|
@token_auth.login_required
|
|
|
|
@token_permission_required(Permission.APIView)
|
2022-07-21 09:59:54 +02:00
|
|
|
def departement_by_id(dept_id: int):
|
|
|
|
"""
|
|
|
|
Info sur un département. Accès par id.
|
|
|
|
"""
|
|
|
|
dept = Departement.query.get_or_404(dept_id)
|
|
|
|
return jsonify(dept.to_dict())
|
2022-03-02 16:45:47 +01:00
|
|
|
|
|
|
|
|
2022-07-21 09:59:54 +02:00
|
|
|
@bp.route("/departement/<string:acronym>/etudiants", methods=["GET"])
|
2022-05-03 13:35:17 +02:00
|
|
|
@token_auth.login_required
|
2022-04-14 14:56:36 +02:00
|
|
|
@token_permission_required(Permission.APIView)
|
2022-07-21 09:59:54 +02:00
|
|
|
def dept_etudiants(acronym: str):
|
2022-03-02 16:45:47 +01:00
|
|
|
"""
|
|
|
|
Retourne la liste des étudiants d'un département
|
|
|
|
|
2022-07-21 09:59:54 +02:00
|
|
|
acronym: l'acronyme d'un département
|
2022-03-02 16:45:47 +01:00
|
|
|
|
|
|
|
Exemple de résultat :
|
2022-04-27 15:29:09 +02:00
|
|
|
[
|
|
|
|
{
|
2022-05-05 18:11:44 +02:00
|
|
|
"civilite": "M",
|
|
|
|
"ine": "7899X61616",
|
|
|
|
"nip": "F6777H88",
|
2022-03-02 16:45:47 +01:00
|
|
|
"date_naissance": null,
|
2022-05-05 18:11:44 +02:00
|
|
|
"email": "toto@toto.fr",
|
2022-03-02 16:45:47 +01:00
|
|
|
"emailperso": null,
|
|
|
|
"etudid": 18,
|
|
|
|
"nom": "MOREL",
|
|
|
|
"prenom": "JACQUES"
|
2022-04-27 15:29:09 +02:00
|
|
|
},
|
|
|
|
...
|
|
|
|
]
|
2022-03-02 16:45:47 +01:00
|
|
|
"""
|
2022-07-21 09:59:54 +02:00
|
|
|
dept = Departement.query.filter_by(acronym=acronym).first_or_404()
|
|
|
|
return jsonify([etud.to_dict_short() for etud in dept.etudiants])
|
|
|
|
|
2022-03-03 16:25:29 +01:00
|
|
|
|
2022-07-21 09:59:54 +02:00
|
|
|
@bp.route("/departement/id/<int:dept_id>/etudiants", methods=["GET"])
|
|
|
|
@token_auth.login_required
|
|
|
|
@token_permission_required(Permission.APIView)
|
|
|
|
def dept_etudiants_by_id(dept_id: int):
|
|
|
|
"""
|
|
|
|
Retourne la liste des étudiants d'un département d'id donné.
|
|
|
|
"""
|
|
|
|
dept = Departement.query.get_or_404(dept_id)
|
2022-05-05 18:50:59 +02:00
|
|
|
return jsonify([etud.to_dict_short() for etud in dept.etudiants])
|
2022-03-03 16:25:29 +01:00
|
|
|
|
|
|
|
|
2022-07-21 09:59:54 +02:00
|
|
|
@bp.route("/departement/<string:acronym>/formsemestres_ids", methods=["GET"])
|
2022-05-05 19:49:43 +02:00
|
|
|
@token_auth.login_required
|
|
|
|
@token_permission_required(Permission.APIView)
|
2022-07-21 09:59:54 +02:00
|
|
|
def dept_formsemestres_ids(acronym: str):
|
2022-05-05 19:49:43 +02:00
|
|
|
"""liste des ids formsemestre du département"""
|
2022-07-21 09:59:54 +02:00
|
|
|
dept = Departement.query.filter_by(acronym=acronym).first_or_404()
|
2022-05-05 19:49:43 +02:00
|
|
|
return jsonify([formsemestre.id for formsemestre in dept.formsemestres])
|
|
|
|
|
|
|
|
|
2022-07-21 09:59:54 +02:00
|
|
|
@bp.route("/departement/id/<int:dept_id>/formsemestres_ids", methods=["GET"])
|
2022-05-03 13:35:17 +02:00
|
|
|
@token_auth.login_required
|
2022-04-14 14:56:36 +02:00
|
|
|
@token_permission_required(Permission.APIView)
|
2022-07-21 09:59:54 +02:00
|
|
|
def dept_formsemestres_ids_by_id(dept_id: int):
|
|
|
|
"""liste des ids formsemestre du département"""
|
|
|
|
dept = Departement.query.get_or_404(dept_id)
|
|
|
|
return jsonify([formsemestre.id for formsemestre in dept.formsemestres])
|
2022-03-02 16:45:47 +01:00
|
|
|
|
2022-07-21 09:59:54 +02:00
|
|
|
|
|
|
|
@bp.route("/departement/<string:acronym>/formsemestres_courants", methods=["GET"])
|
|
|
|
@token_auth.login_required
|
|
|
|
@token_permission_required(Permission.APIView)
|
|
|
|
def dept_formsemestres_courants(acronym: str):
|
|
|
|
"""
|
|
|
|
Liste des semestres actifs d'un département d'acronyme donné
|
2022-03-02 16:45:47 +01:00
|
|
|
|
|
|
|
Exemple de résultat :
|
2022-04-27 15:29:09 +02:00
|
|
|
[
|
|
|
|
{
|
|
|
|
"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
|
|
|
|
]
|
|
|
|
},
|
|
|
|
...
|
|
|
|
]
|
2022-03-02 16:45:47 +01:00
|
|
|
"""
|
2022-05-05 18:11:44 +02:00
|
|
|
# Le département, spécifié par un id ou un acronyme
|
2022-07-21 09:59:54 +02:00
|
|
|
dept = Departement.query.filter_by(acronym=acronym).first_or_404()
|
|
|
|
|
|
|
|
# Les semestres en cours de ce département
|
|
|
|
formsemestres = models.FormSemestre.query.filter(
|
|
|
|
FormSemestre.dept_id == dept.id,
|
|
|
|
FormSemestre.date_debut <= app.db.func.now(),
|
|
|
|
FormSemestre.date_fin >= app.db.func.now(),
|
|
|
|
)
|
|
|
|
|
|
|
|
return jsonify([d.to_dict(convert_parcours=True) for d in formsemestres])
|
|
|
|
|
|
|
|
|
|
|
|
@bp.route("/departement/id/<int:dept_id>/formsemestres_courants", methods=["GET"])
|
|
|
|
@token_auth.login_required
|
|
|
|
@token_permission_required(Permission.APIView)
|
|
|
|
def dept_formsemestres_courants_by_id(dept_id: int):
|
|
|
|
"""
|
|
|
|
Liste des semestres actifs d'un département d'id donné
|
|
|
|
"""
|
|
|
|
# Le département, spécifié par un id ou un acronyme
|
|
|
|
dept = Departement.query.get_or_404(dept_id)
|
2022-03-02 16:45:47 +01:00
|
|
|
|
2022-05-05 18:11:44 +02:00
|
|
|
# Les semestres en cours de ce département
|
|
|
|
formsemestres = models.FormSemestre.query.filter(
|
2022-05-05 18:50:59 +02:00
|
|
|
FormSemestre.dept_id == dept.id,
|
2022-05-05 18:11:44 +02:00
|
|
|
FormSemestre.date_debut <= app.db.func.now(),
|
|
|
|
FormSemestre.date_fin >= app.db.func.now(),
|
|
|
|
)
|
2022-03-02 16:45:47 +01:00
|
|
|
|
2022-07-07 22:29:27 +02:00
|
|
|
return jsonify([d.to_dict(convert_parcours=True) for d in formsemestres])
|