Form. passage: # 566

This commit is contained in:
Emmanuel Viennet 2023-01-26 14:29:16 -03:00
parent bf6dfe38d2
commit 8d01135c4c

View File

@ -39,21 +39,22 @@ from app import log
from app.models import FormSemestre 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_cache
from app.scodoc import sco_codes_parcours from app.scodoc import sco_codes_parcours
from app.scodoc import sco_preferences from app.scodoc import sco_etud
from app.scodoc import sco_pvjury from app.scodoc import sco_formations
from app.scodoc import sco_formsemestre from app.scodoc import sco_formsemestre
from app.scodoc import sco_formsemestre_inscriptions from app.scodoc import sco_formsemestre_inscriptions
from app.scodoc import sco_formations
from app.scodoc import sco_groups from app.scodoc import sco_groups
from app.scodoc import sco_etud from app.scodoc import sco_preferences
from app.scodoc import sco_pvjury
from app.scodoc.sco_exceptions import ScoValueError from app.scodoc.sco_exceptions import ScoValueError
def list_authorized_etuds_by_sem(sem, delai=274, ignore_jury=False): def list_authorized_etuds_by_sem(sem, delai=274, ignore_jury=False):
"""Liste des etudiants autorisés à s'inscrire dans sem. """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. 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 ignore_jury: si vrai, considère tous les étudiants comme autorisés, même
s'ils n'ont pas de décision de jury. s'ils n'ont pas de décision de jury.
""" """
src_sems = list_source_sems(sem, delai=delai) src_sems = list_source_sems(sem, delai=delai)
@ -276,8 +277,8 @@ def formsemestre_inscr_passage(
submitted=False, submitted=False,
dialog_confirmed=False, dialog_confirmed=False,
ignore_jury=False, ignore_jury=False,
): ) -> str:
"""Form. pour inscription des etudiants d'un semestre dans un autre """Page Form. pour inscription des etudiants d'un semestre dans un autre
(donné par formsemestre_id). (donné par formsemestre_id).
Permet de selectionner parmi les etudiants autorisés à s'inscrire. Permet de selectionner parmi les etudiants autorisés à s'inscrire.
Principe: Principe:
@ -285,8 +286,8 @@ def formsemestre_inscr_passage(
- afficher chaque semestre "boites" avec cases à cocher - afficher chaque semestre "boites" avec cases à cocher
- si l'étudiant est déjà inscrit, le signaler (gras, nom de groupes): il peut être désinscrit - si l'étudiant est déjà inscrit, le signaler (gras, nom de groupes): il peut être désinscrit
- on peut choisir les groupes TD, TP, TA - on peut choisir les groupes TD, TP, TA
- seuls les etudiants non inscrits changent (de groupe) - seuls les étudiants non inscrits changent (de groupe)
- les etudiants inscrit qui se trouvent décochés sont désinscrits - les étudiants inscrit qui se trouvent décochés sont désinscrits
- Confirmation: indiquer les étudiants inscrits et ceux désinscrits, le total courant. - Confirmation: indiquer les étudiants inscrits et ceux désinscrits, le total courant.
""" """
@ -326,11 +327,9 @@ def formsemestre_inscr_passage(
a_desinscrire = inscrits_set - etuds_set a_desinscrire = inscrits_set - etuds_set
else: else:
a_inscrire = a_desinscrire = [] a_inscrire = a_desinscrire = []
# log('formsemestre_inscr_passage: a_inscrire=%s' % str(a_inscrire) )
# log('formsemestre_inscr_passage: a_desinscrire=%s' % str(a_desinscrire) )
if not submitted: if not submitted:
H += build_page( H += _build_page(
sem, sem,
auth_etuds_by_sem, auth_etuds_by_sem,
inscrits, inscrits,
@ -343,7 +342,7 @@ def formsemestre_inscr_passage(
if not dialog_confirmed: if not dialog_confirmed:
# Confirmation # Confirmation
if a_inscrire: if a_inscrire:
H.append("<h3>Etudiants à inscrire</h3><ol>") H.append("<h3>Étudiants à inscrire</h3><ol>")
for etud in set_to_sorted_etud_list(a_inscrire): for etud in set_to_sorted_etud_list(a_inscrire):
H.append("<li>%(nomprenom)s</li>" % etud) H.append("<li>%(nomprenom)s</li>" % etud)
H.append("</ol>") H.append("</ol>")
@ -354,7 +353,7 @@ def formsemestre_inscr_passage(
H.append('<li class="inscrailleurs">%(nomprenom)s</li>' % etud) H.append('<li class="inscrailleurs">%(nomprenom)s</li>' % etud)
H.append("</ul>") H.append("</ul>")
if a_desinscrire: if a_desinscrire:
H.append("<h3>Etudiants à désinscrire</h3><ol>") H.append("<h3>Étudiants à désinscrire</h3><ol>")
for etudid in a_desinscrire: for etudid in a_desinscrire:
H.append( H.append(
'<li class="desinscription">%(nomprenom)s</li>' '<li class="desinscription">%(nomprenom)s</li>'
@ -384,21 +383,29 @@ def formsemestre_inscr_passage(
) )
) )
else: else:
with sco_cache.DeferredSemCacheManager():
# Inscription des étudiants au nouveau semestre: # Inscription des étudiants au nouveau semestre:
do_inscrit( do_inscrit(
sem, sem,
a_inscrire, a_inscrire,
inscrit_groupes=inscrit_groupes, inscrit_groupes=inscrit_groupes,
) )
# Désinscriptions:
# Desincriptions:
do_desinscrit(sem, a_desinscrire) do_desinscrit(sem, a_desinscrire)
H.append( H.append(
"""<h3>Opération effectuée</h3> f"""<h3>Opération effectuée</h3>
<ul><li><a class="stdlink" href="formsemestre_inscr_passage?formsemestre_id=%s">Continuer les inscriptions</a></li> <ul>
<li><a class="stdlink" href="formsemestre_status?formsemestre_id=%s">Tableau de bord du semestre</a></li>""" <li><a class="stdlink" href="{
% (formsemestre_id, formsemestre_id) url_for("notes.formsemestre_inscr_passage",
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id)
}">Continuer les inscriptions</a>
</li>
<li><a class="stdlink" href="{
url_for("notes.formsemestre_status",
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre_id)
}">Tableau de bord du semestre</a>
</li>"""
) )
partition = sco_groups.formsemestre_get_main_partition(formsemestre_id) partition = sco_groups.formsemestre_get_main_partition(formsemestre_id)
if ( if (
@ -420,7 +427,7 @@ def formsemestre_inscr_passage(
return "\n".join(H) return "\n".join(H)
def build_page( def _build_page(
sem, sem,
auth_etuds_by_sem, auth_etuds_by_sem,
inscrits, inscrits,
@ -429,6 +436,7 @@ def build_page(
inscrit_groupes=False, inscrit_groupes=False,
ignore_jury=False, ignore_jury=False,
): ):
formsemestre: FormSemestre = FormSemestre.query.get(sem["formsemestre_id"])
inscrit_groupes = int(inscrit_groupes) inscrit_groupes = int(inscrit_groupes)
ignore_jury = int(ignore_jury) ignore_jury = int(ignore_jury)
if inscrit_groupes: if inscrit_groupes:
@ -443,27 +451,36 @@ def build_page(
html_sco_header.html_sem_header( html_sco_header.html_sem_header(
"Passages dans le semestre", with_page_header=False "Passages dans le semestre", with_page_header=False
), ),
"""<form name="f" method="post" action="%s">""" % request.base_url, f"""<form name="f" method="post" action="{request.base_url}">
"""<input type="hidden" name="formsemestre_id" value="%(formsemestre_id)s"/>
<input type="hidden" name="formsemestre_id" value="{sem['formsemestre_id']}"/>
<input type="submit" name="submitted" value="Appliquer les modifications"/> <input type="submit" name="submitted" value="Appliquer les modifications"/>
&nbsp;<a href="#help">aide</a> &nbsp;<a href="#help">aide</a>
"""
% sem, # " <input name="inscrit_groupes" type="checkbox" value="1"
"""<input name="inscrit_groupes" type="checkbox" value="1" %s>inscrire aux mêmes groupes</input>""" {inscrit_groupes_checked}>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>""" <input name="ignore_jury" type="checkbox" value="1" onchange="document.f.submit()"
% ignore_jury_checked, {ignore_jury_checked}>inclure tous les étudiants (même sans décision de jury)</input>
"""<div class="pas_recap">Actuellement <span id="nbinscrits">%s</span> inscrits
et %d candidats supplémentaires <div class="pas_recap">Actuellement <span id="nbinscrits">{len(inscrits)}</span> inscrits
</div>""" et {len(candidats_non_inscrits)} candidats supplémentaires
% (len(inscrits), len(candidats_non_inscrits)), </div>
etuds_select_boxes(auth_etuds_by_sem, inscrits_ailleurs),
"""<p/><input type="submit" name="submitted" value="Appliquer les modifications"/>""", <div>{scu.EMO_WARNING} <em>Seuls les semestres dont la date de fin est antérieure à la date de début
formsemestre_inscr_passage_help(sem), de ce semestre ({formsemestre.date_debut.strftime("%d/%m/%Y")}) sont pris en compte.</em></div>
"""</form>""", {etuds_select_boxes(auth_etuds_by_sem, inscrits_ailleurs)}
<input type="submit" name="submitted" value="Appliquer les modifications"/>
{formsemestre_inscr_passage_help(sem)}
</form>
""",
] ]
# Semestres sans etudiants autorisés # Semestres sans étudiants autorisés
empty_sems = [] empty_sems = []
for formsemestre_id in auth_etuds_by_sem.keys(): for formsemestre_id in auth_etuds_by_sem.keys():
if not auth_etuds_by_sem[formsemestre_id]["etuds"]: if not auth_etuds_by_sem[formsemestre_id]["etuds"]:
@ -473,7 +490,10 @@ def build_page(
"""<div class="pas_empty_sems"><h3>Autres semestres sans candidats :</h3><ul>""" """<div class="pas_empty_sems"><h3>Autres semestres sans candidats :</h3><ul>"""
) )
for infos in empty_sems: for infos in empty_sems:
H.append("""<li><a href="%(title_target)s">%(title)s</a></li>""" % infos) H.append(
"""<li><a class="stdlink" href="%(title_target)s">%(title)s</a></li>"""
% infos
)
H.append("""</ul></div>""") H.append("""</ul></div>""")
return H return H