formsemestre_inscription_with_modules: modernise code

This commit is contained in:
Emmanuel Viennet 2022-09-25 16:30:02 +02:00
parent b44cd7a575
commit e7257bd18e
2 changed files with 65 additions and 51 deletions

View File

@ -304,7 +304,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
self.admis = (self.nb_validables == self.nb_competences) and ( self.admis = (self.nb_validables == self.nb_competences) and (
self.inscription_etat == scu.INSCRIT self.inscription_etat == scu.INSCRIT
) )
"vrai si l'année est réussie, tous niveaux validables" "vrai si l'année est réussie, tous niveaux validables ou validés par le jury"
self.valide_moitie_rcue = self.nb_validables > (self.nb_competences // 2) self.valide_moitie_rcue = self.nb_validables > (self.nb_competences // 2)
# Peut passer si plus de la moitié validables et tous > 8 # Peut passer si plus de la moitié validables et tous > 8
self.passage_de_droit = self.valide_moitie_rcue and (self.nb_rcues_under_8 == 0) self.passage_de_droit = self.valide_moitie_rcue and (self.nb_rcues_under_8 == 0)

View File

@ -34,7 +34,7 @@ from flask import flash, url_for, g, request
from app.comp import res_sem from app.comp import res_sem
from app.comp.res_compat import NotesTableCompat from app.comp.res_compat import NotesTableCompat
from app.models import FormSemestre from app.models import FormSemestre, FormSemestreInscription
from app.models.etudiants import Identite from app.models.etudiants import Identite
from app.models.groups import GroupDescr from app.models.groups import GroupDescr
import app.scodoc.sco_utils as scu import app.scodoc.sco_utils as scu
@ -371,47 +371,44 @@ def formsemestre_inscription_with_modules(
Formulaire avec choix groupe. Formulaire avec choix groupe.
""" """
log( log(
"formsemestre_inscription_with_modules: etudid=%s formsemestre_id=%s group_ids=%s" f"""formsemestre_inscription_with_modules: etudid={etudid} formsemestre_id={
% (etudid, formsemestre_id, group_ids) formsemestre_id} group_ids={group_ids}"""
) )
if multiple_ok: if multiple_ok:
multiple_ok = int(multiple_ok) multiple_ok = int(multiple_ok)
sem = sco_formsemestre.get_formsemestre(formsemestre_id) formsemestre: FormSemestre = FormSemestre.query.get_or_404(formsemestre_id)
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0] etud: Identite = Identite.query.get_or_404(etudid)
if etud.dept_id != formsemestre.dept_id:
raise ScoValueError("l'étudiant n'est pas dans ce département")
H = [ H = [
html_sco_header.html_sem_header( html_sco_header.html_sem_header(
"Inscription de %s dans ce semestre" % etud["nomprenom"], f"Inscription de {etud.nomprenom} dans ce semestre",
) )
] ]
F = html_sco_header.sco_footer() footer = html_sco_header.sco_footer()
# Check 1: déjà inscrit ici ? # Check 1: déjà inscrit ici ?
ins = do_formsemestre_inscription_list({"etudid": etudid}) inscr = FormSemestreInscription.query.filter_by(
already = False etudid=etud.id, formsemestre_id=formsemestre.id
for i in ins: ).first()
if i["formsemestre_id"] == formsemestre_id: if inscr is not None:
already = True
if already:
H.append( H.append(
'<p class="warning">%s est déjà inscrit dans le semestre %s</p>' f"""
% (etud["nomprenom"], sem["titremois"]) <p class="warning">{etud.nomprenom} est déjà inscrit
) dans le semestre {formsemestre.titre_mois()}
H.append( </p>
"""<ul> <ul>
<li><a href="%s">retour à la fiche de %s</a></li> <li><a href="{url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid)
<li><a href="%s">retour au tableau de bord de %s</a></li> }" class="stdlink">retour à la fiche de {etud.nomprenom}</a>
</ul>""" </li>
% ( <li><a href="{url_for(
url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid),
etud["nomprenom"],
url_for(
"notes.formsemestre_status", "notes.formsemestre_status",
scodoc_dept=g.scodoc_dept, scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id, formsemestre_id=formsemestre_id,
), )}" class="stdlink">retour au tableau de bord de {formsemestre.titre_mois()}</a></li>
sem["titremois"], </ul>
) """
) )
return "\n".join(H) + F return "\n".join(H) + footer
# Check 2: déjà inscrit dans un semestre recouvrant les même dates ? # Check 2: déjà inscrit dans un semestre recouvrant les même dates ?
# Informe et propose dé-inscriptions # Informe et propose dé-inscriptions
others = est_inscrit_ailleurs(etudid, formsemestre_id) others = est_inscrit_ailleurs(etudid, formsemestre_id)
@ -419,26 +416,37 @@ def formsemestre_inscription_with_modules(
l = [] l = []
for s in others: for s in others:
l.append( l.append(
'<a class="discretelink" href="formsemestre_status?formsemestre_id=%(formsemestre_id)s">%(titremois)s</a>' f"""<a class="discretelink" href="{
% s url_for("notes.formsemestre_status",
scodoc_dept=g.scodoc_dept, formsemestre_id=s['formsemestre_id'])
}">{s['titremois']}</a>"""
) )
H.append( H.append(
'<p class="warning">Attention: %s est déjà inscrit sur la même période dans: %s.</p>' f"""<p class="warning">Attention: {etud.nomprenom} est déjà inscrit sur
% (etud["nomprenom"], ", ".join(l)) la même période dans: {", ".join(l)}.
</p>"""
) )
H.append("<ul>") H.append("<ul>")
for s in others: for s in others:
H.append( H.append(
'<li><a href="formsemestre_desinscription?formsemestre_id=%s&etudid=%s">déinscrire de %s</li>' f"""<li><a href="{
% (s["formsemestre_id"], etudid, s["titreannee"]) url_for("notes.formsemestre_desinscription", scodoc_dept=g.scodoc_dept,
formsemestre_id=s["formsemestre_id"], etudid=etudid )
}" class="stdlink">désinscrire de {s["titreannee"]}
</li>"""
) )
H.append("</ul>") H.append("</ul>")
H.append( H.append(
"""<p><a href="formsemestre_inscription_with_modules?etudid=%s&formsemestre_id=%s&multiple_ok=1&%s">Continuer quand même l'inscription</a></p>""" f"""<p><a href="{ url_for( "notes.formsemestre_inscription_with_modules",
% (etudid, formsemestre_id, sco_groups.make_query_groups(group_ids)) scodoc_dept=g.scodoc_dept, etudid=etudid, formsemestre_id=formsemestre_id,
multiple_ok=1,
group_ids=group_ids )
}">Continuer quand même l'inscription</a>
</p>"""
# was sco_groups.make_query_groups(group_ids)
) )
return "\n".join(H) + F return "\n".join(H) + footer
# #
if group_ids is not None: if group_ids is not None:
# OK, inscription # OK, inscription
@ -455,11 +463,10 @@ def formsemestre_inscription_with_modules(
else: else:
# formulaire choix groupe # formulaire choix groupe
H.append( H.append(
"""<form method="GET" name="groupesel" action="%s"> f"""<form method="GET" name="groupesel" action="{request.base_url}">
<input type="hidden" name="etudid" value="%s"> <input type="hidden" name="etudid" value="{etudid}">
<input type="hidden" name="formsemestre_id" value="%s"> <input type="hidden" name="formsemestre_id" value="{formsemestre_id}">
""" """
% (request.base_url, etudid, formsemestre_id)
) )
H.append(sco_groups.form_group_choice(formsemestre_id, allow_none=True)) H.append(sco_groups.form_group_choice(formsemestre_id, allow_none=True))
@ -472,7 +479,7 @@ def formsemestre_inscription_with_modules(
</form> </form>
""" """
) )
return "\n".join(H) + F return "\n".join(H) + footer
def formsemestre_inscription_option(etudid, formsemestre_id): def formsemestre_inscription_option(etudid, formsemestre_id):
@ -485,7 +492,7 @@ def formsemestre_inscription_option(etudid, formsemestre_id):
formsemestre = FormSemestre.query.get_or_404(formsemestre_id) formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre) nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre)
F = html_sco_header.sco_footer() footer = html_sco_header.sco_footer()
H = [ H = [
html_sco_header.sco_header() html_sco_header.sco_header()
+ "<h2>Inscription de %s aux modules de %s (%s - %s)</h2>" + "<h2>Inscription de %s aux modules de %s (%s - %s)</h2>"
@ -594,12 +601,19 @@ function chkbx_select(field_id, state) {
) )
if tf[0] == 0: if tf[0] == 0:
H.append( H.append(
"""<p>Voici la liste des modules du semestre choisi.</p><p> """
Les modules cochés sont ceux dans lesquels l'étudiant est inscrit. Vous pouvez l'inscrire ou le désincrire d'un ou plusieurs modules.</p> <p>Voici la liste des modules du semestre choisi.</p>
<p>Attention: cette méthode ne devrait être utilisée que pour les modules <b>optionnels</b> (ou les activités culturelles et sportives) et pour désinscrire les étudiants dispensés (UE validées).</p> <p>
Les modules cochés sont ceux dans lesquels l'étudiant est inscrit.
Vous pouvez l'inscrire ou le désincrire d'un ou plusieurs modules.
</p>
<p>Attention: cette méthode ne devrait être utilisée que pour les modules
<b>optionnels</b> (ou les activités culturelles et sportives) et pour désinscrire
les étudiants dispensés (UE validées).
</p>
""" """
) )
return "\n".join(H) + "\n" + tf[1] + F return "\n".join(H) + "\n" + tf[1] + footer
elif tf[0] == -1: elif tf[0] == -1:
return flask.redirect( return flask.redirect(
url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid) url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid)
@ -645,7 +659,7 @@ function chkbx_select(field_id, state) {
""" """
% url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid) % url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid)
) )
return "\n".join(H) + F return "\n".join(H) + footer
H.append("<h3>Confirmer les modifications:</h3>") H.append("<h3>Confirmer les modifications:</h3>")
if a_desinscrire: if a_desinscrire:
@ -704,7 +718,7 @@ function chkbx_select(field_id, state) {
url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid), url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid),
) )
) )
return "\n".join(H) + F return "\n".join(H) + footer
def do_moduleimpl_incription_options( def do_moduleimpl_incription_options(