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("