forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -331,250 +331,6 @@ def _gen_but_rcue(dec_rcue: DecisionsProposeesRCUE, niveau: ApcNiveau) -> str:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def jury_but_semestriel(
|
|
||||||
formsemestre: FormSemestre,
|
|
||||||
etud: Identite,
|
|
||||||
read_only: bool,
|
|
||||||
navigation_div: str = "",
|
|
||||||
) -> str:
|
|
||||||
"""Page: formulaire saisie décision d'UE d'un semestre BUT isolé (pas jury annuel)."""
|
|
||||||
res: ResultatsSemestreBUT = res_sem.load_formsemestre_results(formsemestre)
|
|
||||||
parcour, ues = jury_but.list_ue_parcour_etud(formsemestre, etud, res)
|
|
||||||
inscription_etat = etud.inscription_etat(formsemestre.id)
|
|
||||||
semestre_terminal = (
|
|
||||||
formsemestre.semestre_id >= formsemestre.formation.get_cursus().NB_SEM
|
|
||||||
)
|
|
||||||
autorisations_passage = ScolarAutorisationInscription.query.filter_by(
|
|
||||||
etudid=etud.id,
|
|
||||||
origin_formsemestre_id=formsemestre.id,
|
|
||||||
).all()
|
|
||||||
# Par défaut: autorisé à passer dans le semestre suivant si sem. impair,
|
|
||||||
# ou si décision déjà enregistrée:
|
|
||||||
est_autorise_a_passer = (formsemestre.semestre_id % 2) or (
|
|
||||||
formsemestre.semestre_id + 1
|
|
||||||
) in (a.semestre_id for a in autorisations_passage)
|
|
||||||
decisions_ues = {
|
|
||||||
ue.id: DecisionsProposeesUE(etud, formsemestre, ue, inscription_etat)
|
|
||||||
for ue in ues
|
|
||||||
}
|
|
||||||
for dec_ue in decisions_ues.values():
|
|
||||||
dec_ue.compute_codes()
|
|
||||||
|
|
||||||
if request.method == "POST":
|
|
||||||
if not read_only:
|
|
||||||
for key in request.form:
|
|
||||||
code = request.form[key]
|
|
||||||
# Codes d'UE
|
|
||||||
code_match = re.match(r"^code_ue_(\d+)$", key)
|
|
||||||
if code_match:
|
|
||||||
ue_id = int(code_match.group(1))
|
|
||||||
dec_ue = decisions_ues.get(ue_id)
|
|
||||||
if not dec_ue:
|
|
||||||
raise ScoValueError(f"UE invalide ue_id={ue_id}")
|
|
||||||
dec_ue.record(code)
|
|
||||||
db.session.commit()
|
|
||||||
flash("codes enregistrés")
|
|
||||||
if not semestre_terminal:
|
|
||||||
if request.form.get("autorisation_passage"):
|
|
||||||
if not formsemestre.semestre_id + 1 in (
|
|
||||||
a.semestre_id for a in autorisations_passage
|
|
||||||
):
|
|
||||||
ScolarAutorisationInscription.delete_autorisation_etud(
|
|
||||||
etud.id, formsemestre.id
|
|
||||||
)
|
|
||||||
ScolarAutorisationInscription.autorise_etud(
|
|
||||||
etud.id,
|
|
||||||
formsemestre.formation.formation_code,
|
|
||||||
formsemestre.id,
|
|
||||||
formsemestre.semestre_id + 1,
|
|
||||||
)
|
|
||||||
db.session.commit()
|
|
||||||
flash(
|
|
||||||
f"""autorisation de passage en S{formsemestre.semestre_id + 1
|
|
||||||
} enregistrée"""
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
if est_autorise_a_passer:
|
|
||||||
ScolarAutorisationInscription.delete_autorisation_etud(
|
|
||||||
etud.id, formsemestre.id
|
|
||||||
)
|
|
||||||
db.session.commit()
|
|
||||||
flash(
|
|
||||||
f"autorisation de passage en S{formsemestre.semestre_id + 1} annulée"
|
|
||||||
)
|
|
||||||
ScolarNews.add(
|
|
||||||
typ=ScolarNews.NEWS_JURY,
|
|
||||||
obj=formsemestre.id,
|
|
||||||
text=f"""Saisie décision jury dans {formsemestre.html_link_status()}""",
|
|
||||||
url=url_for(
|
|
||||||
"notes.formsemestre_status",
|
|
||||||
scodoc_dept=g.scodoc_dept,
|
|
||||||
formsemestre_id=formsemestre.id,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
return flask.redirect(
|
|
||||||
url_for(
|
|
||||||
"notes.formsemestre_validation_but",
|
|
||||||
scodoc_dept=g.scodoc_dept,
|
|
||||||
formsemestre_id=formsemestre.id,
|
|
||||||
etudid=etud.id,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
# GET
|
|
||||||
if formsemestre.semestre_id % 2 == 0:
|
|
||||||
warning = f"""<div class="warning">
|
|
||||||
Cet étudiant de S{formsemestre.semestre_id} ne peut pas passer
|
|
||||||
en jury BUT annuel car il lui manque le semestre précédent.
|
|
||||||
</div>"""
|
|
||||||
else:
|
|
||||||
warning = ""
|
|
||||||
H = [
|
|
||||||
html_sco_header.sco_header(
|
|
||||||
page_title=f"Validation BUT S{formsemestre.semestre_id}",
|
|
||||||
formsemestre_id=formsemestre.id,
|
|
||||||
etudid=etud.id,
|
|
||||||
cssstyles=("css/jury_but.css",),
|
|
||||||
javascripts=("js/jury_but.js",),
|
|
||||||
),
|
|
||||||
f"""
|
|
||||||
<div class="jury_but">
|
|
||||||
<div>
|
|
||||||
<div class="bull_head">
|
|
||||||
<div>
|
|
||||||
<div class="titre_parcours">Jury BUT S{formsemestre.id}
|
|
||||||
- Parcours {(parcour.libelle if parcour else False) or "non spécifié"}
|
|
||||||
</div>
|
|
||||||
<div class="nom_etud">{etud.nomprenom}</div>
|
|
||||||
</div>
|
|
||||||
<div class="bull_photo"><a href="{
|
|
||||||
url_for("scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etud.id)
|
|
||||||
}">{etud.photo_html(title="fiche de " + etud.nomprenom)}</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<h3>Jury sur un semestre BUT isolé (ne concerne que les UEs)</h3>
|
|
||||||
{warning}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<form method="post" class="jury_but_box" id="jury_but">
|
|
||||||
""",
|
|
||||||
]
|
|
||||||
|
|
||||||
erase_span = ""
|
|
||||||
if not read_only:
|
|
||||||
# Requête toutes les validations (pas seulement celles du deca courant),
|
|
||||||
# au cas où: changement d'architecture, saisie en mode classique, ...
|
|
||||||
validations = ScolarFormSemestreValidation.query.filter_by(
|
|
||||||
etudid=etud.id, formsemestre_id=formsemestre.id
|
|
||||||
).all()
|
|
||||||
if validations:
|
|
||||||
erase_span = f"""<a href="{
|
|
||||||
url_for("notes.formsemestre_jury_but_erase",
|
|
||||||
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre.id,
|
|
||||||
etudid=etud.id, only_one_sem=1)
|
|
||||||
}" class="stdlink">effacer les décisions enregistrées</a>"""
|
|
||||||
else:
|
|
||||||
erase_span = (
|
|
||||||
"Cet étudiant n'a aucune décision enregistrée pour ce semestre."
|
|
||||||
)
|
|
||||||
|
|
||||||
H.append(
|
|
||||||
f"""
|
|
||||||
<div class="but_section_annee">
|
|
||||||
</div>
|
|
||||||
<div><b>Unités d'enseignement de S{formsemestre.semestre_id}:</b></div>
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
if not ues:
|
|
||||||
H.append(
|
|
||||||
"""<div class="warning">Aucune UE ! Vérifiez votre programme de
|
|
||||||
formation, et l'association UEs / Niveaux de compétences</div>"""
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
H.append(
|
|
||||||
"""
|
|
||||||
<div class="but_annee">
|
|
||||||
<div class="titre"></div>
|
|
||||||
<div class="titre"></div>
|
|
||||||
<div class="titre"></div>
|
|
||||||
<div class="titre"></div>
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
for ue in ues:
|
|
||||||
dec_ue = decisions_ues[ue.id]
|
|
||||||
H.append("""<div class="but_niveau_titre"><div></div></div>""")
|
|
||||||
H.append(
|
|
||||||
_gen_but_niveau_ue(
|
|
||||||
ue,
|
|
||||||
dec_ue,
|
|
||||||
disabled=read_only,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
H.append(
|
|
||||||
"""<div style=""></div>
|
|
||||||
<div class=""></div>"""
|
|
||||||
)
|
|
||||||
H.append("</div>") # but_annee
|
|
||||||
|
|
||||||
div_autorisations_passage = (
|
|
||||||
f"""
|
|
||||||
<div class="but_autorisations_passage">
|
|
||||||
<span>Autorisé à passer en :</span>
|
|
||||||
{ ", ".join( ["S" + str(a.semestre_id or '') for a in autorisations_passage ] )}
|
|
||||||
</div>
|
|
||||||
"""
|
|
||||||
if autorisations_passage
|
|
||||||
else """<div class="but_autorisations_passage but_explanation">pas d'autorisations de passage enregistrées.</div>"""
|
|
||||||
)
|
|
||||||
H.append(div_autorisations_passage)
|
|
||||||
|
|
||||||
if read_only:
|
|
||||||
H.append(
|
|
||||||
f"""<div class="but_explanation">
|
|
||||||
{"Vous n'avez pas la permission de modifier ces décisions."
|
|
||||||
if formsemestre.etat
|
|
||||||
else "Semestre verrouillé."}
|
|
||||||
Les champs entourés en vert sont enregistrés.
|
|
||||||
</div>
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
if formsemestre.semestre_id < formsemestre.formation.get_cursus().NB_SEM:
|
|
||||||
H.append(
|
|
||||||
f"""
|
|
||||||
<div class="but_settings">
|
|
||||||
<input type="checkbox" name="autorisation_passage" value="1" {
|
|
||||||
"checked" if est_autorise_a_passer else ""}>
|
|
||||||
<em>autoriser à passer dans le semestre S{formsemestre.semestre_id+1}</em>
|
|
||||||
</input>
|
|
||||||
</div>
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
H.append("""<div class="help">dernier semestre de la formation.</div>""")
|
|
||||||
H.append(
|
|
||||||
f"""
|
|
||||||
<div class="but_buttons">
|
|
||||||
<span><input type="submit" value="Enregistrer ces décisions"></span>
|
|
||||||
<span>{erase_span}</span>
|
|
||||||
</div>
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
|
|
||||||
H.append(navigation_div)
|
|
||||||
H.append("</div>")
|
|
||||||
H.append(
|
|
||||||
render_template(
|
|
||||||
"but/documentation_codes_jury.j2",
|
|
||||||
nom_univ=f"""Export {sco_preferences.get_preference("InstituteName")
|
|
||||||
or sco_preferences.get_preference("UnivName")
|
|
||||||
or "Apogée"}""",
|
|
||||||
codes=ScoDocSiteConfig.get_codes_apo_dict(),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return "\n".join(H)
|
|
||||||
|
|
||||||
|
|
||||||
# -------------
|
# -------------
|
||||||
def infos_fiche_etud_html(etudid: int) -> str:
|
def infos_fiche_etud_html(etudid: int) -> str:
|
||||||
"""Section html pour fiche etudiant
|
"""Section html pour fiche etudiant
|
||||||
|
@ -2374,10 +2374,6 @@ def formsemestre_validation_but(
|
|||||||
)
|
)
|
||||||
|
|
||||||
deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre)
|
deca = jury_but.DecisionsProposeesAnnee(etud, formsemestre)
|
||||||
if len(deca.get_decisions_rcues_annee()) == 0:
|
|
||||||
return jury_but_view.jury_but_semestriel(
|
|
||||||
formsemestre, etud, read_only, navigation_div=navigation_div
|
|
||||||
)
|
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
if not read_only:
|
if not read_only:
|
||||||
deca.record_form(request.form)
|
deca.record_form(request.form)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# -*- mode: python -*-
|
# -*- mode: python -*-
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
SCOVERSION = "9.6.940"
|
SCOVERSION = "9.6.941"
|
||||||
|
|
||||||
SCONAME = "ScoDoc"
|
SCONAME = "ScoDoc"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user