Compare commits

..

No commits in common. "ce2b7334c61c4bdb5ca0a85580f2e2b889961221" and "4c28d140a60bdc494c00fa9f2eaf8f3a55c9ba23" have entirely different histories.

6 changed files with 118 additions and 190 deletions

View File

@ -3,7 +3,7 @@ import app
from app import models from app import models
from app.api import bp from app.api import bp
from app.api.auth import token_permission_required from app.api.auth import token_auth, token_permission_required
from app.api.errors import error_response from app.api.errors import error_response
from app.scodoc.sco_permissions import Permission from app.scodoc.sco_permissions import Permission
@ -19,7 +19,7 @@ def departements():
Exemple de résultat : [2, 5, 8, 1, 4, 18] Exemple de résultat : [2, 5, 8, 1, 4, 18]
""" """
# Récupération de tous les départements # Récupération de tous les départements
depts = models.Departement.query.filter_by(visible=True) depts = models.Departement.query.filter_by(visible=True).all()
# Mise en place de la liste avec tous les ids de départements # Mise en place de la liste avec tous les ids de départements
depts_ids = [d.id for d in depts] depts_ids = [d.id for d in depts]
@ -67,14 +67,14 @@ def liste_etudiants(dept: str, formsemestre_id=None):
# Si le formsemestre_id a été renseigné # Si le formsemestre_id a été renseigné
if formsemestre_id is not None: if formsemestre_id is not None:
# Récupération du formsemestre # Récupération du formsemestre
formsemestre = models.FormSemestre.query.filter_by(id=formsemestre_id).first_or_404() formsemestre = models.FormSemestre.query.filter_by(id=formsemestre_id).first()
# Récupération du département # Récupération du département
departement = formsemestre.departement departement = formsemestre.departement
# Si le formsemestre_id n'a pas été renseigné # Si le formsemestre_id n'a pas été renseigné
else: else:
# Récupération du formsemestre # Récupération du formsemestre
departement = models.Departement.query.filter_by(acronym=dept).first_or_404() departement = models.Departement.query.filter_by(acronym=dept).first()
# Récupération des étudiants # Récupération des étudiants
etudiants = departement.etudiants.all() etudiants = departement.etudiants.all()
@ -129,12 +129,16 @@ def liste_semestres_courant(dept: str):
] ]
""" """
# Récupération des départements comportant l'acronym mit en paramètre # Récupération des départements comportant l'acronym mit en paramètre
dept = models.Departement.query.filter_by(acronym=dept).first_or_404() 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 # Récupération des semestres suivant id_dept
semestres = models.FormSemestre.query.filter_by(dept_id=dept.id, etat=True) semestres = models.FormSemestre.query.filter_by(dept_id=id_dept, etat=True).all()
# Mise en forme des données # Mise en forme des données
data = [d.to_dict() for d in semestres] data = [d.to_dict() for d in semestres]
return jsonify(data) return jsonify(data)
@ -152,13 +156,15 @@ def referenciel_competences(dept: str, formation_id: int):
dept : l'acronym d'un département dept : l'acronym d'un département
formation_id : l'id d'une formation formation_id : l'id d'une formation
""" """
dept = models.Departement.query.filter_by(acronym=dept).first_or_404() depts = models.Departement.query.filter_by(acronym=dept).all()
formation = models.Formation.query.filter_by( id_dept = depts[0].id
id=formation_id, dept_id=dept.id
).first_or_404()
ref_comp = formation.referentiel_competence_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: if ref_comp is None:
return error_response( return error_response(
@ -167,6 +173,10 @@ def referenciel_competences(dept: str, formation_id: int):
else: else:
return jsonify(ref_comp) return jsonify(ref_comp)
# ref = ApcReferentielCompetences.query.get_or_404(formation_id)
#
# return jsonify(ref.to_dict())
@bp.route( @bp.route(
"/departements/<string:dept>/formsemestre/<string:formsemestre_id>/programme", "/departements/<string:dept>/formsemestre/<string:formsemestre_id>/programme",
@ -180,7 +190,7 @@ def semestre_index(dept: str, formsemestre_id: int):
app.set_sco_dept(dept) app.set_sco_dept(dept)
formsemestre = models.FormSemestre.query.filter_by(id=formsemestre_id).first_or_404() formsemestre = models.FormSemestre.query.filter_by(id=formsemestre_id).first()
ues = formsemestre.query_ues() ues = formsemestre.query_ues()
@ -208,3 +218,4 @@ def semestre_index(dept: str, formsemestre_id: int):
} }
return data return data
# return error_response(501, message="not implemented")

View File

@ -1,16 +1,16 @@
#################################################### Etudiants ######################################################## #################################################### Etudiants ########################################################
import app
from flask import jsonify from flask import jsonify
import app
from app import models from app import models
from app.api import bp from app.api import bp
from app.api.errors import error_response from app.api.errors import error_response
from app.api.auth import token_permission_required from app.api.auth import token_auth, token_permission_required
from app.api.tools import get_etu_from_request from app.api.tools import get_etu_from_request
from app.models import FormSemestreInscription, FormSemestre, Identite from app.models import FormSemestreInscription, FormSemestre, Identite
from app.scodoc import sco_bulletins from app.scodoc.sco_bulletins import get_formsemestre_bulletin_etud_json
from app.scodoc import sco_groups from app.scodoc.sco_groups import get_etud_groups
from app.scodoc.sco_permissions import Permission from app.scodoc.sco_permissions import Permission
@ -46,14 +46,13 @@ def etudiants_courant():
... ...
""" """
# Récupération de tous les étudiants # Récupération de tous les étudiants
etuds = Identite.query.filter( etus = Identite.query.filter(
Identite.id == FormSemestreInscription.etudid, Identite.id == FormSemestreInscription.etudid,
FormSemestreInscription.formsemestre_id == FormSemestre.id, FormSemestreInscription.formsemestre_id == FormSemestre.id,
FormSemestre.date_debut <= app.db.func.now(), FormSemestre.date_debut <= app.db.func.now(),
FormSemestre.date_fin >= app.db.func.now(), FormSemestre.date_fin >= app.db.func.now())
)
data = [etu.to_dict_bul(include_urls=False) for etu in etuds] data = [etu.to_dict_bul(include_urls=False) for etu in etus]
return jsonify(data) return jsonify(data)
@ -98,7 +97,7 @@ def etudiant(etudid: int = None, nip: int = None, ine: int = None):
@token_permission_required(Permission.APIView) @token_permission_required(Permission.APIView)
def etudiant_formsemestres(etudid: int = None, nip: int = None, ine: int = None): def etudiant_formsemestres(etudid: int = None, nip: int = None, ine: int = None):
""" """
Retourne la liste des semestres qu'un étudiant a suivi, triés par ordre chronologique. Retourne la liste des semestres qu'un étudiant a suivis
etudid : l'etudid d'un étudiant etudid : l'etudid d'un étudiant
nip : le code nip d'un étudiant nip : le code nip d'un étudiant
@ -109,6 +108,7 @@ def etudiant_formsemestres(etudid: int = None, nip: int = None, ine: int = None)
{ {
"titre": "master machine info", "titre": "master machine info",
"gestion_semestrielle": false, "gestion_semestrielle": false,
"scodoc7_id": null,
"date_debut": "01/09/2021", "date_debut": "01/09/2021",
"bul_bgcolor": null, "bul_bgcolor": null,
"date_fin": "15/12/2022", "date_fin": "15/12/2022",
@ -139,14 +139,27 @@ def etudiant_formsemestres(etudid: int = None, nip: int = None, ine: int = None)
] ]
""" """
# Récupération de l'étudiant # Récupération de l'étudiant
etud = get_etu_from_request(etudid, nip, ine) etu = get_etu_from_request(etudid, nip, ine)
formsemestres = models.FormSemestre.query.filter( # Récupération de toutes les inscriptions de l'étudiant
models.FormSemestreInscription.etudid == etud.id, formsemestres_inscriptions = models.FormSemestreInscription.query.filter_by(
models.FormSemestreInscription.formsemestre_id == models.FormSemestre.id, etud=etu
).order_by(models.FormSemestre.date_debut) ).all()
return jsonify([formsemestre.to_dict() for formsemestre in formsemestres]) formsemestres = []
# Récupération des formsemestres contenant les inscriptions de l'étudiant
for formsemestre_inscription in formsemestres_inscriptions:
res = models.FormSemestre.query.filter_by(
id=formsemestre_inscription.formsemestre_id
).first_or_404()
formsemestres.append(res)
data = []
# Mise en forme des données
for formsemestre in formsemestres:
data.append(formsemestre.to_dict())
return jsonify(data)
@bp.route( @bp.route(
@ -175,9 +188,7 @@ def etudiant_bulletin_semestre(
""" """
# Fonction utilisée : app.scodoc.sco_bulletins_json.make_json_formsemestre_bulletinetud() # Fonction utilisée : app.scodoc.sco_bulletins_json.make_json_formsemestre_bulletinetud()
formsemestre = models.FormSemestre.query.filter_by( formsemestre = models.FormSemestre.query.filter_by(id=formsemestre_id).first_or_404()
id=formsemestre_id
).first_or_404()
dept = models.Departement.query.filter_by(id=formsemestre.dept_id).first_or_404() dept = models.Departement.query.filter_by(id=formsemestre.dept_id).first_or_404()
@ -190,10 +201,10 @@ def etudiant_bulletin_semestre(
return error_response( return error_response(
409, 409,
message="La requête ne peut être traitée en létat actuel.\n " message="La requête ne peut être traitée en létat actuel.\n "
"Veuillez vérifier que l'id de l'étudiant (etudid, nip, ine) est valide", "Veilliez vérifier que l'id de l'étudiant (etudid, nip, ine) est valide",
) )
return sco_bulletins.get_formsemestre_bulletin_etud_json(formsemestre, etu) return get_formsemestre_bulletin_etud_json(formsemestre, etu)
@bp.route( @bp.route(
@ -244,6 +255,8 @@ def etudiant_groups(
} }
] ]
""" """
# Fonction utilisée : app.scodoc.sco_groups.get_etud_groups()
if etudid is None: if etudid is None:
# Récupération de l'étudiant # Récupération de l'étudiant
try: try:
@ -253,18 +266,19 @@ def etudiant_groups(
return error_response( return error_response(
409, 409,
message="La requête ne peut être traitée en létat actuel.\n " message="La requête ne peut être traitée en létat actuel.\n "
"Veuillez vérifier que l'id de l'étudiant (etudid, nip, ine) est valide", "Veilliez vérifier que l'id de l'étudiant (etudid, nip, ine) est valide",
) )
# Récupération du formsemestre # Récupération du formsemestre
sem = models.FormSemestre.query.filter_by(id=formsemestre_id).first_or_404() sem = models.FormSemestre.query.filter_by(id=formsemestre_id).first_or_404()
try: try:
data = sco_groups.get_etud_groups(etudid, sem.id) # Utilisation de la fonction get_etud_groups
data = get_etud_groups(etudid, sem.id)
except AttributeError: except AttributeError:
return error_response( return error_response(
409, 409,
message="La requête ne peut être traitée en létat actuel.\n " message="La requête ne peut être traitée en létat actuel.\n "
"Veuillez vérifier que l'id de l'étudiant (etudid, nip, ine) est valide" "Veilliez vérifier que l'id de l'étudiant (etudid, nip, ine) est valide"
" et le formsemestre_id sont valides", " et le formsemestre_id sont valides",
) )

View File

@ -1,8 +1,6 @@
############################################### Evaluations ########################################################### ############################################### Evaluations ###########################################################
from flask import jsonify from flask import jsonify
import app
from app import models from app import models
from app.api import bp from app.api import bp
from app.api.auth import token_permission_required from app.api.auth import token_permission_required
@ -18,39 +16,15 @@ def evaluations(moduleimpl_id: int):
Retourne la liste des évaluations à partir de l'id d'un moduleimpl Retourne la liste des évaluations à partir de l'id d'un moduleimpl
moduleimpl_id : l'id d'un moduleimpl moduleimpl_id : l'id d'un moduleimpl
Exemple de résultat :
[
{
"jour": "20/04/2022",
"id": 1,
"heure_fin": "09h00",
"note_max": 20.0,
"visibulletin": true,
"evaluation_type": 0,
"moduleimpl_id": 1,
"heure_debut": "08h00",
"description": "eval1",
"coefficient": 1.0,
"publish_incomplete": false,
"numero": 0,
"evaluation_id": 1,
"jouriso": "2022-04-20",
"duree": "1h",
"descrheure": " de 08h00 \u00e0 09h00",
"matin": 1,
"apresmidi": 0
},
...
]
""" """
# Récupération de toutes les évaluations # Récupération de toutes les évaluations
evals = models.Evaluation.query.filter_by(id=moduleimpl_id) evals = models.Evaluation.query.filter_by(id=moduleimpl_id).all()
# Mise en forme des données # Mise en forme des données
data = [d.to_dict() for d in evals] data = [d.to_dict() for d in evals]
return jsonify(data) return jsonify(data)
# return error_response(501, message="Not implemented")
@bp.route("/evaluations/eval_notes/<int:evaluation_id>", methods=["GET"]) @bp.route("/evaluations/eval_notes/<int:evaluation_id>", methods=["GET"])
@ -60,44 +34,9 @@ def evaluation_notes(evaluation_id: int):
Retourne la liste des notes à partir de l'id d'une évaluation donnée Retourne la liste des notes à partir de l'id d'une évaluation donnée
evaluation_id : l'id d'une évaluation evaluation_id : l'id d'une évaluation
Exemple de résultat :
{
"1": {
"id": 1,
"etudid": 10,
"evaluation_id": 1,
"value": 15.0,
"comment": "",
"date": "Wed, 20 Apr 2022 06:49:05 GMT",
"uid": 2
},
"2": {
"id": 2,
"etudid": 1,
"evaluation_id": 1,
"value": 12.0,
"comment": "",
"date": "Wed, 20 Apr 2022 06:49:06 GMT",
"uid": 2
},
...
}
""" """
# Fonction utilisée : app.scodoc.sco_evaluation_db.do_evaluation_get_all_notes() # Fonction utilisée : app.scodoc.sco_evaluation_db.do_evaluation_get_all_notes()
eval = models.Evaluation.query.filter_by(id=evaluation_id).first_or_404()
moduleimpl = models.ModuleImpl.query.filter_by(id=eval.moduleimpl_id).first_or_404()
formsemestre = models.FormSemestre.query.filter_by(
id=moduleimpl.formsemestre_id
).first_or_404()
dept = models.Departement.query.filter_by(id=formsemestre.dept_id).first_or_404()
app.set_sco_dept(dept.acronym)
try: try:
# Utilisation de la fonction do_evaluation_get_all_notes # Utilisation de la fonction do_evaluation_get_all_notes
data = do_evaluation_get_all_notes(evaluation_id) data = do_evaluation_get_all_notes(evaluation_id)
@ -109,3 +48,35 @@ def evaluation_notes(evaluation_id: int):
) )
return jsonify(data) return jsonify(data)
@bp.route(
"/evaluations/eval_set_notes?eval_id=<int:eval_id>&etudid=<int:etudid>&note=<float:note>",
methods=["POST"],
)
@bp.route(
"/evaluations/eval_set_notes?eval_id=<int:eval_id>&nip=<int:nip>&note=<float:note>",
methods=["POST"],
)
@bp.route(
"/evaluations/eval_set_notes?eval_id=<int:eval_id>&ine=<int:ine>&note=<float:note>",
methods=["POST"],
)
@token_permission_required(Permission.APIEditAllNotes)
def evaluation_set_notes(
eval_id: int, note: float, etudid: int = None, nip: int = None, ine: int = None
):
"""
Set les notes d'une évaluation pour un étudiant donnée
eval_id : l'id d'une évaluation
note : la note à attribuer
etudid : l'etudid d'un étudiant
nip : le code nip d'un étudiant
ine : le code ine d'un étudiant
"""
# Fonction utilisée : app.scodoc.sco_saisie_notes.notes_add()
# Qu'est ce qu'un user ???
# notes_add()
return error_response(501, message="Not implemented")

View File

@ -4,8 +4,9 @@ from flask import jsonify
from app import models from app import models
from app.api import bp from app.api import bp
from app.api.errors import error_response from app.api.errors import error_response
from app.api.auth import token_permission_required from app.api.auth import token_auth, token_permission_required
from app.scodoc.sco_formations import formation_export from app.scodoc.sco_formations import formation_export
from app.scodoc.sco_moduleimpl import moduleimpl_list
from app.scodoc.sco_permissions import Permission from app.scodoc.sco_permissions import Permission
@ -33,7 +34,7 @@ def formations_by_id(formation_id: int):
formation_id : l'id d'une formation formation_id : l'id d'une formation
""" """
# Récupération de la formation # Récupération de la formation
forma = models.Formation.query.filter_by(id=formation_id).first_or_404() forma = models.Formation.query.filter_by(id=formation_id).first()
# Mise en forme des données # Mise en forme des données
data = [d.to_dict() for d in forma] data = [d.to_dict() for d in forma]
@ -71,14 +72,12 @@ def formsemestre_apo(etape_apo: int):
etape_apo : l'id d'une étape apogée etape_apo : l'id d'une étape apogée
""" """
# Récupération des formsemestres # Récupération des formsemestres
apos = models.FormSemestreEtape.query.filter_by(etape_apo=etape_apo) apos = models.FormSemestreEtape.query.filter_by(etape_apo=etape_apo).all()
data = [] data = []
# Filtre les formsemestres correspondant + mise en forme des données # Filtre les formsemestres correspondant + mise en forme des données
for apo in apos: for apo in apos:
formsem = models.FormSemestre.query.filter_by( formsem = models.FormSemestre.query.filter_by(id=apo["formsemestre_id"]).first()
id=apo["formsemestre_id"]
).first_or_404()
data.append(formsem.to_dict()) data.append(formsem.to_dict())
return jsonify(data) return jsonify(data)
@ -94,32 +93,37 @@ def moduleimpls(moduleimpl_id: int):
moduleimpl_id : l'id d'un moduleimpl moduleimpl_id : l'id d'un moduleimpl
""" """
# Récupération des tous les moduleimpl # Récupération des tous les moduleimpl
list_moduleimpls = models.ModuleImpl.query.filter_by(id=moduleimpl_id) list_moduleimpls = models.ModuleImpl.query.filter_by(id=moduleimpl_id).all()
# Mise en forme des données # Mise en forme des données
data = [moduleimpl.to_dict() for moduleimpl in list_moduleimpls] data = list_moduleimpls[0].to_dict()
return jsonify(data) return jsonify(data)
@bp.route( @bp.route(
"/formations/moduleimpl/formsemestre/<int:formsemestre_id>/liste", "/formations/moduleimpl/<int:moduleimpl_id>/formsemestre/<int:formsemestre_id>",
methods=["GET"], methods=["GET"],
) # XXX TODO penser à changer la route sur la doc )
@token_permission_required(Permission.APIView) @token_permission_required(Permission.APIView)
def moduleimpls_sem(formsemestre_id: int): def moduleimpls_sem(moduleimpl_id: int, formsemestre_id: int):
""" """
Retourne la liste des moduleimpl d'un semestre Retourne la liste des moduleimpl d'un semestre
moduleimpl_id : l'id d'un moduleimpl moduleimpl_id : l'id d'un moduleimpl
formsemestre_id : l'id d'un formsemestre formsemestre_id : l'id d'un formsemestre
""" """
formsemestre = models.FormSemestre.query.filter_by( # Fonction utilisée : app.scodoc.sco_moduleimpl.moduleimpl_list()
id=formsemestre_id
).first_or_404()
moduleimpls = formsemestre.modimpls_sorted # Utilisation de la fonction moduleimpl_list
data = moduleimpl_list(moduleimpl_id, formsemestre_id)
data = [moduleimpl.to_dict() for moduleimpl in moduleimpls] if len(data) == 0:
return error_response(
409,
message="La requête ne peut être traitée en létat actuel. \n"
"Aucun moduleimpl ne correspond au 'moduleimpl_id' ou "
"'formsemestre_id' renseigné",
)
return jsonify(data) return jsonify(data)

View File

@ -1,72 +0,0 @@
# @bp.route("/etudiants", methods=["GET"])
# @token_permission_required(Permission.APIView)
# def etudiants():
# """
# Retourne la liste de tous les étudiants
#
# 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"
# },
# ...
# """
# # Récupération de tous les étudiants
# etu = models.Identite.query.all()
#
# # Mise en forme des données
# data = [d.to_dict_bul(include_urls=False) for d in etu]
#
# return jsonify(data)
# @bp.route(
# "/evaluations/eval_set_notes?eval_id=<int:eval_id>&etudid=<int:etudid>&note=<float:note>",
# methods=["POST"],
# )
# @bp.route(
# "/evaluations/eval_set_notes?eval_id=<int:eval_id>&nip=<int:nip>&note=<float:note>",
# methods=["POST"],
# )
# @bp.route(
# "/evaluations/eval_set_notes?eval_id=<int:eval_id>&ine=<int:ine>&note=<float:note>",
# methods=["POST"],
# )
# @token_permission_required(Permission.APIEditAllNotes)
# def evaluation_set_notes(
# eval_id: int, note: float, etudid: int = None, nip: int = None, ine: int = None
# ):
# """
# Set les notes d'une évaluation pour un étudiant donnée
#
# eval_id : l'id d'une évaluation
# note : la note à attribuer
# etudid : l'etudid d'un étudiant
# nip : le code nip d'un étudiant
# ine : le code ine d'un étudiant
# """
# # Fonction utilisée : app.scodoc.sco_saisie_notes.notes_add()
#
# # Qu'est ce qu'un user ???
# # notes_add()
# return error_response(501, message="Not implemented")

View File

@ -13,10 +13,10 @@ def get_etu_from_request(etudid, nip, ine):
""" """
if etudid is None: if etudid is None:
if nip is None: # si ine if nip is None: # si ine
etud = models.Identite.query.filter_by(code_ine=str(ine)).first() etu = models.Identite.query.filter_by(code_ine=str(ine)).first()
else: # si nip else: # si nip
etud = models.Identite.query.filter_by(code_nip=str(nip)).first() etu = models.Identite.query.filter_by(code_nip=str(nip)).first()
else: # si etudid else: # si etudid
etud = models.Identite.query.filter_by(id=etudid).first() etu = models.Identite.query.filter_by(id=etudid).first()
return etud return etu