From 867575ac78bd5edba4bbfa477ad62df09225f24b Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Tue, 14 Jan 2025 20:10:51 +0100 Subject: [PATCH] =?UTF-8?q?Page=20accueil=20dept:=20s=C3=A9lection=20de=20?= =?UTF-8?q?plusieurs=20formsemestres=20et=20menu=20associ=C3=A9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/formsemestre.py | 31 ++--- app/scodoc/htmlutils.py | 22 ++-- app/scodoc/sco_dept.py | 39 ++++++ app/scodoc/sco_formsemestre_edit.py | 36 ------ app/scodoc/sco_formsemestre_status.py | 2 +- app/scodoc/sco_utils.py | 19 ++- app/static/css/scodoc.css | 18 +-- app/static/js/scolar_index.js | 50 +++++++- app/templates/formsemestre_header.j2 | 10 +- app/templates/scolar/index.j2 | 12 +- app/views/notes.py | 44 +------ app/views/notes_formsemestre.py | 168 +++++++++++++++++++++++++- 12 files changed, 312 insertions(+), 139 deletions(-) diff --git a/app/models/formsemestre.py b/app/models/formsemestre.py index 62a557034..21e719621 100644 --- a/app/models/formsemestre.py +++ b/app/models/formsemestre.py @@ -646,17 +646,18 @@ class FormSemestre(models.ScoDocModel): ) return [db.session.get(ModuleImpl, modimpl_id) for modimpl_id in cursor] - def can_be_edited_by(self, user: User): - """Vrai si user peut modifier ce semestre (est chef ou l'un des responsables)""" + def can_be_edited_by(self, user: User | None = None, allow_locked=False) -> bool: + """Vrai si user (par def. current) peut modifier ce semestre + (est chef ou l'un des responsables). + Si le semestre est verrouillé, faux sauf si allow_locked. + """ + user = user or current_user if user.passwd_must_be_changed or not user.has_permission( Permission.EditFormSemestre - ): # pas chef - if not self.resp_can_edit or user.id not in [ - resp.id for resp in self.responsables - ]: + ): # pas chef de dept. + if not self.resp_can_edit or not self.est_responsable(user): return False - - return True + return allow_locked or not self.etat def est_courant(self) -> bool: """Vrai si la date actuelle (now) est dans le semestre @@ -902,13 +903,6 @@ class FormSemestre(models.ScoDocModel): "True si l'user est l'un des responsables du semestre" return user.id in [u.id for u in self.responsables] - def est_chef_or_diretud(self, user: User | None = None) -> bool: - "Vrai si utilisateur (par def. current) est admin, chef dept ou responsable du semestre" - user = user or current_user - return user.has_permission(Permission.EditFormSemestre) or self.est_responsable( - user - ) - def can_change_groups(self, user: User = None) -> bool: """Vrai si l'utilisateur (par def. current) peut changer les groupes dans ce semestre: vérifie permission et verrouillage (mais pas si la partition est éditable). @@ -926,10 +920,7 @@ class FormSemestre(models.ScoDocModel): """Vrai si utilisateur (par def. current) peut saisir decision de jury dans ce semestre: vérifie permission et verrouillage. """ - user = user or current_user - if user.passwd_must_be_changed: - return False - return self.etat and self.est_chef_or_diretud(user) + return self.can_be_edited_by(user) def can_edit_pv(self, user: User = None): "Vrai si utilisateur (par def. current) peut editer un PV de jury de ce semestre" @@ -937,7 +928,7 @@ class FormSemestre(models.ScoDocModel): if user.passwd_must_be_changed: return False # Autorise les secrétariats, repérés via la permission EtudChangeAdr - return self.est_chef_or_diretud(user) or user.has_permission( + return self.can_be_edited_by(user, allow_locked=True) or user.has_permission( Permission.EtudChangeAdr ) diff --git a/app/scodoc/htmlutils.py b/app/scodoc/htmlutils.py index 41e452d4c..3b49d18c0 100644 --- a/app/scodoc/htmlutils.py +++ b/app/scodoc/htmlutils.py @@ -100,15 +100,11 @@ def make_menu(title, items, css_class="", alone=False) -> str: def gen_menu_items(items): H.append("