restrictions/département. Utilise partout Justificatif.get_justificatif.

This commit is contained in:
Emmanuel Viennet 2023-12-22 15:25:58 +01:00
parent 5f49355ec3
commit 2944fb0795
1 changed files with 22 additions and 32 deletions

View File

@ -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