Fix réduction du nombre de colonne, ajoute de lla colonne Marché #84
This commit is contained in:
+1
-1
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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é.",
|
||||
}
|
||||
|
||||
+7
-5
@@ -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(
|
||||
(
|
||||
'<a href="/marches/' + pl.col("uid") + '" title="Voir le marché">🔍</a>'
|
||||
).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)
|
||||
|
||||
@@ -313,3 +313,31 @@ def test_fetch_page_sql_post_processes_links(flask_app):
|
||||
)
|
||||
if page.height > 0:
|
||||
assert "<a href" in page["uid"][0]
|
||||
|
||||
|
||||
def test_postprocess_page_adds_marche_column():
|
||||
"""postprocess_page doit créer une colonne 'marche' en première position,
|
||||
un lien 🔍 vers /marches/{uid}, tout en conservant la colonne uid."""
|
||||
from src.utils.table import postprocess_page
|
||||
|
||||
dff = pl.DataFrame({"uid": ["abc"], "objet": ["Travaux divers"]})
|
||||
result = postprocess_page(dff)
|
||||
|
||||
# 'marche' existe et est la première colonne
|
||||
assert result.columns[0] == "marche"
|
||||
# Lien loupe vers la fiche du marché
|
||||
assert "/marches/abc" in result["marche"][0]
|
||||
assert "🔍" in result["marche"][0]
|
||||
# uid est conservée et reste un lien affichant sa propre valeur
|
||||
assert "uid" in result.columns
|
||||
assert "abc" in result["uid"][0]
|
||||
|
||||
|
||||
def test_postprocess_page_without_uid_has_no_marche():
|
||||
"""Sans colonne uid, aucune colonne 'marche' n'est ajoutée."""
|
||||
from src.utils.table import postprocess_page
|
||||
|
||||
dff = pl.DataFrame({"objet": ["Travaux divers"]})
|
||||
result = postprocess_page(dff)
|
||||
|
||||
assert "marche" not in result.columns
|
||||
|
||||
Reference in New Issue
Block a user