Assiduites : query with_justifs

This commit is contained in:
iziram 2023-07-30 17:09:21 +02:00
parent cab5a71925
commit 2a971eb365

View File

@ -54,12 +54,18 @@ def assiduite(assiduite_id: int = None):
return get_model_api_object(Assiduite, assiduite_id, Identite) return get_model_api_object(Assiduite, assiduite_id, Identite)
@bp.route("/assiduite/<int:assiduite_id>/justificatifs") @bp.route("/assiduite/<int:assiduite_id>/justificatifs", defaults={"long": False})
@api_web_bp.route("/assiduite/<int:assiduite_id>/justificatifs") @api_web_bp.route(
"/assiduite/<int:assiduite_id>/justificatifs", defaults={"long": False}
)
@bp.route("/assiduite/<int:assiduite_id>/justificatifs/long", defaults={"long": True})
@api_web_bp.route(
"/assiduite/<int:assiduite_id>/justificatifs/long", defaults={"long": True}
)
@scodoc @scodoc
@permission_required(Permission.ScoView) @permission_required(Permission.ScoView)
@as_json @as_json
def assiduite_justificatifs(assiduite_id: int = None): def assiduite_justificatifs(assiduite_id: int = None, long: bool = False):
"""Retourne la liste des justificatifs qui justifie cette assiduitée """Retourne la liste des justificatifs qui justifie cette assiduitée
Exemple de résultat: Exemple de résultat:
@ -71,15 +77,7 @@ def assiduite_justificatifs(assiduite_id: int = None):
] ]
""" """
assi: Assiduite = Assiduite.query.get_or_404(assiduite_id) return _get_assiduites_justif(assiduite_id, True)
justifs: Justificatif = Justificatif.query.filter(
Justificatif.etudid == assi.etudid,
Justificatif.date_debut <= assi.date_debut,
Justificatif.date_fin >= assi.date_fin,
)
return [j.justif_id for j in justifs]
# etudid # etudid
@ -154,6 +152,7 @@ def count_assiduites(
""" """
# query = Identite.query.filter_by(id=etudid) # query = Identite.query.filter_by(id=etudid)
# if g.scodoc_dept: # if g.scodoc_dept:
@ -264,6 +263,7 @@ def assiduites(etudid: int = None, nip=None, ine=None, with_query: bool = False)
data_set: list[dict] = [] data_set: list[dict] = []
for ass in assiduites_query.all(): for ass in assiduites_query.all():
data = ass.to_dict(format_api=True) data = ass.to_dict(format_api=True)
data = _with_justifs(data)
data_set.append(data) data_set.append(data)
return data_set return data_set
@ -339,6 +339,7 @@ def assiduites_group(with_query: bool = False):
data_set: dict[list[dict]] = {str(key): [] for key in etuds} data_set: dict[list[dict]] = {str(key): [] for key in etuds}
for ass in assiduites_query.all(): for ass in assiduites_query.all():
data = ass.to_dict(format_api=True) data = ass.to_dict(format_api=True)
data = _with_justifs(data)
data_set.get(str(data["etudid"])).append(data) data_set.get(str(data["etudid"])).append(data)
return data_set return data_set
@ -378,6 +379,7 @@ def assiduites_formsemestre(formsemestre_id: int, with_query: bool = False):
data_set: list[dict] = [] data_set: list[dict] = []
for ass in assiduites_query.all(): for ass in assiduites_query.all():
data = ass.to_dict(format_api=True) data = ass.to_dict(format_api=True)
data = _with_justifs(data)
data_set.append(data) data_set.append(data)
return data_set return data_set
@ -1010,3 +1012,22 @@ def _filter_manager(requested, assiduites_query: Assiduite):
assiduites_query: Assiduite = scass.filter_by_user_id(assiduites_query, user_id) assiduites_query: Assiduite = scass.filter_by_user_id(assiduites_query, user_id)
return assiduites_query return assiduites_query
def _get_assiduites_justif(assiduite_id: int, long: bool):
assi: Assiduite = Assiduite.query.get_or_404(assiduite_id)
justifs: Justificatif = Justificatif.query.filter(
Justificatif.etudid == assi.etudid,
Justificatif.date_debut <= assi.date_debut,
Justificatif.date_fin >= assi.date_fin,
)
return [j.justif_id if not long else j.to_dict(True) for j in justifs]
def _with_justifs(assi):
if request.args.get("with_justifs") is None:
return assi
assi["justificatifs"] = _get_assiduites_justif(assi["assiduite_id"], True)
return assi