diff --git a/app/api/formations.py b/app/api/formations.py index 3274cb22..2712a2c2 100644 --- a/app/api/formations.py +++ b/app/api/formations.py @@ -321,6 +321,8 @@ def set_ue_parcours(ue_id: int): ] log(f"set_ue_parcours: ue_id={ue.id} parcours_ids={parcours_ids}") ok, error_message = ue.set_parcours(parcours) + if not ok: + return json_error(404, error_message) return {"status": ok, "message": error_message} diff --git a/app/models/ues.py b/app/models/ues.py index e301530b..96074bdb 100644 --- a/app/models/ues.py +++ b/app/models/ues.py @@ -325,7 +325,8 @@ class UniteEns(db.Model): if self.niveau_competence_id is not None: return ( False, - f"{self.acronyme} déjà associée à un niveau de compétences", + f"""{self.acronyme} déjà associée à un niveau de compétences ({ + self.id}, {self.niveau_competence_id})""", ) if ( niveau.competence.referentiel.id @@ -358,6 +359,7 @@ class UniteEns(db.Model): Si un niveau est déjà associé, vérifie sa cohérence. Renvoie (True, "") si ok, sinon (False, error_message) """ + msg = "" # Le niveau est-il dans tous ces parcours ? Sinon, l'enlève prev_niveau = self.niveau_competence if ( @@ -366,6 +368,7 @@ class UniteEns(db.Model): and self.niveau_competence.id not in self._parcours_niveaux_ids(parcours) ): self.niveau_competence = None + msg = " (niveau compétence désassocié !)" if parcours and self.niveau_competence: ok, error_message = self.check_niveau_unique_dans_parcours( @@ -381,12 +384,12 @@ class UniteEns(db.Model): # Invalidation du cache self.formation.invalidate_cached_sems() log(f"ue.set_parcours( {self}, {parcours} )") - return True, "" + return True, "parcours enregistrés" + msg def add_parcour(self, parcour: ApcParcours) -> tuple[bool, str]: """Ajoute ce parcours à ceux de l'UE""" if parcour.id in {p.id for p in self.parcours}: - return True, "" + return True, "" # déjà présent if parcour.referentiel.id != self.formation.referentiel_competence.id: return False, "Le parcours n'appartient pas au référentiel de la formation" diff --git a/app/scodoc/sco_formations.py b/app/scodoc/sco_formations.py index fa169c68..88691b9c 100644 --- a/app/scodoc/sco_formations.py +++ b/app/scodoc/sco_formations.py @@ -127,7 +127,7 @@ def formation_export_dict( ue_dict["apc_niveau_libelle"] = ue.niveau_competence.libelle ue_dict["apc_niveau_annee"] = ue.niveau_competence.annee ue_dict["apc_niveau_ordre"] = ue.niveau_competence.ordre - # Et le parcour: + # Et les parcours: if ue.parcours: ue_dict["parcours"] = [ parcour.to_dict(with_annees=False) for parcour in ue.parcours @@ -268,8 +268,8 @@ def _formation_retreive_refcomp(f_dict: dict) -> int: def _formation_retreive_apc_niveau( referentiel_competence_id: int, ue_dict: dict ) -> int: - """Recherche dans le ref. de comp. un niveau pour cette UE - utilise comme clé (libelle, annee, ordre) + """Recherche dans le ref. de comp. un niveau pour cette UE. + Utilise (libelle, annee, ordre) comme clé. """ libelle = ue_dict.get("apc_niveau_libelle") annee = ue_dict.get("apc_niveau_annee") @@ -367,6 +367,8 @@ def formation_import_xml(doc: str, import_tags=True, use_local_refcomp=False): assert ue if xml_ue_id: ues_old2new[xml_ue_id] = ue_id + # parcours BUT + # TODO XXX # élément optionnel présent dans les exports BUT: ue_reference = ue_info[1].get("reference") if ue_reference: diff --git a/app/scodoc/sco_preferences.py b/app/scodoc/sco_preferences.py index 9b279a97..a6f6dbec 100644 --- a/app/scodoc/sco_preferences.py +++ b/app/scodoc/sco_preferences.py @@ -111,9 +111,7 @@ get_base_preferences(formsemestre_id) """ import flask -from flask import current_app, g, request, url_for - -# from flask_login import current_user +from flask import current_app, flash, g, request, url_for from app.models import Departement from app.scodoc import sco_cache @@ -2278,7 +2276,6 @@ class SemPreferences: raise ScoValueError( "sem_preferences.edit doit etre appele sur un semestre !" ) # a bug ! - sem = sco_formsemestre.get_formsemestre(self.formsemestre_id) H = [ html_sco_header.html_sem_header( "Préférences du semestre", diff --git a/app/templates/but/parcour_formation.j2 b/app/templates/but/parcour_formation.j2 index e46bba2a..496448dd 100644 --- a/app/templates/but/parcour_formation.j2 +++ b/app/templates/but/parcour_formation.j2 @@ -2,8 +2,8 @@ {% block styles %} {{super()}} - - + + {% endblock %} {% macro menu_ue(niv, sem="pair", sem_idx=0) -%} @@ -37,7 +37,7 @@ {% if niv['ue_'+sem] %} {{ niv['ue_'+sem].acronyme }} {% else %} - {{sco.scu.EMO_WARNING|safe}} non associé + {{scu.EMO_WARNING|safe}} non associé {% endif %} {% endif %} {% endif %} diff --git a/app/templates/formsemestre_header.j2 b/app/templates/formsemestre_header.j2 index a7685823..20822079 100644 --- a/app/templates/formsemestre_header.j2 +++ b/app/templates/formsemestre_header.j2 @@ -14,23 +14,23 @@ {% if sco.sem.modalite %} en {{sco.sem.modalite}}{% endif %} {{sco.scu.MONTH_NAMES_ABBREV[ sco.sem.date_debut.month - 1]}} - {{sco.sem.date_debut.year}} - {{sco.scu.MONTH_NAMES_ABBREV[sco.sem.date_fin.month - 1]}} + au {{sco.sem.date_fin.strftime('%d/%m/%Y')}} ">{{scu.MONTH_NAMES_ABBREV[ sco.sem.date_debut.month - 1]}} + {{sco.sem.date_debut.year}} - {{scu.MONTH_NAMES_ABBREV[sco.sem.date_fin.month - 1]}} {{sco.sem.date_fin.year}} {{sco.sem.responsables_str()}} {{sco.sem.inscriptions|length}} inscrits{% if not sco.sem.etat %}{{sco.scu.icontag("lock_img", border="0", title="Semestre + formsemestre_id=sco.sem.id)}}">{{scu.icontag("lock_img", border="0", title="Semestre verrouillé")|safe}}{% endif %} {% if sco.prefs["bul_display_publication"] %} {% if sco.sem.bul_hide_xml %} - {{ sco.scu.icontag("hide_img", border="0", title="Bulletins NON publiés")|safe}} + {{ scu.icontag("hide_img", border="0", title="Bulletins NON publiés")|safe}} {% else %} - {{ sco.scu.icontag("eye_img", border="0", title="Bulletins publiés")|safe }} + {{ scu.icontag("eye_img", border="0", title="Bulletins publiés")|safe }} {% endif %} {% endif %} diff --git a/sco_version.py b/sco_version.py index eed78321..e43776aa 100644 --- a/sco_version.py +++ b/sco_version.py @@ -1,7 +1,7 @@ # -*- mode: python -*- # -*- coding: utf-8 -*- -SCOVERSION = "9.4.71" +SCOVERSION = "9.4.74" SCONAME = "ScoDoc"