From 597be47afb40cefaf676c96c1cfb3ebe60783ebf Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Fri, 17 Feb 2023 22:07:03 +0100 Subject: [PATCH] Edition programmes (APC): verrouiller par indice de semestre #599 --- app/models/formations.py | 11 ++++++++--- app/scodoc/sco_edit_formation.py | 10 +++++----- app/scodoc/sco_edit_ue.py | 2 +- app/scodoc/sco_formations.py | 8 -------- app/views/pn_modules.py | 2 +- 5 files changed, 15 insertions(+), 18 deletions(-) diff --git a/app/models/formations.py b/app/models/formations.py index 1f2747e0..15dae9d5 100644 --- a/app/models/formations.py +++ b/app/models/formations.py @@ -112,9 +112,14 @@ class Formation(db.Model): df_cache.ModuleCoefsCache.set(key, modules_coefficients) return modules_coefficients - def has_locked_sems(self): - "True if there is a locked formsemestre in this formation" - return len(self.formsemestres.filter_by(etat=False).all()) > 0 + def has_locked_sems(self, semestre_idx: int = None): + """True if there is a locked formsemestre in this formation. + If semestre_idx is specified, check only this index. + """ + query = self.formsemestres.filter_by(etat=False) + if semestre_idx is not None: + query = query.filter_by(semestre_id=semestre_idx) + return len(query.all()) > 0 def invalidate_module_coefs(self, semestre_idx: int = None): """Invalide le cache des coefficients de modules. diff --git a/app/scodoc/sco_edit_formation.py b/app/scodoc/sco_edit_formation.py index ae042eaf..2d2e348a 100644 --- a/app/scodoc/sco_edit_formation.py +++ b/app/scodoc/sco_edit_formation.py @@ -161,11 +161,11 @@ def formation_edit(formation_id=None, create=False): is_locked = False else: # edit an existing formation - F = sco_formations.formation_list(args={"formation_id": formation_id}) - if not F: - raise ScoValueError("formation inexistante !") - initvalues = F[0] - is_locked = sco_formations.formation_has_locked_sems(formation_id) + formation: Formation = Formation.query.get_or_404(formation_id) + form_dict = formation.to_dict() + form_dict["commentaire"] = form_dict["commentaire"] or "" + initvalues = form_dict[0] + is_locked = formation.has_locked_sems(formation_id) submitlabel = "Modifier les valeurs" H = [ html_sco_header.sco_header(page_title="Modification d'une formation"), diff --git a/app/scodoc/sco_edit_ue.py b/app/scodoc/sco_edit_ue.py index 959174f7..11d36e7f 100644 --- a/app/scodoc/sco_edit_ue.py +++ b/app/scodoc/sco_edit_ue.py @@ -643,11 +643,11 @@ def ue_table(formation_id=None, semestre_idx=1, msg=""): # was ue_list raise ScoValueError("invalid formation_id") parcours = formation.get_cursus() is_apc = parcours.APC_SAE - locked = formation.has_locked_sems() if semestre_idx == "all" or semestre_idx == "": semestre_idx = None else: semestre_idx = int(semestre_idx) + locked = formation.has_locked_sems(semestre_idx) semestre_ids = range(1, parcours.NB_SEM + 1) # transition: on requete ici via l'ORM mais on utilise les fonctions ScoDoc7 # basées sur des dicts diff --git a/app/scodoc/sco_formations.py b/app/scodoc/sco_formations.py index 3df737b4..2394c541 100644 --- a/app/scodoc/sco_formations.py +++ b/app/scodoc/sco_formations.py @@ -97,14 +97,6 @@ def formation_list(formation_id=None, args={}): return r -def formation_has_locked_sems(formation_id): # XXX to remove - "backward compat: True if there is a locked formsemestre in this formation" - formation = Formation.query.get(formation_id) - if formation is None: - return False - return formation.has_locked_sems() - - def formation_export( formation_id, export_ids=False, diff --git a/app/views/pn_modules.py b/app/views/pn_modules.py index cb613939..33ee1d82 100644 --- a/app/views/pn_modules.py +++ b/app/views/pn_modules.py @@ -197,7 +197,7 @@ def edit_modules_ue_coefs(): formation = models.Formation.query.filter_by( formation_id=formation_id ).first_or_404() - locked = sco_formations.formation_has_locked_sems(formation_id) + locked = formation.has_locked_sems(semestre_idx) if locked: lockicon = scu.icontag("lock32_img", title="verrouillé") else: