diff --git a/app/api/assiduites.py b/app/api/assiduites.py index 5c55d9a1..ff2cff4c 100644 --- a/app/api/assiduites.py +++ b/app/api/assiduites.py @@ -345,8 +345,7 @@ def count_assiduites_formsemestre( @scodoc @as_json @login_required -@permission_required(Permission.ScoView) -# @permission_required(Permission.ScoAssiduiteChange) +@permission_required(Permission.ScoAssiduiteChange) def assiduite_create(etudid: int = None): """ Création d'une assiduité pour l'étudiant (etudid) @@ -395,8 +394,7 @@ def assiduite_create(etudid: int = None): @scodoc @as_json @login_required -@permission_required(Permission.ScoView) -# @permission_required(Permission.ScoAssiduiteChange) +@permission_required(Permission.ScoAssiduiteChange) def assiduites_create(): """ Création d'une assiduité ou plusieurs assiduites @@ -523,8 +521,7 @@ def _create_singular( @login_required @scodoc @as_json -@permission_required(Permission.ScoView) -# @permission_required(Permission.ScoAssiduiteChange) +@permission_required(Permission.ScoAssiduiteChange) def assiduite_delete(): """ Suppression d'une assiduité à partir de son id @@ -569,8 +566,7 @@ def _delete_singular(assiduite_id: int, database): @login_required @scodoc @as_json -@permission_required(Permission.ScoView) -# @permission_required(Permission.ScoAssiduiteChange) +@permission_required(Permission.ScoAssiduiteChange) def assiduite_edit(assiduite_id: int): """ Edition d'une assiduité à partir de son id @@ -646,8 +642,7 @@ def assiduite_edit(assiduite_id: int): @login_required @scodoc @as_json -@permission_required(Permission.ScoView) -# @permission_required(Permission.ScoAssiduiteChange) +@permission_required(Permission.ScoAssiduiteChange) def assiduites_edit(): """ Edition d'une assiduité à partir de son id diff --git a/app/api/justificatifs.py b/app/api/justificatifs.py index 2ef874a6..693c08f4 100644 --- a/app/api/justificatifs.py +++ b/app/api/justificatifs.py @@ -135,8 +135,7 @@ def justificatifs_dept(dept_id: int = None, with_query: bool = False): @scodoc @login_required @as_json -@permission_required(Permission.ScoView) -# @permission_required(Permission.ScoAssiduiteChange) +@permission_required(Permission.ScoJustifChange) def justif_create(etudid: int = None): """ Création d'un justificatif pour l'étudiant (etudid) @@ -251,8 +250,7 @@ def _create_singular( @login_required @scodoc @as_json -@permission_required(Permission.ScoView) -# @permission_required(Permission.ScoAssiduiteChange) +@permission_required(Permission.ScoJustifChange) def justif_edit(justif_id: int): """ Edition d'un justificatif à partir de son id @@ -343,8 +341,7 @@ def justif_edit(justif_id: int): @login_required @scodoc @as_json -@permission_required(Permission.ScoView) -# @permission_required(Permission.ScoAssiduiteChange) +@permission_required(Permission.ScoJustifChange) def justif_delete(): """ Suppression d'un justificatif à partir de son id @@ -405,8 +402,7 @@ def _delete_singular(justif_id: int, database): @scodoc @login_required @as_json -@permission_required(Permission.ScoView) -# @permission_required(Permission.ScoAssiduiteChange) +@permission_required(Permission.ScoJustifChange) def justif_import(justif_id: int = None): """ Importation d'un fichier (création d'archive) @@ -450,8 +446,7 @@ def justif_import(justif_id: int = None): @api_web_bp.route("/justificatif//export/", methods=["POST"]) @scodoc @login_required -@permission_required(Permission.ScoView) -# @permission_required(Permission.ScoAssiduiteChange) +@permission_required(Permission.ScoJustifView) def justif_export(justif_id: int = None, filename: str = None): """ Retourne un fichier d'une archive d'un justificatif @@ -482,8 +477,7 @@ def justif_export(justif_id: int = None, filename: str = None): @scodoc @login_required @as_json -@permission_required(Permission.ScoView) -# @permission_required(Permission.ScoAssiduiteChange) +@permission_required(Permission.ScoJustifChange) def justif_remove(justif_id: int = None): """ Supression d'un fichier ou d'une archive @@ -547,8 +541,7 @@ def justif_remove(justif_id: int = None): @scodoc @login_required @as_json -@permission_required(Permission.ScoView) -# @permission_required(Permission.ScoAssiduiteChange) +@permission_required(Permission.ScoJustifView) def justif_list(justif_id: int = None): """ Liste les fichiers du justificatif @@ -579,8 +572,7 @@ def justif_list(justif_id: int = None): @scodoc @login_required @as_json -@permission_required(Permission.ScoView) -# @permission_required(Permission.ScoAssiduiteChange) +@permission_required(Permission.ScoJustifChange) def justif_justifies(justif_id: int = None): """ Liste assiduite_id justifiées par le justificatif diff --git a/app/models/assiduites.py b/app/models/assiduites.py index 566359d5..15018a8e 100644 --- a/app/models/assiduites.py +++ b/app/models/assiduites.py @@ -6,6 +6,7 @@ from datetime import datetime from app import db from app.models import ModuleImpl from app.models.etudiants import Identite +from app.auth.models import User from app.scodoc.sco_utils import ( EtatAssiduite, EtatJustificatif, @@ -67,9 +68,15 @@ class Assiduite(db.Model): def to_dict(self, format_api=True) -> dict: """Retourne la représentation json de l'assiduité""" etat = self.etat - + username = self.user_id if format_api: etat = EtatAssiduite.inverse().get(self.etat).name + if self.user_id is not None: + user: User = User.query.get(self.user_id) + if user is None: + username = "Non renseigné" + else: + username = user.get_prenomnom() data = { "assiduite_id": self.id, "etudid": self.etudid, @@ -79,7 +86,7 @@ class Assiduite(db.Model): "etat": etat, "desc": self.desc, "entry_date": self.entry_date, - "user_id": self.user_id, + "user_id": username, "est_just": self.est_just, } return data @@ -212,9 +219,16 @@ class Justificatif(db.Model): """transformation de l'objet en dictionnaire sérialisable""" etat = self.etat + username = self.user_id if format_api: etat = EtatJustificatif.inverse().get(self.etat).name + if self.user_id is not None: + user: User = User.query.get(self.user_id) + if user is None: + username = "Non renseigné" + else: + username = user.get_prenomnom() data = { "justif_id": self.justif_id, @@ -225,7 +239,7 @@ class Justificatif(db.Model): "raison": self.raison, "fichier": self.fichier, "entry_date": self.entry_date, - "user_id": self.user_id, + "user_id": username, } return data diff --git a/app/scodoc/sco_permissions.py b/app/scodoc/sco_permissions.py index 8c4edd88..2dd10260 100644 --- a/app/scodoc/sco_permissions.py +++ b/app/scodoc/sco_permissions.py @@ -57,6 +57,10 @@ _SCO_PERMISSIONS = ( (1 << 29, "ScoUsersChangeCASId", "Paramétrer l'id CAS"), # (1 << 40, "ScoEtudChangePhoto", "Modifier la photo d'un étudiant"), + # Permissions du module Assiduité) + (1 << 50, "ScoAssiduiteChange", "Modifier des assiduités"), + (1 << 51, "ScoJustifChange", "Modifier des justificatifs"), + (1 << 52, "ScoJustifView", "Visualisation des fichiers justificatifs"), # Attention: les permissions sont codées sur 64 bits. ) @@ -71,7 +75,7 @@ class Permission: @staticmethod def init_permissions(): - for (perm, symbol, description) in _SCO_PERMISSIONS: + for perm, symbol, description in _SCO_PERMISSIONS: setattr(Permission, symbol, perm) Permission.description[symbol] = description Permission.permission_by_name[symbol] = perm diff --git a/app/static/js/assiduites.js b/app/static/js/assiduites.js index de13ba26..7de09101 100644 --- a/app/static/js/assiduites.js +++ b/app/static/js/assiduites.js @@ -1317,29 +1317,6 @@ function generateAllEtudRow() { // <<== Gestion de la récupération d'informations ==>> -/** - * Récupération d'un nom d'utilisateur à partir d'un identifiant - * @param {Number} id identifiant de l'utilisateur - * @returns {String} le nom de l'utilisateur ou son pseudo ou "Non Renseigné" - */ -function getUserFromId(id) { - if (id == "") { - return "Non Renseigné"; - } - - let name = "Non Renseigné"; - - sync_get(getUrl() + `/api/user/${id}`, (data) => { - if (data.nom != "" && data.prenom != "") { - name = `${data.nom} ${data.prenom}`; - } else { - name = data.user_name; - } - }); - - return name; -} - /** * Récupération des ids des groupes * @returns la liste des ids des groupes diff --git a/app/templates/assiduites/widgets/conflict.j2 b/app/templates/assiduites/widgets/conflict.j2 index 814ee85e..1aefa668 100644 --- a/app/templates/assiduites/widgets/conflict.j2 +++ b/app/templates/assiduites/widgets/conflict.j2 @@ -207,7 +207,7 @@ ).textContent = `saisi le ${formatDateModal( assiduite.entry_date, "à" - )} \npar ${getUserFromId(assiduite.user_id)}`; + )} \npar ${assiduite.user_id}`; document.getElementById("modal-assiduite-module").textContent = assiduite.moduleimpl_id; document.getElementById("modal-assiduite-deb").textContent = formatDateModal( @@ -438,7 +438,7 @@ userIdDiv.textContent = `saisi le ${formatDateModal( assiduite.entry_date, "à" - )} \npar ${getUserFromId(assiduite.user_id)}`; + )} \npar ${assiduite.user_id}`; infoContainer.appendChild(userIdDiv); el.appendChild(infoContainer); diff --git a/app/templates/assiduites/widgets/minitimeline.j2 b/app/templates/assiduites/widgets/minitimeline.j2 index 5c387d91..244cfbf3 100644 --- a/app/templates/assiduites/widgets/minitimeline.j2 +++ b/app/templates/assiduites/widgets/minitimeline.j2 @@ -162,7 +162,7 @@ userIdDiv.textContent = `saisi le ${formatDateModal( assiduite.entry_date, "à" - )} \npar ${getUserFromId(assiduite.user_id)}`; + )} \npar ${assiduite.user_id}`; bubble.appendChild(userIdDiv); bubble.style.left = `${event.clientX - bubble.offsetWidth / 2}px`; diff --git a/app/templates/assiduites/widgets/tableau_assi.j2 b/app/templates/assiduites/widgets/tableau_assi.j2 index 6d1ea2d3..374abefb 100644 --- a/app/templates/assiduites/widgets/tableau_assi.j2 +++ b/app/templates/assiduites/widgets/tableau_assi.j2 @@ -124,7 +124,7 @@ async_get( path, (data) => { - const user = getUserFromId(data.user_id); + const user = data.user_id; const module = getModuleImpl(data.moduleimpl_id); const date_debut = moment.tz(data.date_debut, TIMEZONE).format("DD/MM/YYYY HH:mm"); diff --git a/app/templates/assiduites/widgets/tableau_justi.j2 b/app/templates/assiduites/widgets/tableau_justi.j2 index a10041eb..79044f43 100644 --- a/app/templates/assiduites/widgets/tableau_justi.j2 +++ b/app/templates/assiduites/widgets/tableau_justi.j2 @@ -119,7 +119,7 @@ async_get( path, (data) => { - const user = getUserFromId(data.user_id); + const user = data.user_id; const date_debut = moment.tz(data.date_debut, TIMEZONE).format("DD/MM/YYYY HH:mm"); const date_fin = moment.tz(data.date_fin, TIMEZONE).format("DD/MM/YYYY HH:mm"); const entry_date = moment.tz(data.entry_date, TIMEZONE).format("DD/MM/YYYY HH:mm"); diff --git a/app/views/assiduites.py b/app/views/assiduites.py index d0acfccd..b78954eb 100644 --- a/app/views/assiduites.py +++ b/app/views/assiduites.py @@ -122,7 +122,7 @@ class HTMLBuilder: @bp.route("/") @bp.route("/index_html") @scodoc -@permission_required(Permission.ScoView) +@permission_required(Permission.ScoJustifChange) def index_html(): """Gestionnaire assiduités, page principale""" H = [ @@ -174,7 +174,7 @@ def index_html(): @bp.route("/SignaleAssiduiteEtud") @scodoc -@permission_required(Permission.ScoAbsChange) +@permission_required(Permission.ScoAssiduiteChange) def signal_assiduites_etud(): """ signal_assiduites_etud Saisie de l'assiduité d'un étudiant @@ -242,7 +242,7 @@ def signal_assiduites_etud(): @bp.route("/ListeAssiduitesEtud") @scodoc -@permission_required(Permission.ScoAbsChange) +@permission_required(Permission.ScoView) def liste_assiduites_etud(): """ liste_assiduites_etud Affichage de toutes les assiduites et justificatifs d'un etudiant @@ -284,7 +284,7 @@ def liste_assiduites_etud(): @bp.route("/BilanEtud") @scodoc -@permission_required(Permission.ScoAbsChange) +@permission_required(Permission.ScoView) def bilan_etud(): """ bilan_etud Affichage de toutes les assiduites et justificatifs d'un etudiant @@ -338,7 +338,7 @@ def bilan_etud(): @bp.route("/AjoutJustificatifEtud") @scodoc -@permission_required(Permission.ScoAbsChange) +@permission_required(Permission.ScoJustifChange) def ajout_justificatif_etud(): """ ajout_justificatif_etud : Affichage et création/modification des justificatifs de l'étudiant @@ -423,7 +423,7 @@ def calendrier_etud(): @bp.route("/SignalAssiduiteGr") @scodoc -@permission_required(Permission.ScoAbsChange) +@permission_required(Permission.ScoAssiduiteChange) def signal_assiduites_group(): """ signal_assiduites_group Saisie des assiduités des groupes pour le jour donnée @@ -641,7 +641,7 @@ def get_etat_abs_date(): @bp.route("/SignalAssiduiteDifferee") @scodoc -@permission_required(Permission.ScoAbsChange) +@permission_required(Permission.ScoAssiduiteChange) def signal_assiduites_diff(): group_ids: list[int] = request.args.get("group_ids", None) formsemestre_id: int = request.args.get("formsemestre_id", -1)