From 3e305845dd20878e2bf15228c9327d5c10e32140 Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Tue, 23 Jun 2026 15:28:42 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20r=C3=A9duction=20du=20nombre=20de=20colon?= =?UTF-8?q?ne,=20ajoute=20de=20lla=20colonne=20March=C3=A9=20#84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .template.env | 2 +- src/assets/css/style.css | 9 +++++++++ src/utils/data.py | 8 ++++++++ src/utils/table.py | 12 +++++++----- tests/test_table.py | 28 ++++++++++++++++++++++++++++ uv.lock | 2 +- 6 files changed, 54 insertions(+), 7 deletions(-) diff --git a/.template.env b/.template.env index 6b9744a..fe1ac51 100644 --- a/.template.env +++ b/.template.env @@ -12,7 +12,7 @@ DATA_SCHEMA_PATH=https://www.data.gouv.fr/api/1/datasets/r/9a4144c0-ee44-4dec-be DATA_SCHEMA_CACHE=./schema.cache.json # Colonnes masquées par défaut -DISPLAYED_COLUMNS="uid, acheteur_id, acheteur_nom, montant, objet, titulaire_nom, titulaire_id, dateNotification, dureeMois, acheteur_departement_code, sourceDataset" +DISPLAYED_COLUMNS="acheteur_nom, montant, objet, titulaire_nom, dateNotification, dureeMois, acheteur_departement_code" # Formulaire de contact SENDER_SERVER_DOMAIN="mail.example.com" # serveur SMTP diff --git a/src/assets/css/style.css b/src/assets/css/style.css index ebe7ecb..06bb670 100644 --- a/src/assets/css/style.css +++ b/src/assets/css/style.css @@ -363,6 +363,15 @@ table.cell-table th { background-color: rgb(255 240 240 / 40%); } +/* Colonne "Marché" : lien loupe centré et sans soulignement */ +table.cell-table td[data-dash-column="marche"] .dash-cell-value { + text-align: center !important; +} + +td[data-dash-column="marche"] a { + text-decoration: none; +} + /* Column Visibility Menu */ .column-actions { margin-right: 8px; diff --git a/src/utils/data.py b/src/utils/data.py index 58a9637..ab7cb63 100644 --- a/src/utils/data.py +++ b/src/utils/data.py @@ -158,3 +158,11 @@ DF_TITULAIRES = build_org_frame("titulaire") DEPARTEMENTS = get_departements() DEPARTEMENTS_GEOJSON = get_departements_geojson() DATA_SCHEMA = get_data_schema() +# Colonne virtuelle (dérivée de uid) : lien loupe vers la fiche du marché. +# Absente du schéma DuckDB, créée à l'affichage dans postprocess_page(). +DATA_SCHEMA["marche"] = { + "name": "marche", + "type": "string", + "title": "Marché", + "description": "Lien vers la fiche détaillée du marché.", +} diff --git a/src/utils/table.py b/src/utils/table.py index 0b04c8a..52b07e4 100644 --- a/src/utils/table.py +++ b/src/utils/table.py @@ -359,11 +359,8 @@ def setup_table_columns( def get_default_hidden_columns(page): if page == "acheteur": displayed_columns = [ - "uid", "objet", "dateNotification", - "titulaire_id", - "titulaire_typeIdentifiant", "titulaire_nom", "titulaire_distance", "montant", @@ -372,10 +369,8 @@ def get_default_hidden_columns(page): ] elif page == "titulaire": displayed_columns = [ - "uid", "objet", "dateNotification", - "acheteur_id", "acheteur_nom", "titulaire_distance", "montant", @@ -408,6 +403,13 @@ def postprocess_page(dff: pl.DataFrame) -> pl.DataFrame: À appeler après la pagination. """ dff = dff.with_columns(pl.all().cast(pl.String).fill_null("")) + if "uid" in dff.columns: + dff = dff.with_columns( + ( + '🔍' + ).alias("marche") + ) + dff = dff.select(["marche"] + [c for c in dff.columns if c != "marche"]) dff = add_links(dff) if "sourceFile" in dff.columns: dff = add_resource_link(dff) diff --git a/tests/test_table.py b/tests/test_table.py index 0df5e50..a0ab08e 100644 --- a/tests/test_table.py +++ b/tests/test_table.py @@ -313,3 +313,31 @@ def test_fetch_page_sql_post_processes_links(flask_app): ) if page.height > 0: assert "