From cda8e5369be98439ec2c76f4c46bf437ed8018ec Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Tue, 28 Mar 2023 21:59:09 +0200 Subject: [PATCH] =?UTF-8?q?Visualisation=20ref.=20comp.:=20ajoute=20table?= =?UTF-8?q?=20avec=20niveaux=20par=20parcours=20et=20ann=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/but_refcomp.py | 19 +++++ app/static/css/ref-competences.css | 4 +- app/static/css/refcomp_parcours_niveaux.css | 71 +++++++++++++++++++ app/templates/but/refcomp_parcours_niveaux.j2 | 27 +++++++ app/templates/but/refcomp_show.j2 | 12 ++-- app/views/refcomp.py | 5 +- 6 files changed, 131 insertions(+), 7 deletions(-) create mode 100644 app/static/css/refcomp_parcours_niveaux.css create mode 100644 app/templates/but/refcomp_parcours_niveaux.j2 diff --git a/app/models/but_refcomp.py b/app/models/but_refcomp.py index d70323adb..0a3ec1588 100644 --- a/app/models/but_refcomp.py +++ b/app/models/but_refcomp.py @@ -208,6 +208,25 @@ class ApcReferentielCompetences(db.Model, XMLModel): key=lambda c: c.numero or 0, ) + def table_niveaux_parcours(self) -> dict: + """Une table avec les parcours:années BUT et les niveaux + { parcour_id : { 1 : { competence_id : ordre }}} + """ + parcours_info = {} + for parcour in self.parcours: + print(f"# Parcours {parcour.code}") + descr_parcour = {} + parcours_info[parcour.id] = descr_parcour + for annee in (1, 2, 3): + descr_parcour[annee] = { + niveau.competence.id: niveau.ordre + for niveau in ApcNiveau.niveaux_annee_de_parcours( + parcour, annee, self + ) + } + + return parcours_info + class ApcCompetence(db.Model, XMLModel): "Compétence" diff --git a/app/static/css/ref-competences.css b/app/static/css/ref-competences.css index 61586bc4d..282275639 100644 --- a/app/static/css/ref-competences.css +++ b/app/static/css/ref-competences.css @@ -5,7 +5,9 @@ padding: 12px 32px; color: #FFF; max-width: 1000px; - margin: auto; + margin-left: 12px; + margin-top: 12px; + border-radius: 8px; } h1 { diff --git a/app/static/css/refcomp_parcours_niveaux.css b/app/static/css/refcomp_parcours_niveaux.css new file mode 100644 index 000000000..6ed251612 --- /dev/null +++ b/app/static/css/refcomp_parcours_niveaux.css @@ -0,0 +1,71 @@ +div.table_niveaux_parcours { + margin-left: 12px; + margin-top: 12px; + background: rgb(14, 5, 73); + color: #eee; + border-radius: 8px; + width: fit-content; + padding: 8px; +} + +div.table_niveaux_parcours .titre { + font-size: 110%; + margin-bottom: 12px; +} + + +table.table_niveaux_parcours tr th:first-child { + opacity: 0; +} + +table.table_niveaux_parcours th { + text-align: center; + color: white; +} + +table.table_niveaux_parcours tr.parcours_but { + color: white; +} + +table.table_niveaux_parcours tr.parcours_but td { + padding-top: 8px; +} + +table.table_niveaux_parcours tr.annee_but { + text-align: center; +} + +table.table_niveaux_parcours tr td:not(:first-child) { + width: 120px; +} + +table.table_niveaux_parcours tr.annee_but td:first-child { + width: 92px; + font-weight: bold; + color: #ddd; +} + + +.comp-c1 { + background: #a44 +} + +.comp-c2 { + background: #84a +} + +.comp-c3 { + background: #a84 +} + +.comp-c4 { + background: #8a4 +} + +.comp-c5 { + background: #4a8 +} + +.comp-c6 { + background: #48a +} \ No newline at end of file diff --git a/app/templates/but/refcomp_parcours_niveaux.j2 b/app/templates/but/refcomp_parcours_niveaux.j2 new file mode 100644 index 000000000..62d6d039a --- /dev/null +++ b/app/templates/but/refcomp_parcours_niveaux.j2 @@ -0,0 +1,27 @@ +
+
Niveaux de compétences des parcours
+ + + + + {% for comp in ref.competences %} + + {% endfor %} + + + +{% set nb_cols = ref.competences.count() + 1 %} +{% for parcour in ref.parcours %} + + {% for annee in [ 1, 2, 3] %} + + + {% for comp in ref.competences %} + + {% endfor %} + + {% endfor %} +{% endfor %} + +
{{comp.titre}}
Parcours {{parcour.code}} {{parcour.libelle}}
BUT{{annee}}{{ table_niveaux_parcours[parcour.id][annee][comp.id] }}
+
\ No newline at end of file diff --git a/app/templates/but/refcomp_show.j2 b/app/templates/but/refcomp_show.j2 index c6d4b272f..4b6521e51 100644 --- a/app/templates/but/refcomp_show.j2 +++ b/app/templates/but/refcomp_show.j2 @@ -1,21 +1,23 @@ {# -*- mode: jinja-html -*- #} {% extends "sco_page.j2" %} {% block styles %} -{{super()}} + {{super()}} + {% endblock %} {% block app_content %}

Référentiel de compétences {{ref.type_titre}} {{ref.specialite_long}}

+
+ Référentiel chargé le {{ref.scodoc_date_loaded.strftime("%d/%m/%Y à %H:%M") if ref.scodoc_date_loaded else ""}} à + partir du fichier {{ref.scodoc_orig_filename or "(inconnu)"}}. +
-
- Référentiel chargé le {{ref.scodoc_date_loaded.strftime("%d/%m/%Y à %H:%M") if ref.scodoc_date_loaded else ""}} à - partir du fichier {{ref.scodoc_orig_filename or "(inconnu)"}}. -
+{% include "but/refcomp_parcours_niveaux.j2" %}
diff --git a/app/views/refcomp.py b/app/views/refcomp.py index 825791b22..2c1fa6785 100644 --- a/app/views/refcomp.py +++ b/app/views/refcomp.py @@ -35,7 +35,9 @@ from app.views import ScoData @permission_required(Permission.ScoView) def refcomp(refcomp_id): """Le référentiel de compétences, en JSON.""" - ref = ApcReferentielCompetences.query.get_or_404(refcomp_id) + ref: ApcReferentielCompetences = ApcReferentielCompetences.query.get_or_404( + refcomp_id + ) return jsonify(ref.to_dict()) @@ -55,6 +57,7 @@ def refcomp_show(refcomp_id): refcomp_id=refcomp_id, ), sco=ScoData(), + table_niveaux_parcours=referentiel_competence.table_niveaux_parcours(), )