Fix #564 Passage de semestre: inscrire aux groupes de parcours si ils existent
This commit is contained in:
parent
7277c9f999
commit
f3b2c6d4fe
@ -561,11 +561,11 @@ def critical_error(msg):
|
||||
clear_scodoc_cache()
|
||||
raise ScoValueError(
|
||||
f"""
|
||||
Une erreur est survenue.
|
||||
|
||||
Si le problème persiste, merci de contacter le support ScoDoc via
|
||||
Une erreur est survenue.
|
||||
|
||||
Si le problème persiste, merci de contacter le support ScoDoc via
|
||||
{scu.SCO_DISCORD_ASSISTANCE}
|
||||
|
||||
|
||||
{msg}
|
||||
"""
|
||||
)
|
||||
|
@ -1185,7 +1185,10 @@ def do_formsemestre_clone(
|
||||
"""Clone a semestre: make copy, same modules, same options, same resps, same partitions.
|
||||
New dates, responsable_id
|
||||
"""
|
||||
log("cloning %s" % orig_formsemestre_id)
|
||||
log(f"cloning orig_formsemestre_id")
|
||||
formsemestre_orig: FormSemestre = FormSemestre.query.get_or_404(
|
||||
orig_formsemestre_id
|
||||
)
|
||||
orig_sem = sco_formsemestre.get_formsemestre(orig_formsemestre_id)
|
||||
cnx = ndb.GetDBConnexion()
|
||||
# 1- create sem
|
||||
@ -1196,7 +1199,8 @@ def do_formsemestre_clone(
|
||||
args["date_fin"] = date_fin
|
||||
args["etat"] = 1 # non verrouillé
|
||||
formsemestre_id = sco_formsemestre.do_formsemestre_create(args)
|
||||
log("created formsemestre %s" % formsemestre_id)
|
||||
log(f"created formsemestre {formsemestre_id}")
|
||||
formsemestre: FormSemestre = FormSemestre.query.get(formsemestre_id)
|
||||
# 2- create moduleimpls
|
||||
mods_orig = sco_moduleimpl.moduleimpl_list(formsemestre_id=orig_formsemestre_id)
|
||||
for mod_orig in mods_orig:
|
||||
@ -1258,7 +1262,12 @@ def do_formsemestre_clone(
|
||||
args["formsemestre_id"] = formsemestre_id
|
||||
_ = sco_compute_moy.formsemestre_ue_computation_expr_create(cnx, args)
|
||||
|
||||
# 5- Copy partitions and groups
|
||||
# 6- Copie les parcours
|
||||
formsemestre.parcours = formsemestre_orig.parcours
|
||||
db.session.add(formsemestre)
|
||||
db.session.commit()
|
||||
|
||||
# 7- Copy partitions and groups
|
||||
if clone_partitions:
|
||||
sco_groups_copy.clone_partitions_and_groups(
|
||||
orig_formsemestre_id, formsemestre_id
|
||||
|
@ -664,8 +664,10 @@ def set_group(etudid: int, group_id: int) -> bool:
|
||||
return True
|
||||
|
||||
|
||||
def change_etud_group_in_partition(etudid, group_id, partition=None):
|
||||
"""Inscrit etud au groupe de cette partition, et le desinscrit d'autres groupes de cette partition."""
|
||||
def change_etud_group_in_partition(etudid: int, group_id: int, partition: dict = None):
|
||||
"""Inscrit etud au groupe de cette partition,
|
||||
et le desinscrit d'autres groupes de cette partition.
|
||||
"""
|
||||
log("change_etud_group_in_partition: etudid=%s group_id=%s" % (etudid, group_id))
|
||||
|
||||
# 0- La partition
|
||||
@ -706,7 +708,7 @@ def change_etud_group_in_partition(etudid, group_id, partition=None):
|
||||
cnx.commit()
|
||||
|
||||
# 5- Update parcours
|
||||
formsemestre = FormSemestre.query.get(formsemestre_id)
|
||||
formsemestre: FormSemestre = FormSemestre.query.get(formsemestre_id)
|
||||
formsemestre.update_inscriptions_parcours_from_groups()
|
||||
|
||||
# 6- invalidate cache
|
||||
|
@ -36,6 +36,7 @@ from flask import url_for, g, request
|
||||
import app.scodoc.notesdb as ndb
|
||||
import app.scodoc.sco_utils as scu
|
||||
from app import log
|
||||
from app.models import FormSemestre
|
||||
from app.scodoc.gen_tables import GenTable
|
||||
from app.scodoc import html_sco_header
|
||||
from app.scodoc import sco_codes_parcours
|
||||
@ -175,6 +176,8 @@ def do_inscrit(sem, etudids, inscrit_groupes=False):
|
||||
(la liste doit avoir été vérifiée au préalable)
|
||||
En option: inscrit aux mêmes groupes que dans le semestre origine
|
||||
"""
|
||||
formsemestre: FormSemestre = FormSemestre.query.get(sem["formsemestre_id"])
|
||||
formsemestre.setup_parcours_groups()
|
||||
log(f"do_inscrit (inscrit_groupes={inscrit_groupes}): {etudids}")
|
||||
for etudid in etudids:
|
||||
sco_formsemestre_inscriptions.do_formsemestre_inscription_with_modules(
|
||||
@ -190,7 +193,6 @@ def do_inscrit(sem, etudids, inscrit_groupes=False):
|
||||
# du nom de la partition: évidemment, cela ne marche pas si on a les
|
||||
# même noms de groupes dans des partitions différentes)
|
||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
||||
log("cherche groupes de %(nom)s" % etud)
|
||||
|
||||
# recherche le semestre origine (il serait plus propre de l'avoir conservé!)
|
||||
if len(etud["sems"]) < 2:
|
||||
@ -201,13 +203,11 @@ def do_inscrit(sem, etudids, inscrit_groupes=False):
|
||||
prev_formsemestre["formsemestre_id"] if prev_formsemestre else None,
|
||||
)
|
||||
|
||||
cursem_groups_by_name = dict(
|
||||
[
|
||||
(g["group_name"], g)
|
||||
for g in sco_groups.get_sem_groups(sem["formsemestre_id"])
|
||||
if g["group_name"]
|
||||
]
|
||||
)
|
||||
cursem_groups_by_name = {
|
||||
g["group_name"]: g
|
||||
for g in sco_groups.get_sem_groups(sem["formsemestre_id"])
|
||||
if g["group_name"]
|
||||
}
|
||||
|
||||
# forme la liste des groupes présents dans les deux semestres:
|
||||
partition_groups = [] # [ partition+group ] (ds nouveau sem.)
|
||||
@ -217,14 +217,13 @@ def do_inscrit(sem, etudids, inscrit_groupes=False):
|
||||
new_group = cursem_groups_by_name[prev_group_name]
|
||||
partition_groups.append(new_group)
|
||||
|
||||
# inscrit aux groupes
|
||||
# Inscrit aux groupes
|
||||
for partition_group in partition_groups:
|
||||
if partition_group["groups_editable"]:
|
||||
sco_groups.change_etud_group_in_partition(
|
||||
etudid,
|
||||
partition_group["group_id"],
|
||||
partition_group,
|
||||
)
|
||||
sco_groups.change_etud_group_in_partition(
|
||||
etudid,
|
||||
partition_group["group_id"],
|
||||
partition_group,
|
||||
)
|
||||
|
||||
|
||||
def do_desinscrit(sem, etudids):
|
||||
@ -481,11 +480,12 @@ def build_page(
|
||||
|
||||
|
||||
def formsemestre_inscr_passage_help(sem):
|
||||
return (
|
||||
"""<div class="pas_help"><h3><a name="help">Explications</a></h3>
|
||||
return f"""<div class="pas_help"><h3><a name="help">Explications</a></h3>
|
||||
<p>Cette page permet d'inscrire des étudiants dans le semestre destination
|
||||
<a class="stdlink"
|
||||
href="formsemestre_status?formsemestre_id=%(formsemestre_id)s">%(titreannee)s</a>,
|
||||
href="{
|
||||
url_for("notes.formsemestre_status", scodoc_dept=g.scodoc_dept, formsemestre_id=sem["formsemestre_id"] )
|
||||
}">{sem['titreannee']}</a>,
|
||||
et d'en désincrire si besoin.
|
||||
</p>
|
||||
<p>Les étudiants sont groupés par semestres d'origines. Ceux qui sont en caractères
|
||||
@ -495,10 +495,13 @@ def formsemestre_inscr_passage_help(sem):
|
||||
<p>Au départ, les étudiants déjà inscrits sont sélectionnés; vous pouvez ajouter d'autres
|
||||
étudiants à inscrire dans le semestre destination.</p>
|
||||
<p>Si vous dé-selectionnez un étudiant déjà inscrit (en gras), il sera désinscrit.</p>
|
||||
<p>Le bouton <em>inscrire aux mêmes groupes</em> ne prend en compte que les groupes qui existent
|
||||
dans les deux semestres: pensez à créer les partitions et groupes que vous souhaitez conserver
|
||||
<b>avant</b> d'inscrire les étudiants.
|
||||
</p>
|
||||
<p class="help">Aucune action ne sera effectuée si vous n'appuyez pas sur le bouton "Appliquer les modifications" !</p>
|
||||
</div>"""
|
||||
% sem
|
||||
)
|
||||
</div>
|
||||
"""
|
||||
|
||||
|
||||
def etuds_select_boxes(
|
||||
@ -574,13 +577,13 @@ def etuds_select_boxes(
|
||||
if with_checkbox:
|
||||
H.append(
|
||||
""" (Select.
|
||||
<a href="#" onclick="sem_select('%(id)s', true);">tous</a>
|
||||
<a href="#" onclick="sem_select('%(id)s', false );">aucun</a>""" # "
|
||||
<a href="#" class="stdlink" onclick="sem_select('%(id)s', true);">tous</a>
|
||||
<a href="#" class="stdlink" onclick="sem_select('%(id)s', false );">aucun</a>""" # "
|
||||
% infos
|
||||
)
|
||||
if sel_inscrits:
|
||||
H.append(
|
||||
"""<a href="#" onclick="sem_select_inscrits('%(id)s');">inscrits</a>"""
|
||||
"""<a href="#" class="stdlink" onclick="sem_select_inscrits('%(id)s');">inscrits</a>"""
|
||||
% infos
|
||||
)
|
||||
if with_checkbox or sel_inscrits:
|
||||
|
@ -935,7 +935,7 @@ def partition_editor(formsemestre_id: int):
|
||||
def create_partition_parcours(formsemestre_id):
|
||||
"""Création d'une partitions nommée "Parcours" (PARTITION_PARCOURS)
|
||||
avec un groupe par parcours."""
|
||||
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
|
||||
formsemestre: FormSemestre = FormSemestre.query.get_or_404(formsemestre_id)
|
||||
formsemestre.setup_parcours_groups()
|
||||
return flask.redirect(
|
||||
url_for(
|
||||
|
Loading…
Reference in New Issue
Block a user