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

View File

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