From 45ec03ec115ffa80136e3b969cfbae6c3e4fe2d1 Mon Sep 17 00:00:00 2001
From: Emmanuel Viennet <emmanuel.viennet@gmail.com>
Date: Wed, 10 Jul 2024 09:47:40 +0200
Subject: [PATCH] =?UTF-8?q?Am=C3=A9liore=20pr=C3=A9sentation=20bilan=20ECT?=
 =?UTF-8?q?S=20+=20fix=20bug=20but=5Fects=5Fvalides=20si=20pas=20d'ECTS?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/but/cursus_but.py                          | 11 +++++++----
 app/static/css/jury_delete_manual.css          |  7 ++++++-
 app/templates/jury/ue_list_etud_validations.j2 |  6 +++++-
 sco_version.py                                 |  2 +-
 4 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/app/but/cursus_but.py b/app/but/cursus_but.py
index 8ed3fd78..7b5b430b 100644
--- a/app/but/cursus_but.py
+++ b/app/but/cursus_but.py
@@ -399,7 +399,7 @@ def but_ects_valides(
     for v in validations:
         key = (v.ue.semestre_idx, v.ue.niveau_competence.id)
         if v.code in CODES_UE_VALIDES:
-            ects_dict[key] = v.ue.ects
+            ects_dict[key] = v.ue.ects or 0.0
 
     return int(sum(ects_dict.values())) if ects_dict else 0
 
@@ -417,15 +417,18 @@ def but_validations_ues(
     validations = (
         ScolarFormSemestreValidation.query.filter_by(etudid=etud.id)
         .filter(ScolarFormSemestreValidation.ue_id != None)
+        .join(FormSemestre, ScolarFormSemestreValidation.formsemestre)
         .join(UniteEns)
         .join(ApcNiveau)
     )
     # restreint à certaines années (utile pour les ECTS du DUT120)
     if annees_but:
         validations = validations.filter(ApcNiveau.annee.in_(annees_but))
-    # Et restreint au référentiel de compétence:
-    return validations.join(ApcCompetence).filter_by(
-        referentiel_id=referentiel_competence_id
+    # restreint au référentiel de compétence et trie
+    return (
+        validations.join(ApcCompetence)
+        .filter_by(referentiel_id=referentiel_competence_id)
+        .order_by(FormSemestre.semestre_id, UniteEns.numero, UniteEns.acronyme)
     )
 
 
diff --git a/app/static/css/jury_delete_manual.css b/app/static/css/jury_delete_manual.css
index 6b0f95b6..3805c619 100644
--- a/app/static/css/jury_delete_manual.css
+++ b/app/static/css/jury_delete_manual.css
@@ -13,6 +13,11 @@ div.ue_list_etud_validations ul.liste_validations li {
 
 div.ue_list_etud_validations div.total_ects {
     font-weight: bold;
-    margin-top: 16px;
+    margin-top: 24px;
     margin-bottom: 12px;
+}
+
+div.ue_list_etud_validations ul li.new_semestre,
+div.ue_list_etud_validations ul li:first-child {
+    margin-top: 16px;
 }
\ No newline at end of file
diff --git a/app/templates/jury/ue_list_etud_validations.j2 b/app/templates/jury/ue_list_etud_validations.j2
index 4b5343b9..00b4a97e 100644
--- a/app/templates/jury/ue_list_etud_validations.j2
+++ b/app/templates/jury/ue_list_etud_validations.j2
@@ -8,7 +8,11 @@
     <ul class="liste_validations">
     {% for validation in validations %}
 
-        <li>{{ validation.html() | safe }}
+        <li
+        {% if loop.index0 > 0 and validation.formsemestre and loop.previtem.formsemestre.semestre_id != validation.formsemestre.semestre_id %}
+        class="new_semestre"
+        {% endif %}
+        >{{ validation.html() | safe }}
         {% if edit_mode %}
             {% if validation.formsemestre and validation.formsemestre.can_edit_jury() %}
                 <form class="inline-form">
diff --git a/sco_version.py b/sco_version.py
index 5614174d..60714411 100644
--- a/sco_version.py
+++ b/sco_version.py
@@ -1,7 +1,7 @@
 # -*- mode: python -*-
 # -*- coding: utf-8 -*-
 
-SCOVERSION = "9.6.990"
+SCOVERSION = "9.7.0"
 
 SCONAME = "ScoDoc"
 
-- 
GitLab