diff --git a/app/api/assiduites.py b/app/api/assiduites.py index 0bd13486..c679f910 100644 --- a/app/api/assiduites.py +++ b/app/api/assiduites.py @@ -54,12 +54,18 @@ def assiduite(assiduite_id: int = None): return get_model_api_object(Assiduite, assiduite_id, Identite) -@bp.route("/assiduite//justificatifs") -@api_web_bp.route("/assiduite//justificatifs") +@bp.route("/assiduite//justificatifs", defaults={"long": False}) +@api_web_bp.route( + "/assiduite//justificatifs", defaults={"long": False} +) +@bp.route("/assiduite//justificatifs/long", defaults={"long": True}) +@api_web_bp.route( + "/assiduite//justificatifs/long", defaults={"long": True} +) @scodoc @permission_required(Permission.ScoView) @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 Exemple de résultat: @@ -71,15 +77,7 @@ def assiduite_justificatifs(assiduite_id: int = None): ] """ - 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 for j in justifs] + return _get_assiduites_justif(assiduite_id, True) # etudid @@ -154,6 +152,7 @@ def count_assiduites( + """ # query = Identite.query.filter_by(id=etudid) # 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] = [] for ass in assiduites_query.all(): data = ass.to_dict(format_api=True) + data = _with_justifs(data) data_set.append(data) 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} for ass in assiduites_query.all(): data = ass.to_dict(format_api=True) + data = _with_justifs(data) data_set.get(str(data["etudid"])).append(data) return data_set @@ -378,6 +379,7 @@ def assiduites_formsemestre(formsemestre_id: int, with_query: bool = False): data_set: list[dict] = [] for ass in assiduites_query.all(): data = ass.to_dict(format_api=True) + data = _with_justifs(data) data_set.append(data) 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) 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