From 75063ae31e580498501e9018799819c584665cdd Mon Sep 17 00:00:00 2001 From: mfo Date: Tue, 24 Sep 2024 20:38:48 +0200 Subject: [PATCH] fix(filter): filtering types_de_champs by enum should not ilike. nows it search by exact match since enum are normalized so findable with simple where --- app/models/concerns/dossier_filtering_concern.rb | 6 ++++++ app/models/procedure_presentation.rb | 9 +++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/models/concerns/dossier_filtering_concern.rb b/app/models/concerns/dossier_filtering_concern.rb index 5e2d8e104..e102c1239 100644 --- a/app/models/concerns/dossier_filtering_concern.rb +++ b/app/models/concerns/dossier_filtering_concern.rb @@ -33,5 +33,11 @@ module DossierFilteringConcern q = Array.new(values.count, "(#{table_column} ILIKE ?)").join(' OR ') where(q, *(values.map { |value| "%#{value}%" })) } + + scope :filter_enum, lambda { |table, column, values| + table_column = ProcedurePresentation.sanitized_column(table, column) + q = Array.new(values.count, "(#{table_column} = ?)").join(' OR ') + where(q, *(values)) + } end end diff --git a/app/models/procedure_presentation.rb b/app/models/procedure_presentation.rb index c565c8604..7ac5e26a1 100644 --- a/app/models/procedure_presentation.rb +++ b/app/models/procedure_presentation.rb @@ -220,8 +220,13 @@ class ProcedurePresentation < ApplicationRecord dossiers.where("dossiers.#{column} IN (?)", values) end when TYPE_DE_CHAMP - dossiers.with_type_de_champ(column) - .filter_ilike(:champs, value_column, values) + if dossier_column.type == :enum + dossiers.with_type_de_champ(column) + .filter_enum(:champs, value_column, values) + else + dossiers.with_type_de_champ(column) + .filter_ilike(:champs, value_column, values) + end when 'etablissement' if column == 'entreprise_date_creation' dates = values