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):
|
||||
"""Page modification semestre"""
|
||||
# portage from dtml
|
||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||
formsemestre: FormSemestre = FormSemestre.query.filter_by(
|
||||
id=formsemestre_id, dept_id=g.scodoc_dept_id
|
||||
).first_or_404()
|
||||
H = [
|
||||
html_sco_header.html_sem_header(
|
||||
"Modification du semestre",
|
||||
@ -103,14 +104,14 @@ def formsemestre_editwithmodules(formsemestre_id):
|
||||
bodyOnLoad="init_tf_form('')",
|
||||
)
|
||||
]
|
||||
if not sem["etat"]:
|
||||
if not formsemestre.etat:
|
||||
H.append(
|
||||
f"""<p>{scu.icontag(
|
||||
"lock_img", border="0", title="Semestre verrouillé")
|
||||
}<b>Ce semestre est verrouillé.</b></p>"""
|
||||
)
|
||||
else:
|
||||
r = do_formsemestre_createwithmodules(edit=1)
|
||||
r = do_formsemestre_createwithmodules(edit=True, formsemestre=formsemestre)
|
||||
if isinstance(r, str):
|
||||
H.append(r)
|
||||
else:
|
||||
@ -133,7 +134,7 @@ def formsemestre_editwithmodules(formsemestre_id):
|
||||
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"""
|
||||
sem = sem or sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||
if not current_user.has_permission(Permission.ScoImplement): # pas chef
|
||||
@ -150,20 +151,18 @@ resp_fields = [
|
||||
]
|
||||
|
||||
|
||||
def do_formsemestre_createwithmodules(edit=False):
|
||||
"Form choix modules / responsables et creation formsemestre"
|
||||
# Fonction accessible à tous, controle acces à la main:
|
||||
def do_formsemestre_createwithmodules(edit=False, formsemestre: FormSemestre = None):
|
||||
"Form choix modules / responsables et création formsemestre"
|
||||
vals = scu.get_request_args()
|
||||
if edit:
|
||||
formsemestre_id = int(vals["formsemestre_id"])
|
||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
|
||||
# Fonction accessible à tous, contrôle d'acces à la main:
|
||||
if not current_user.has_permission(Permission.ScoImplement):
|
||||
if not edit:
|
||||
# il faut ScoImplement pour créer un semestre
|
||||
raise AccessDenied("vous n'avez pas le droit d'effectuer cette opération")
|
||||
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(
|
||||
"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()
|
||||
else:
|
||||
# setup form init values
|
||||
initvalues = sem
|
||||
semestre_id = initvalues["semestre_id"]
|
||||
initvalues = formsemestre.to_dict()
|
||||
semestre_id = formsemestre.semestre_id
|
||||
# add associated modules to tf-checked:
|
||||
module_ids_existing = [modimpl.module.id for modimpl in formsemestre.modimpls]
|
||||
module_ids_set = set(module_ids_existing)
|
||||
@ -200,23 +199,23 @@ def do_formsemestre_createwithmodules(edit=False):
|
||||
modimpl.responsable_id,
|
||||
f"inconnu numéro {modimpl.responsable_id} resp. de {modimpl.id} !",
|
||||
)
|
||||
for index, resp in enumerate(sem["responsables"]):
|
||||
initvalues[resp_fields[index]] = uid2display.get(resp)
|
||||
for index, resp in enumerate(formsemestre.responsables):
|
||||
initvalues[resp_fields[index]] = uid2display.get(resp.id)
|
||||
|
||||
# Liste des ID de semestres
|
||||
if formation.type_parcours is not None:
|
||||
parcours = sco_codes_parcours.get_parcours_from_code(formation.type_parcours)
|
||||
NB_SEM = parcours.NB_SEM
|
||||
nb_sem = parcours.NB_SEM
|
||||
else:
|
||||
NB_SEM = 10 # fallback, max 10 semestres
|
||||
if NB_SEM == 1:
|
||||
nb_sem = 10 # fallback, max 10 semestres
|
||||
if nb_sem == 1:
|
||||
semestre_id_list = [-1]
|
||||
else:
|
||||
if edit and is_apc:
|
||||
# en APC, ne permet pas de changer de semestre
|
||||
semestre_id_list = [formsemestre.semestre_id]
|
||||
else:
|
||||
semestre_id_list = list(range(1, NB_SEM + 1))
|
||||
semestre_id_list = list(range(1, nb_sem + 1))
|
||||
if not is_apc:
|
||||
# propose "pas de semestre" seulement en classique
|
||||
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)
|
||||
etapes_set = {et[0] for et in etapes}
|
||||
if edit:
|
||||
for etape_vdi in sem["etapes"]:
|
||||
for etape_vdi in formsemestre.etapes_apo_vdi():
|
||||
if etape_vdi.etape not in etapes_set:
|
||||
etapes.append((etape_vdi.etape, "inconnue"))
|
||||
modform.append(
|
||||
@ -415,7 +414,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
||||
"allow_null": not sco_preferences.get_preference(
|
||||
"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(
|
||||
"always_require_apo_sem_codes"
|
||||
)
|
||||
or formsemestre.modalite == "EXT",
|
||||
or (formsemestre and formsemestre.modalite == "EXT"),
|
||||
},
|
||||
)
|
||||
)
|
||||
if edit:
|
||||
formtit = f"""
|
||||
<p><a href="formsemestre_edit_uecoefs?formsemestre_id={formsemestre_id}"
|
||||
>Modifier les coefficients des UE capitalisées</a></p>
|
||||
<p><a href="{url_for("notes.formsemestre_edit_uecoefs",
|
||||
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
|
||||
à inscrire:</h3>
|
||||
"""
|
||||
else:
|
||||
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,
|
||||
revenez ajouter les modules de parcours en sélectionnant les groupes d'étudiants
|
||||
à y inscrire.
|
||||
@ -548,7 +550,9 @@ def do_formsemestre_createwithmodules(edit=False):
|
||||
)
|
||||
]
|
||||
if edit:
|
||||
sem["parcours"] = [str(parcour.id) for parcour in formsemestre.parcours]
|
||||
initvalues["parcours"] = [
|
||||
str(parcour.id) for parcour in formsemestre.parcours
|
||||
]
|
||||
else:
|
||||
modform += [
|
||||
(
|
||||
@ -624,7 +628,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
||||
else:
|
||||
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}" {
|
||||
opt_selected(default_group_id)}>Tous</option>"""
|
||||
|
||||
@ -698,7 +702,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
||||
# Etapes:
|
||||
if edit:
|
||||
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["vdi_apo" + str(n)] = etape_vdi.vdi
|
||||
n += 1
|
||||
@ -742,20 +746,23 @@ def do_formsemestre_createwithmodules(edit=False):
|
||||
# check dates
|
||||
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>'
|
||||
|
||||
if (
|
||||
formsemestre.modalite
|
||||
!= "EXT" # n'impose pas d'Apo pour les sem. extérieurs
|
||||
and sco_preferences.get_preference("always_require_apo_sem_codes")
|
||||
sco_preferences.get_preference("always_require_apo_sem_codes")
|
||||
and not any(
|
||||
[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>'
|
||||
|
||||
if tf[0] == 0 or msg:
|
||||
return f"""<p>Formation <a class="discretelink" href="{
|
||||
url_for("notes.ue_table", scodoc_dept=g.scodoc_dept, formation_id=formation_id)
|
||||
}"><em>{formation.titre}</em> ({formation.acronyme}), version {formation.version}, code {formation.formation_code}</a>
|
||||
url_for("notes.ue_table", scodoc_dept=g.scodoc_dept,
|
||||
formation_id=formation_id)
|
||||
}"><em>{formation.titre}</em> ({formation.acronyme}), version {
|
||||
formation.version}, code {formation.formation_code}</a>
|
||||
</p>
|
||||
{msg}
|
||||
{tf[1]}
|
||||
@ -849,7 +856,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
||||
for module_id in module_ids_tocreate:
|
||||
modargs = {
|
||||
"module_id": module_id,
|
||||
"formsemestre_id": formsemestre_id,
|
||||
"formsemestre_id": formsemestre.id,
|
||||
"responsable_id": tf[2]["MI" + str(module_id)],
|
||||
}
|
||||
moduleimpl_id = sco_moduleimpl.do_moduleimpl_create(modargs)
|
||||
@ -873,7 +880,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
||||
)
|
||||
sco_moduleimpl.do_moduleimpl_inscrit_etuds(
|
||||
moduleimpl_id,
|
||||
formsemestre_id,
|
||||
formsemestre.id,
|
||||
etudids,
|
||||
)
|
||||
msg += [
|
||||
@ -887,24 +894,25 @@ def do_formsemestre_createwithmodules(edit=False):
|
||||
)
|
||||
#
|
||||
ok, diag = formsemestre_delete_moduleimpls(
|
||||
formsemestre_id, module_ids_todelete
|
||||
formsemestre.id, module_ids_todelete
|
||||
)
|
||||
msg += diag
|
||||
for module_id in module_ids_toedit:
|
||||
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"]
|
||||
modargs = {
|
||||
"moduleimpl_id": moduleimpl_id,
|
||||
"module_id": module_id,
|
||||
"formsemestre_id": formsemestre_id,
|
||||
"formsemestre_id": formsemestre.id,
|
||||
"responsable_id": tf[2]["MI" + str(module_id)],
|
||||
}
|
||||
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]
|
||||
# --- Association des parcours
|
||||
if formsemestre is None:
|
||||
formsemestre = FormSemestre.query.get(formsemestre_id)
|
||||
if "parcours" in tf[2]:
|
||||
formsemestre.parcours = [
|
||||
@ -918,24 +926,29 @@ def do_formsemestre_createwithmodules(edit=False):
|
||||
# --- Fin
|
||||
if edit:
|
||||
if msg:
|
||||
msg_html = (
|
||||
'<div class="ue_warning"><span>Attention !<ul><li>'
|
||||
+ "</li><li>".join(msg)
|
||||
+ "</li></ul></span></div>"
|
||||
)
|
||||
if ok:
|
||||
msg_html += "<p>Modification effectuée</p>"
|
||||
else:
|
||||
msg_html += "<p>Modules non modifiés</p>"
|
||||
msg_html += (
|
||||
'<a href="formsemestre_status?formsemestre_id=%s">retour au tableau de bord</a>'
|
||||
% formsemestre_id
|
||||
)
|
||||
return msg_html
|
||||
return f"""
|
||||
<div class="ue_warning"><span>Attention !<ul>
|
||||
<li>
|
||||
{"</li><li>".join(msg)}
|
||||
</li>
|
||||
</ul></span>
|
||||
</div>
|
||||
{"<p>Modification effectuée</p>" if ok
|
||||
else "<p>Modules non modifiés</p>"
|
||||
}
|
||||
<a class="stdlink" href="{
|
||||
url_for('notes.formsemestre_status',
|
||||
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre.id)
|
||||
}">retour au tableau de bord</a>
|
||||
"""
|
||||
else:
|
||||
flash("Semestre modifié")
|
||||
return flask.redirect(
|
||||
"formsemestre_status?formsemestre_id=%s&head_message=Semestre modifié"
|
||||
% formsemestre_id
|
||||
url_for(
|
||||
"notes.formsemestre_status",
|
||||
scodoc_dept=g.scodoc_dept,
|
||||
formsemestre_id=formsemestre.id,
|
||||
)
|
||||
)
|
||||
else:
|
||||
flash("Nouveau semestre créé")
|
||||
@ -943,7 +956,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
||||
url_for(
|
||||
"notes.formsemestre_status",
|
||||
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:
|
||||
return "\n".join(H) + tf[1] + footer
|
||||
elif tf[0] == -1:
|
||||
return "<h4>annulation</h4>" # XXX
|
||||
return "<h4>annulation</h4>"
|
||||
else:
|
||||
# change values
|
||||
# 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:
|
||||
z = ["""<h3>Modification effectuées</h3>"""]
|
||||
message = ["""<h3>Modification effectuées</h3>"""]
|
||||
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:
|
||||
z.append("<li>%(acronyme)s : %(coef)s</li>" % ue)
|
||||
z.append("</ul>")
|
||||
message.append("<li>%(acronyme)s : %(coef)s</li>" % ue)
|
||||
message.append("</ul>")
|
||||
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:
|
||||
z.append("<li>%(acronyme)s</li>" % ue)
|
||||
z.append("</ul>")
|
||||
message.append("<li>%(acronyme)s</li>" % ue)
|
||||
message.append("</ul>")
|
||||
else:
|
||||
z = ["""<h3>Aucune modification</h3>"""]
|
||||
message = ["""<h3>Aucune modification</h3>"""]
|
||||
sco_cache.invalidate_formsemestre(
|
||||
formsemestre_id=formsemestre_id
|
||||
) # > modif coef UE cap (modifs notes de _certains_ etudiants)
|
||||
|
||||
header = html_sco_header.html_sem_header("Coefficients des UE du semestre")
|
||||
return (
|
||||
header
|
||||
+ "\n".join(z)
|
||||
+ """<p><a href="formsemestre_status?formsemestre_id=%s">Revenir au tableau de bord</a></p>"""
|
||||
% formsemestre_id
|
||||
+ footer
|
||||
)
|
||||
return f"""{html_sco_header.html_sem_header("Coefficients des UE du semestre")}
|
||||
{" ".join(message)}
|
||||
<p><a class="stdlink" href="{url_for("notes.formsemestre_status",
|
||||
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id)
|
||||
}">Revenir au tableau de bord</a>
|
||||
</p>
|
||||
{footer}
|
||||
"""
|
||||
|
||||
|
||||
# ----- identification externe des sessions (pour SOJA et autres logiciels)
|
||||
|
Loading…
Reference in New Issue
Block a user