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

View File

@ -881,7 +881,7 @@ def partition_create(
if redirect: if redirect:
return flask.redirect( return flask.redirect(
url_for( url_for(
"scolar.editPartitionForm", "scolar.edit_partition_form",
scodoc_dept=g.scodoc_dept, scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id, formsemestre_id=formsemestre_id,
) )
@ -900,11 +900,12 @@ def get_arrow_icons_tags():
return arrow_up, arrow_down, arrow_none return arrow_up, arrow_down, arrow_none
def editPartitionForm(formsemestre_id=None): def edit_partition_form(formsemestre_id=None):
"""Form to create/suppress partitions""" """Form to create/suppress partitions"""
# ad-hoc form # ad-hoc form
if not sco_permissions_check.can_change_groups(formsemestre_id): if not sco_permissions_check.can_change_groups(formsemestre_id):
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 !")
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
partitions = get_partitions_list(formsemestre_id) partitions = get_partitions_list(formsemestre_id)
arrow_up, arrow_down, arrow_none = get_arrow_icons_tags() arrow_up, arrow_down, arrow_none = get_arrow_icons_tags()
suppricon = scu.icontag( suppricon = scu.icontag(
@ -914,7 +915,7 @@ def editPartitionForm(formsemestre_id=None):
H = [ H = [
html_sco_header.sco_header( html_sco_header.sco_header(
page_title="Partitions...", page_title="Partitions...",
javascripts=["js/editPartitionForm.js"], javascripts=["js/edit_partition_form.js"],
), ),
# limite à SHORT_STR_LEN # limite à SHORT_STR_LEN
r"""<script type="text/javascript"> r"""<script type="text/javascript">
@ -1000,28 +1001,49 @@ def editPartitionForm(formsemestre_id=None):
# #
H.append("</tr>") H.append("</tr>")
H.append("</table>") H.append("</table>")
H.append('<div class="form_rename_partition">')
H.append( 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( 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( H.append(
"""<div class="help"> """<div class="help">
<p>Les partitions sont des découpages de l'ensemble des étudiants. <p>Les partitions sont des découpages de l'ensemble des étudiants.
Par exemple, les "groupes de TD" sont une partition. Par exemple, les "groupes de TD" sont une partition.
On peut créer autant de partitions que nécessaire. On peut créer autant de partitions que nécessaire.
</p> </p>
<ul> <ul>
<li>Dans chaque partition, un nombre de groupes quelconque peuvent être créés (suivre le lien "répartir"). <li>Dans chaque partition, un nombre de groupes quelconque peuvent
<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). ê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>
<li>Décocher "afficher sur noms groupes" pour ne pas que cette partition apparaisse dans les noms de groupes
</li>
</ul> </ul>
</div> </div>
""" """
@ -1077,7 +1099,7 @@ def partition_delete(partition_id, force=False, redirect=1, dialog_confirmed=Fal
""" """
% (partition["partition_name"], grnames), % (partition["partition_name"], grnames),
dest_url="", 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}, 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: # redirect to partition edit page:
if redirect: if redirect:
return flask.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: # redirect to partition edit page:
if redirect: if redirect:
return flask.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: elif tf[0] == -1:
return flask.redirect( return flask.redirect(
"editPartitionForm?formsemestre_id=" + str(formsemestre_id) "edit_partition_form?formsemestre_id=" + str(formsemestre_id)
) )
else: else:
# form submission # form submission
@ -1229,7 +1251,7 @@ def partition_set_name(partition_id, partition_name, redirect=1):
# redirect to partition edit page: # redirect to partition edit page:
if redirect: if redirect:
return flask.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 Identite
from app.models.etudiants import make_etud_args from app.models.etudiants import make_etud_args
from app.models.events import ScolarNews from app.models.events import ScolarNews
from app.models.formsemestre import FormSemestre
from app.views import scolar_bp as bp from app.views import scolar_bp as bp
from app.views import ScoData from app.views import ScoData
@ -860,8 +861,8 @@ sco_publish(
) )
sco_publish( sco_publish(
"/editPartitionForm", "/edit_partition_form",
sco_groups.editPartitionForm, sco_groups.edit_partition_form,
Permission.ScoView, Permission.ScoView,
methods=["GET", "POST"], methods=["GET", "POST"],
) )
@ -904,21 +905,37 @@ sco_publish(
sco_publish( sco_publish(
"/partition_create", "/partition_create",
sco_groups.partition_create, sco_groups.partition_create,
Permission.ScoView, Permission.ScoView, # controle d'access ad-hoc
methods=["GET", "POST"], methods=["GET", "POST"],
) )
# @bp.route("/partition_create", methods=["GET", "POST"])
# @scodoc
# @permission_required(Permission.ScoView) @bp.route("/create_partition_parcours", methods=["GET", "POST"])
# @scodoc7func @scodoc
# def partition_create( @permission_required(Permission.ScoView)
# @scodoc7func
# formsemestre_id, def create_partition_parcours(formsemestre_id):
# partition_name="", """Création d'une partitions nommée "Parcours" avec un groupe par parcours."""
# default=False, formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
# numero=None, if "Parcours" in (p.partition_name for p in formsemestre.partitions):
# redirect=1): flash("""Partition "Parcours" déjà existante""")
# return sco_groups.partition_create( formsemestre_id, 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) sco_publish("/etud_info_html", sco_page_etud.etud_info_html, Permission.ScoView)