diff --git a/app/api/sco_api.py b/app/api/sco_api.py index 65678988..491788d5 100644 --- a/app/api/sco_api.py +++ b/app/api/sco_api.py @@ -50,7 +50,7 @@ from app.api.errors import error_response from app import models from app.models import FormSemestre, FormSemestreInscription, Identite from app.models import ApcReferentielCompetences -from app.scodoc.sco_abs import annule_absence, annule_justif +from app.scodoc.sco_abs import annule_absence, annule_justif, add_absence, add_justif from app.scodoc.sco_bulletins import formsemestre_bulletinetud_dict from app.scodoc.sco_bulletins_json import make_json_formsemestre_bulletinetud from app.scodoc.sco_evaluation_db import do_evaluation_get_all_notes @@ -343,17 +343,27 @@ def formation_export_by_formation_id(formation_id: int, export_ids=False): """ La formation, avec UE, matières, modules """ - data = formation_export(formation_id) + try: + data = formation_export(formation_id) + except ValueError: + return error_response(409, message="La requête ne peut être traitée en l’état actuel") return jsonify(data) -@bp.route("/formations/apo/", methods=["GET"]) +@bp.route("/formations/apo/", methods=["GET"]) def formsemestre_apo(etape_apo: int): """ Information sur les formsemestres """ - return error_response(501, message="Not implemented") + apos = models.FormSemestreEtape.query.filter_by(etape_apo=etape_apo).all() + + data = [] + for apo in apos: + formsem = models.FormSemestre.query.filter_by(id=apo["formsemestre_id"]).first() + data.append(formsem.to_dict()) + return jsonify(data) + # return error_response(501, message="Not implemented") @bp.route("/formations/moduleimpl/", methods=["GET"]) @@ -376,9 +386,12 @@ def moduleimpls_sem(moduleimpl_id: int, formsemestre_id: int): """ Liste de moduleimpl d'un semestre """ - data = moduleimpl_list(moduleimpl_id, formsemestre_id) + try: + data = moduleimpl_list(moduleimpl_id, formsemestre_id) + except ValueError: + return error_response(409, message="La requête ne peut être traitée en l’état actuel") + return jsonify(data) - # return error_response(501, message="Not implemented") #################################################### UE ############################################################### @@ -433,7 +446,7 @@ def etudiant_bulletin(formsemestre_id, dept, etudid, format="json", *args, size) elif args[0] == "long": data = formsemestre_bulletinetud_dict(formsemestre_id, etudid) else: - return error_response(501, message="Not implemented") + return error_response(409, message="La requête ne peut être traitée en l’état actuel") return jsonify(data) @@ -623,7 +636,9 @@ def annule_decision_jury(formsemestre_id: int, etudid=None, nip=None, ine=None): #################################################### Absences ######################################################### -@bp.route("/absences/", methods=["GET"]) +@bp.route("/absences/etudid/", methods=["GET"]) +@bp.route("/absences/nip/", methods=["GET"]) +@bp.route("/absences/ine/", methods=["GET"]) def absences(etudid=None, nip=None, ine=None): """ Liste des absences d'un étudiant donné @@ -646,7 +661,9 @@ def absences(etudid=None, nip=None, ine=None): return error_response(501, message="Not implemented") -@bp.route("/absences//abs_just_only", methods=["GET"]) +@bp.route("/absences/etudid//abs_just_only", methods=["GET"]) +@bp.route("/absences/nip//abs_just_only", methods=["GET"]) +@bp.route("/absences/ine//abs_just_only", methods=["GET"]) def absences_justify(etudid=None, nip=None, ine=None): """ Liste des absences justifiés d'un étudiant donné @@ -669,13 +686,89 @@ def absences_justify(etudid=None, nip=None, ine=None): return error_response(501, message="Not implemented") -@bp.route("/absences/abs_signale", methods=["POST"]) +@bp.route("/absences/abs_signale?etudid=&date=&matin=&justif=", + "&description=", methods=["POST"]) +@bp.route("/absences/abs_signale?nip=&date=&matin=&justif=", + "&description=", methods=["POST"]) +@bp.route("/absences/abs_signale?ine=&date=&matin=&justif=" + "&description=", methods=["POST"]) +@bp.route("/absences/abs_signale?ine=&date=&matin=&justif=" + "&description=&moduleimpl_id=", methods=["POST"]) @token_auth.login_required -def abs_signale(): +def abs_signale(date: datetime, matin: bool, justif: bool, etudid=None, nip=None, ine=None, description=None, + moduleimpl_id=None): """ - Retourne un html + Permet d'ajouter une absence en base """ - return error_response(501, message="Not implemented") + # fonction to use : add_absence, add_justif + if description is not None: + if moduleimpl_id is not None: + if etudid is not None: + try: + add_absence(etudid, date, matin, justif, description, moduleimpl_id) + add_justif(etudid, date, matin, description) + except ValueError: + return error_response(409, message="La requête ne peut être traitée en l’état actuel") + if nip is not None: + etu = models.Identite.query.filter_by(code_nip=nip).first() + try: + add_absence(etu.etudid, date, matin, justif, description, moduleimpl_id) + add_justif(etu.etudid, date, matin, description) + except ValueError: + return error_response(409, message="La requête ne peut être traitée en l’état actuel") + if ine is not None: + etu = models.Identite.query.filter_by(code_ine=ine).first() + try: + add_absence(etu.etudid, date, matin, justif, description, moduleimpl_id) + add_justif(etu.etudid, date, matin, description) + except ValueError: + return error_response(409, message="La requête ne peut être traitée en l’état actuel") + return error_response(409, message="La requête ne peut être traitée en l’état actuel") + else: + if etudid is not None: + try: + add_absence(etudid, date, matin, justif, description) + add_justif(etudid, date, matin, description) + except ValueError: + return error_response(409, message="La requête ne peut être traitée en l’état actuel") + if nip is not None: + etu = models.Identite.query.filter_by(code_nip=nip).first() + try: + add_absence(etu.etudid, date, matin, justif, description) + add_justif(etu.etudid, date, matin, description) + except ValueError: + return error_response(409, message="La requête ne peut être traitée en l’état actuel") + if ine is not None: + etu = models.Identite.query.filter_by(code_ine=ine).first() + try: + add_absence(etu.etudid, date, matin, justif, description) + add_justif(etu.etudid, date, matin, description) + except ValueError: + return error_response(409, message="La requête ne peut être traitée en l’état actuel") + return error_response(409, message="La requête ne peut être traitée en l’état actuel") + else: + if etudid is not None: + try: + add_absence(etudid, date, matin, justif) + add_justif(etudid, date, matin) + except ValueError: + return error_response(409, message="La requête ne peut être traitée en l’état actuel") + if nip is not None: + etu = models.Identite.query.filter_by(code_nip=nip).first() + try: + add_absence(etu.etudid, date, matin, justif) + add_justif(etu.etudid, date, matin) + except ValueError: + return error_response(409, message="La requête ne peut être traitée en l’état actuel") + if ine is not None: + etu = models.Identite.query.filter_by(code_ine=ine).first() + try: + add_absence(etu.etudid, date, matin, justif) + add_justif(etu.etudid, date, matin) + except ValueError: + return error_response(409, message="La requête ne peut être traitée en l’état actuel") + + return error_response(200, message="OK") @bp.route("/absences/abs_annule?etudid=&jour=&matin=", methods=["POST"]) @@ -737,7 +830,7 @@ def abs_groupe_etat( Liste des absences d'un ou plusieurs groupes entre deux dates """ - # list_abs_date< + # list_abs_date return error_response(501, message="Not implemented") @@ -749,6 +842,7 @@ def liste_logos(format="json"): """ Liste des logos définis pour le site scodoc. """ + # fonction to use : list_logos() return error_response(501, message="Not implemented") @@ -757,6 +851,7 @@ def recup_logo_global(nom: str): """ Retourne l'image au format png ou jpg """ + # fonction to use find_logo return error_response(501, message="Not implemented") @@ -773,4 +868,5 @@ def recup_logo_dept_global(dept: str, nom: str): """ L'image format png ou jpg """ + # fonction to use find_logo return error_response(501, message="Not implemented")