diff --git a/app/api/justificatifs.py b/app/api/justificatifs.py index fd71effbd..9c6081b01 100644 --- a/app/api/justificatifs.py +++ b/app/api/justificatifs.py @@ -11,6 +11,7 @@ from flask_json import as_json from flask import g, request from flask_login import login_required, current_user from flask_sqlalchemy.query import Query +from werkzeug.exceptions import NotFound import app.scodoc.sco_assiduites as scass import app.scodoc.sco_utils as scu @@ -150,7 +151,7 @@ def justificatifs(etudid: int = None, nip=None, ine=None, with_query: bool = Fal @as_json @permission_required(Permission.ScoView) def justificatifs_dept(dept_id: int = None, with_query: bool = False): - """ """ + """XXX TODO missing doc""" # Récupération du département et des étudiants du département dept: Departement = Departement.query.get_or_404(dept_id) @@ -373,7 +374,7 @@ def _create_one( date_debut=deb, date_fin=fin, etat=etat, - etud=etud, + etudiant=etud, raison=raison, user_id=current_user.id, external_data=external_data, @@ -419,9 +420,7 @@ def justif_edit(justif_id: int): """ # Récupération du justificatif à modifier - justificatif_unique: Query = Justificatif.query.filter_by( - id=justif_id - ).first_or_404() + justificatif_unique = Justificatif.get_justificatif(justif_id) errors: list[str] = [] data = request.get_json(force=True) @@ -497,7 +496,7 @@ def justif_edit(justif_id: int): retour = { "couverture": { "avant": avant_ids, - "après": compute_assiduites_justified( + "apres": compute_assiduites_justified( justificatif_unique.etudid, [justificatif_unique], True, @@ -561,12 +560,10 @@ def _delete_one(justif_id: int) -> tuple[int, str]: message : OK si réussi, message d'erreur sinon """ # Récupération du justificatif à supprimer - justificatif_unique: Justificatif = Justificatif.query.filter_by( - id=justif_id - ).first() - if justificatif_unique is None: + try: + justificatif_unique = Justificatif.get_justificatif(justif_id) + except NotFound: return (404, "Justificatif non existant") - # Récupération de l'archive du justificatif archive_name: str = justificatif_unique.fichier @@ -612,10 +609,7 @@ def justif_import(justif_id: int = None): return json_error(404, "Il n'y a pas de fichier joint") # On récupère le justificatif auquel on va importer le fichier - query: Query = Justificatif.query.filter_by(id=justif_id) - if g.scodoc_dept: - query = query.join(Identite).filter_by(dept_id=g.scodoc_dept_id) - justificatif_unique: Justificatif = query.first_or_404() + justificatif_unique = Justificatif.get_justificatif(justif_id) # Récupération de l'archive si elle existe archive_name: str = justificatif_unique.fichier @@ -658,10 +652,7 @@ def justif_export(justif_id: int | None = None, filename: str | None = None): La permission est ScoView + (AbsJustifView ou être l'auteur du justifcatif) """ # On récupère le justificatif concerné - query: Query = Justificatif.query.filter_by(id=justif_id) - if g.scodoc_dept: - query = query.join(Identite).filter_by(dept_id=g.scodoc_dept_id) - justificatif_unique: Justificatif = query.first_or_404() + justificatif_unique = Justificatif.get_justificatif(justif_id) # Vérification des permissions if not ( @@ -694,6 +685,7 @@ def justif_export(justif_id: int | None = None, filename: str | None = None): @as_json @permission_required(Permission.AbsChange) def justif_remove(justif_id: int = None): + # XXX TODO pas de test unitaire """ Supression d'un fichier ou d'une archive { @@ -710,10 +702,7 @@ def justif_remove(justif_id: int = None): data: dict = request.get_json(force=True) # On récupère le justificatif concerné - query: Query = Justificatif.query.filter_by(id=justif_id) - if g.scodoc_dept: - query = query.join(Identite).filter_by(dept_id=g.scodoc_dept_id) - justificatif_unique: Justificatif = query.first_or_404() + justificatif_unique = Justificatif.get_justificatif(justif_id) # On récupère l'archive archive_name: str = justificatif_unique.fichier @@ -775,10 +764,7 @@ def justif_list(justif_id: int = None): """ # Récupération du justificatif concerné - query: Query = Justificatif.query.filter_by(id=justif_id) - if g.scodoc_dept: - query = query.join(Identite).filter_by(dept_id=g.scodoc_dept_id) - justificatif_unique: Justificatif = query.first_or_404() + justificatif_unique = Justificatif.get_justificatif(justif_id) # Récupération de l'archive avec l'archiver archive_name: str = justificatif_unique.fichier @@ -820,10 +806,7 @@ def justif_justifies(justif_id: int = None): """ # On récupère le justificatif concerné - query: Query = Justificatif.query.filter_by(id=justif_id) - if g.scodoc_dept: - query = query.join(Identite).filter_by(dept_id=g.scodoc_dept_id) - justificatif_unique: Justificatif = query.first_or_404() + justificatif_unique = Justificatif.get_justificatif(justif_id) # On récupère la liste des assiduités justifiées par le justificatif assiduites_list: list[int] = scass.justifies(justificatif_unique) @@ -837,6 +820,7 @@ def justif_justifies(justif_id: int = None): def _filter_manager(requested, justificatifs_query: Query): """ Retourne les justificatifs entrés filtrés en fonction de la request + et du département courant s'il y en a un """ # cas 1 : etat justificatif etat: str = requested.args.get("etat") @@ -871,7 +855,7 @@ def _filter_manager(requested, justificatifs_query: Query): formsemestre: FormSemestre = None try: formsemestre_id = int(formsemestre_id) - formsemestre = FormSemestre.query.filter_by(id=formsemestre_id).first() + formsemestre = FormSemestre.get_formsemestre(formsemestre_id) justificatifs_query = scass.filter_by_formsemestre( justificatifs_query, Justificatif, formsemestre ) @@ -906,4 +890,10 @@ def _filter_manager(requested, justificatifs_query: Query): except ValueError: group_id = None + # Département + if g.scodoc_dept: + justificatifs_query = justificatifs_query.join(Identite).filter_by( + dept_id=g.scodoc_dept_id + ) + return justificatifs_query