filtros_personalizados 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/filtros_personalizados/association.rb +40 -0
- data/lib/filtros_personalizados/config/routes.rb +9 -0
- data/lib/filtros_personalizados/config.rb +7 -0
- data/lib/filtros_personalizados/controllers/personalizaveis_controller.rb +28 -0
- data/lib/filtros_personalizados/conversor.rb +136 -0
- data/lib/filtros_personalizados/fields_padroes/boolean.rb +46 -0
- data/lib/filtros_personalizados/fields_padroes/date.rb +83 -0
- data/lib/filtros_personalizados/fields_padroes/field.rb +45 -0
- data/lib/filtros_personalizados/fields_padroes/hora.rb +26 -0
- data/lib/filtros_personalizados/fields_padroes/idade.rb +38 -0
- data/lib/filtros_personalizados/fields_padroes/integer.rb +53 -0
- data/lib/filtros_personalizados/fields_padroes/select2.rb +16 -0
- data/lib/filtros_personalizados/fields_padroes/string.rb +42 -0
- data/lib/filtros_personalizados/fields_padroes/string_options.rb +34 -0
- data/lib/filtros_personalizados/fields_padroes/true_or_false.rb +15 -0
- data/lib/filtros_personalizados/fields_padroes.rb +17 -0
- data/lib/filtros_personalizados/filtros_base.rb +123 -0
- data/lib/filtros_personalizados/fornecedores.rb +37 -0
- data/lib/filtros_personalizados/ultima_selecao_user.rb +42 -0
- data/lib/filtros_personalizados/version.rb +3 -0
- data/lib/filtros_personalizados/views/filtros_personalizados/_botao_limpar.html.erb +5 -0
- data/lib/filtros_personalizados/views/filtros_personalizados/_consulta.html.erb +6 -0
- data/lib/filtros_personalizados/views/filtros_personalizados/_date.html.erb +66 -0
- data/lib/filtros_personalizados/views/filtros_personalizados/_filtros.html.erb +82 -0
- data/lib/filtros_personalizados/views/filtros_personalizados/_hora.html.erb +23 -0
- data/lib/filtros_personalizados/views/filtros_personalizados/_integer.html.erb +54 -0
- data/lib/filtros_personalizados/views/filtros_personalizados/_select.html.erb +72 -0
- data/lib/filtros_personalizados/views/filtros_personalizados/_select2.html.erb +125 -0
- data/lib/filtros_personalizados/views/filtros_personalizados/_sem_padrao.html.erb +51 -0
- data/lib/filtros_personalizados/views/filtros_personalizados/_so_consultas.html.erb +26 -0
- data/lib/filtros_personalizados/views/filtros_personalizados/_string.html.erb +40 -0
- data/lib/filtros_personalizados/views/filtros_personalizados/_stringoptions.html.erb +64 -0
- data/lib/filtros_personalizados/views/filtros_personalizados/destroy_consulta.js.erb +1 -0
- data/lib/filtros_personalizados/views/filtros_personalizados/save_consulta.js.erb +1 -0
- data/lib/filtros_personalizados.rb +12 -0
- 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,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
|