diff --git a/app/but/bulletin_but.py b/app/but/bulletin_but.py
index 9441c0316..81a7e1996 100644
--- a/app/but/bulletin_but.py
+++ b/app/but/bulletin_but.py
@@ -227,7 +227,6 @@ class BulletinBUT(ResultatsSemestreBUT):
"date_debut": formsemestre.date_debut.isoformat(),
"date_fin": formsemestre.date_fin.isoformat(),
"annee_universitaire": self.formsemestre.annee_scolaire_str(),
- "inscription": "TODO-MM-JJ", # XXX TODO
"numero": formsemestre.semestre_id,
"groupes": [], # XXX TODO
"absences": {
diff --git a/app/scodoc/sco_edit_module.py b/app/scodoc/sco_edit_module.py
index ab5292a78..a0c7b81f2 100644
--- a/app/scodoc/sco_edit_module.py
+++ b/app/scodoc/sco_edit_module.py
@@ -123,9 +123,6 @@ def module_create(
Sinon, donne le choix de l'UE de rattachement et utilise la première
matière de cette UE (si elle n'existe pas, la crée).
"""
- from app.scodoc import sco_formations
- from app.scodoc import sco_edit_ue
-
if matiere_id:
matiere = Matiere.query.get_or_404(matiere_id)
ue = matiere.ue
@@ -160,7 +157,7 @@ def module_create(
else:
H += [
f"""
Création {object_name} dans la matière {matiere.titre},
- (UE {ue.acronyme})
+ (UE {ue.acronyme}), semestre {ue.semestre_idx}
"""
]
@@ -534,19 +531,15 @@ def module_edit(module_id=None):
formsemestres=FormSemestre.query.filter(
ModuleImpl.formsemestre_id == FormSemestre.id,
ModuleImpl.module_id == module_id,
- ).all(),
+ )
+ .order_by(FormSemestre.date_debut)
+ .all(),
),
]
if not unlocked:
H.append(
"""Formation verrouillée, seuls certains éléments peuvent être modifiés
"""
)
- if in_use:
- H.append(
- """Module déjà utilisé dans des semestres,
- soyez prudents !
-
"""
- )
if is_apc:
module_types = scu.ModuleType # tous les types
else:
@@ -728,30 +721,9 @@ def module_edit(module_id=None):
initvalues=module,
submitlabel="Modifier ce module",
)
- # Affiche liste des formseemstre utilisant ce module
- if in_use:
- formsemestre_ids = {modimpl.formsemestre_id for modimpl in a_module.modimpls}
- formsemestres = [FormSemestre.query.get(fid) for fid in formsemestre_ids]
- formsemestres.sort(key=lambda f: f.date_debut)
- items = [
- f"""{f.titre}"""
- for f in formsemestres
- ]
- sem_descr = f"""
-
-
Ce module est utilisé dans les formsemestres suivants:
-
-
- """
- else:
- sem_descr = ""
#
if tf[0] == 0:
- return "\n".join(H) + tf[1] + sem_descr + html_sco_header.sco_footer()
+ return "\n".join(H) + tf[1] + html_sco_header.sco_footer()
elif tf[0] == -1:
return flask.redirect(
url_for(
diff --git a/app/scodoc/sco_edit_ue.py b/app/scodoc/sco_edit_ue.py
index 0615db1e8..e415d2ed7 100644
--- a/app/scodoc/sco_edit_ue.py
+++ b/app/scodoc/sco_edit_ue.py
@@ -244,18 +244,19 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No
"""Formulaire modification ou création d'une UE"""
create = int(create)
if not create:
- U = ue_list(args={"ue_id": ue_id})
- if not U:
- raise ScoValueError("UE inexistante !")
- U = U[0]
- formation_id = U["formation_id"]
- title = "Modification de l'UE %(titre)s" % U
- initvalues = U
+ ue: UniteEns = UniteEns.query.get_or_404(ue_id)
+ ue_dict = ue.to_dict()
+ formation_id = ue.formation_id
+ title = f"Modification de l'UE {ue.acronyme} {ue.titre}"
+ initvalues = ue_dict
submitlabel = "Modifier les valeurs"
+ can_change_semestre_id = ue.modules.count() == 0
else:
+ ue = None
title = "Création d'une UE"
initvalues = {"semestre_idx": default_semestre_idx}
submitlabel = "Créer cette UE"
+ can_change_semestre_id = True
formation = Formation.query.get(formation_id)
if not formation:
raise ScoValueError(f"Formation inexistante ! (id={formation_id})")
@@ -282,7 +283,7 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No
ue_types_names = [sco_codes_parcours.UE_TYPE_NAME[k] for k in ue_types]
ue_types = [str(x) for x in ue_types]
- fw = [
+ form_descr = [
("ue_id", {"input_type": "hidden"}),
("create", {"input_type": "hidden", "default": create}),
("formation_id", {"input_type": "hidden", "default": formation_id}),
@@ -296,18 +297,28 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No
"type": "int",
},
),
- (
- "semestre_idx",
- {
- "input_type": "menu",
- "type": "int",
- "allow_null": False,
- "title": parcours.SESSION_NAME.capitalize(),
- "explanation": "%s de l'UE dans la formation" % parcours.SESSION_NAME,
- "labels": ["non spécifié"] + [str(x) for x in semestres_indices],
- "allowed_values": [""] + semestres_indices,
- },
- ),
+ ]
+ if can_change_semestre_id:
+ form_descr += [
+ (
+ "semestre_idx",
+ {
+ "input_type": "menu",
+ "type": "int",
+ "allow_null": False,
+ "title": parcours.SESSION_NAME.capitalize(),
+ "explanation": "%s de l'UE dans la formation"
+ % parcours.SESSION_NAME,
+ "labels": ["non spécifié"] + [str(x) for x in semestres_indices],
+ "allowed_values": [""] + semestres_indices,
+ },
+ ),
+ ]
+ else:
+ form_descr += [
+ ("semestre_idx", {"default": ue.semestre_idx, "input_type": "hidden"}),
+ ]
+ form_descr += [
(
"type",
{
@@ -377,7 +388,7 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No
),
]
if create and not parcours.UE_IS_MODULE and not is_apc:
- fw.append(
+ form_descr.append(
(
"create_matiere",
{
@@ -391,14 +402,33 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No
tf = TrivialFormulator(
request.base_url,
scu.get_request_args(),
- fw,
+ form_descr,
initvalues=initvalues,
submitlabel=submitlabel,
)
if tf[0] == 0:
- ue_div = """"""
+ if ue and ue.modules.count():
+ modules_div = f"""
+
{ue.modules.count()} modules sont rattachés
+ à cette UE du semestre S{ue.semestre_idx},
+ elle ne peut donc pas être changée de semestre.
+
"""
+ for m in ue.modules:
+ modules_div += f"""- {m.code} {m.titre}
"""
+ modules_div += """
"""
+ else:
+ modules_div = ""
bonus_div = """"""
- return "\n".join(H) + tf[1] + bonus_div + ue_div + html_sco_header.sco_footer()
+ ue_div = """"""
+ return (
+ "\n".join(H)
+ + tf[1]
+ + modules_div
+ + bonus_div
+ + ue_div
+ + html_sco_header.sco_footer()
+ )
else:
if create:
if not tf[2]["ue_code"]:
diff --git a/app/static/css/scodoc.css b/app/static/css/scodoc.css
index c5758cb5f..8ca51f7b5 100644
--- a/app/static/css/scodoc.css
+++ b/app/static/css/scodoc.css
@@ -1771,40 +1771,54 @@ ul.notes_module_list {
}
div#ue_list_code {
- background-color: rgb(220,220,220);
- font-size: small;
- padding-left: 4px;
- padding-bottom: 1px;
+ background-color: rgb(155, 218, 155);
+ padding: 10px;
+ border: 1px solid blue;
+ border-radius: 10px;
+ padding: 10px;
margin-top: 10px;
- margin: 3ex;
+ margin-right: 15px;
}
ul.notes_module_list {
list-style-type: none;
}
+div#ue_list_modules {
+ background-color: rgb(191, 242, 255);
+ border: 1px solid blue;
+ border-radius: 10px;
+ padding: 10px;
+ margin-top: 10px;
+ margin-right: 15px;
+}
+
div#ue_list_etud_validations {
- background-color: rgb(220,250,220);
- padding-left: 4px;
- padding-bottom: 1px;
- margin: 3ex;
+ background-color: rgb(220,250,220);
+ padding-left: 4px;
+ padding-bottom: 1px;
+ margin: 3ex;
}
div#ue_list_etud_validations span {
font-weight: bold;
}
span.ue_share {
- font-weight: bold;
+ font-weight: bold;
}
div.ue_warning {
- border: 1px solid red;
- background-color: rgb(250,220,220);
- margin: 3ex;
- padding-left: 1ex;
- padding-right: 1ex;
+ border: 1px solid red;
+ border-radius: 10px;
+ background-color: rgb(250,220,220);
+ margin-top: 10px;
+ margin-right: 15px;
+ margin-bottom: 10px;
+ padding: 10px;
+}
+div.ue_warning:first-child {
+ font-weight: bold;
}
-
div.ue_warning span:before {
content: url(/ScoDoc/static/icons/warning_img.png);
vertical-align: -80%;
diff --git a/app/templates/scodoc/help/modules.html b/app/templates/scodoc/help/modules.html
index cd6e0767b..924e128f1 100644
--- a/app/templates/scodoc/help/modules.html
+++ b/app/templates/scodoc/help/modules.html
@@ -1,3 +1,4 @@
+{# -*- mode: jinja-html -*- #}
Les modules sont décrits dans le programme pédagogique. Un module est pour ce
@@ -24,24 +25,26 @@
la documentation.
{%endif%}
+
- {% if formsemestres %}
-
- Ce module est utilisé dans des semestres déjà mis en place, il faut prêter attention
- aux conséquences des changements effectués ici: par exemple les coefficients vont modifier
- les notes moyennes calculées. Les modules déjà utilisés ne peuvent pas être changés de semestre, ni détruits.
- Si vous souhaitez faire cela, allez d'abord modifier les semestres concernés pour déselectionner le module.
-
- Semestres utilisant ce module:
-
+{% if formsemestres %}
+ Module déjà utilisé dans des semestres, soyez prudents !
+
+ Ce module est utilisé dans des semestres déjà mis en place, il faut prêter attention
+ aux conséquences des changements effectués ici: par exemple les coefficients vont modifier
+ les notes moyennes calculées. Les modules déjà utilisés ne peuvent pas être changés de semestre, ni détruits.
+ Si vous souhaitez faire cela, allez d'abord modifier les semestres concernés pour déselectionner le module.
+
+
Semestres utilisant ce module:
+
- {%endif%}
+
+
+{%endif%}
-
\ No newline at end of file