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