forked from ScoDoc/ScoDoc
amélioration formulaire création module
This commit is contained in:
parent
154dc5283e
commit
4469d61221
@ -227,7 +227,6 @@ class BulletinBUT(ResultatsSemestreBUT):
|
|||||||
"date_debut": formsemestre.date_debut.isoformat(),
|
"date_debut": formsemestre.date_debut.isoformat(),
|
||||||
"date_fin": formsemestre.date_fin.isoformat(),
|
"date_fin": formsemestre.date_fin.isoformat(),
|
||||||
"annee_universitaire": self.formsemestre.annee_scolaire_str(),
|
"annee_universitaire": self.formsemestre.annee_scolaire_str(),
|
||||||
"inscription": "TODO-MM-JJ", # XXX TODO
|
|
||||||
"numero": formsemestre.semestre_id,
|
"numero": formsemestre.semestre_id,
|
||||||
"groupes": [], # XXX TODO
|
"groupes": [], # XXX TODO
|
||||||
"absences": {
|
"absences": {
|
||||||
|
@ -123,9 +123,6 @@ def module_create(
|
|||||||
Sinon, donne le choix de l'UE de rattachement et utilise la première
|
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).
|
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:
|
if matiere_id:
|
||||||
matiere = Matiere.query.get_or_404(matiere_id)
|
matiere = Matiere.query.get_or_404(matiere_id)
|
||||||
ue = matiere.ue
|
ue = matiere.ue
|
||||||
@ -160,7 +157,7 @@ def module_create(
|
|||||||
else:
|
else:
|
||||||
H += [
|
H += [
|
||||||
f"""<h2>Création {object_name} dans la matière {matiere.titre},
|
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(
|
formsemestres=FormSemestre.query.filter(
|
||||||
ModuleImpl.formsemestre_id == FormSemestre.id,
|
ModuleImpl.formsemestre_id == FormSemestre.id,
|
||||||
ModuleImpl.module_id == module_id,
|
ModuleImpl.module_id == module_id,
|
||||||
).all(),
|
)
|
||||||
|
.order_by(FormSemestre.date_debut)
|
||||||
|
.all(),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
if not unlocked:
|
if not unlocked:
|
||||||
H.append(
|
H.append(
|
||||||
"""<div class="ue_warning"><span>Formation verrouillée, seuls certains éléments peuvent être modifiés</span></div>"""
|
"""<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:
|
if is_apc:
|
||||||
module_types = scu.ModuleType # tous les types
|
module_types = scu.ModuleType # tous les types
|
||||||
else:
|
else:
|
||||||
@ -728,30 +721,9 @@ def module_edit(module_id=None):
|
|||||||
initvalues=module,
|
initvalues=module,
|
||||||
submitlabel="Modifier ce 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:
|
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:
|
elif tf[0] == -1:
|
||||||
return flask.redirect(
|
return flask.redirect(
|
||||||
url_for(
|
url_for(
|
||||||
|
@ -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"""
|
"""Formulaire modification ou création d'une UE"""
|
||||||
create = int(create)
|
create = int(create)
|
||||||
if not create:
|
if not create:
|
||||||
U = ue_list(args={"ue_id": ue_id})
|
ue: UniteEns = UniteEns.query.get_or_404(ue_id)
|
||||||
if not U:
|
ue_dict = ue.to_dict()
|
||||||
raise ScoValueError("UE inexistante !")
|
formation_id = ue.formation_id
|
||||||
U = U[0]
|
title = f"Modification de l'UE {ue.acronyme} {ue.titre}"
|
||||||
formation_id = U["formation_id"]
|
initvalues = ue_dict
|
||||||
title = "Modification de l'UE %(titre)s" % U
|
|
||||||
initvalues = U
|
|
||||||
submitlabel = "Modifier les valeurs"
|
submitlabel = "Modifier les valeurs"
|
||||||
|
can_change_semestre_id = ue.modules.count() == 0
|
||||||
else:
|
else:
|
||||||
|
ue = None
|
||||||
title = "Création d'une UE"
|
title = "Création d'une UE"
|
||||||
initvalues = {"semestre_idx": default_semestre_idx}
|
initvalues = {"semestre_idx": default_semestre_idx}
|
||||||
submitlabel = "Créer cette UE"
|
submitlabel = "Créer cette UE"
|
||||||
|
can_change_semestre_id = True
|
||||||
formation = Formation.query.get(formation_id)
|
formation = Formation.query.get(formation_id)
|
||||||
if not formation:
|
if not formation:
|
||||||
raise ScoValueError(f"Formation inexistante ! (id={formation_id})")
|
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_names = [sco_codes_parcours.UE_TYPE_NAME[k] for k in ue_types]
|
||||||
ue_types = [str(x) for x in ue_types]
|
ue_types = [str(x) for x in ue_types]
|
||||||
|
|
||||||
fw = [
|
form_descr = [
|
||||||
("ue_id", {"input_type": "hidden"}),
|
("ue_id", {"input_type": "hidden"}),
|
||||||
("create", {"input_type": "hidden", "default": create}),
|
("create", {"input_type": "hidden", "default": create}),
|
||||||
("formation_id", {"input_type": "hidden", "default": formation_id}),
|
("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",
|
"type": "int",
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
]
|
||||||
"semestre_idx",
|
if can_change_semestre_id:
|
||||||
{
|
form_descr += [
|
||||||
"input_type": "menu",
|
(
|
||||||
"type": "int",
|
"semestre_idx",
|
||||||
"allow_null": False,
|
{
|
||||||
"title": parcours.SESSION_NAME.capitalize(),
|
"input_type": "menu",
|
||||||
"explanation": "%s de l'UE dans la formation" % parcours.SESSION_NAME,
|
"type": "int",
|
||||||
"labels": ["non spécifié"] + [str(x) for x in semestres_indices],
|
"allow_null": False,
|
||||||
"allowed_values": [""] + semestres_indices,
|
"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",
|
"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:
|
if create and not parcours.UE_IS_MODULE and not is_apc:
|
||||||
fw.append(
|
form_descr.append(
|
||||||
(
|
(
|
||||||
"create_matiere",
|
"create_matiere",
|
||||||
{
|
{
|
||||||
@ -391,14 +402,33 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No
|
|||||||
tf = TrivialFormulator(
|
tf = TrivialFormulator(
|
||||||
request.base_url,
|
request.base_url,
|
||||||
scu.get_request_args(),
|
scu.get_request_args(),
|
||||||
fw,
|
form_descr,
|
||||||
initvalues=initvalues,
|
initvalues=initvalues,
|
||||||
submitlabel=submitlabel,
|
submitlabel=submitlabel,
|
||||||
)
|
)
|
||||||
if tf[0] == 0:
|
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>"""
|
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:
|
else:
|
||||||
if create:
|
if create:
|
||||||
if not tf[2]["ue_code"]:
|
if not tf[2]["ue_code"]:
|
||||||
|
@ -1771,40 +1771,54 @@ ul.notes_module_list {
|
|||||||
}
|
}
|
||||||
|
|
||||||
div#ue_list_code {
|
div#ue_list_code {
|
||||||
background-color: rgb(220,220,220);
|
background-color: rgb(155, 218, 155);
|
||||||
font-size: small;
|
padding: 10px;
|
||||||
padding-left: 4px;
|
border: 1px solid blue;
|
||||||
padding-bottom: 1px;
|
border-radius: 10px;
|
||||||
|
padding: 10px;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
margin: 3ex;
|
margin-right: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.notes_module_list {
|
ul.notes_module_list {
|
||||||
list-style-type: none;
|
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 {
|
div#ue_list_etud_validations {
|
||||||
background-color: rgb(220,250,220);
|
background-color: rgb(220,250,220);
|
||||||
padding-left: 4px;
|
padding-left: 4px;
|
||||||
padding-bottom: 1px;
|
padding-bottom: 1px;
|
||||||
margin: 3ex;
|
margin: 3ex;
|
||||||
}
|
}
|
||||||
div#ue_list_etud_validations span {
|
div#ue_list_etud_validations span {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
span.ue_share {
|
span.ue_share {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.ue_warning {
|
div.ue_warning {
|
||||||
border: 1px solid red;
|
border: 1px solid red;
|
||||||
background-color: rgb(250,220,220);
|
border-radius: 10px;
|
||||||
margin: 3ex;
|
background-color: rgb(250,220,220);
|
||||||
padding-left: 1ex;
|
margin-top: 10px;
|
||||||
padding-right: 1ex;
|
margin-right: 15px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
div.ue_warning:first-child {
|
||||||
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.ue_warning span:before {
|
div.ue_warning span:before {
|
||||||
content: url(/ScoDoc/static/icons/warning_img.png);
|
content: url(/ScoDoc/static/icons/warning_img.png);
|
||||||
vertical-align: -80%;
|
vertical-align: -80%;
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
{# -*- mode: jinja-html -*- #}
|
||||||
<div class="help">
|
<div class="help">
|
||||||
<p class="help">
|
<p class="help">
|
||||||
Les modules sont décrits dans le programme pédagogique. Un module est pour ce
|
Les modules sont décrits dans le programme pédagogique. Un module est pour ce
|
||||||
@ -24,24 +25,26 @@
|
|||||||
<a href="https://scodoc.org/BUT" target="_blank">la documentation</a>.
|
<a href="https://scodoc.org/BUT" target="_blank">la documentation</a>.
|
||||||
</p>
|
</p>
|
||||||
{%endif%}
|
{%endif%}
|
||||||
|
|
||||||
{% if formsemestres %}
|
|
||||||
<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>
|
|
||||||
{%for formsemestre in formsemestres %}
|
|
||||||
<li><a class="stdlink" href="{{
|
|
||||||
url_for('notes.formsemestre_status',
|
|
||||||
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre.id)
|
|
||||||
}}">{{formsemestre.titre_mois()}}</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
{%endif%}
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% 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>
|
||||||
|
{%for formsemestre in formsemestres %}
|
||||||
|
<li><a class="stdlink" href="{{
|
||||||
|
url_for('notes.formsemestre_status',
|
||||||
|
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre.id)
|
||||||
|
}}">{{formsemestre.titre_mois()}}</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{%endif%}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user