forked from ScoDoc/ScoDoc
WIP: API absences
This commit is contained in:
parent
46d99a5735
commit
62c65176b6
@ -8,9 +8,9 @@ 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 ndb
|
||||
from app.scodoc import sco_abs
|
||||
from app.scodoc.sco_abs import (
|
||||
add_absence,
|
||||
add_justif,
|
||||
annule_absence,
|
||||
annule_justif,
|
||||
list_abs_date,
|
||||
@ -33,32 +33,26 @@ def absences(etudid: int = None, nip: int = None, ine: int = None):
|
||||
"""
|
||||
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:
|
||||
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 "
|
||||
"Veilliez vérifier que l'id de l'étudiant (etudid, nip, ine) est valide",
|
||||
"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
|
||||
abs = models.Absence.query.filter_by(etudid=etudid)
|
||||
|
||||
# Si l'étudiant a au minimum une absence
|
||||
if len(abs) > 0:
|
||||
# Mise en forme des données
|
||||
data = [d.to_dict() for d in abs]
|
||||
|
||||
return jsonify(data)
|
||||
|
||||
return error_response(200, message="Aucune absence trouvé pour cet é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/<int:etudid>/abs_just_only", methods=["GET"])
|
||||
@bp.route("/absences/nip/<int:nip>/abs_just_only", methods=["GET"])
|
||||
@bp.route("/absences/ine/<int:ine>/abs_just_only", methods=["GET"])
|
||||
@bp.route("/absences/etudid/<int:etudid>/just", methods=["GET"])
|
||||
@bp.route("/absences/nip/<int:nip>/just", methods=["GET"])
|
||||
@bp.route("/absences/ine/<int:ine>/just", methods=["GET"])
|
||||
@token_permission_required(Permission.APIView)
|
||||
def absences_justify(etudid: int = None, nip: int = None, ine: int = None):
|
||||
"""
|
||||
@ -77,125 +71,117 @@ def absences_justify(etudid: int = None, nip: int = None, ine: int = None):
|
||||
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",
|
||||
"Veuillez vérifier que l'id de l'étudiant (etudid, nip, ine) est valide",
|
||||
)
|
||||
|
||||
# Récupération des absences justifiées de l'étudiant
|
||||
abs = models.Absence.query.filter_by(etudid=etudid, estjust=True)
|
||||
|
||||
# Si l'étudiant a au minimum une absence justifiées
|
||||
if len(abs) > 0:
|
||||
# Mise en forme des données
|
||||
data = [d.to_dict() for d in abs]
|
||||
|
||||
return jsonify(data)
|
||||
|
||||
return error_response(
|
||||
200, message="Aucune absence justifié trouvé pour cet é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=<int:etudid>&jour=<string:jour>&matin=<string:matin>",
|
||||
methods=["POST"],
|
||||
)
|
||||
@bp.route(
|
||||
"/absences/abs_annule?nip=<int:nip>&jour=<string:jour>&matin=<string:matin>",
|
||||
methods=["POST"],
|
||||
)
|
||||
@bp.route(
|
||||
"/absences/abs_annule?ine=<int:ine>&jour=<string:jour>&matin=<string: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
|
||||
# @bp.route(
|
||||
# "/absences/abs_annule?etudid=<int:etudid>&jour=<string:jour>&matin=<string:matin>",
|
||||
# methods=["POST"],
|
||||
# )
|
||||
# @bp.route(
|
||||
# "/absences/abs_annule?nip=<int:nip>&jour=<string:jour>&matin=<string:matin>",
|
||||
# methods=["POST"],
|
||||
# )
|
||||
# @bp.route(
|
||||
# "/absences/abs_annule?ine=<int:ine>&jour=<string:jour>&matin=<string: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()
|
||||
# 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",
|
||||
)
|
||||
# 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",
|
||||
)
|
||||
# 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")
|
||||
# return error_response(200, message="OK")
|
||||
|
||||
|
||||
@bp.route(
|
||||
"/absences/abs_annule_justif?etudid=<int:etudid>&jour=<string:jour>&matin=<string:matin>",
|
||||
methods=["POST"],
|
||||
)
|
||||
@bp.route(
|
||||
"/absences/abs_annule_justif?nip=<int:nip>&jour=<string:jour>&matin=<string:matin>",
|
||||
methods=["POST"],
|
||||
)
|
||||
@bp.route(
|
||||
"/absences/abs_annule_justif?ine=<int:ine>&jour=<string:jour>&matin=<string: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
|
||||
# @bp.route(
|
||||
# "/absences/abs_annule_justif?etudid=<int:etudid>&jour=<string:jour>&matin=<string:matin>",
|
||||
# methods=["POST"],
|
||||
# )
|
||||
# @bp.route(
|
||||
# "/absences/abs_annule_justif?nip=<int:nip>&jour=<string:jour>&matin=<string:matin>",
|
||||
# methods=["POST"],
|
||||
# )
|
||||
# @bp.route(
|
||||
# "/absences/abs_annule_justif?ine=<int:ine>&jour=<string:jour>&matin=<string: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()
|
||||
# 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",
|
||||
)
|
||||
# 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")
|
||||
# return error_response(200, message="OK")
|
||||
|
||||
|
||||
@bp.route(
|
||||
@ -203,7 +189,7 @@ def abs_annule_justif(
|
||||
methods=["GET"],
|
||||
)
|
||||
@token_permission_required(Permission.APIView)
|
||||
def abs_groupe_etat(
|
||||
def abs_groupe_etat( # XXX A REVOIR XXX
|
||||
group_id: int, date_debut, date_fin, with_boursier=True, format="html"
|
||||
):
|
||||
"""
|
||||
|
@ -303,12 +303,14 @@ def YearTable(
|
||||
return "\n".join(T)
|
||||
|
||||
|
||||
def list_abs_in_range(etudid, debut, fin, matin=None, moduleimpl_id=None, cursor=None):
|
||||
def list_abs_in_range(
|
||||
etudid, debut=None, fin=None, matin=None, moduleimpl_id=None, cursor=None
|
||||
):
|
||||
"""Liste des absences entre deux dates.
|
||||
|
||||
Args:
|
||||
etudid:
|
||||
debut: string iso date ("2020-03-12")
|
||||
debut: string iso date ("2020-03-12") ou None
|
||||
end: string iso date ("2020-03-12")
|
||||
matin: None, True, False
|
||||
moduleimpl_id: restreint le comptage aux absences dans ce module
|
||||
@ -335,9 +337,13 @@ def list_abs_in_range(etudid, debut, fin, matin=None, moduleimpl_id=None, cursor
|
||||
AND A.ESTABS"""
|
||||
+ ismatin
|
||||
+ modul
|
||||
+ """
|
||||
+ (
|
||||
""
|
||||
if debut is None
|
||||
else """
|
||||
AND A.JOUR BETWEEN %(debut)s AND %(fin)s
|
||||
""",
|
||||
"""
|
||||
),
|
||||
{
|
||||
"etudid": etudid,
|
||||
"debut": debut,
|
||||
@ -412,13 +418,14 @@ WHERE A.ETUDID = %(etudid)s
|
||||
return res
|
||||
|
||||
|
||||
def list_abs_date(etudid, beg_date, end_date):
|
||||
def list_abs_date(etudid, beg_date=None, end_date=None):
|
||||
"""Liste des absences et justifs entre deux dates (inclues)."""
|
||||
cnx = ndb.GetDBConnexion()
|
||||
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)
|
||||
cursor.execute(
|
||||
"""SELECT jour, matin, estabs, estjust, description FROM ABSENCES A
|
||||
WHERE A.ETUDID = %(etudid)s
|
||||
WHERE A.ETUDID = %(etudid)s"""
|
||||
+ ("" if beg_date is None else """
|
||||
AND A.jour >= %(beg_date)s
|
||||
AND A.jour <= %(end_date)s
|
||||
""",
|
||||
|
Loading…
Reference in New Issue
Block a user