diff --git a/app/scodoc/sco_inscr_passage.py b/app/scodoc/sco_inscr_passage.py index d9a562f46d18093a29ba5bf27a8b56230a05ad5d..58b5a0d923ae9364ecd0d02bfd8fa839f3f05bcf 100644 --- a/app/scodoc/sco_inscr_passage.py +++ b/app/scodoc/sco_inscr_passage.py @@ -39,21 +39,22 @@ from app import log from app.models import FormSemestre from app.scodoc.gen_tables import GenTable 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_preferences -from app.scodoc import sco_pvjury +from app.scodoc import sco_etud +from app.scodoc import sco_formations from app.scodoc import sco_formsemestre from app.scodoc import sco_formsemestre_inscriptions -from app.scodoc import sco_formations 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 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 + ignore_jury: si vrai, considère tous les étudiants comme autorisés, même s'ils n'ont pas de décision de jury. """ src_sems = list_source_sems(sem, delai=delai) @@ -276,8 +277,8 @@ def formsemestre_inscr_passage( submitted=False, dialog_confirmed=False, ignore_jury=False, -): - """Form. pour inscription des etudiants d'un semestre dans un autre +) -> str: + """Page Form. pour inscription des etudiants d'un semestre dans un autre (donné par formsemestre_id). Permet de selectionner parmi les etudiants autorisés à s'inscrire. Principe: @@ -285,8 +286,8 @@ def formsemestre_inscr_passage( - 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 - on peut choisir les groupes TD, TP, TA - - seuls les etudiants non inscrits changent (de groupe) - - les etudiants inscrit qui se trouvent décochés sont désinscrits + - seuls les étudiants non inscrits changent (de groupe) + - les étudiants inscrit qui se trouvent décochés sont désinscrits - 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 else: 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: - H += build_page( + H += _build_page( sem, auth_etuds_by_sem, inscrits, @@ -343,7 +342,7 @@ def formsemestre_inscr_passage( if not dialog_confirmed: # Confirmation 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): H.append("<li>%(nomprenom)s</li>" % etud) H.append("</ol>") @@ -354,7 +353,7 @@ def formsemestre_inscr_passage( H.append('<li class="inscrailleurs">%(nomprenom)s</li>' % etud) H.append("</ul>") if a_desinscrire: - H.append("<h3>Etudiants à désinscrire</h3><ol>") + H.append("<h3>Étudiants à désinscrire</h3><ol>") for etudid in a_desinscrire: H.append( '<li class="desinscription">%(nomprenom)s</li>' @@ -384,21 +383,29 @@ def formsemestre_inscr_passage( ) ) else: - # Inscription des étudiants au nouveau semestre: - do_inscrit( - sem, - a_inscrire, - inscrit_groupes=inscrit_groupes, - ) - - # Desincriptions: - do_desinscrit(sem, a_desinscrire) + with sco_cache.DeferredSemCacheManager(): + # Inscription des étudiants au nouveau semestre: + do_inscrit( + sem, + a_inscrire, + inscrit_groupes=inscrit_groupes, + ) + # Désinscriptions: + do_desinscrit(sem, a_desinscrire) H.append( - """<h3>Opération effectuée</h3> - <ul><li><a class="stdlink" href="formsemestre_inscr_passage?formsemestre_id=%s">Continuer les inscriptions</a></li> - <li><a class="stdlink" href="formsemestre_status?formsemestre_id=%s">Tableau de bord du semestre</a></li>""" - % (formsemestre_id, formsemestre_id) + f"""<h3>Opération effectuée</h3> + <ul> + <li><a class="stdlink" href="{ + 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) if ( @@ -410,7 +417,7 @@ def formsemestre_inscr_passage( H.append( f"""<li><a class="stdlink" href="{ url_for("scolar.affect_groups", - scodoc_dept=g.scodoc_dept, partition_id=partition["partition_id"]) + scodoc_dept=g.scodoc_dept, partition_id=partition["partition_id"]) }">Répartir les groupes de {partition["partition_name"]}</a></li> """ ) @@ -420,7 +427,7 @@ def formsemestre_inscr_passage( return "\n".join(H) -def build_page( +def _build_page( sem, auth_etuds_by_sem, inscrits, @@ -429,6 +436,7 @@ def build_page( inscrit_groupes=False, ignore_jury=False, ): + formsemestre: FormSemestre = FormSemestre.query.get(sem["formsemestre_id"]) inscrit_groupes = int(inscrit_groupes) ignore_jury = int(ignore_jury) if inscrit_groupes: @@ -443,27 +451,36 @@ def build_page( html_sco_header.html_sem_header( "Passages dans le semestre", with_page_header=False ), - """<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"/> - <a href="#help">aide</a> - """ - % 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>""" - % (len(inscrits), len(candidats_non_inscrits)), - etuds_select_boxes(auth_etuds_by_sem, inscrits_ailleurs), - """<p/><input type="submit" name="submitted" value="Appliquer les modifications"/>""", - formsemestre_inscr_passage_help(sem), - """</form>""", + f"""<form name="f" method="post" action="{request.base_url}"> + + <input type="hidden" name="formsemestre_id" value="{sem['formsemestre_id']}"/> + + <input type="submit" name="submitted" value="Appliquer les modifications"/> + <a href="#help">aide</a> + + <input name="inscrit_groupes" type="checkbox" value="1" + {inscrit_groupes_checked}>inscrire aux mêmes groupes</input> + + <input name="ignore_jury" type="checkbox" value="1" onchange="document.f.submit()" + {ignore_jury_checked}>inclure tous les étudiants (même sans décision de jury)</input> + + <div class="pas_recap">Actuellement <span id="nbinscrits">{len(inscrits)}</span> inscrits + et {len(candidats_non_inscrits)} candidats supplémentaires + </div> + + <div>{scu.EMO_WARNING} <em>Seuls les semestres dont la date de fin est antérieure à la date de début + de ce semestre ({formsemestre.date_debut.strftime("%d/%m/%Y")}) sont pris en compte.</em></div> + {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 = [] for formsemestre_id in auth_etuds_by_sem.keys(): 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>""" ) 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>""") return H