BUT: Ajout warning si niveau comp. associé à plusieurs UEs

This commit is contained in:
Emmanuel Viennet 2024-08-22 18:07:38 +02:00
parent cb0c9d8f53
commit 17d9b8daa9
3 changed files with 29 additions and 9 deletions

View File

@ -632,17 +632,22 @@ def formation_semestre_niveaux_warning(formation: Formation, semestre_idx: int)
def ue_associee_au_niveau_du_parcours( def ue_associee_au_niveau_du_parcours(
ues_possibles: list[UniteEns], niveau: ApcNiveau, sem_name: str = "S" ues_possibles: list[UniteEns], niveau: ApcNiveau, sem_name: str = "S"
) -> UniteEns: ) -> tuple[UniteEns, str]:
"L'UE associée à ce niveau, ou None" """L'UE associée à ce niveau, ou None.
Renvoie aussi un message d'avertissement en cas d'associations multiples
(en principe un niveau ne doit être associé qu'à une seule UE)
"""
ues = [ue for ue in ues_possibles if ue.niveau_competence_id == niveau.id] ues = [ue for ue in ues_possibles if ue.niveau_competence_id == niveau.id]
msg = ""
if len(ues) > 1: if len(ues) > 1:
msg = f"""{' et '.join(ue.acronyme for ue in ues)} associées au niveau {niveau} / {sem_name}. Utilisez le cas échéant l'item "Déassocier"."""
# plusieurs UEs associées à ce niveau: élimine celles sans parcours # plusieurs UEs associées à ce niveau: élimine celles sans parcours
ues_pair_avec_parcours = [ue for ue in ues if ue.parcours] ues_avec_parcours = [ue for ue in ues if ue.parcours]
if ues_pair_avec_parcours: if ues_avec_parcours:
ues = ues_pair_avec_parcours ues = ues_avec_parcours
if len(ues) > 1: if len(ues) > 1:
log(f"_niveau_ues: {len(ues)} associées au niveau {niveau} / {sem_name}") log(f"_niveau_ues: {len(ues)} associées au niveau {niveau} / {sem_name}")
return ues[0] if ues else None return ues[0] if ues else None, msg
def parcour_formation_competences( def parcour_formation_competences(
@ -700,6 +705,7 @@ def parcour_formation_competences(
"ue_impair": None, "ue_impair": None,
"ues_pair": [], "ues_pair": [],
"ues_impair": [], "ues_impair": [],
"warning": "",
} }
# Toutes les UEs de la formation dans ce parcours ou tronc commun # Toutes les UEs de la formation dans ce parcours ou tronc commun
ues = [ ues = [
@ -715,10 +721,10 @@ def parcour_formation_competences(
ues_impair_possibles = [ue for ue in ues if ue.semestre_idx == (2 * annee - 1)] ues_impair_possibles = [ue for ue in ues if ue.semestre_idx == (2 * annee - 1)]
# UE associée au niveau dans ce parcours # UE associée au niveau dans ce parcours
ue_pair = ue_associee_au_niveau_du_parcours( ue_pair, warning_pair = ue_associee_au_niveau_du_parcours(
ues_pair_possibles, niveau, f"S{2*annee}" ues_pair_possibles, niveau, f"S{2*annee}"
) )
ue_impair = ue_associee_au_niveau_du_parcours( ue_impair, warning_impair = ue_associee_au_niveau_du_parcours(
ues_impair_possibles, niveau, f"S{2*annee-1}" ues_impair_possibles, niveau, f"S{2*annee-1}"
) )
@ -736,6 +742,7 @@ def parcour_formation_competences(
for ue in ues_impair_possibles for ue in ues_impair_possibles
if (not ue.niveau_competence) or ue.niveau_competence.id == niveau.id if (not ue.niveau_competence) or ue.niveau_competence.id == niveau.id
], ],
"warning": ", ".join(filter(None, [warning_pair, warning_impair])),
} }
competences = [ competences = [

View File

@ -162,25 +162,35 @@ option.non_associe {
div.ue_validation_code { div.ue_validation_code {
display: inline-block; display: inline-block;
} }
div.ue_validation_code div.code { div.ue_validation_code div.code {
margin-left: 12px; margin-left: 12px;
} }
select.validation_rcue { select.validation_rcue {
color: black; color: black;
display: inline-block; display: inline-block;
margin-left: 32px; margin-left: 32px;
} }
div.recap_ects, div.link_edit {
div.recap_ects,
div.link_edit {
margin-top: 8px; margin-top: 8px;
margin-left: 16px; margin-left: 16px;
margin-right: 16px; margin-right: 16px;
margin-bottom: 16px; margin-bottom: 16px;
font-weight: bold; font-weight: bold;
} }
div.recap_ects { div.recap_ects {
background-color: var(--col-c3-2); background-color: var(--col-c3-2);
padding: 4px; padding: 4px;
} }
.link_edit a { .link_edit a {
padding-right: 48px; padding-right: 48px;
} }
.niveau-warning {
font-weight: bold;
}

View File

@ -99,6 +99,9 @@
{% endif %} {% endif %}
</span> </span>
{{niv['niveau'].libelle if niv['niveau'] else ''}} {{niv['niveau'].libelle if niv['niveau'] else ''}}
{% if niv["warning"] %}
<div class="niveau-warning">{{scu.EMO_WARNING|safe}} {{niv["warning"]}}</div>
{% endif %}
</div> </div>
<div class="ue impair u{{annee}}1"> <div class="ue impair u{{annee}}1">
{{ menu_ue(niv, "impair", 2*annee-1) }} {{ menu_ue(niv, "impair", 2*annee-1) }}