Emmanuel Viennet
fd8116a772
+ association UE -> ApcNiveau + choix sur la page ue_edit + association Module <-> ensemble de ApcParcours + choix sur la page module_edit + association Module - ApcAppCritique ~ choix sur la page module_edit TODO: revoir pour présenter les AC du semestre et parcours sélectionnés (JS) + association FormSemestre <-> ApcParcours + choix sur la page formsemestre_editwithmodules
75 lines
2.9 KiB
Python
75 lines
2.9 KiB
Python
##############################################################################
|
|
# ScoDoc
|
|
# Copyright (c) 1999 - 2022 Emmanuel Viennet. All rights reserved.
|
|
# See LICENSE
|
|
##############################################################################
|
|
|
|
"""
|
|
Edition associations UE <-> Ref. Compétence
|
|
"""
|
|
from flask import g, url_for
|
|
from app import db, log
|
|
from app.models import UniteEns
|
|
from app.models.but_refcomp import ApcNiveau
|
|
|
|
|
|
def form_ue_choix_niveau(ue: UniteEns) -> str:
|
|
"""Form. HTML pour associer une UE à un niveau de compétence"""
|
|
ref_comp = ue.formation.referentiel_competence
|
|
if ref_comp is None:
|
|
return f"""<div class="ue_choix_niveau">
|
|
<div class="warning">Pas de référentiel de compétence associé à cette formation !</div>
|
|
<div><a class="stdlink" href="{ url_for('notes.refcomp_assoc_formation',
|
|
scodoc_dept=g.scodoc_dept, formation_id=ue.formation.id)
|
|
}">associer un référentiel de compétence</a>
|
|
</div>
|
|
</div>"""
|
|
annee = (ue.semestre_idx + 1) // 2 # 1, 2, 3
|
|
niveaux_by_parcours = ref_comp.get_niveaux_by_parcours(annee)
|
|
|
|
options = []
|
|
if niveaux_by_parcours["TC"]:
|
|
options.append("""<optgroup label="Tronc commun">""")
|
|
for n in niveaux_by_parcours["TC"]:
|
|
options.append(
|
|
f"""<option value="{n.id}" {'selected' if ue.niveau_competence == n else ''}>{n.annee} {n.competence.titre_long} niveau {n.ordre}</option>"""
|
|
)
|
|
options.append("""</optgroup>""")
|
|
for parcour in ref_comp.parcours:
|
|
if len(niveaux_by_parcours[parcour.id]):
|
|
options.append(f"""<optgroup label="Parcours {parcour.libelle}">""")
|
|
for n in niveaux_by_parcours[parcour.id]:
|
|
options.append(
|
|
f"""<option value="{n.id}" {'selected' if ue.niveau_competence == n else ''}>{n.annee} {n.competence.titre_long} niveau {n.ordre}</option>"""
|
|
)
|
|
options.append("""</optgroup>""")
|
|
options_str = "\n".join(options)
|
|
return f"""
|
|
<div class="ue_choix_niveau">
|
|
<form id="form_ue_choix_niveau">
|
|
<b>Niveau de compétence associé:</b>
|
|
<select onchange="set_ue_niveau_competence();" data-setter="{
|
|
url_for( "notes.set_ue_niveau_competence", scodoc_dept=g.scodoc_dept)
|
|
}">
|
|
<option value="" {'selected' if ue.niveau_competence is None else ''}>aucun</option>
|
|
{options_str}
|
|
</select>
|
|
</form>
|
|
</div>
|
|
"""
|
|
|
|
|
|
def set_ue_niveau_competence(ue_id: int, niveau_id: int):
|
|
"""Associe le niveau et l'UE"""
|
|
log(f"set_ue_niveau_competence( {ue_id}, {niveau_id} )")
|
|
ue = UniteEns.query.get_or_404(ue_id)
|
|
if niveau_id == "":
|
|
# suppression de l'association
|
|
ue.niveau_competence = None
|
|
else:
|
|
niveau = ApcNiveau.query.get_or_404(niveau_id)
|
|
ue.niveau_competence = niveau
|
|
db.session.add(ue)
|
|
db.session.commit()
|
|
return "", 204
|