Création d'une partition avec groupes de parcours

This commit is contained in:
Emmanuel Viennet 2022-05-22 05:01:25 +02:00
parent fd8116a772
commit 40f0bca74d
4 changed files with 77 additions and 38 deletions

View File

@ -325,7 +325,7 @@ def formsemestre_status_menubar(sem):
},
{
"title": "Créer/modifier les partitions...",
"endpoint": "scolar.editPartitionForm",
"endpoint": "scolar.edit_partition_form",
"args": {"formsemestre_id": formsemestre_id},
"enabled": sco_groups.sco_permissions_check.can_change_groups(
formsemestre_id
@ -854,7 +854,7 @@ def _make_listes_sem(sem, with_absences=True):
H.append(
f"""<h4><a
href="{
url_for("scolar.editPartitionForm",
url_for("scolar.edit_partition_form",
formsemestre_id=formsemestre_id,
scodoc_dept=g.scodoc_dept,
)

View File

@ -881,7 +881,7 @@ def partition_create(
if redirect:
return flask.redirect(
url_for(
"scolar.editPartitionForm",
"scolar.edit_partition_form",
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id,
)
@ -900,11 +900,12 @@ def get_arrow_icons_tags():
return arrow_up, arrow_down, arrow_none
def editPartitionForm(formsemestre_id=None):
def edit_partition_form(formsemestre_id=None):
"""Form to create/suppress partitions"""
# ad-hoc form
if not sco_permissions_check.can_change_groups(formsemestre_id):
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
partitions = get_partitions_list(formsemestre_id)
arrow_up, arrow_down, arrow_none = get_arrow_icons_tags()
suppricon = scu.icontag(
@ -914,7 +915,7 @@ def editPartitionForm(formsemestre_id=None):
H = [
html_sco_header.sco_header(
page_title="Partitions...",
javascripts=["js/editPartitionForm.js"],
javascripts=["js/edit_partition_form.js"],
),
# limite à SHORT_STR_LEN
r"""<script type="text/javascript">
@ -1000,28 +1001,49 @@ def editPartitionForm(formsemestre_id=None):
#
H.append("</tr>")
H.append("</table>")
H.append('<div class="form_rename_partition">')
H.append(
'<input type="hidden" name="formsemestre_id" value="%s"/>' % formsemestre_id
f"""<div class="form_rename_partition">
<input type="hidden" name="formsemestre_id" value="{formsemestre_id}"/>
<input type="hidden" name="redirect" value="1"/>
<input type="text" name="partition_name" size="12" onkeyup="checkname();"/>
<input type="submit" name="ok" disabled="1" value="Nouvelle partition"/>
"""
)
H.append('<input type="hidden" name="redirect" value="1"/>')
if formsemestre.formation.is_apc() and "Parcours" not in (
p["partition_name"] for p in partitions
):
# propose création partition "Parcours"
H.append(
f"""
<div style="margin-top: 10px"><a class="stdlink" href="{
url_for("scolar.create_partition_parcours", scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id)
}">Créer une partition avec un groupe par parcours (BUT)</a>
</div>
"""
)
H.append(
'<input type="text" name="partition_name" size="12" onkeyup="checkname();"/>'
"""
</div>
</form>
"""
)
H.append('<input type="submit" name="ok" disabled="1" value="Nouvelle partition"/>')
H.append("</div></form>")
H.append(
"""<div class="help">
<p>Les partitions sont des découpages de l'ensemble des étudiants.
Par exemple, les "groupes de TD" sont une partition.
On peut créer autant de partitions que nécessaire.
<p>Les partitions sont des découpages de l'ensemble des étudiants.
Par exemple, les "groupes de TD" sont une partition.
On peut créer autant de partitions que nécessaire.
</p>
<ul>
<li>Dans chaque partition, un nombre de groupes quelconque peuvent être créés (suivre le lien "répartir").
<li>On peut faire afficher le classement de l'étudiant dans son groupe d'une partition en cochant "afficher rang sur bulletins" (ainsi, on peut afficher le classement en groupes de TD mais pas en groupe de TP, si ce sont deux partitions).
<li>Dans chaque partition, un nombre de groupes quelconque peuvent
être créés (suivre le lien "répartir").
<li>On peut faire afficher le classement de l'étudiant dans son
groupe d'une partition en cochant "afficher rang sur bulletins"
(ainsi, on peut afficher le classement en groupes de TD mais pas en
groupe de TP, si ce sont deux partitions).
</li>
<li>Décocher "afficher sur noms groupes" pour ne pas que cette partition
apparaisse dans les noms de groupes
</li>
<li>Décocher "afficher sur noms groupes" pour ne pas que cette partition apparaisse dans les noms de groupes
</li>
</ul>
</div>
"""
@ -1077,7 +1099,7 @@ def partition_delete(partition_id, force=False, redirect=1, dialog_confirmed=Fal
"""
% (partition["partition_name"], grnames),
dest_url="",
cancel_url="editPartitionForm?formsemestre_id=%s" % formsemestre_id,
cancel_url="edit_partition_form?formsemestre_id=%s" % formsemestre_id,
parameters={"redirect": redirect, "partition_id": partition_id},
)
@ -1091,7 +1113,7 @@ def partition_delete(partition_id, force=False, redirect=1, dialog_confirmed=Fal
# redirect to partition edit page:
if redirect:
return flask.redirect(
"editPartitionForm?formsemestre_id=" + str(formsemestre_id)
"edit_partition_form?formsemestre_id=" + str(formsemestre_id)
)
@ -1148,7 +1170,7 @@ def partition_move(partition_id, after=0, redirect=1):
# redirect to partition edit page:
if redirect:
return flask.redirect(
"editPartitionForm?formsemestre_id=" + str(formsemestre_id)
"edit_partition_form?formsemestre_id=" + str(formsemestre_id)
)
@ -1188,7 +1210,7 @@ def partition_rename(partition_id):
)
elif tf[0] == -1:
return flask.redirect(
"editPartitionForm?formsemestre_id=" + str(formsemestre_id)
"edit_partition_form?formsemestre_id=" + str(formsemestre_id)
)
else:
# form submission
@ -1229,7 +1251,7 @@ def partition_set_name(partition_id, partition_name, redirect=1):
# redirect to partition edit page:
if redirect:
return flask.redirect(
"editPartitionForm?formsemestre_id=" + str(formsemestre_id)
"edit_partition_form?formsemestre_id=" + str(formsemestre_id)
)

View File

@ -54,6 +54,7 @@ from app.decorators import (
from app.models.etudiants import Identite
from app.models.etudiants import make_etud_args
from app.models.events import ScolarNews
from app.models.formsemestre import FormSemestre
from app.views import scolar_bp as bp
from app.views import ScoData
@ -860,8 +861,8 @@ sco_publish(
)
sco_publish(
"/editPartitionForm",
sco_groups.editPartitionForm,
"/edit_partition_form",
sco_groups.edit_partition_form,
Permission.ScoView,
methods=["GET", "POST"],
)
@ -904,21 +905,37 @@ sco_publish(
sco_publish(
"/partition_create",
sco_groups.partition_create,
Permission.ScoView,
Permission.ScoView, # controle d'access ad-hoc
methods=["GET", "POST"],
)
# @bp.route("/partition_create", methods=["GET", "POST"])
# @scodoc
# @permission_required(Permission.ScoView)
# @scodoc7func
# def partition_create(
#
# formsemestre_id,
# partition_name="",
# default=False,
# numero=None,
# redirect=1):
# return sco_groups.partition_create( formsemestre_id,
@bp.route("/create_partition_parcours", methods=["GET", "POST"])
@scodoc
@permission_required(Permission.ScoView)
@scodoc7func
def create_partition_parcours(formsemestre_id):
"""Création d'une partitions nommée "Parcours" avec un groupe par parcours."""
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
if "Parcours" in (p.partition_name for p in formsemestre.partitions):
flash("""Partition "Parcours" déjà existante""")
else:
partition_id = sco_groups.partition_create(
formsemestre_id, partition_name="Parcours", redirect=False
)
n = 0
for parcour in formsemestre.parcours:
if parcour.code:
_ = sco_groups.create_group(partition_id, group_name=parcour.code)
n += 1
flash(f"Partition Parcours créée avec {n} groupes.")
return flask.redirect(
url_for(
"scolar.edit_partition_form",
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id,
)
)
sco_publish("/etud_info_html", sco_page_etud.etud_info_html, Permission.ScoView)