Début de configuration de colonnes partagée

This commit is contained in:
Colin Maudry
2025-09-29 17:36:03 +02:00
parent ee2bae190d
commit 1d21cbb69d
5 changed files with 55 additions and 57 deletions
+1
View File
@@ -40,6 +40,7 @@ td[data-dash-column="objet"] {
background-color: #b33821;
color: white;
font-family: sans-serif;
text-align: left;
}
.dash-table-container
+10 -15
View File
@@ -12,6 +12,7 @@ from src.utils import (
get_departement_region,
lf,
meta_content,
setup_table_columns,
)
register_page(
@@ -24,8 +25,6 @@ register_page(
order=5,
)
# 21690123100011
layout = [
dcc.Store(id="acheteur_data", storage_type="memory"),
dcc.Location(id="url", refresh="callback-nav"),
@@ -214,30 +213,26 @@ def get_last_marches_table(data) -> html.Div:
dff = pl.DataFrame(data)
dff = format_montant(dff)
columns, tooltip = setup_table_columns(
dff, hideable=False, exclude=["titulaire_id", "titulaire_typeIdentifiant"]
)
data = dff.to_dicts()
data = add_org_links_in_dict(data, "titulaire")
table = html.Div(
className="marches_table",
id="marches_datatable",
id="acheteur_datatable",
children=dash_table.DataTable(
data=data,
markdown_options={"html": True},
page_action="native",
filter_action="native",
filter_options={"case": "insensitive", "placeholder_text": "Filtrer..."},
columns=[
{
"name": i,
"id": i,
"presentation": "markdown",
"type": "text",
"format": {"nully": "N/A"},
"hideable": False,
}
for i in columns
if i not in ["titulaire_id", "titulaire_typeIdentifiant"]
],
columns=columns,
tooltip_header=tooltip,
tooltip_duration=8000,
tooltip_delay=350,
cell_selectable=False,
page_size=10,
style_cell_conditional=[
{
+2 -29
View File
@@ -7,12 +7,12 @@ from dash import Input, Output, State, callback, dash_table, dcc, html, register
from src.utils import (
add_org_links,
add_resource_link,
data_schema,
filter_table_data,
format_montant,
format_number,
lf,
meta_content,
setup_table_columns,
sort_table_data,
)
@@ -205,34 +205,7 @@ def update_table(page_current, page_size, filter_query, sort_by, data_timestamp)
# Formatage des montants
dff = format_montant(dff)
# Liste finale de colonnes
columns = []
tooltip = {}
for column_id in dff.columns:
column_object = data_schema.get(column_id)
if column_object:
column_name = column_object.get("friendly_name", column_id)
else:
column_name = column_id
column = {
"name": column_name,
"id": column_id,
"presentation": "markdown",
"type": "text",
"format": {"nully": "N/A"},
"hideable": True,
}
columns.append(column)
if column_object:
tooltip[column_id] = {
"value": f"""**{column_object.get("friendly_name", column_id)}**
"""
+ column_object["description"],
"type": "markdown",
}
columns, tooltip = setup_table_columns(dff)
dicts = dff.to_dicts()
+8 -13
View File
@@ -12,6 +12,7 @@ from src.utils import (
get_departement_region,
lf,
meta_content,
setup_table_columns,
)
register_page(
@@ -216,6 +217,7 @@ def get_last_marches_table(data) -> html.Div:
dff = pl.DataFrame(data)
dff = format_montant(dff)
columns, tooltip = setup_table_columns(dff, hideable=False, exclude=["acheteur_id"])
data = dff.to_dicts()
# Idéalement on utiliserait add_org_links(), mais le résultat attendu
# est différent de home.py (Tableau)
@@ -223,25 +225,18 @@ def get_last_marches_table(data) -> html.Div:
table = html.Div(
className="marches_table",
id="marches_datatable",
id="titulaire_datatable",
children=dash_table.DataTable(
data=data,
markdown_options={"html": True},
page_action="native",
filter_action="native",
filter_options={"case": "insensitive", "placeholder_text": "Filtrer..."},
columns=[
{
"name": i,
"id": i,
"presentation": "markdown",
"type": "text",
"format": {"nully": "N/A"},
"hideable": False,
}
for i in columns
if i not in ["titulaire_id"]
],
columns=columns,
tooltip_header=tooltip,
tooltip_duration=8000,
tooltip_delay=350,
cell_selectable=False,
page_size=10,
style_cell_conditional=[
{
+34
View File
@@ -255,6 +255,40 @@ def sort_table_data(lff: pl.LazyFrame, sort_by: list) -> pl.LazyFrame:
return lff
def setup_table_columns(dff, hideable: bool = True, exclude: list = None) -> tuple:
# Liste finale de colonnes
columns = []
tooltip = {}
for column_id in dff.columns:
if exclude and column_id in exclude:
continue
column_object = data_schema.get(column_id)
if column_object:
column_name = column_object.get("friendly_name", column_id)
else:
column_name = column_id
column = {
"name": column_name,
"id": column_id,
"presentation": "markdown",
"type": "text",
"format": {"nully": "N/A"},
"hideable": hideable,
}
columns.append(column)
if column_object:
tooltip[column_id] = {
"value": f"""**{column_object.get("friendly_name", column_id)}**
"""
+ column_object["description"],
"type": "markdown",
}
return columns, tooltip
lf = get_decp_data()
departements = get_departements()
domain_name = (