#################################################### Absences ######################################################### from flask import jsonify from app.api import bp from app.api.errors import error_response from app.api.auth import token_permission_required from app.api.tools import get_etu_from_etudid_or_nip_or_ine from app.scodoc import notesdb as ndb from app.scodoc import sco_abs from app.scodoc.sco_groups import get_group_members from app.scodoc.sco_permissions import Permission @bp.route("/absences/etudid/", methods=["GET"]) @bp.route("/absences/nip/", methods=["GET"]) @bp.route("/absences/ine/", methods=["GET"]) @token_permission_required(Permission.APIView) def absences(etudid: int = None, nip: int = None, ine: int = None): """ Retourne la liste des absences d'un étudiant donné etudid : l'etudid d'un étudiant nip: le code nip d'un étudiant ine : le code ine d'un étudiant """ if etudid is None: # Récupération de l'étudiant etud = get_etu_from_etudid_or_nip_or_ine(etudid, nip, ine) if etud is None: return error_response( 409, 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", ) etudid = etud.etudid # Récupération des absences de l'étudiant ndb.open_db_connection() absences = sco_abs.list_abs_date(etudid) for absence in absences: absence["jour"] = absence["jour"].isoformat() return jsonify(absences) @bp.route("/absences/etudid//just", methods=["GET"]) @bp.route("/absences/nip//just", methods=["GET"]) @bp.route("/absences/ine//just", methods=["GET"]) @token_permission_required(Permission.APIView) def absences_justify(etudid: int = None, nip: int = None, ine: int = None): """ Retourne la liste des absences justifiées d'un étudiant donné etudid : l'etudid d'un étudiant nip: le code nip d'un étudiant ine : le code ine d'un étudiant """ if etudid is None: # Récupération de l'étudiant try: etu = get_etu_from_etudid_or_nip_or_ine(etudid, nip, ine) etudid = etu.etudid except AttributeError: return error_response( 409, 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", ) # Récupération des absences justifiées de l'étudiant absences = sco_abs.list_abs_date(etudid) for absence in [absence for absence in absences if absence["estjust"]]: absence["jour"] = absence["jour"].isoformat() return jsonify(absences) # @bp.route( # "/absences/abs_annule?etudid=&jour=&matin=", # methods=["POST"], # ) # @bp.route( # "/absences/abs_annule?nip=&jour=&matin=", # methods=["POST"], # ) # @bp.route( # "/absences/abs_annule?ine=&jour=&matin=", # methods=["POST"], # ) # @token_permission_required(Permission.APIAbsChange) # def abs_annule( # jour: datetime, matin: str, etudid: int = None, nip: int = None, ine: int = None # ): # """ # Retourne un html # jour : la date de l'absence a annulé # matin : True ou False # 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_abs.annule_absence() # if etudid is None: # # Récupération de l'étudiant # try: # etu = get_etu_from_etudid_or_nip_or_ine(etudid, nip, ine) # etudid = etu.etudid # except AttributeError: # return error_response( # 409, # message="La requête ne peut être traitée en l’état actuel.\n " # "Veilliez vérifier que l'id de l'étudiant (etudid, nip, ine) est valide", # ) # try: # # Utilisation de la fonction annule_absence # annule_absence(etudid, jour, matin) # except AttributeError: # return error_response( # 409, # message="La requête ne peut être traitée en l’état actuel.\n " # "Veilliez vérifier que le 'jour' et le 'matin' sont valides", # ) # return error_response(200, message="OK") # @bp.route( # "/absences/abs_annule_justif?etudid=&jour=&matin=", # methods=["POST"], # ) # @bp.route( # "/absences/abs_annule_justif?nip=&jour=&matin=", # methods=["POST"], # ) # @bp.route( # "/absences/abs_annule_justif?ine=&jour=&matin=", # methods=["POST"], # ) # @token_permission_required(Permission.APIAbsChange) # def abs_annule_justif( # jour: datetime, matin: str, etudid: int = None, nip: int = None, ine: int = None # ): # """ # Retourne un html # jour : la date de l'absence a annulé # matin : True ou False # 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_abs.annule_justif() # if etudid is None: # # Récupération de l'étudiant # try: # etu = get_etu_from_etudid_or_nip_or_ine(etudid, nip, ine) # etudid = etu.etudid # except AttributeError: # return error_response( # 409, # message="La requête ne peut être traitée en l’état actuel.\n " # "Veilliez vérifier que l'id de l'étudiant (etudid, nip, ine) est valide", # ) # try: # # Utilisation de la fonction annule_justif # annule_justif(etudid, jour, matin) # except ValueError: # return error_response( # 409, # message="La requête ne peut être traitée en l’état actuel.\n " # "Veilliez vérifier que le 'jour' et le 'matin' sont valides", # ) # return error_response(200, message="OK") @bp.route( "/absences/abs_group_etat/?group_id=&date_debut=date_debut&date_fin=date_fin", methods=["GET"], ) @token_permission_required(Permission.APIView) def abs_groupe_etat( # XXX A REVOIR XXX group_id: int, date_debut, date_fin, with_boursier=True, format="html" ): """ Retoune la liste des absences d'un ou plusieurs groupes entre deux dates """ # Fonction utilisée : app.scodoc.sco_groups.get_group_members() et app.scodoc.sco_abs.list_abs_date() try: # Utilisation de la fonction get_group_members members = get_group_members(group_id) except ValueError: return error_response( 409, message="La requête ne peut être traitée en l’état actuel" ) data = [] # Filtre entre les deux dates renseignées for member in members: abs = sco_abs.list_abs_date(member.id, date_debut, date_fin) data.append(abs) # return jsonify(data) # XXX TODO faire en sorte de pouvoir renvoyer sa (ex to_dict() dans absences) return error_response(501, message="Not implemented")