Création semestre extérieur: corrige et modernise.

This commit is contained in:
ilona 2024-10-21 13:03:07 +02:00
parent bdf47d9240
commit 1f0a280dcf

View File

@ -56,34 +56,34 @@ from app.scodoc import sco_formsemestre_validation
from app.scodoc.codes_cursus import UE_SPORT from app.scodoc.codes_cursus import UE_SPORT
def formsemestre_ext_create(etudid, sem_params): def formsemestre_ext_create(etud: Identite | None, sem_params: dict) -> FormSemestre:
"""Crée un formsemestre exterieur et y inscrit l'étudiant. """Crée un formsemestre exterieur et y inscrit l'étudiant.
sem_params: dict nécessaire à la création du formsemestre sem_params: dict nécessaire à la création du formsemestre
""" """
# Check args # Check args
_ = Formation.query.get_or_404(sem_params["formation_id"]) _ = Formation.query.get_or_404(sem_params["formation_id"])
if etudid:
_ = Identite.get_etud(etudid)
# Create formsemestre # Create formsemestre
sem_params["modalite"] = "EXT" sem_params["modalite"] = "EXT"
sem_params["etapes"] = None sem_params["etapes"] = None
sem_params["responsables"] = [current_user.id] sem_params["responsables"] = [current_user.id]
formsemestre_id = sco_formsemestre.do_formsemestre_create(sem_params, silent=True) formsemestre = FormSemestre.create_formsemestre(sem_params, silent=True)
# nota: le semestre est créé vide: pas de modules # nota: le semestre est créé vide: pas de modules
# Inscription au semestre # Inscription au semestre
if etud:
sco_formsemestre_inscriptions.do_formsemestre_inscription_with_modules( sco_formsemestre_inscriptions.do_formsemestre_inscription_with_modules(
formsemestre_id, formsemestre.id,
etudid, etud.id,
method="formsemestre_ext_create", method="formsemestre_ext_create",
) )
return formsemestre_id return formsemestre
def formsemestre_ext_create_form(etudid, formsemestre_id): def formsemestre_ext_create_form(etudid, formsemestre_id):
"""Formulaire création/inscription à un semestre extérieur""" """Formulaire création/inscription à un semestre extérieur"""
etud = Identite.get_etud(etudid) etud = Identite.get_etud(etudid)
formsemestre = FormSemestre.get_formsemestre(formsemestre_id)
H = [ H = [
f"""<h2>Enregistrement d'une inscription antérieure dans un autre f"""<h2>Enregistrement d'une inscription antérieure dans un autre
établissement</h2> établissement</h2>
@ -96,27 +96,26 @@ def formsemestre_ext_create_form(etudid, formsemestre_id):
Notez que si un semestre extérieur similaire a déjà été créé pour un autre Notez que si un semestre extérieur similaire a déjà été créé pour un autre
étudiant, il est préférable d'utiliser la fonction étudiant, il est préférable d'utiliser la fonction
"<a href="{ url_for('notes.formsemestre_inscription_with_modules_form', "<a href="{ url_for('notes.formsemestre_inscription_with_modules_form',
scodoc_dept=g.scodoc_dept, etudid=etudid, only_ext=1) }"> scodoc_dept=g.scodoc_dept, etudid=etud.id, only_ext=1) }">
inscrire à un autre semestre</a>" inscrire à un autre semestre</a>"
</p> </p>
<h3><a href="{ url_for('scolar.fiche_etud', <h3><a href="{ url_for('scolar.fiche_etud',
scodoc_dept=g.scodoc_dept, etudid=etudid) scodoc_dept=g.scodoc_dept, etudid=etud.id)
}" class="stdlink">Étudiant {etud.nomprenom}</a></h3> }" class="stdlink">Étudiant {etud.nomprenom}</a></h3>
""", """,
] ]
orig_sem = sco_formsemestre.get_formsemestre(formsemestre_id)
# Ne propose que des semestres de semestre_id strictement inférieur # Ne propose que des semestres de semestre_id strictement inférieur
# au semestre courant # au semestre courant
# et seulement si pas inscrit au même semestre_id d'un semestre ordinaire ScoDoc. # et seulement si pas inscrit au même semestre_id d'un semestre ordinaire ScoDoc.
# Les autres situations (eg redoublements en changeant d'établissement) # Les autres situations (eg redoublements en changeant d'établissement)
# doivent être gérées par les validations de semestres "antérieurs" # doivent être gérées par les validations de semestres "antérieurs"
insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_list( insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
args={"etudid": etudid, "etat": scu.INSCRIT} args={"etudid": etud.id, "etat": scu.INSCRIT}
) )
semlist = [sco_formsemestre.get_formsemestre(i["formsemestre_id"]) for i in insem] semlist = [sco_formsemestre.get_formsemestre(i["formsemestre_id"]) for i in insem]
existing_semestre_ids = {s["semestre_id"] for s in semlist} existing_semestre_ids = {s["semestre_id"] for s in semlist}
min_semestre_id = 1 min_semestre_id = 1
max_semestre_id = orig_sem["semestre_id"] max_semestre_id = formsemestre.semestre_id
semestre_ids = set(range(min_semestre_id, max_semestre_id)) - existing_semestre_ids semestre_ids = set(range(min_semestre_id, max_semestre_id)) - existing_semestre_ids
H.append( H.append(
f"""<p>L'étudiant est déjà inscrit dans des semestres ScoDoc de rangs: f"""<p>L'étudiant est déjà inscrit dans des semestres ScoDoc de rangs:
@ -203,21 +202,21 @@ def formsemestre_ext_create_form(etudid, formsemestre_id):
</p>""" </p>"""
) )
return render_template("sco_page.j2", content="\n".join(H) + "\n" + tf[1]) return render_template("sco_page.j2", content="\n".join(H) + "\n" + tf[1])
elif tf[0] == -1: if tf[0] == -1:
return flask.redirect( return flask.redirect(
url_for( url_for(
"notes.formsemestre_bulletinetud", "notes.formsemestre_bulletinetud",
scodoc_dept=g.scodoc_dept, scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id, formsemestre_id=formsemestre_id,
etudid=etudid, etudid=etud.id,
) )
) )
else:
# Le semestre extérieur est créé dans la même formation que le semestre courant # Le semestre extérieur est créé dans la même formation que le semestre courant
tf[2]["formation_id"] = orig_sem["formation_id"] tf[2]["formation_id"] = formsemestre.formation_id
formsemestre_ext_create(etudid, tf[2]) formsemestre_ext_create(etud, tf[2])
return flask.redirect( return flask.redirect(
url_for("scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid) url_for("scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etud.id)
) )