From 66b8542d56b3b33fe7c6e35b666be531c621b75a Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Thu, 19 Oct 2023 22:24:56 +0200 Subject: [PATCH] Affichage des ECTS sur validation_rcues et parcour_formation. Closes 656. --- app/but/cursus_but.py | 28 ++++++++++++++++++++------ app/but/validations_view.py | 10 ++++++--- app/static/css/parcour_formation.css | 8 +++++++- app/templates/but/parcour_formation.j2 | 23 ++++++++++++--------- app/templates/but/validation_rcues.j2 | 2 +- app/views/but_formation.py | 5 +++-- 6 files changed, 53 insertions(+), 23 deletions(-) diff --git a/app/but/cursus_but.py b/app/but/cursus_but.py index f8b28675f..d1e3f119d 100644 --- a/app/but/cursus_but.py +++ b/app/but/cursus_but.py @@ -461,7 +461,7 @@ def formsemestre_warning_apc_setup( } if niveaux_ids != ues_niveaux_ids: H.append( - f"""Parcours {parcour.code if parcour else "Tronc commun"} : + f"""Parcours {parcour.code if parcour else "Tronc commun"} : {len(ues_niveaux_ids)} UE avec niveaux mais {len(niveaux_ids)} niveaux à valider ! """ @@ -473,7 +473,7 @@ def formsemestre_warning_apc_setup( -

Vérifiez les parcours cochés pour ce semestre, +

Vérifiez les parcours cochés pour ce semestre, et les associations entre UE et niveaux dans la formation. @@ -497,7 +497,9 @@ def ue_associee_au_niveau_du_parcours( return ues[0] if ues else None -def parcour_formation_competences(parcour: ApcParcours, formation: Formation) -> list: +def parcour_formation_competences( + parcour: ApcParcours, formation: Formation +) -> tuple[list[dict], float]: """ [ { @@ -514,7 +516,8 @@ def parcour_formation_competences(parcour: ApcParcours, formation: Formation) -> } } } - ] + ], + ects_parcours (somme des ects des UEs associées) """ refcomp: ApcReferentielCompetences = formation.referentiel_competence @@ -538,7 +541,7 @@ def parcour_formation_competences(parcour: ApcParcours, formation: Formation) -> if len(niveaux) > 0: if len(niveaux) > 1: log( - f"""_niveau_ues: plus d'un niveau pour {competence} + f"""_niveau_ues: plus d'un niveau pour {competence} annee {annee} {("parcours " + parcour.code) if parcour else ""}""" ) niveau = niveaux[0] @@ -598,4 +601,17 @@ def parcour_formation_competences(parcour: ApcParcours, formation: Formation) -> else refcomp.competences.order_by(ApcCompetence.numero) ) ] - return competences + ects_parcours = sum( + sum( + (ni["ue_impair"].ects or 0) if ni["ue_impair"] else 0 + for ni in cp["niveaux"].values() + ) + for cp in competences + ) + sum( + sum( + (ni["ue_pair"].ects or 0) if ni["ue_pair"] else 0 + for ni in cp["niveaux"].values() + ) + for cp in competences + ) + return competences, ects_parcours diff --git a/app/but/validations_view.py b/app/but/validations_view.py index 344214a59..ef7dd8825 100644 --- a/app/but/validations_view.py +++ b/app/but/validations_view.py @@ -43,16 +43,20 @@ def validation_rcues(etud: Identite, formsemestre: FormSemestre, edit: bool = Fa raise ScoNoReferentielCompetences(formation=formation) parcour = formsemestre.etuds_inscriptions[etud.id].parcour # Si non inscrit à un parcours, prend toutes les compétences - competences_parcour = cursus_but.parcour_formation_competences(parcour, formation) + competences_parcour, ects_parcours = cursus_but.parcour_formation_competences( + parcour, formation + ) ue_validation_by_niveau = get_ue_validation_by_niveau(refcomp, etud) rcue_validation_by_niveau = get_rcue_validation_by_niveau(refcomp, etud) - ects_total = sum((v.ects() for v in ue_validation_by_niveau.values())) + ects_acquis = sum((v.ects() for v in ue_validation_by_niveau.values())) + return render_template( "but/validation_rcues.j2", competences_parcour=competences_parcour, edit=edit, - ects_total=ects_total, + ects_acquis=ects_acquis, + ects_parcours=ects_parcours, formation=formation, parcour=parcour, rcue_validation_by_niveau=rcue_validation_by_niveau, diff --git a/app/static/css/parcour_formation.css b/app/static/css/parcour_formation.css index 3d630d0a6..845a5a9e4 100644 --- a/app/static/css/parcour_formation.css +++ b/app/static/css/parcour_formation.css @@ -171,10 +171,16 @@ select.validation_rcue { margin-left: 32px; } div.recap_ects, div.link_edit { + margin-top: 8px; margin-left: 16px; margin-right: 16px; margin-bottom: 16px; + font-weight: bold; +} +div.recap_ects { + background-color: var(--col-c3-2); + padding: 4px; } .link_edit a { padding-right: 48px; -} \ No newline at end of file +} diff --git a/app/templates/but/parcour_formation.j2 b/app/templates/but/parcour_formation.j2 index c80a38b2c..cd61fe059 100644 --- a/app/templates/but/parcour_formation.j2 +++ b/app/templates/but/parcour_formation.j2 @@ -51,19 +51,19 @@ {% for parc in formation.referentiel_competence.parcours %}

{{parc.code}}
{% endfor %} @@ -83,7 +83,7 @@
{% for annee, niv in comp['niveaux'].items() %} -
@@ -112,6 +112,9 @@
{% endfor %}
+
+{{"%g"|format(ects_parcours)}} ECTS dans ce parcours. +
{% else %}
Choisissez un parcours... @@ -120,20 +123,20 @@ Choisissez un parcours... {% if parcour %} -
+

Cette page représente le parcours {{parcour.code}} du référentiel de compétence {{formation.referentiel_competence.specialite}}, et permet d'associer à chaque semestre d'un niveau de compétence une UE de la formation - {{formation.html()}} - .

+ .

Le symbole TC désigne un niveau du tronc commun - (c'est à dire présent dans tous les parcours de la spécialité).

+ (c'est à dire présent dans tous les parcours de la spécialité).

-

Ce formulaire ne vérifie pas si l'UE est bien conçue pour ce parcours.

+

Ce formulaire ne vérifie pas si l'UE est bien conçue pour ce parcours.

Les modifications sont enregistrées au fur et à mesure.

@@ -186,4 +189,4 @@ function assoc_ue_niveau(event, niveau_id) { } -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/app/templates/but/validation_rcues.j2 b/app/templates/but/validation_rcues.j2 index 4c30123ea..484e87cef 100644 --- a/app/templates/but/validation_rcues.j2 +++ b/app/templates/but/validation_rcues.j2 @@ -141,7 +141,7 @@
-{{"%g"|format(ects_total)}} ECTS validés. +{{"%g"|format(ects_acquis)}} ECTS validés sur {{"%g"|format(ects_parcours)}}.
{% if sco.formsemestre.can_edit_jury() %} diff --git a/app/views/but_formation.py b/app/views/but_formation.py index 8cbbedc61..7af20d2a7 100644 --- a/app/views/but_formation.py +++ b/app/views/but_formation.py @@ -74,14 +74,15 @@ def parcour_formation(formation_id: int, parcour_id: int = None) -> str: if parcour is None: raise ScoValueError("parcours invalide ou hors référentiel de formation") - competences_parcour = ( + competences_parcour, ects_parcours = ( cursus_but.parcour_formation_competences(parcour, formation) if parcour - else None + else (None, 0.0) ) return render_template( "but/parcour_formation.j2", + ects_parcours=ects_parcours, formation=formation, parcour=parcour, competences_parcour=competences_parcour,