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
|
DATA_SCHEMA_CACHE=./schema.cache.json
|
||||||
|
|
||||||
# Colonnes masquées par défaut
|
# 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
|
# Formulaire de contact
|
||||||
SENDER_SERVER_DOMAIN="mail.example.com" # serveur SMTP
|
SENDER_SERVER_DOMAIN="mail.example.com" # serveur SMTP
|
||||||
|
|||||||
@@ -363,6 +363,15 @@ table.cell-table th {
|
|||||||
background-color: rgb(255 240 240 / 40%);
|
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 Visibility Menu */
|
||||||
.column-actions {
|
.column-actions {
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
|
|||||||
@@ -158,3 +158,11 @@ DF_TITULAIRES = build_org_frame("titulaire")
|
|||||||
DEPARTEMENTS = get_departements()
|
DEPARTEMENTS = get_departements()
|
||||||
DEPARTEMENTS_GEOJSON = get_departements_geojson()
|
DEPARTEMENTS_GEOJSON = get_departements_geojson()
|
||||||
DATA_SCHEMA = get_data_schema()
|
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):
|
def get_default_hidden_columns(page):
|
||||||
if page == "acheteur":
|
if page == "acheteur":
|
||||||
displayed_columns = [
|
displayed_columns = [
|
||||||
"uid",
|
|
||||||
"objet",
|
"objet",
|
||||||
"dateNotification",
|
"dateNotification",
|
||||||
"titulaire_id",
|
|
||||||
"titulaire_typeIdentifiant",
|
|
||||||
"titulaire_nom",
|
"titulaire_nom",
|
||||||
"titulaire_distance",
|
"titulaire_distance",
|
||||||
"montant",
|
"montant",
|
||||||
@@ -372,10 +369,8 @@ def get_default_hidden_columns(page):
|
|||||||
]
|
]
|
||||||
elif page == "titulaire":
|
elif page == "titulaire":
|
||||||
displayed_columns = [
|
displayed_columns = [
|
||||||
"uid",
|
|
||||||
"objet",
|
"objet",
|
||||||
"dateNotification",
|
"dateNotification",
|
||||||
"acheteur_id",
|
|
||||||
"acheteur_nom",
|
"acheteur_nom",
|
||||||
"titulaire_distance",
|
"titulaire_distance",
|
||||||
"montant",
|
"montant",
|
||||||
@@ -408,6 +403,13 @@ def postprocess_page(dff: pl.DataFrame) -> pl.DataFrame:
|
|||||||
À appeler après la pagination.
|
À appeler après la pagination.
|
||||||
"""
|
"""
|
||||||
dff = dff.with_columns(pl.all().cast(pl.String).fill_null(""))
|
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)
|
dff = add_links(dff)
|
||||||
if "sourceFile" in dff.columns:
|
if "sourceFile" in dff.columns:
|
||||||
dff = add_resource_link(dff)
|
dff = add_resource_link(dff)
|
||||||
|
|||||||
@@ -313,3 +313,31 @@ def test_fetch_page_sql_post_processes_links(flask_app):
|
|||||||
)
|
)
|
||||||
if page.height > 0:
|
if page.height > 0:
|
||||||
assert "<a href" in page["uid"][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
|
||||||
|
|||||||
@@ -799,7 +799,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "decp-info"
|
name = "decp-info"
|
||||||
version = "2.7.9"
|
version = "2.8.0"
|
||||||
source = { virtual = "." }
|
source = { virtual = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "dash", extra = ["compress"] },
|
{ name = "dash", extra = ["compress"] },
|
||||||
|
|||||||
Reference in New Issue
Block a user