From b53969dbddd964878cea7c2858cafca68ce2ea4a Mon Sep 17 00:00:00 2001
From: Emmanuel Viennet <emmanuel.viennet@gmail.com>
Date: Tue, 18 Jan 2022 22:01:30 +0100
Subject: [PATCH] =?UTF-8?q?Option=20pour=20faire=20passer=20les=20=C3=A9tu?=
 =?UTF-8?q?diants=20m=C3=AAme=20sans=20d=C3=A9cision=20de=20jury?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/scodoc/sco_inscr_passage.py | 33 ++++++++++++++++++++++++++-------
 1 file changed, 26 insertions(+), 7 deletions(-)

diff --git a/app/scodoc/sco_inscr_passage.py b/app/scodoc/sco_inscr_passage.py
index ab27ecdae..7a60b67ae 100644
--- a/app/scodoc/sco_inscr_passage.py
+++ b/app/scodoc/sco_inscr_passage.py
@@ -49,9 +49,11 @@ from app.scodoc import sco_etud
 from app.scodoc.sco_exceptions import ScoValueError
 
 
-def list_authorized_etuds_by_sem(sem, delai=274):
+def list_authorized_etuds_by_sem(sem, delai=274, ignore_jury=False):
     """Liste des etudiants autorisés à s'inscrire dans sem.
     delai = nb de jours max entre la date de l'autorisation et celle de debut du semestre cible.
+    ignore_jury: si vrai, considère tous les étudiants comem autorisés, même
+    s'ils n'ont pas de décision de jury.
     """
     src_sems = list_source_sems(sem, delai=delai)
     inscrits = list_inscrits(sem["formsemestre_id"])
@@ -59,7 +61,12 @@ def list_authorized_etuds_by_sem(sem, delai=274):
     candidats = {}  # etudid : etud (tous les etudiants candidats)
     nb = 0  # debug
     for src in src_sems:
-        liste = list_etuds_from_sem(src, sem)
+        if ignore_jury:
+            # liste de tous les inscrits au semestre (sans dems)
+            liste = list_inscrits(src["formsemestre_id"]).values()
+        else:
+            # liste des étudiants autorisés par le jury à s'inscrire ici
+            liste = list_etuds_from_sem(src, sem)
         liste_filtree = []
         for e in liste:
             # Filtre ceux qui se sont déjà inscrit dans un semestre APRES le semestre src
@@ -125,7 +132,7 @@ def list_inscrits(formsemestre_id, with_dems=False):
     return inscr
 
 
-def list_etuds_from_sem(src, dst):
+def list_etuds_from_sem(src, dst) -> list[dict]:
     """Liste des etudiants du semestre src qui sont autorisés à passer dans le semestre dst."""
     target = dst["semestre_id"]
     dpv = sco_pvjury.dict_pvjury(src["formsemestre_id"])
@@ -224,7 +231,7 @@ def do_desinscrit(sem, etudids):
         )
 
 
-def list_source_sems(sem, delai=None):
+def list_source_sems(sem, delai=None) -> list[dict]:
     """Liste des semestres sources
     sem est le semestre destination
     """
@@ -265,6 +272,7 @@ def formsemestre_inscr_passage(
     inscrit_groupes=False,
     submitted=False,
     dialog_confirmed=False,
+    ignore_jury=False,
 ):
     """Form. pour inscription des etudiants d'un semestre dans un autre
     (donné par formsemestre_id).
@@ -280,6 +288,7 @@ def formsemestre_inscr_passage(
 
     """
     inscrit_groupes = int(inscrit_groupes)
+    ignore_jury = int(ignore_jury)
     sem = sco_formsemestre.get_formsemestre(formsemestre_id)
     # -- check lock
     if not sem["etat"]:
@@ -295,7 +304,9 @@ def formsemestre_inscr_passage(
     elif etuds and isinstance(etuds[0], str):
         etuds = [int(x) for x in etuds]
 
-    auth_etuds_by_sem, inscrits, candidats = list_authorized_etuds_by_sem(sem)
+    auth_etuds_by_sem, inscrits, candidats = list_authorized_etuds_by_sem(
+        sem, ignore_jury=ignore_jury
+    )
     etuds_set = set(etuds)
     candidats_set = set(candidats)
     inscrits_set = set(inscrits)
@@ -323,6 +334,7 @@ def formsemestre_inscr_passage(
             candidats_non_inscrits,
             inscrits_ailleurs,
             inscrit_groupes=inscrit_groupes,
+            ignore_jury=ignore_jury,
         )
     else:
         if not dialog_confirmed:
@@ -411,18 +423,23 @@ def build_page(
     candidats_non_inscrits,
     inscrits_ailleurs,
     inscrit_groupes=False,
+    ignore_jury=False,
 ):
     inscrit_groupes = int(inscrit_groupes)
+    ignore_jury = int(ignore_jury)
     if inscrit_groupes:
         inscrit_groupes_checked = " checked"
     else:
         inscrit_groupes_checked = ""
-
+    if ignore_jury:
+        ignore_jury_checked = " checked"
+    else:
+        ignore_jury_checked = ""
     H = [
         html_sco_header.html_sem_header(
             "Passages dans le semestre", sem, with_page_header=False
         ),
-        """<form method="post" action="%s">""" % request.base_url,
+        """<form name="f" method="post" action="%s">""" % request.base_url,
         """<input type="hidden" name="formsemestre_id" value="%(formsemestre_id)s"/>
     <input type="submit" name="submitted" value="Appliquer les modifications"/>
     &nbsp;<a href="#help">aide</a>
@@ -430,6 +447,8 @@ def build_page(
         % sem,  # "
         """<input name="inscrit_groupes" type="checkbox" value="1" %s>inscrire aux mêmes groupes</input>"""
         % inscrit_groupes_checked,
+        """<input name="ignore_jury" type="checkbox" value="1" onchange="document.f.submit()" %s>inclure tous les étudiants (même sans décision de jury)</input>"""
+        % ignore_jury_checked,
         """<div class="pas_recap">Actuellement <span id="nbinscrits">%s</span> inscrits
         et %d candidats supplémentaires
         </div>"""
-- 
GitLab