Compare commits

..

No commits in common. "b57c7980e667dd0de3f0bcaafc36bbe6d523f309" and "c8a042cc09adc88cde210ca378883e3f0cf5a86d" have entirely different histories.

5 changed files with 13 additions and 33 deletions

View File

@ -253,27 +253,6 @@ class ModuleImpl(ScoDocModel):
return False return False
return True return True
def can_change_inscriptions(self, user: User | None = None, raise_exc=True) -> bool:
"""check si user peut inscrire/désinsincrire des étudiants à ce module.
Autorise ScoEtudInscrit ou responsables semestre.
"""
user = current_user if user is None else user
if not self.formsemestre.etat:
if raise_exc:
raise ScoLockedSemError("Modification impossible: semestre verrouille")
return False
# -- check access
# resp. module ou ou perm. EtudInscrit ou resp. semestre
if (
user.id != self.responsable_id
and not user.has_permission(Permission.EtudInscrit)
and user.id not in (u.id for u in self.formsemestre.responsables)
):
if raise_exc:
raise AccessDenied(f"Modification impossible pour {user}")
return False
return True
def est_inscrit(self, etud: Identite) -> bool: def est_inscrit(self, etud: Identite) -> bool:
""" """
Vérifie si l'étudiant est bien inscrit au moduleimpl (même si DEM ou DEF au semestre). Vérifie si l'étudiant est bien inscrit au moduleimpl (même si DEM ou DEF au semestre).

View File

@ -30,6 +30,9 @@
import psycopg2 import psycopg2
from app import db
from app.models import Formation
from app.scodoc import scolog from app.scodoc import scolog
from app.scodoc import sco_cache from app.scodoc import sco_cache
import app.scodoc.notesdb as ndb import app.scodoc.notesdb as ndb
@ -53,8 +56,7 @@ _moduleimplEditor = ndb.EditableTable(
def do_moduleimpl_create(args): def do_moduleimpl_create(args):
"create a moduleimpl" "create a moduleimpl"
# TODO remplacer par une methode de ModuleImpl qui appelle # TODO remplacer par une methode de ModuleImpl qui appelle super().create_from_dict() puis invalide le formsemestre
# super().create_from_dict() puis invalide le formsemestre
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
r = _moduleimplEditor.create(cnx, args) r = _moduleimplEditor.create(cnx, args)
sco_cache.invalidate_formsemestre( sco_cache.invalidate_formsemestre(

View File

@ -79,9 +79,9 @@ def moduleimpl_inscriptions_edit(
modimpl = ModuleImpl.get_modimpl(moduleimpl_id) modimpl = ModuleImpl.get_modimpl(moduleimpl_id)
module = modimpl.module module = modimpl.module
formsemestre = modimpl.formsemestre formsemestre = modimpl.formsemestre
# -- check permission (and lock) # -- check lock
if not modimpl.can_change_inscriptions(): if not formsemestre.etat:
return # can_change_inscriptions raises exception raise ScoValueError("opération impossible: semestre verrouille")
header = html_sco_header.sco_header( header = html_sco_header.sco_header(
page_title="Inscription au module", page_title="Inscription au module",
init_qtip=True, init_qtip=True,

View File

@ -196,7 +196,9 @@ def _ue_coefs_html(modimpl: ModuleImpl) -> str:
def moduleimpl_status(moduleimpl_id=None, partition_id=None): def moduleimpl_status(moduleimpl_id=None, partition_id=None):
"""Tableau de bord module (liste des evaluations etc)""" """Tableau de bord module (liste des evaluations etc)"""
modimpl: ModuleImpl = ModuleImpl.get_modimpl(moduleimpl_id) if not isinstance(moduleimpl_id, int):
raise ScoInvalidIdType("moduleimpl_id must be an integer !")
modimpl: ModuleImpl = ModuleImpl.query.get_or_404(moduleimpl_id)
g.current_moduleimpl_id = modimpl.id g.current_moduleimpl_id = modimpl.id
module: Module = modimpl.module module: Module = modimpl.module
formsemestre_id = modimpl.formsemestre_id formsemestre_id = modimpl.formsemestre_id
@ -310,13 +312,10 @@ def moduleimpl_status(moduleimpl_id=None, partition_id=None):
H.append( H.append(
f"""<tr><td class="fichetitre2">Inscrits: </td><td> {len(mod_inscrits)} étudiants""" f"""<tr><td class="fichetitre2">Inscrits: </td><td> {len(mod_inscrits)} étudiants"""
) )
if modimpl.can_change_inscriptions(raise_exc=False): if current_user.has_permission(Permission.EtudInscrit):
H.append( H.append(
f"""<a class="stdlink" style="margin-left:2em;" f"""<a class="stdlink" style="margin-left:2em;"
href="{ href="moduleimpl_inscriptions_edit?moduleimpl_id={modimpl.id}">modifier</a>"""
url_for("notes.moduleimpl_inscriptions_edit",
scodoc_dept=g.scodoc_dept, moduleimpl_id=modimpl.id
)}">modifier</a>"""
) )
H.append("</td></tr>") H.append("</td></tr>")
# Ligne: règle de calcul # Ligne: règle de calcul

View File

@ -1633,7 +1633,7 @@ sco_publish(
sco_publish( sco_publish(
"/moduleimpl_inscriptions_edit", "/moduleimpl_inscriptions_edit",
sco_moduleimpl_inscriptions.moduleimpl_inscriptions_edit, sco_moduleimpl_inscriptions.moduleimpl_inscriptions_edit,
Permission.ScoView, Permission.EtudInscrit,
methods=["GET", "POST"], methods=["GET", "POST"],
) )
sco_publish( sco_publish(