filtros_personalizados 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +7 -0
  2. data/lib/filtros_personalizados/association.rb +40 -0
  3. data/lib/filtros_personalizados/config/routes.rb +9 -0
  4. data/lib/filtros_personalizados/config.rb +7 -0
  5. data/lib/filtros_personalizados/controllers/personalizaveis_controller.rb +28 -0
  6. data/lib/filtros_personalizados/conversor.rb +136 -0
  7. data/lib/filtros_personalizados/fields_padroes/boolean.rb +46 -0
  8. data/lib/filtros_personalizados/fields_padroes/date.rb +83 -0
  9. data/lib/filtros_personalizados/fields_padroes/field.rb +45 -0
  10. data/lib/filtros_personalizados/fields_padroes/hora.rb +26 -0
  11. data/lib/filtros_personalizados/fields_padroes/idade.rb +38 -0
  12. data/lib/filtros_personalizados/fields_padroes/integer.rb +53 -0
  13. data/lib/filtros_personalizados/fields_padroes/select2.rb +16 -0
  14. data/lib/filtros_personalizados/fields_padroes/string.rb +42 -0
  15. data/lib/filtros_personalizados/fields_padroes/string_options.rb +34 -0
  16. data/lib/filtros_personalizados/fields_padroes/true_or_false.rb +15 -0
  17. data/lib/filtros_personalizados/fields_padroes.rb +17 -0
  18. data/lib/filtros_personalizados/filtros_base.rb +123 -0
  19. data/lib/filtros_personalizados/fornecedores.rb +37 -0
  20. data/lib/filtros_personalizados/ultima_selecao_user.rb +42 -0
  21. data/lib/filtros_personalizados/version.rb +3 -0
  22. data/lib/filtros_personalizados/views/filtros_personalizados/_botao_limpar.html.erb +5 -0
  23. data/lib/filtros_personalizados/views/filtros_personalizados/_consulta.html.erb +6 -0
  24. data/lib/filtros_personalizados/views/filtros_personalizados/_date.html.erb +66 -0
  25. data/lib/filtros_personalizados/views/filtros_personalizados/_filtros.html.erb +82 -0
  26. data/lib/filtros_personalizados/views/filtros_personalizados/_hora.html.erb +23 -0
  27. data/lib/filtros_personalizados/views/filtros_personalizados/_integer.html.erb +54 -0
  28. data/lib/filtros_personalizados/views/filtros_personalizados/_select.html.erb +72 -0
  29. data/lib/filtros_personalizados/views/filtros_personalizados/_select2.html.erb +125 -0
  30. data/lib/filtros_personalizados/views/filtros_personalizados/_sem_padrao.html.erb +51 -0
  31. data/lib/filtros_personalizados/views/filtros_personalizados/_so_consultas.html.erb +26 -0
  32. data/lib/filtros_personalizados/views/filtros_personalizados/_string.html.erb +40 -0
  33. data/lib/filtros_personalizados/views/filtros_personalizados/_stringoptions.html.erb +64 -0
  34. data/lib/filtros_personalizados/views/filtros_personalizados/destroy_consulta.js.erb +1 -0
  35. data/lib/filtros_personalizados/views/filtros_personalizados/save_consulta.js.erb +1 -0
  36. data/lib/filtros_personalizados.rb +12 -0
  37. metadata +119 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9b3db02b238068b56863897560ce4ddb63e60a151cd33323901aa6879a80de8f
4
+ data.tar.gz: ad9bffa3afb4148a0e7ca16e2026a463401902aef3f510a022b80fddb58fcc6c
5
+ SHA512:
6
+ metadata.gz: 570a20330f62dceea4d8d471a14e29d02d8688b26f08fc97d4daa2a9e986401707cb3e89a4279fff246c6ddf4b04fb8bf2290730e1e3b267c31d8fa3735d0482
7
+ data.tar.gz: f5dccacd666b16b11bc65247cd96b112a5ce81c531dbbaf610ee6d936009d4772258c8429dce6e236e06856f54a9f36f3a32f9412288fd0ae6fb0b314756e868
@@ -0,0 +1,40 @@
1
+ class FiltrosPersonalizados::Association
2
+ attr_accessor :relation, :name, :search
3
+
4
+ def initialize relation, name, search
5
+ self.relation = relation
6
+ self.name = name
7
+ self.search = search
8
+ end
9
+
10
+ def to_h(values=[])
11
+ lista = []
12
+ if values.present?
13
+ self.relation.pluralize.classify.constantize.where("#{self.search} in (?)", values.first.split(',') + [-1]).each do |r|
14
+ lista << {id: r.send(self.search), text: r.send(self.name)}
15
+ end
16
+ end
17
+ lista
18
+ end
19
+
20
+ def to_selecao(values = [])
21
+ lista = []
22
+ if values.present?
23
+ self.relation.pluralize.classify.constantize.where("#{self.search} in (?)", values.first.split(',') + [-1]).each do |r|
24
+ lista << r.send(self.name)
25
+ end
26
+ end
27
+ lista.join(", ")
28
+ end
29
+
30
+ def to_i(values)
31
+ lista = []
32
+ if values.present?
33
+ self.relation.pluralize.classify.constantize.where("#{self.search} in (?)", values.first.split(',')).each do |r|
34
+ lista << r.send(self.search)
35
+ end
36
+ end
37
+ lista.join(", ")
38
+ end
39
+
40
+ end
@@ -0,0 +1,9 @@
1
+ FiltrosPersonalizados::Config::Engine.routes.draw do
2
+ resources :personalizaveis, except: [:new, :edit, :create, :update, :destroy, :index] do
3
+ collection do
4
+ delete :destroy_consulta
5
+ post :save_consulta
6
+ end
7
+ put :clear_consulta, on: :collection
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ module FiltrosPersonalizados
2
+ module Config
3
+ extend ActiveSupport::Autoload
4
+
5
+ autoload :Routes
6
+ end
7
+ end
@@ -0,0 +1,28 @@
1
+ #encoding: utf-8
2
+ class PersonalizaveisController < ApplicationController
3
+ def destroy_consulta
4
+ @consulta_personalizada = ConsultaPersonalizada.find params[:id]
5
+ @consulta_personalizada.destroy
6
+ end
7
+
8
+ def save_consulta
9
+ @consulta = ConsultaPersonalizada.create(nome: params[:nome_consulta],
10
+ consulta_gerada: consulta_personalizada_params[:relatorio].to_s,
11
+ user_id: current_user.id,
12
+ tela: params[:tela],
13
+ outros_filtros: consulta_personalizada_params[:outros_filtros].to_s,
14
+ modulo: $modulo.sigla.upcase
15
+ )
16
+ end
17
+
18
+ def clear_consulta
19
+ controller = Rails.application.routes.recognize_path(request.referrer)[:controller].gsub("relatorios/", "")
20
+ ultima_consulta_personalizada = ConsultaPersonalizada.ultima_selecao_feita(current_user, controller, $modulo.sigla).first
21
+ ultima_consulta_personalizada.destroy unless ultima_consulta_personalizada.blank?
22
+ redirect_to request.referrer.gsub(/consulta=\d*&?/, "")
23
+ end
24
+
25
+ def consulta_personalizada_params
26
+ # params.permit!.to_h
27
+ end
28
+ end
@@ -0,0 +1,136 @@
1
+ #encoding: utf-8
2
+ class FiltrosPersonalizados::Conversor
3
+ attr_accessor :errors, :consulta_personalizada, :consulta_convertida, :outros_filtros_convertido
4
+
5
+ def initialize(consulta_personalizada)
6
+ self.consulta_personalizada = consulta_personalizada
7
+ self.errors = ActiveModel::Errors.new(self)
8
+
9
+ if modelo_antigo?
10
+ self.consulta_convertida = converte_consulta_gerada()
11
+ self.outros_filtros_convertido = converte_outros_filtros()
12
+ end
13
+ end
14
+
15
+ def modelo_antigo?
16
+ self.consulta_personalizada.consulta_gerada.to_s[0..6] == 'filtros'
17
+ end
18
+
19
+ def converter
20
+ if modelo_antigo?
21
+ self.consulta_personalizada.consulta_gerada = self.consulta_convertida.to_s
22
+ self.consulta_personalizada.outros_filtros = self.outros_filtros_convertido.to_s
23
+ self.consulta_personalizada.save
24
+ end
25
+ rescue Exception => e
26
+ salva_erro(e.message.to_s)
27
+ return false
28
+ end
29
+
30
+ def converte_consulta_gerada
31
+ campos = self.consulta_personalizada.consulta_gerada.to_s
32
+ campos = campos.split("&")
33
+
34
+ filtros = campos[0].gsub("filtros=", "").split("***")
35
+ campos.delete_at(0)
36
+ campos_hash = converte_array_em_hash(campos)
37
+
38
+ auxs = campos_hash["auxs"]
39
+ auxs = auxs.split("&")
40
+
41
+ auxs_hash = converte_array_em_hash(auxs)
42
+
43
+
44
+ select2_hash = {}
45
+ select2 = converte_array_em_hash(self.consulta_personalizada.select2.split("***")) rescue []
46
+ select2.each do |s2|
47
+ key = s2[0].gsub("filtro_", "")
48
+ value = JSON.parse(s2[1]).map{|m| m["id"]}
49
+ select2_hash[key] = value
50
+ end
51
+
52
+
53
+ filtros_novos = [{}]
54
+ filtros.each do |filtro|
55
+ key = filtro.scan(/^[a-zA-Z_0-9]*\=/).first
56
+ value = filtro.gsub(key, "")
57
+ value = value.split(",")
58
+ key = key[0..-2]
59
+
60
+ value << auxs_hash[key]
61
+ unless select2_hash[key].blank?
62
+ value = [select2_hash[key].join(",")]
63
+ end
64
+
65
+ tipo_selecionado = URI.decode(campos_hash["filtro_" + key])
66
+ # filtros_novos << {key => {"tipo_selecionado" => converte_tipo_selecionado(tipo_selecionado), "values" => value.compact}}
67
+ filtros_novos.first[converte_nome(key)] = {"tipo_selecionado" => converte_tipo_selecionado(tipo_selecionado), "values" => value.compact}
68
+ end
69
+ return filtros_novos
70
+ rescue Exception => e
71
+ salva_erro(e.message.to_s)
72
+ return self.consulta_personalizada.consulta_gerada
73
+ end
74
+
75
+ def converte_outros_filtros
76
+ outros_filtros = self.consulta_personalizada.outros_filtros.to_s
77
+ outros_filtros = outros_filtros.split("***")
78
+
79
+ outros_filtros_hash = converte_array_em_hash(outros_filtros)
80
+
81
+ return outros_filtros_hash
82
+ rescue Exception => e
83
+ salva_erro(e.message.to_s)
84
+ return self.consulta_personalizada.outros_filtros
85
+ end
86
+
87
+ def converte_array_em_hash(campos)
88
+ hash_convertido = {}
89
+ campos.each do |campo|
90
+ key = campo.scan(/^[a-zA-Z_0-9]*\=/).first
91
+ value = campo.gsub(key, "")
92
+ key = key[0..-2]
93
+ hash_convertido[key] = value
94
+ end
95
+ return hash_convertido
96
+ end
97
+
98
+ def salva_erro(erro)
99
+ self.errors.add(:base, erro)
100
+ #refaz a busca para pegar o objeto não convertido
101
+ conversa_erros = self.consulta_personalizada.consulta_personalizada_conversao_erros.build({
102
+ erro: erro,
103
+ objeto: (ConsultaPersonalizada.find(self.consulta_personalizada.id).serializable_hash)
104
+ })
105
+ conversa_erros.save
106
+ end
107
+
108
+
109
+ def converte_tipo_selecionado(tipo)
110
+ case
111
+ when (tipo == "==d" or tipo == "==" or tipo == "===") then "Igual a"
112
+ when tipo == ">" then "Maior que"
113
+ when tipo == "<" then "Menor que"
114
+ when (tipo == "><" or tipo == "><h" or tipo == "><n") then "Entre"
115
+ when tipo == "t-" then "Dias Atrás"
116
+ when tipo == "t+" then "Dias à Frente"
117
+ when tipo == "t" then "Hoje"
118
+ when tipo == "w" then "Essa Semana"
119
+ when tipo == "m" then "Esse Mês"
120
+ when tipo == "n" then "Nenhum"
121
+ when (tipo == "<>" or tipo == "<>=") then "Diferente de"
122
+ # when tipo == "" then "Todos"
123
+ when tipo == "!~" then "Não Contém"
124
+ when tipo == "~" then "Contém"
125
+ else tipo
126
+ end
127
+ end
128
+
129
+ def converte_nome(nome)
130
+ case nome
131
+ when "cid_id" then "ciddefinitivo_id"
132
+ when "tipoacomodacao_id" then "tipoacomod_id"
133
+ else nome
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,46 @@
1
+ #encoding=utf-8
2
+ module FiltrosPersonalizados
3
+ module FieldsPadroes
4
+ class Boolean < FiltrosPersonalizados::FieldsPadroes::Field
5
+ def initialize args={}
6
+ super
7
+ # adiciona a classe true or false como opções para seleção em um select nos filtros
8
+ self.collection = [ Personalizaveis::TrueOrFalse.new(id: "true", nome: "Sim"),
9
+ Personalizaveis::TrueOrFalse.new(id: "false", nome: "Não")
10
+ ]
11
+ self.collection_id = "id"
12
+ self.collection_name = "nome"
13
+ end
14
+
15
+ def acoes_disponiveis
16
+ [IGUAL]
17
+ end
18
+
19
+ def where
20
+ unless self.values.blank?
21
+ if self.values.first == "true"
22
+ "#{self.relation}.#{self.field_name} IS NOT FALSE"
23
+ else
24
+ "#{self.relation}.#{self.field_name} IS FALSE"
25
+ end
26
+ end
27
+ end
28
+
29
+ def file
30
+ "personalizaveis/#{ self.partial_name || 'boolean'}.html.erb"
31
+ end
32
+
33
+ def selecao
34
+ self.values.try(:first) == "true" ? self.field_name : ""
35
+ end
36
+
37
+
38
+ def boolean_collection
39
+ collection = []
40
+ collection << OpenStruct.new(id: "true", nome: "Sim")
41
+ collection << OpenStruct.new(id: "false", nome: "Não")
42
+ return collection
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,83 @@
1
+ #encoding=utf-8
2
+ module FiltrosPersonalizados
3
+ module FieldsPadroes
4
+ class Date < FiltrosPersonalizados::FieldsPadroes::Field
5
+ attr_accessor :dias
6
+ # Personalizaveis::Date.new({field_name: 'data_entrada', relation: 'interns', tipo_selecionado: 'Entre', values: ['01-03-2018', '15-03-2018']})
7
+ DIAS_ATRAS = "Dias Atrás"
8
+ DIAS_AFRENTE = "Dias à Frente"
9
+ HOJE = "Hoje"
10
+ ESTA_SEMANA = "Essa Semana"
11
+ ESTE_MES = "Esse Mês"
12
+
13
+ def initialize(relation, field_name, args={})
14
+ self.dias = args[:dias]
15
+ super(relation, field_name, args)
16
+ end
17
+
18
+ def acoes_disponiveis
19
+ [IGUAL, MAIOR_QUE, MENOR_QUE, ENTRE, DIAS_ATRAS, DIAS_AFRENTE, HOJE, ESTA_SEMANA, ESTE_MES, NENHUM, TODOS] - self.noactions
20
+ end
21
+
22
+ def where
23
+ case self.tipo_selecionado
24
+ when IGUAL then self.values.present? ? "#{self.relation}.#{self.field_name} == '#{values.first}'" : ""
25
+ when MAIOR_QUE then self.values.present? ? "#{self.relation}.#{self.field_name} > '#{values.first}'" : ""
26
+ when MENOR_QUE then self.values.present? ? "#{self.relation}.#{self.field_name} <== '#{values.first}'" : ""
27
+ when ENTRE then self.values.present? ? "#{self.relation}.#{self.field_name} between '#{values.first}' and '#{values.last}'" : ""
28
+ when DIAS_ATRAS then self.dias.present? ? "#{self.relation}.#{self.field_name} >== current_date - #{self.dias}" : ""
29
+ when DIAS_AFRENTE then self.dias.present? ? "#{self.relation}.#{self.field_name} >== current_date + #{self.dias}" : ""
30
+ when HOJE then "#{self.relation}.#{self.field_name} == current_date "
31
+ when ESTA_SEMANA then "#{self.relation}.#{self.field_name} between '#{Date.today.beginning_of_week}' and '#{Date.today.end_of_week}' "
32
+ when ESTE_MES then "#{self.relation}.#{self.field_name} between '#{Date.today.beginning_of_month}' and '#{Date.today.end_of_month}' "
33
+ else ""
34
+ end
35
+ end
36
+
37
+ def file
38
+ "personalizaveis/#{ self.partial_name || 'date'}.html.erb"
39
+ end
40
+
41
+ def selecao
42
+ if self.values.present?
43
+ case self.tipo_selecionado
44
+ when IGUAL then " #{self.field_name.humanize.capitalize}: #{IGUAL.downcase} #{self.values.first}"
45
+ when MAIOR_QUE then " #{self.field_name.humanize.capitalize}: #{MAIOR_QUE.downcase} #{values.first}"
46
+ when MENOR_QUE then " #{self.field_name.humanize.capitalize}: #{MENOR_QUE.downcase} #{values.first}"
47
+ when ENTRE then " #{self.field_name.humanize.capitalize}: #{ENTRE.downcase} #{values.first} e #{values.last}"
48
+ end
49
+ elsif self.dias.present?
50
+ case self.tipo_selecionado
51
+ when DIAS_ATRAS then " #{self.field_name.humanize.capitalize}: #{self.dias} #{DIAS_ATRAS.downcase}"
52
+ when DIAS_AFRENTE then " #{self.field_name.humanize.capitalize}: #{self.dias} #{DIAS_AFRENTE.downcase}"
53
+ end
54
+ else
55
+ case self.tipo_selecionado
56
+ when HOJE then " #{self.field_name.humanize.capitalize}: #{HOJE.downcase}"
57
+ when ESTA_SEMANA then " #{self.field_name.humanize.capitalize}: #{ESTA_SEMANA.downcase}"
58
+ when ESTE_MES then " #{self.field_name.humanize.capitalize}: #{ESTE_MES.downcase}"
59
+ else
60
+ ""
61
+ end
62
+ end
63
+ end
64
+
65
+
66
+ def get_periodo
67
+ case self.tipo_selecionado
68
+ when IGUAL then [values.first, values.first]
69
+ when MAIOR_QUE then [values.first, Date.today.to_s_br]
70
+ when MENOR_QUE then [ '01/01/1990', values.first]
71
+ when ENTRE then [values.first, values.last]
72
+ when DIAS_ATRAS then [(Date.today - self.dias.to_i).to_s_br, Date.today.to_s_br]
73
+ when DIAS_AFRENTE then [Date.today.to_s_br, (Date.today + self.dias.to_i).to_s_br]
74
+ when HOJE then [Date.today.to_s_br, Date.today.to_s_br]
75
+ when ESTA_SEMANA then [Date.today.beginning_of_week, Date.today.end_of_week]
76
+ when ESTE_MES then [Date.today.beginning_of_month, Date.today.end_of_month]
77
+ else ""
78
+ end
79
+ end
80
+
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,45 @@
1
+ #encoding=utf-8
2
+ module FiltrosPersonalizados
3
+ module FieldsPadroes
4
+ class Field
5
+ attr_accessor :tipo_selecionado, :values, :relation, :field_name, :field_type, :association,
6
+ :collection, :collection_id, :collection_name, :partial_name, :autocomplete_path, :is_open,
7
+ :options, :noactions
8
+ TODOS = "Prenchidos"
9
+ NENHUM = "Não preenchidos"
10
+ IGUAL = "Igual a"
11
+ DIFERENTE = "Diferente de"
12
+ ENTRE = "Entre"
13
+ MAIOR_QUE = "Maior que"
14
+ MENOR_QUE = "Menor que"
15
+
16
+
17
+ def initialize(relation, field_name, args={})
18
+ self.relation = relation
19
+ self.field_name = field_name
20
+ self.tipo_selecionado = args[:tipo_selecionado]
21
+ self.values = args[:values]
22
+ self.collection = args[:collection]
23
+ self.collection_id = args[:collection_id]
24
+ self.collection_name = args[:collection_name]
25
+ self.partial_name = args[:partial_name]
26
+ self.autocomplete_path= args[:autocomplete_path]
27
+ self.options = args[:options]
28
+ self.noactions = args[:noactions] || []
29
+ if args[:association_relation].present? && args[:association_name].present? && args[:association_search].present?
30
+ self.association = FiltrosPersonalizados::Association.new(
31
+ args[:association_relation],
32
+ args[:association_name],
33
+ args[:association_search]
34
+ )
35
+ end
36
+ end
37
+
38
+ def caption
39
+ I18n.t("activerecord.attributes.#{self.relation.singularize}.#{self.field_name}",
40
+ default: I18n.t(self.field_name)) rescue self.field_name
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,26 @@
1
+ #encoding=utf-8
2
+ module FiltrosPersonalizados
3
+ module FieldsPadroes
4
+ class Hora < FiltrosPersonalizados::FieldsPadroes::Field
5
+ def acoes_disponiveis
6
+ [ENTRE]
7
+ end
8
+
9
+ def where
10
+ if values.present?
11
+ "#{self.relation}.#{self.field_name} between '#{values.first}' and '#{values.last}'"
12
+ else
13
+ ""
14
+ end
15
+ end
16
+
17
+ def file
18
+ "personalizaveis/hora.html.erb"
19
+ end
20
+
21
+ def selecao
22
+ self.values.present? ? "#{self.caption}: #{ENTRE.downcase} #{values.first} e #{values.last}" : ""
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,38 @@
1
+ #encoding=utf-8
2
+ module FiltrosPersonalizados
3
+ module FieldsPadroes
4
+ class Idade < FiltrosPersonalizados::FieldsPadroes::Field
5
+ def acoes_disponiveis
6
+ ["Igual a", "Diferente de", "Entre", "Nenhum", "Todos"]
7
+ end
8
+
9
+ def where
10
+ return "" if values.blank?
11
+ case self.tipo_selecionado
12
+ when "Igual a" then "idade_a(pacientes.data_nascimento, interns.data_entrada) == #{values.first}"
13
+ when "Diferente de" then "idade_a(pacientes.data_nascimento, interns.data_entrada) <> #{values.first}"
14
+ when "Entre" then "idade_a(pacientes.data_nascimento, interns.data_entrada) between #{values.first} and #{values.last}"
15
+ when "Nenhum" then "idade_a(pacientes.data_nascimento, interns.data_entrada) isnull "
16
+ when "Todos" then "idade_a(pacientes.data_nascimento, interns.data_entrada) notnull "
17
+ else ""
18
+ end
19
+ end
20
+
21
+ def file
22
+ 'personalizaveis/integer'
23
+ end
24
+
25
+ def selecao
26
+ self.values.present? ? "selecao Idade " : ""
27
+ if self.values.present?
28
+ case self.tipo_selecionado
29
+ when "Igual a" then "Idade: #{values.first} anos"
30
+ when "Diferente de" then "Idade: diferente de #{values.first} anos"
31
+ when "Entre" then "Idade: #{values.first} até #{values.last} anos"
32
+ else ""
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,53 @@
1
+ #encoding=utf-8
2
+ module FiltrosPersonalizados
3
+ module FieldsPadroes
4
+ class Integer < FiltrosPersonalizados::FieldsPadroes::Field
5
+ def acoes_disponiveis
6
+ [IGUAL, DIFERENTE, ENTRE, NENHUM, TODOS] - self.noactions
7
+ end
8
+
9
+ def where
10
+ case self.tipo_selecionado
11
+ when IGUAL then self.values.present? ? "#{self.relation}.#{self.field_name} in (#{values.join(',')})" : ""
12
+ when DIFERENTE then self.values.present? ? "(#{self.relation}.#{self.field_name} not in (#{values.join(',')}) OR #{self.relation}.#{self.field_name} IS NULL)" : ""
13
+ when ENTRE then self.values.present? ? "#{self.relation}.#{self.field_name} between #{values.first} and #{values.last}" : ""
14
+ when NENHUM then "#{self.relation}.#{self.field_name} isnull "
15
+ when TODOS then "#{self.relation}.#{self.field_name} notnull "
16
+ else ""
17
+ end
18
+ end
19
+
20
+ def file
21
+ "personalizaveis/#{ self.partial_name || 'integer'}.html.erb"
22
+ end
23
+
24
+ def selecao
25
+ aux = ''
26
+ if collection.present? && ![NENHUM, TODOS].include?(self.tipo_selecionado)
27
+ aux += self.tipo_selecionado.to_s.downcase
28
+ collection.where(collection_id.to_s => values).each do |f|
29
+ aux += ', ' if aux != self.tipo_selecionado.to_s.downcase
30
+ aux += " #{f.send(collection_name)}"
31
+ end
32
+ elsif self.association.present? && [IGUAL, DIFERENTE].include?(self.tipo_selecionado)
33
+ aux = case self.tipo_selecionado
34
+ when IGUAL then self.values.present? ? " #{IGUAL.downcase} #{self.association.to_selecao(self.values)}" : ""
35
+ when DIFERENTE then self.values.present? ? " #{DIFERENTE.downcase} #{self.association.to_selecao(self.values)}" : ""
36
+ else ""
37
+ end
38
+ else
39
+ aux = case self.tipo_selecionado
40
+ when IGUAL then self.values.present? ? " #{IGUAL.downcase} #{self.values.first}" : ""
41
+ when DIFERENTE then self.values.present? ? " #{DIFERENTE.downcase} #{self.values.first}" : ""
42
+ when ENTRE then self.values.present? ? " #{ENTRE.downcase} #{values.first} e #{values.last}" : ""
43
+ when NENHUM then NENHUM.downcase
44
+ when TODOS then TODOS.downcase
45
+ else ""
46
+ end
47
+ end
48
+ aux.present? ? "#{self.caption}: #{aux}" : ""
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,16 @@
1
+ class FiltrosPersonalizados::FieldsPadroes::Select2 < FiltrosPersonalizados::FieldsPadroes::Field
2
+ NAO_CONTEM = "Não Contém"
3
+ CONTEM = "Contém"
4
+
5
+ def acoes_disponiveis
6
+ [IGUAL, DIFERENTE, TODOS, NENHUM] - self.noactions
7
+ end
8
+
9
+ def file
10
+ "personalizaveis/select2.html.erb"
11
+ end
12
+
13
+ def where
14
+ raise "Precisa ser implementado"
15
+ end
16
+ end
@@ -0,0 +1,42 @@
1
+ #encoding=utf-8
2
+ module FiltrosPersonalizados
3
+ module FieldsPadroes
4
+ class String < FiltrosPersonalizados::FieldsPadroes::Field
5
+ NAO_CONTEM = "Não Contém"
6
+ CONTEM = "Contém"
7
+
8
+ # Personalizaveis::Integer.new({field_name: 'convenio_id', relation: 'interns', tipo_selecionado: 'Entre', values: [3, 5]})
9
+
10
+ def acoes_disponiveis
11
+ [CONTEM, NAO_CONTEM, IGUAL, DIFERENTE, TODOS] - self.noactions
12
+ end
13
+
14
+ def where
15
+ case self.tipo_selecionado
16
+ when CONTEM then values.first.present? ? "#{self.relation}.#{self.field_name} ilike '%#{values.first}%'" : ""
17
+ when NAO_CONTEM then values.first.present? ? "#{self.relation}.#{self.field_name} not ilike '%#{values.first}%'" : ""
18
+ when IGUAL then values.first.present? ? "#{self.relation}.#{self.field_name} == '#{values.first}'" : ""
19
+ when DIFERENTE then values.first.present? ? "#{self.relation}.#{self.field_name} <> '#{values.first}'" : ""
20
+ else ""
21
+ end
22
+ end
23
+
24
+ def file
25
+ "personalizaveis/#{ self.partial_name || 'string'}.html.erb"
26
+ end
27
+
28
+ def selecao
29
+ aux = case self.tipo_selecionado
30
+ when IGUAL then self.values.present? ? " #{IGUAL.downcase} #{self.values.first}" : ""
31
+ when DIFERENTE then self.values.present? ? " #{DIFERENTE.downcase} #{self.values.first}" : ""
32
+ when CONTEM then self.values.present? ? " #{CONTEM.downcase} #{values.first}" : ""
33
+ when NAO_CONTEM then self.values.present? ? " #{NAO_CONTEM.downcase} #{values.first}" : ""
34
+ when TODOS then TODOS.downcase
35
+ else ""
36
+ end
37
+ aux.present? ? "#{self.caption}: #{aux}" : ""
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,34 @@
1
+ #encoding=utf-8
2
+ module FiltrosPersonalizados
3
+ module FieldsPadroes
4
+ class StringOptions < FiltrosPersonalizados::FieldsPadroes::Field
5
+
6
+ def acoes_disponiveis
7
+ [IGUAL, DIFERENTE, TODOS] - self.noactions
8
+ end
9
+
10
+ def where
11
+ return "" if values.blank?
12
+ case self.tipo_selecionado
13
+ when IGUAL then self.values.present? ? "#{self.relation}.#{self.field_name} in ('#{values.join('\',\'')}')" : ""
14
+ when DIFERENTE then self.values.present? ? "#{self.relation}.#{self.field_name} not in ('#{values.join('\',\'')}')" : ""
15
+ else ""
16
+ end
17
+ end
18
+
19
+ def file
20
+ "personalizaveis/stringoptions.html.erb"
21
+ end
22
+
23
+ def selecao
24
+ aux = case self.tipo_selecionado
25
+ when IGUAL then self.values.present? ? " #{IGUAL.downcase} #{values.join(',')}" : ""
26
+ when DIFERENTE then self.values.present? ? " #{DIFERENTE.downcase} #{values.join(',')}" : ""
27
+ else ""
28
+ end
29
+ aux.present? ? "#{self.caption}: #{aux}" : ""
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,15 @@
1
+ #encoding=utf-8
2
+ module FiltrosPersonalizados
3
+ module FieldsPadroes
4
+ class TrueOrFalse < FiltrosPersonalizados::FieldsPadroes::Field
5
+ attr_accessor :id, :nome
6
+ # utilizado para criar opções de seleção para classe boolean
7
+
8
+ def initialize(relation, field_name, args={})
9
+ self.id = args[:id]
10
+ self.nome = args[:nome]
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ module FiltrosPersonalizados
2
+ module FieldsPadroes
3
+ extend ActiveSupport::Autoload
4
+
5
+ autoload :Boolean
6
+ autoload :Date
7
+ autoload :Hora
8
+ autoload :Field
9
+ autoload :Integer
10
+ autoload :Idade
11
+ autoload :Select2
12
+ autoload :StringOptions
13
+ autoload :String
14
+ autoload :TrueOrFalse
15
+
16
+ end
17
+ end