amélioration formulaire création module

This commit is contained in:
Emmanuel Viennet 2022-02-02 21:13:39 +01:00
parent 154dc5283e
commit 4469d61221
5 changed files with 109 additions and 91 deletions

View File

@ -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": {

View File

@ -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"""<h2>Création {object_name} dans la matière {matiere.titre},
(UE {ue.acronyme})</h2>
(UE {ue.acronyme}), semestre {ue.semestre_idx}</h2>
"""
]
@ -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(
"""<div class="ue_warning"><span>Formation verrouillée, seuls certains éléments peuvent être modifiés</span></div>"""
)
if in_use:
H.append(
"""<div class="ue_warning"><span>Module déjà utilisé dans des semestres,
soyez prudents !
</span></div>"""
)
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"""<a class="stdlink" href="{
url_for("notes.formsemestre_status", scodoc_dept=g.scodoc_dept, formsemestre_id=f.id )
}">{f.titre}</a>"""
for f in formsemestres
]
sem_descr = f"""
<div class="ue_warning">
<div>Ce module est utilisé dans les formsemestres suivants:</div>
<ul><li>
{"</li><li>".join( items )}
</li></ul>
</div>
"""
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(

View File

@ -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,6 +297,9 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No
"type": "int",
},
),
]
if can_change_semestre_id:
form_descr += [
(
"semestre_idx",
{
@ -303,11 +307,18 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No
"type": "int",
"allow_null": False,
"title": parcours.SESSION_NAME.capitalize(),
"explanation": "%s de l'UE dans la formation" % parcours.SESSION_NAME,
"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 = """<div id="ue_list_code"></div>"""
if ue and ue.modules.count():
modules_div = f"""<div id="ue_list_modules">
<div><b>{ue.modules.count()} modules sont rattachés
à cette UE</b> du semestre S{ue.semestre_idx},
elle ne peut donc pas être changée de semestre.</div>
<ul>"""
for m in ue.modules:
modules_div += f"""<li><a class="stdlink" href="{url_for(
"notes.module_edit",scodoc_dept=g.scodoc_dept, module_id=m.id)}">{m.code} {m.titre}</a></li>"""
modules_div += """</ul></div>"""
else:
modules_div = ""
bonus_div = """<div id="bonus_description"></div>"""
return "\n".join(H) + tf[1] + bonus_div + ue_div + html_sco_header.sco_footer()
ue_div = """<div id="ue_list_code"></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"]:

View File

@ -1771,18 +1771,28 @@ 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;
@ -1799,12 +1809,16 @@ span.ue_share {
div.ue_warning {
border: 1px solid red;
border-radius: 10px;
background-color: rgb(250,220,220);
margin: 3ex;
padding-left: 1ex;
padding-right: 1ex;
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%;

View File

@ -1,3 +1,4 @@
{# -*- mode: jinja-html -*- #}
<div class="help">
<p class="help">
Les modules sont décrits dans le programme pédagogique. Un module est pour ce
@ -24,16 +25,18 @@
<a href="https://scodoc.org/BUT" target="_blank">la documentation</a>.
</p>
{%endif%}
</div>
{% if formsemestres %}
<p class="help">
{% if formsemestres %}
<div class="ue_warning"> <span><b>Module déjà utilisé dans des semestres, soyez prudents !</b></span>
<p class="help">
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.
</p>
<h4>Semestres utilisant ce module:</h4>
<ul>
</p>
<h4>Semestres utilisant ce module:</h4>
<ul>
{%for formsemestre in formsemestres %}
<li><a class="stdlink" href="{{
url_for('notes.formsemestre_status',
@ -41,7 +44,7 @@
}}">{{formsemestre.titre_mois()}}</a>
</li>
{% endfor %}
</ul>
{%endif%}
</ul>
</div>
{%endif%}