diff --git a/app/api/evaluations.py b/app/api/evaluations.py
index 1834f8eb..60a03e9b 100644
--- a/app/api/evaluations.py
+++ b/app/api/evaluations.py
@@ -148,7 +148,7 @@ def evaluation_notes(evaluation_id: int):
@scodoc
@permission_required(Permission.EnsView)
@as_json
-def evaluation_set_notes(evaluation_id: int):
+def evaluation_set_notes(evaluation_id: int): # evaluation-notes-set
"""Écriture de notes dans une évaluation.
The request content type should be "application/json",
and contains:
diff --git a/app/models/formsemestre.py b/app/models/formsemestre.py
index 8ddf542c..83d09fdd 100644
--- a/app/models/formsemestre.py
+++ b/app/models/formsemestre.py
@@ -400,6 +400,7 @@ class FormSemestre(db.Model):
"""Liste des modimpls du semestre (y compris bonus)
- triée par type/numéro/code en APC
- triée par numéros d'UE/matières/modules pour les formations standard.
+ Hors APC, élimine les modules de type ressources et SAEs.
"""
modimpls = self.modimpls.all()
if self.formation.is_apc():
@@ -411,6 +412,14 @@ class FormSemestre(db.Model):
)
)
else:
+ modimpls = [
+ mi
+ for mi in modimpls
+ if (
+ mi.module.module_type
+ not in (scu.ModuleType.RESSOURCE, scu.ModuleType.SAE)
+ )
+ ]
modimpls.sort(
key=lambda m: (
m.module.ue.numero or 0,
diff --git a/app/scodoc/sco_edit_ue.py b/app/scodoc/sco_edit_ue.py
index bcc34327..232507ea 100644
--- a/app/scodoc/sco_edit_ue.py
+++ b/app/scodoc/sco_edit_ue.py
@@ -117,7 +117,7 @@ def do_ue_create(args):
ues = ue_list({"formation_id": args["formation_id"], "acronyme": args["acronyme"]})
if ues:
raise ScoValueError(
- f"""Acronyme d'UE "{args['acronyme']}" déjà utilisé !
+ f"""Acronyme d'UE "{args['acronyme']}" déjà utilisé !
(chaque UE doit avoir un acronyme unique dans la formation)"""
)
if (
@@ -420,8 +420,8 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No
"size": 12,
"title": "Code UE",
"max_length": SHORT_STR_LEN,
- "explanation": """code interne (non vide). Toutes les UE partageant le même code
- (et le même code de formation) sont compatibles (compensation de semestres, capitalisation d'UE).
+ "explanation": """code interne (non vide). Toutes les UE partageant le même code
+ (et le même code de formation) sont compatibles (compensation de semestres, capitalisation d'UE).
Voir liste ci-dessous.""",
"allow_null": False,
},
@@ -764,7 +764,7 @@ def ue_table(formation_id=None, semestre_idx=1, msg=""): # was ue_list
H.append(
"""
Cette formation est verrouillée car
des semestres verrouillés s'y réferent.
-Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module),
+Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module),
vous devez:
@@ -827,7 +827,7 @@ du programme" (menu "Semestre") si vous avez un semestre en cours);
msg_refcomp = "associer à un référentiel de compétences"
else:
descr_refcomp = f"""Référentiel de compétences:
-
{formation.referentiel_competence.type_titre}
@@ -856,7 +856,7 @@ du programme" (menu "Semestre") si vous avez un semestre en cours);
)
for parc in formation.referentiel_competence.parcours:
H.append(
- f""""""
)
@@ -865,7 +865,7 @@ du programme" (menu "Semestre") si vous avez un semestre en cours);
H.append(
f"""
- {'Visualiser' if locked else 'Éditer'} les coefficients des ressources et SAÉs
@@ -915,7 +915,7 @@ du programme" (menu "Semestre") si vous avez un semestre en cours);
}">Ajouter une UE
- Ajouter des modules de malus dans chaque UE
@@ -956,14 +956,14 @@ du programme" (menu "Semestre") si vous avez un semestre en cours);
)
}">Créer une nouvelle version de la formation (copie non verrouillée)
-
+
"""
)
if not len(formsemestres):
H.append(
f"""
- Supprimer cette formation (pas encore utilisée par des semestres)
@@ -976,7 +976,7 @@ du programme" (menu "Semestre") si vous avez un semestre en cours);
url_for('notes.formation_table_recap', scodoc_dept=g.scodoc_dept,
formation_id=formation_id)
}">Table récapitulative de la formation
-
+
- {label}
"""
@@ -1172,7 +1172,7 @@ def _ue_table_ues(
)
if (iue >= len(ues) - 1) or ue["semestre_id"] != ues[iue + 1]["semestre_id"]:
H.append(
- f"""
-
@@ -1205,7 +1205,7 @@ def _ue_table_matieres(
if editable and not sco_edit_matiere.matiere_is_locked(mat["matiere_id"]):
H.append(
f"""
"""
@@ -1314,6 +1314,10 @@ def _ue_table_modules(
''
% mod
)
+ if mod["module_type"] not in (scu.ModuleType.STANDARD, scu.ModuleType.MALUS):
+ H.append(
+ f"""{scu.EMO_WARNING} type incompatible """
+ )
H.append(
'%s'
% scu.join_words(mod["code"], mod["titre"])
@@ -1358,7 +1362,7 @@ def _ue_table_modules(
if editable and add_suppress_link:
H.append(
f"""la supprimer
"""
@@ -1367,7 +1371,7 @@ def _ue_table_modules(
if editable: # and ((not parcours.UE_IS_MODULE) or len(Modlist) == 0):
H.append(
f"""
- {create_element_msg}
"""
@@ -1451,7 +1455,7 @@ def do_ue_edit(args, bypass_lock=False, dont_invalidate_cache=False):
ues = ue_list({"formation_id": ue["formation_id"], "acronyme": new_acro})
if ues and ues[0]["ue_id"] != ue_id:
raise ScoValueError(
- f"""Acronyme d'UE "{args['acronyme']}" déjà utilisé !
+ f"""Acronyme d'UE "{args['acronyme']}" déjà utilisé !
(chaque UE doit avoir un acronyme unique dans la formation.)"""
)
# On ne peut pas supprimer le code UE:
diff --git a/app/scodoc/sco_formsemestre_edit.py b/app/scodoc/sco_formsemestre_edit.py
index 257cbae1..f34ba88b 100644
--- a/app/scodoc/sco_formsemestre_edit.py
+++ b/app/scodoc/sco_formsemestre_edit.py
@@ -257,6 +257,13 @@ def do_formsemestre_createwithmodules(edit=False, formsemestre: FormSemestre = N
.order_by(Module.module_type, UniteEns.numero, Module.numero)
.all()
)
+ # Elimine les ressources et SAE sauf si déjà dans le semestre
+ modules = [
+ m
+ for m in modules
+ if (m.module_type not in (scu.ModuleType.RESSOURCE, scu.ModuleType.SAE))
+ or m.id in module_ids_set
+ ]
# Pour regroupement des modules par semestres:
semestre_ids = {}
for mod in modules:
diff --git a/app/scodoc/sco_formsemestre_status.py b/app/scodoc/sco_formsemestre_status.py
index 767f5a2f..3d4b2d43 100755
--- a/app/scodoc/sco_formsemestre_status.py
+++ b/app/scodoc/sco_formsemestre_status.py
@@ -1176,11 +1176,18 @@ def formsemestre_status(formsemestre_id=None, check_parcours=True):
H += [_TABLEAU_MODULES_FOOT, ""]
else:
# formations classiques: groupe par UE
+ # élimine les modules BUT qui aurait pu se glisser là suite à un
+ # changement de type de formation par exemple
+ modimpls_classic = [
+ m
+ for m in modimpls
+ if m["module"]["module_type"] not in (ModuleType.RESSOURCE, ModuleType.SAE)
+ ]
H += [
"",
_TABLEAU_MODULES_HEAD,
formsemestre_tableau_modules(
- modimpls,
+ modimpls_classic,
nt,
formsemestre,
can_edit=can_edit,
diff --git a/app/static/css/scodoc.css b/app/static/css/scodoc.css
index 4ce23c77..8463d23a 100644
--- a/app/static/css/scodoc.css
+++ b/app/static/css/scodoc.css
@@ -2464,6 +2464,11 @@ li.module_malus span.formation_module_tit {
text-decoration: underline;
}
+span.invalid-module-type {
+ color: red;
+ font-style: italic;
+}
+
span.formation_module_ue {
color: #6e7d92;
font-size: 75%;