diff --git a/src/utils/table_sql.py b/src/utils/table_sql.py index 4066393..bb59f18 100644 --- a/src/utils/table_sql.py +++ b/src/utils/table_sql.py @@ -181,4 +181,20 @@ def dashboard_filters_to_sql( clauses.append('"sousTraitanceDeclaree" = ?') params.append(dashboard_marche_sous_traitance_declaree) + if dashboard_marche_techniques: + clauses.append("list_has_any(string_split(\"techniques\", ', '), ?::VARCHAR[])") + params.append(list(dashboard_marche_techniques)) + + if dashboard_marche_considerations_sociales: + clauses.append( + "list_has_any(string_split(\"considerationsSociales\", ', '), ?::VARCHAR[])" + ) + params.append(list(dashboard_marche_considerations_sociales)) + + if dashboard_marche_considerations_environnementales: + clauses.append( + "list_has_any(string_split(\"considerationsEnvironnementales\", ', '), ?::VARCHAR[])" + ) + params.append(list(dashboard_marche_considerations_environnementales)) + return " AND ".join(clauses), params diff --git a/tests/test_dashboard_filters_to_sql.py b/tests/test_dashboard_filters_to_sql.py index dffd7ee..d06d65b 100644 --- a/tests/test_dashboard_filters_to_sql.py +++ b/tests/test_dashboard_filters_to_sql.py @@ -144,3 +144,39 @@ def test_titulaire_id_present_skips_categorie_and_departement(): ) assert where_sql == 'YEAR("dateNotification") = ? AND "titulaire_id" LIKE ?' assert params == [2025, "%999%"] + + +def test_marche_techniques_uses_list_has_any(): + where_sql, params = dashboard_filters_to_sql( + dashboard_year="2025", + dashboard_marche_techniques=["Enchère", "Accord-cadre"], + ) + assert where_sql == ( + 'YEAR("dateNotification") = ? ' + "AND list_has_any(string_split(\"techniques\", ', '), ?::VARCHAR[])" + ) + assert params == [2025, ["Enchère", "Accord-cadre"]] + + +def test_considerations_sociales_uses_list_has_any(): + where_sql, params = dashboard_filters_to_sql( + dashboard_year="2025", + dashboard_marche_considerations_sociales=["Clause sociale"], + ) + assert where_sql == ( + 'YEAR("dateNotification") = ? ' + "AND list_has_any(string_split(\"considerationsSociales\", ', '), ?::VARCHAR[])" + ) + assert params == [2025, ["Clause sociale"]] + + +def test_considerations_environnementales_uses_list_has_any(): + where_sql, params = dashboard_filters_to_sql( + dashboard_year="2025", + dashboard_marche_considerations_environnementales=["Clause env."], + ) + assert where_sql == ( + 'YEAR("dateNotification") = ? ' + "AND list_has_any(string_split(\"considerationsEnvironnementales\", ', '), ?::VARCHAR[])" + ) + assert params == [2025, ["Clause env."]]