2018-07-31 12:03:01 +02:00
class DossierSearchService
2018-07-31 12:04:49 +02:00
def self . matching_dossiers_for_gestionnaire ( search_terms , gestionnaire )
2018-07-31 12:03:01 +02:00
# exact id match?
2018-07-31 14:29:37 +02:00
dossiers = dossier_by_exact_id_for_gestionnaire ( search_terms , gestionnaire )
2018-07-31 12:03:01 +02:00
# full text search
if dossiers . empty?
2018-07-31 14:32:17 +02:00
dossier = dossier_by_full_text_for_gestionnaire ( search_terms , gestionnaire )
2018-07-31 12:03:01 +02:00
end
dossiers
end
private
2018-07-31 14:29:37 +02:00
def self . dossier_by_exact_id_for_gestionnaire ( search_terms , gestionnaire )
id = search_terms . to_i
if id != 0 && id_compatible? ( id ) # Sometimes gestionnaire is searching dossiers with a big number (ex: SIRET), ActiveRecord can't deal with them and throws ActiveModel::RangeError. id_compatible? prevents this.
2018-07-31 14:54:55 +02:00
dossiers_by_id ( id , gestionnaire )
else
Dossier . none
2018-07-31 14:29:37 +02:00
end
end
2018-07-31 12:04:49 +02:00
def self . dossiers_by_id ( id , gestionnaire )
2018-07-31 14:53:22 +02:00
( gestionnaire . dossiers . where ( id : id ) + gestionnaire . dossiers_from_avis . where ( id : id ) ) . uniq
2018-07-31 12:03:01 +02:00
end
def self . id_compatible? ( number )
2018-07-31 14:45:50 +02:00
ActiveRecord :: Type :: Integer . new . serialize ( number )
true
rescue ActiveModel :: RangeError
false
2018-07-31 12:03:01 +02:00
end
2018-07-31 14:32:17 +02:00
def self . dossier_by_full_text_for_gestionnaire ( search_terms , gestionnaire )
Search . new (
gestionnaire : gestionnaire ,
query : search_terms
) . results
end
2018-07-31 12:03:01 +02:00
end