From 84cf48182d98a828b29723c90055b47fec57e363 Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Wed, 24 Dec 2025 10:16:25 +0100 Subject: [PATCH 1/3] =?UTF-8?q?Possibilit=C3=A9=20de=20filtrer=20une=20col?= =?UTF-8?q?onne=20avec=20plusieurs=20mots?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + src/utils.py | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad0ac24..058b54f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ - Possibilité de filtrer, trier etc. dans les vues acheteur et titulaire - Possibilité de partager les filtres, tris et choix de colonnes via une adresse Web +- Possibilité de filtrer une colonne avec plusieurs mots ##### 2.2.3 (4 décembre 2025) diff --git a/src/utils.py b/src/utils.py index e7d47ad..437f8a3 100644 --- a/src/utils.py +++ b/src/utils.py @@ -296,6 +296,7 @@ def filter_table_data(lff: pl.LazyFrame, filter_query: str) -> pl.LazyFrame: lff = lff.filter(pl.col(col_name) <= filter_value) elif operator == "contains": if col_type in ["String", "Date"]: + filter_value = filter_value.strip('"') lff = lff.filter( pl.col(col_name).str.contains("(?i)" + filter_value) ) From b47463b638b7759a85e1baeae553f9693d242ac8 Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Wed, 24 Dec 2025 10:44:06 +0100 Subject: [PATCH 2/3] =?UTF-8?q?L'URL=20de=20partage=20contient=20les=20col?= =?UTF-8?q?onnes=20=C3=A0=20afficher,=20non=20les=20colonnes=20=C3=A0=20ma?= =?UTF-8?q?squer=20#58?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/tableau.py | 7 +++++-- src/utils.py | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/pages/tableau.py b/src/pages/tableau.py index 42d37b8..e15b21d 100644 --- a/src/pages/tableau.py +++ b/src/pages/tableau.py @@ -11,6 +11,7 @@ from src.utils import ( df, filter_table_data, get_default_hidden_columns, + invert_columns, meta_content, sort_table_data, ) @@ -213,7 +214,8 @@ def restore_view_from_url(search): if "colonnes" in params: try: - hidden_columns = json.loads(params["colonnes"][0]) + columns = json.loads(params["colonnes"][0]) + hidden_columns = invert_columns(columns) except json.JSONDecodeError: pass @@ -243,7 +245,8 @@ def sync_url_and_reset_button(filter_query, sort_by, hidden_columns, href): params["tris"] = json.dumps(sort_by) if hidden_columns: - params["colonnes"] = json.dumps(hidden_columns) + columns = invert_columns(hidden_columns) + params["colonnes"] = json.dumps(columns) query_string = urllib.parse.urlencode(params) full_url = f"{base_url}?{query_string}" if query_string else base_url diff --git a/src/utils.py b/src/utils.py index 437f8a3..add2e81 100644 --- a/src/utils.py +++ b/src/utils.py @@ -651,6 +651,20 @@ def get_button_properties(height): return download_disabled, download_text, download_title +def invert_columns(columns): + """ + Renvoie les colonnes du schéma non spécifiées en paramètre. Utile pour passer d'une colonnes masquées à une liste de colonnes affichées, et vice versa. + + :param columns: + :return: + """ + inverted_columns = [] + for column in schema.names(): + if column not in columns: + inverted_columns.append(column) + return inverted_columns + + df: pl.DataFrame = get_decp_data() schema = df.collect_schema() From 2fb71e466c769fbb5108ff12e7b4d58dd90a25fe Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Wed, 24 Dec 2025 10:54:24 +0100 Subject: [PATCH 3/3] Exemple d'URL dans le CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 058b54f..06de8e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ #### 2.3.0 (24 décembre 2025) - Possibilité de filtrer, trier etc. dans les vues acheteur et titulaire -- Possibilité de partager les filtres, tris et choix de colonnes via une adresse Web +- Possibilité de partager les filtres, tris et choix de colonnes via une adresse Web ([exemple](https://decp.info/tableau?filtres=%7Bobjet%7D+icontains+%22d%C3%A9corations+de+no%C3%ABl%22+%26%26+%7BdateNotification%7D+icontains+2025+%26%26+%7Bmontant%7D+i%3C+1000000&colonnes=%5B%22uid%22%2C+%22acheteur_id%22%2C+%22acheteur_nom%22%2C+%22titulaire_id%22%2C+%22titulaire_nom%22%2C+%22objet%22%2C+%22montant%22%2C+%22dureeMois%22%2C+%22dateNotification%22%2C+%22acheteur_departement_code%22%2C+%22sourceDataset%22%5D)) - Possibilité de filtrer une colonne avec plusieurs mots ##### 2.2.3 (4 décembre 2025)