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.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)
# 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)

View File

@ -34,7 +34,7 @@ from flask import flash, url_for, g, request
from app.comp import res_sem
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.groups import GroupDescr
import app.scodoc.sco_utils as scu
@ -371,47 +371,44 @@ def formsemestre_inscription_with_modules(
Formulaire avec choix groupe.
"""
log(
"formsemestre_inscription_with_modules: etudid=%s formsemestre_id=%s group_ids=%s"
% (etudid, formsemestre_id, group_ids)
f"""formsemestre_inscription_with_modules: etudid={etudid} formsemestre_id={
formsemestre_id} group_ids={group_ids}"""
)
if multiple_ok:
multiple_ok = int(multiple_ok)
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
formsemestre: FormSemestre = FormSemestre.query.get_or_404(formsemestre_id)
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 = [
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 ?
ins = do_formsemestre_inscription_list({"etudid": etudid})
already = False
for i in ins:
if i["formsemestre_id"] == formsemestre_id:
already = True
if already:
inscr = FormSemestreInscription.query.filter_by(
etudid=etud.id, formsemestre_id=formsemestre.id
).first()
if inscr is not None:
H.append(
'<p class="warning">%s est déjà inscrit dans le semestre %s</p>'
% (etud["nomprenom"], sem["titremois"])
)
H.append(
"""<ul>
<li><a href="%s">retour à la fiche de %s</a></li>
<li><a href="%s">retour au tableau de bord de %s</a></li>
</ul>"""
% (
url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid),
etud["nomprenom"],
url_for(
f"""
<p class="warning">{etud.nomprenom} est déjà inscrit
dans le semestre {formsemestre.titre_mois()}
</p>
<ul>
<li><a href="{url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid)
}" class="stdlink">retour à la fiche de {etud.nomprenom}</a>
</li>
<li><a href="{url_for(
"notes.formsemestre_status",
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id,
),
sem["titremois"],
)}" class="stdlink">retour au tableau de bord de {formsemestre.titre_mois()}</a></li>
</ul>
"""
)
)
return "\n".join(H) + F
return "\n".join(H) + footer
# Check 2: déjà inscrit dans un semestre recouvrant les même dates ?
# Informe et propose dé-inscriptions
others = est_inscrit_ailleurs(etudid, formsemestre_id)
@ -419,26 +416,37 @@ def formsemestre_inscription_with_modules(
l = []
for s in others:
l.append(
'<a class="discretelink" href="formsemestre_status?formsemestre_id=%(formsemestre_id)s">%(titremois)s</a>'
% s
f"""<a class="discretelink" href="{
url_for("notes.formsemestre_status",
scodoc_dept=g.scodoc_dept, formsemestre_id=s['formsemestre_id'])
}">{s['titremois']}</a>"""
)
H.append(
'<p class="warning">Attention: %s est déjà inscrit sur la même période dans: %s.</p>'
% (etud["nomprenom"], ", ".join(l))
f"""<p class="warning">Attention: {etud.nomprenom} est déjà inscrit sur
la même période dans: {", ".join(l)}.
</p>"""
)
H.append("<ul>")
for s in others:
H.append(
'<li><a href="formsemestre_desinscription?formsemestre_id=%s&etudid=%s">déinscrire de %s</li>'
% (s["formsemestre_id"], etudid, s["titreannee"])
f"""<li><a href="{
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(
"""<p><a href="formsemestre_inscription_with_modules?etudid=%s&formsemestre_id=%s&multiple_ok=1&%s">Continuer quand même l'inscription</a></p>"""
% (etudid, formsemestre_id, sco_groups.make_query_groups(group_ids))
f"""<p><a href="{ url_for( "notes.formsemestre_inscription_with_modules",
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:
# OK, inscription
@ -455,11 +463,10 @@ def formsemestre_inscription_with_modules(
else:
# formulaire choix groupe
H.append(
"""<form method="GET" name="groupesel" action="%s">
<input type="hidden" name="etudid" value="%s">
<input type="hidden" name="formsemestre_id" value="%s">
f"""<form method="GET" name="groupesel" action="{request.base_url}">
<input type="hidden" name="etudid" value="{etudid}">
<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))
@ -472,7 +479,7 @@ def formsemestre_inscription_with_modules(
</form>
"""
)
return "\n".join(H) + F
return "\n".join(H) + footer
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)
nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre)
F = html_sco_header.sco_footer()
footer = html_sco_header.sco_footer()
H = [
html_sco_header.sco_header()
+ "<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:
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>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>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>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:
return flask.redirect(
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)
)
return "\n".join(H) + F
return "\n".join(H) + footer
H.append("<h3>Confirmer les modifications:</h3>")
if a_desinscrire:
@ -704,7 +718,7 @@ function chkbx_select(field_id, state) {
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(