forked from ScoDoc/ScoDoc
Améliore code création formsemestres.
This commit is contained in:
parent
0c5e338970
commit
268b75d441
@ -93,8 +93,9 @@ def formsemestre_createwithmodules():
|
|||||||
|
|
||||||
def formsemestre_editwithmodules(formsemestre_id):
|
def formsemestre_editwithmodules(formsemestre_id):
|
||||||
"""Page modification semestre"""
|
"""Page modification semestre"""
|
||||||
# portage from dtml
|
formsemestre: FormSemestre = FormSemestre.query.filter_by(
|
||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
id=formsemestre_id, dept_id=g.scodoc_dept_id
|
||||||
|
).first_or_404()
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.html_sem_header(
|
html_sco_header.html_sem_header(
|
||||||
"Modification du semestre",
|
"Modification du semestre",
|
||||||
@ -103,14 +104,14 @@ def formsemestre_editwithmodules(formsemestre_id):
|
|||||||
bodyOnLoad="init_tf_form('')",
|
bodyOnLoad="init_tf_form('')",
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
if not sem["etat"]:
|
if not formsemestre.etat:
|
||||||
H.append(
|
H.append(
|
||||||
f"""<p>{scu.icontag(
|
f"""<p>{scu.icontag(
|
||||||
"lock_img", border="0", title="Semestre verrouillé")
|
"lock_img", border="0", title="Semestre verrouillé")
|
||||||
}<b>Ce semestre est verrouillé.</b></p>"""
|
}<b>Ce semestre est verrouillé.</b></p>"""
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
r = do_formsemestre_createwithmodules(edit=1)
|
r = do_formsemestre_createwithmodules(edit=True, formsemestre=formsemestre)
|
||||||
if isinstance(r, str):
|
if isinstance(r, str):
|
||||||
H.append(r)
|
H.append(r)
|
||||||
else:
|
else:
|
||||||
@ -133,7 +134,7 @@ def formsemestre_editwithmodules(formsemestre_id):
|
|||||||
return "\n".join(H) + html_sco_header.sco_footer()
|
return "\n".join(H) + html_sco_header.sco_footer()
|
||||||
|
|
||||||
|
|
||||||
def can_edit_sem(formsemestre_id="", sem=None):
|
def can_edit_sem(formsemestre_id: int = None, sem=None):
|
||||||
"""Return sem if user can edit it, False otherwise"""
|
"""Return sem if user can edit it, False otherwise"""
|
||||||
sem = sem or sco_formsemestre.get_formsemestre(formsemestre_id)
|
sem = sem or sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
if not current_user.has_permission(Permission.ScoImplement): # pas chef
|
if not current_user.has_permission(Permission.ScoImplement): # pas chef
|
||||||
@ -150,20 +151,18 @@ resp_fields = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def do_formsemestre_createwithmodules(edit=False):
|
def do_formsemestre_createwithmodules(edit=False, formsemestre: FormSemestre = None):
|
||||||
"Form choix modules / responsables et creation formsemestre"
|
"Form choix modules / responsables et création formsemestre"
|
||||||
# Fonction accessible à tous, controle acces à la main:
|
|
||||||
vals = scu.get_request_args()
|
vals = scu.get_request_args()
|
||||||
if edit:
|
# Fonction accessible à tous, contrôle d'acces à la main:
|
||||||
formsemestre_id = int(vals["formsemestre_id"])
|
|
||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
|
||||||
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
|
|
||||||
if not current_user.has_permission(Permission.ScoImplement):
|
if not current_user.has_permission(Permission.ScoImplement):
|
||||||
if not edit:
|
if not edit:
|
||||||
# il faut ScoImplement pour créer un semestre
|
# il faut ScoImplement pour créer un semestre
|
||||||
raise AccessDenied("vous n'avez pas le droit d'effectuer cette opération")
|
raise AccessDenied("vous n'avez pas le droit d'effectuer cette opération")
|
||||||
else:
|
else:
|
||||||
if not sem["resp_can_edit"] or current_user.id not in sem["responsables"]:
|
if not formsemestre.resp_can_edit or current_user.id not in (
|
||||||
|
u.id for u in formsemestre.responsables
|
||||||
|
):
|
||||||
raise AccessDenied(
|
raise AccessDenied(
|
||||||
"vous n'avez pas le droit d'effectuer cette opération"
|
"vous n'avez pas le droit d'effectuer cette opération"
|
||||||
)
|
)
|
||||||
@ -189,8 +188,8 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
module_ids_set = set()
|
module_ids_set = set()
|
||||||
else:
|
else:
|
||||||
# setup form init values
|
# setup form init values
|
||||||
initvalues = sem
|
initvalues = formsemestre.to_dict()
|
||||||
semestre_id = initvalues["semestre_id"]
|
semestre_id = formsemestre.semestre_id
|
||||||
# add associated modules to tf-checked:
|
# add associated modules to tf-checked:
|
||||||
module_ids_existing = [modimpl.module.id for modimpl in formsemestre.modimpls]
|
module_ids_existing = [modimpl.module.id for modimpl in formsemestre.modimpls]
|
||||||
module_ids_set = set(module_ids_existing)
|
module_ids_set = set(module_ids_existing)
|
||||||
@ -200,23 +199,23 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
modimpl.responsable_id,
|
modimpl.responsable_id,
|
||||||
f"inconnu numéro {modimpl.responsable_id} resp. de {modimpl.id} !",
|
f"inconnu numéro {modimpl.responsable_id} resp. de {modimpl.id} !",
|
||||||
)
|
)
|
||||||
for index, resp in enumerate(sem["responsables"]):
|
for index, resp in enumerate(formsemestre.responsables):
|
||||||
initvalues[resp_fields[index]] = uid2display.get(resp)
|
initvalues[resp_fields[index]] = uid2display.get(resp.id)
|
||||||
|
|
||||||
# Liste des ID de semestres
|
# Liste des ID de semestres
|
||||||
if formation.type_parcours is not None:
|
if formation.type_parcours is not None:
|
||||||
parcours = sco_codes_parcours.get_parcours_from_code(formation.type_parcours)
|
parcours = sco_codes_parcours.get_parcours_from_code(formation.type_parcours)
|
||||||
NB_SEM = parcours.NB_SEM
|
nb_sem = parcours.NB_SEM
|
||||||
else:
|
else:
|
||||||
NB_SEM = 10 # fallback, max 10 semestres
|
nb_sem = 10 # fallback, max 10 semestres
|
||||||
if NB_SEM == 1:
|
if nb_sem == 1:
|
||||||
semestre_id_list = [-1]
|
semestre_id_list = [-1]
|
||||||
else:
|
else:
|
||||||
if edit and is_apc:
|
if edit and is_apc:
|
||||||
# en APC, ne permet pas de changer de semestre
|
# en APC, ne permet pas de changer de semestre
|
||||||
semestre_id_list = [formsemestre.semestre_id]
|
semestre_id_list = [formsemestre.semestre_id]
|
||||||
else:
|
else:
|
||||||
semestre_id_list = list(range(1, NB_SEM + 1))
|
semestre_id_list = list(range(1, nb_sem + 1))
|
||||||
if not is_apc:
|
if not is_apc:
|
||||||
# propose "pas de semestre" seulement en classique
|
# propose "pas de semestre" seulement en classique
|
||||||
semestre_id_list.insert(0, -1)
|
semestre_id_list.insert(0, -1)
|
||||||
@ -345,7 +344,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
# et ajoute les étapes du semestre qui ne sont pas dans la liste (soit la liste a changé, soit l'étape a été ajoutée manuellement)
|
# et ajoute les étapes du semestre qui ne sont pas dans la liste (soit la liste a changé, soit l'étape a été ajoutée manuellement)
|
||||||
etapes_set = {et[0] for et in etapes}
|
etapes_set = {et[0] for et in etapes}
|
||||||
if edit:
|
if edit:
|
||||||
for etape_vdi in sem["etapes"]:
|
for etape_vdi in formsemestre.etapes_apo_vdi():
|
||||||
if etape_vdi.etape not in etapes_set:
|
if etape_vdi.etape not in etapes_set:
|
||||||
etapes.append((etape_vdi.etape, "inconnue"))
|
etapes.append((etape_vdi.etape, "inconnue"))
|
||||||
modform.append(
|
modform.append(
|
||||||
@ -415,7 +414,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
"allow_null": not sco_preferences.get_preference(
|
"allow_null": not sco_preferences.get_preference(
|
||||||
"always_require_apo_sem_codes"
|
"always_require_apo_sem_codes"
|
||||||
)
|
)
|
||||||
or formsemestre.modalite == "EXT",
|
or (formsemestre and formsemestre.modalite == "EXT"),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -429,20 +428,23 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
"allow_null": not sco_preferences.get_preference(
|
"allow_null": not sco_preferences.get_preference(
|
||||||
"always_require_apo_sem_codes"
|
"always_require_apo_sem_codes"
|
||||||
)
|
)
|
||||||
or formsemestre.modalite == "EXT",
|
or (formsemestre and formsemestre.modalite == "EXT"),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if edit:
|
if edit:
|
||||||
formtit = f"""
|
formtit = f"""
|
||||||
<p><a href="formsemestre_edit_uecoefs?formsemestre_id={formsemestre_id}"
|
<p><a href="{url_for("notes.formsemestre_edit_uecoefs",
|
||||||
>Modifier les coefficients des UE capitalisées</a></p>
|
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre.id)
|
||||||
|
}">Modifier les coefficients des UE capitalisées</a>
|
||||||
|
</p>
|
||||||
<h3>Sélectionner les modules, leurs responsables et les étudiants
|
<h3>Sélectionner les modules, leurs responsables et les étudiants
|
||||||
à inscrire:</h3>
|
à inscrire:</h3>
|
||||||
"""
|
"""
|
||||||
else:
|
else:
|
||||||
formtit = """<h3>Sélectionner les modules et leurs responsables</h3>
|
formtit = """<h3>Sélectionner les modules et leurs responsables</h3>
|
||||||
<p class="help">Si vous avez des parcours (options), dans un premier
|
<p class="help">
|
||||||
|
Si vous avez des parcours (options), dans un premier temps
|
||||||
ne sélectionnez que les modules du tronc commun, puis après inscriptions,
|
ne sélectionnez que les modules du tronc commun, puis après inscriptions,
|
||||||
revenez ajouter les modules de parcours en sélectionnant les groupes d'étudiants
|
revenez ajouter les modules de parcours en sélectionnant les groupes d'étudiants
|
||||||
à y inscrire.
|
à y inscrire.
|
||||||
@ -548,7 +550,9 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
)
|
)
|
||||||
]
|
]
|
||||||
if edit:
|
if edit:
|
||||||
sem["parcours"] = [str(parcour.id) for parcour in formsemestre.parcours]
|
initvalues["parcours"] = [
|
||||||
|
str(parcour.id) for parcour in formsemestre.parcours
|
||||||
|
]
|
||||||
else:
|
else:
|
||||||
modform += [
|
modform += [
|
||||||
(
|
(
|
||||||
@ -624,7 +628,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
else:
|
else:
|
||||||
disabled = ""
|
disabled = ""
|
||||||
fcg = f'<select name="{select_name}" {disabled}>'
|
fcg = f'<select name="{select_name}" {disabled}>'
|
||||||
default_group_id = sco_groups.get_default_group(formsemestre_id)
|
default_group_id = sco_groups.get_default_group(formsemestre.id)
|
||||||
fcg += f"""<option value="{default_group_id}" {
|
fcg += f"""<option value="{default_group_id}" {
|
||||||
opt_selected(default_group_id)}>Tous</option>"""
|
opt_selected(default_group_id)}>Tous</option>"""
|
||||||
|
|
||||||
@ -698,7 +702,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
# Etapes:
|
# Etapes:
|
||||||
if edit:
|
if edit:
|
||||||
n = 1
|
n = 1
|
||||||
for etape_vdi in sem["etapes"]:
|
for etape_vdi in formsemestre.etapes_apo_vdi():
|
||||||
initvalues["etape_apo" + str(n)] = etape_vdi.etape
|
initvalues["etape_apo" + str(n)] = etape_vdi.etape
|
||||||
initvalues["vdi_apo" + str(n)] = etape_vdi.vdi
|
initvalues["vdi_apo" + str(n)] = etape_vdi.vdi
|
||||||
n += 1
|
n += 1
|
||||||
@ -742,20 +746,23 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
# check dates
|
# check dates
|
||||||
if ndb.DateDMYtoISO(tf[2]["date_debut"]) > ndb.DateDMYtoISO(tf[2]["date_fin"]):
|
if ndb.DateDMYtoISO(tf[2]["date_debut"]) > ndb.DateDMYtoISO(tf[2]["date_fin"]):
|
||||||
msg = '<ul class="tf-msg"><li class="tf-msg">Dates de début et fin incompatibles !</li></ul>'
|
msg = '<ul class="tf-msg"><li class="tf-msg">Dates de début et fin incompatibles !</li></ul>'
|
||||||
|
|
||||||
if (
|
if (
|
||||||
formsemestre.modalite
|
sco_preferences.get_preference("always_require_apo_sem_codes")
|
||||||
!= "EXT" # n'impose pas d'Apo pour les sem. extérieurs
|
|
||||||
and sco_preferences.get_preference("always_require_apo_sem_codes")
|
|
||||||
and not any(
|
and not any(
|
||||||
[tf[2]["etape_apo" + str(n)] for n in range(0, scu.EDIT_NB_ETAPES + 1)]
|
[tf[2]["etape_apo" + str(n)] for n in range(0, scu.EDIT_NB_ETAPES + 1)]
|
||||||
)
|
)
|
||||||
|
# n'impose pas d'Apo pour les sem. extérieurs
|
||||||
|
and ((formsemestre is None) or formsemestre.modalite != "EXT")
|
||||||
):
|
):
|
||||||
msg = '<ul class="tf-msg"><li class="tf-msg">Code étape Apogée manquant</li></ul>'
|
msg = '<ul class="tf-msg"><li class="tf-msg">Code étape Apogée manquant</li></ul>'
|
||||||
|
|
||||||
if tf[0] == 0 or msg:
|
if tf[0] == 0 or msg:
|
||||||
return f"""<p>Formation <a class="discretelink" href="{
|
return f"""<p>Formation <a class="discretelink" href="{
|
||||||
url_for("notes.ue_table", scodoc_dept=g.scodoc_dept, formation_id=formation_id)
|
url_for("notes.ue_table", scodoc_dept=g.scodoc_dept,
|
||||||
}"><em>{formation.titre}</em> ({formation.acronyme}), version {formation.version}, code {formation.formation_code}</a>
|
formation_id=formation_id)
|
||||||
|
}"><em>{formation.titre}</em> ({formation.acronyme}), version {
|
||||||
|
formation.version}, code {formation.formation_code}</a>
|
||||||
</p>
|
</p>
|
||||||
{msg}
|
{msg}
|
||||||
{tf[1]}
|
{tf[1]}
|
||||||
@ -849,7 +856,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
for module_id in module_ids_tocreate:
|
for module_id in module_ids_tocreate:
|
||||||
modargs = {
|
modargs = {
|
||||||
"module_id": module_id,
|
"module_id": module_id,
|
||||||
"formsemestre_id": formsemestre_id,
|
"formsemestre_id": formsemestre.id,
|
||||||
"responsable_id": tf[2]["MI" + str(module_id)],
|
"responsable_id": tf[2]["MI" + str(module_id)],
|
||||||
}
|
}
|
||||||
moduleimpl_id = sco_moduleimpl.do_moduleimpl_create(modargs)
|
moduleimpl_id = sco_moduleimpl.do_moduleimpl_create(modargs)
|
||||||
@ -873,7 +880,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
)
|
)
|
||||||
sco_moduleimpl.do_moduleimpl_inscrit_etuds(
|
sco_moduleimpl.do_moduleimpl_inscrit_etuds(
|
||||||
moduleimpl_id,
|
moduleimpl_id,
|
||||||
formsemestre_id,
|
formsemestre.id,
|
||||||
etudids,
|
etudids,
|
||||||
)
|
)
|
||||||
msg += [
|
msg += [
|
||||||
@ -887,24 +894,25 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
)
|
)
|
||||||
#
|
#
|
||||||
ok, diag = formsemestre_delete_moduleimpls(
|
ok, diag = formsemestre_delete_moduleimpls(
|
||||||
formsemestre_id, module_ids_todelete
|
formsemestre.id, module_ids_todelete
|
||||||
)
|
)
|
||||||
msg += diag
|
msg += diag
|
||||||
for module_id in module_ids_toedit:
|
for module_id in module_ids_toedit:
|
||||||
moduleimpl_id = sco_moduleimpl.moduleimpl_list(
|
moduleimpl_id = sco_moduleimpl.moduleimpl_list(
|
||||||
formsemestre_id=formsemestre_id, module_id=module_id
|
formsemestre_id=formsemestre.id, module_id=module_id
|
||||||
)[0]["moduleimpl_id"]
|
)[0]["moduleimpl_id"]
|
||||||
modargs = {
|
modargs = {
|
||||||
"moduleimpl_id": moduleimpl_id,
|
"moduleimpl_id": moduleimpl_id,
|
||||||
"module_id": module_id,
|
"module_id": module_id,
|
||||||
"formsemestre_id": formsemestre_id,
|
"formsemestre_id": formsemestre.id,
|
||||||
"responsable_id": tf[2]["MI" + str(module_id)],
|
"responsable_id": tf[2]["MI" + str(module_id)],
|
||||||
}
|
}
|
||||||
sco_moduleimpl.do_moduleimpl_edit(
|
sco_moduleimpl.do_moduleimpl_edit(
|
||||||
modargs, formsemestre_id=formsemestre_id
|
modargs, formsemestre_id=formsemestre.id
|
||||||
)
|
)
|
||||||
mod = sco_edit_module.module_list({"module_id": module_id})[0]
|
mod = sco_edit_module.module_list({"module_id": module_id})[0]
|
||||||
# --- Association des parcours
|
# --- Association des parcours
|
||||||
|
if formsemestre is None:
|
||||||
formsemestre = FormSemestre.query.get(formsemestre_id)
|
formsemestre = FormSemestre.query.get(formsemestre_id)
|
||||||
if "parcours" in tf[2]:
|
if "parcours" in tf[2]:
|
||||||
formsemestre.parcours = [
|
formsemestre.parcours = [
|
||||||
@ -918,24 +926,29 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
# --- Fin
|
# --- Fin
|
||||||
if edit:
|
if edit:
|
||||||
if msg:
|
if msg:
|
||||||
msg_html = (
|
return f"""
|
||||||
'<div class="ue_warning"><span>Attention !<ul><li>'
|
<div class="ue_warning"><span>Attention !<ul>
|
||||||
+ "</li><li>".join(msg)
|
<li>
|
||||||
+ "</li></ul></span></div>"
|
{"</li><li>".join(msg)}
|
||||||
)
|
</li>
|
||||||
if ok:
|
</ul></span>
|
||||||
msg_html += "<p>Modification effectuée</p>"
|
</div>
|
||||||
else:
|
{"<p>Modification effectuée</p>" if ok
|
||||||
msg_html += "<p>Modules non modifiés</p>"
|
else "<p>Modules non modifiés</p>"
|
||||||
msg_html += (
|
}
|
||||||
'<a href="formsemestre_status?formsemestre_id=%s">retour au tableau de bord</a>'
|
<a class="stdlink" href="{
|
||||||
% formsemestre_id
|
url_for('notes.formsemestre_status',
|
||||||
)
|
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre.id)
|
||||||
return msg_html
|
}">retour au tableau de bord</a>
|
||||||
|
"""
|
||||||
else:
|
else:
|
||||||
|
flash("Semestre modifié")
|
||||||
return flask.redirect(
|
return flask.redirect(
|
||||||
"formsemestre_status?formsemestre_id=%s&head_message=Semestre modifié"
|
url_for(
|
||||||
% formsemestre_id
|
"notes.formsemestre_status",
|
||||||
|
scodoc_dept=g.scodoc_dept,
|
||||||
|
formsemestre_id=formsemestre.id,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
flash("Nouveau semestre créé")
|
flash("Nouveau semestre créé")
|
||||||
@ -943,7 +956,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
url_for(
|
url_for(
|
||||||
"notes.formsemestre_status",
|
"notes.formsemestre_status",
|
||||||
scodoc_dept=g.scodoc_dept,
|
scodoc_dept=g.scodoc_dept,
|
||||||
formsemestre_id=formsemestre_id,
|
formsemestre_id=formsemestre.id,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -1741,7 +1754,7 @@ def formsemestre_edit_uecoefs(formsemestre_id, err_ue_id=None):
|
|||||||
if tf[0] == 0:
|
if tf[0] == 0:
|
||||||
return "\n".join(H) + tf[1] + footer
|
return "\n".join(H) + tf[1] + footer
|
||||||
elif tf[0] == -1:
|
elif tf[0] == -1:
|
||||||
return "<h4>annulation</h4>" # XXX
|
return "<h4>annulation</h4>"
|
||||||
else:
|
else:
|
||||||
# change values
|
# change values
|
||||||
# 1- supprime les coef qui ne sont plus forcés
|
# 1- supprime les coef qui ne sont plus forcés
|
||||||
@ -1790,31 +1803,31 @@ def formsemestre_edit_uecoefs(formsemestre_id, err_ue_id=None):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if ue_modified or ue_deleted:
|
if ue_modified or ue_deleted:
|
||||||
z = ["""<h3>Modification effectuées</h3>"""]
|
message = ["""<h3>Modification effectuées</h3>"""]
|
||||||
if ue_modified:
|
if ue_modified:
|
||||||
z.append("""<h4>Coefs modifiés dans les UE:<h4><ul>""")
|
message.append("""<h4>Coefs modifiés dans les UE:<h4><ul>""")
|
||||||
for ue in ue_modified:
|
for ue in ue_modified:
|
||||||
z.append("<li>%(acronyme)s : %(coef)s</li>" % ue)
|
message.append("<li>%(acronyme)s : %(coef)s</li>" % ue)
|
||||||
z.append("</ul>")
|
message.append("</ul>")
|
||||||
if ue_deleted:
|
if ue_deleted:
|
||||||
z.append("""<h4>Coefs supprimés dans les UE:<h4><ul>""")
|
message.append("""<h4>Coefs supprimés dans les UE:<h4><ul>""")
|
||||||
for ue in ue_deleted:
|
for ue in ue_deleted:
|
||||||
z.append("<li>%(acronyme)s</li>" % ue)
|
message.append("<li>%(acronyme)s</li>" % ue)
|
||||||
z.append("</ul>")
|
message.append("</ul>")
|
||||||
else:
|
else:
|
||||||
z = ["""<h3>Aucune modification</h3>"""]
|
message = ["""<h3>Aucune modification</h3>"""]
|
||||||
sco_cache.invalidate_formsemestre(
|
sco_cache.invalidate_formsemestre(
|
||||||
formsemestre_id=formsemestre_id
|
formsemestre_id=formsemestre_id
|
||||||
) # > modif coef UE cap (modifs notes de _certains_ etudiants)
|
) # > modif coef UE cap (modifs notes de _certains_ etudiants)
|
||||||
|
|
||||||
header = html_sco_header.html_sem_header("Coefficients des UE du semestre")
|
return f"""{html_sco_header.html_sem_header("Coefficients des UE du semestre")}
|
||||||
return (
|
{" ".join(message)}
|
||||||
header
|
<p><a class="stdlink" href="{url_for("notes.formsemestre_status",
|
||||||
+ "\n".join(z)
|
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id)
|
||||||
+ """<p><a href="formsemestre_status?formsemestre_id=%s">Revenir au tableau de bord</a></p>"""
|
}">Revenir au tableau de bord</a>
|
||||||
% formsemestre_id
|
</p>
|
||||||
+ footer
|
{footer}
|
||||||
)
|
"""
|
||||||
|
|
||||||
|
|
||||||
# ----- identification externe des sessions (pour SOJA et autres logiciels)
|
# ----- identification externe des sessions (pour SOJA et autres logiciels)
|
||||||
|
Loading…
Reference in New Issue
Block a user