Class: Sivel2Gen::Fil23Gen::GraficarApexchartsController

Inherits:
ApplicationController
  • Object
show all
Defined in:
app/controllers/sivel2_gen/fil23_gen/graficar_apexcharts_controller.rb

Instance Method Summary collapse

Instance Method Details

#consulta_gen(desagregado, filtros) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
# File 'app/controllers/sivel2_gen/fil23_gen/graficar_apexcharts_controller.rb', line 39

def consulta_gen(desagregado, filtros)
  "SELECT caso.fecha AS fecha_caso, count(*) AS total FROM cvt1 
  JOIN sivel2_gen_caso AS caso ON caso.id=cvt1.caso_id 
  JOIN msip_persona AS persona ON persona.id=persona_id
  JOIN msip_ubicacion AS ubi ON ubi.id=caso.ubicacion_id
  JOIN sivel2_gen_categoria AS categoria ON categoria.id=categoria_id
  WHERE #{desagregado} 
  AND caso.fecha >='" + @vic_fechaini + "'
  AND caso.fecha <='" + @vic_fechafin + "'
  #{filtros} 
  GROUP BY 1 ORDER BY fecha_caso;"
end

#consulta_totcatObject



61
62
63
64
65
66
# File 'app/controllers/sivel2_gen/fil23_gen/graficar_apexcharts_controller.rb', line 61

def consulta_totcat
  "SELECT categoria.nombre AS categoria_nom, COUNT(*) AS total 
  FROM cvt1
  JOIN sivel2_gen_categoria AS categoria ON categoria.id=categoria_id
  GROUP BY 1;"
end

#consulta_totdepObject



68
69
70
71
72
73
74
75
# File 'app/controllers/sivel2_gen/fil23_gen/graficar_apexcharts_controller.rb', line 68

def consulta_totdep
  "SELECT departamento.nombre AS departamento_nombre, COUNT(*) AS total
  FROM cvt1
  JOIN sivel2_gen_caso as caso ON caso.id=cvt1.caso_id 
  JOIN msip_ubicacion as ubi ON ubi.id=caso.ubicacion_id
  JOIN msip_departamento as departamento ON departamento.id=ubi.departamento_id
  GROUP BY 1;"
end

#consulta_totsexObject



52
53
54
55
56
57
58
59
# File 'app/controllers/sivel2_gen/fil23_gen/graficar_apexcharts_controller.rb', line 52

def consulta_totsex
  "SELECT persona.sexo AS sexo_persona, COUNT(*) AS total FROM cvt1
  JOIN msip_persona AS persona ON persona.id=persona_id 
  GROUP BY 1
  ORDER BY persona.sexo='#{Msip::Persona::convencion_sexo[:sexo_sininformacion].to_s}', 
  persona.sexo='#{Msip::Persona::convencion_sexo[:sexo_masculino].to_s}',
  persona.sexo='#{Msip::Persona::convencion_sexo[:sexo_femenino].to_s}';"
end

#graficar_sexoObject



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'app/controllers/sivel2_gen/fil23_gen/graficar_apexcharts_controller.rb', line 77

def graficar_sexo
  series_gen= []
  if (@vic_dep.count == 0) || (@vic_categorias.count == 0)
    flash.now[:info] = "Uno de los filros se encuentra vacío"
  else
    Msip::Persona::sexo_opcoines.each do |sexo|
      desagr = "persona.sexo ='#{sexo[1].to_s}'" 
      filtros= ""
      filtros << "
      AND ubi.departamento_id IN (#{(@vic_dep).join(', ')})" if @vic_dep.count >= 1
      filtros << "
      AND categoria.id IN (#{@vic_categorias.join(', ')})" if @vic_categorias.count >= 1
      valores_sex = ActiveRecord::Base.connection.execute(consulta_gen(desagr, filtros)).values.to_h 
      presex = {name: sexo[0], data: valores_sex}
      series_gen.push(presex)
    end
  end
  return series_gen
end

#victimizaciones_individualesObject

Control de acceso no estandar en función



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'app/controllers/sivel2_gen/fil23_gen/graficar_apexcharts_controller.rb', line 9

def victimizaciones_individuales
  authorize! :contar, Sivel2Gen::Caso

  ## Valores de los filtros
  @vic_fechaini = params[:filtro] ? 
    Msip::FormatoFechaHelper.fecha_local_estandar(
      params[:filtro][:fechaini]) : Sivel2Gen::Caso.minimum(:fecha).to_s
  @vic_fechafin = params[:filtro] ? 
    Msip::FormatoFechaHelper.fecha_local_estandar(
      params[:filtro][:fechafin]) : Sivel2Gen::Caso.maximum(:fecha).to_s

  ldep = Msip::Departamento.habilitados.where(
    pais_id: Msip.paisomision).pluck(:id)
  @vic_dep = params[:filtro] && params[:filtro][:departamento] ?
    ldep & params[:filtro][:departamento] : ldep

  @categorias_gen = Sivel2Gen::Categoria.joins(
    'JOIN sivel2_gen_supracategoria ON '\
    'sivel2_gen_supracategoria.id=sivel2_gen_categoria.supracategoria_id ').
    where('sivel2_gen_categoria.fechadeshabilitacion is NULL 
        AND sivel2_gen_categoria.tipocat=\'I\'').
        reorder('sivel2_gen_supracategoria.tviolencia_id', :id)
  @categorias = @categorias_gen.pluck(:id).uniq 
  @vic_categorias = params[:filtro] && params[:filtro][:categorias] ? 
    @categorias & params[:filtro][:categorias].map(&:to_i) : @categorias

  lsexo = Msip::Persona::sexo_opciones.map{|se| se[1].to_s}
  @vic_sexo = params[:filtro] && params[:filtro][:sexo] ? 
    lsexo & params[:filtro][:sexo] : lsexo

  def consulta_gen(desagregado, filtros)
    "SELECT caso.fecha AS fecha_caso, count(*) AS total FROM cvt1 
    JOIN sivel2_gen_caso AS caso ON caso.id=cvt1.caso_id 
    JOIN msip_persona AS persona ON persona.id=persona_id
    JOIN msip_ubicacion AS ubi ON ubi.id=caso.ubicacion_id
    JOIN sivel2_gen_categoria AS categoria ON categoria.id=categoria_id
    WHERE #{desagregado} 
    AND caso.fecha >='" + @vic_fechaini + "'
    AND caso.fecha <='" + @vic_fechafin + "'
    #{filtros} 
    GROUP BY 1 ORDER BY fecha_caso;"
  end

  def consulta_totsex
    "SELECT persona.sexo AS sexo_persona, COUNT(*) AS total FROM cvt1
    JOIN msip_persona AS persona ON persona.id=persona_id 
    GROUP BY 1
    ORDER BY persona.sexo='#{Msip::Persona::convencion_sexo[:sexo_sininformacion].to_s}', 
    persona.sexo='#{Msip::Persona::convencion_sexo[:sexo_masculino].to_s}',
    persona.sexo='#{Msip::Persona::convencion_sexo[:sexo_femenino].to_s}';"
  end

  def consulta_totcat
    "SELECT categoria.nombre AS categoria_nom, COUNT(*) AS total 
    FROM cvt1
    JOIN sivel2_gen_categoria AS categoria ON categoria.id=categoria_id
    GROUP BY 1;"
  end

  def consulta_totdep
    "SELECT departamento.nombre AS departamento_nombre, COUNT(*) AS total
    FROM cvt1
    JOIN sivel2_gen_caso as caso ON caso.id=cvt1.caso_id 
    JOIN msip_ubicacion as ubi ON ubi.id=caso.ubicacion_id
    JOIN msip_departamento as departamento ON departamento.id=ubi.departamento_id
    GROUP BY 1;"
  end

  def graficar_sexo
    series_gen= []
    if (@vic_dep.count == 0) || (@vic_categorias.count == 0)
      flash.now[:info] = "Uno de los filros se encuentra vacío"
    else
      Msip::Persona::sexo_opcoines.each do |sexo|
        desagr = "persona.sexo ='#{sexo[1].to_s}'" 
        filtros= ""
        filtros << "
        AND ubi.departamento_id IN (#{(@vic_dep).join(', ')})" if @vic_dep.count >= 1
        filtros << "
        AND categoria.id IN (#{@vic_categorias.join(', ')})" if @vic_categorias.count >= 1
        valores_sex = ActiveRecord::Base.connection.execute(consulta_gen(desagr, filtros)).values.to_h 
        presex = {name: sexo[0], data: valores_sex}
        series_gen.push(presex)
      end
    end
    return series_gen
  end 

  if params[:filtro]
    if params[:filtro][:desagregar] == 'Sexo' 
      series_gen = graficar_sexo
      sexos = Msip::Persona::sexo_opciones.to_h.invert
      valores = ActiveRecord::Base.connection.execute(consulta_totsex).values.to_h
      @valores_tot= valores.to_a.map{|k| [sexos[k[0].to_sym], k[1]]}.to_h
      @opciones_tot = {
        titulo: 'Victimizaciones por sexo',
        ejex: 'Sexo',
        ejey: 'Victimizaciones'
      }
    end
    if params[:filtro][:desagregar] == 'Departamento' 
      series_gen= []
      deps = Msip::Departamento.habilitados.where(
        pais_id: Msip.paisomision)
      if (@vic_sexo.count == 0) || (@vic_categorias.count == 0)
        flash.now[:info] = "Uno de los filtros se encuentra vacío"
      else
        deps.each do |dep|
          desagr = "ubi.departamento_id ='#{dep.id}'"
          filtros = ""
          filtros << ("
            AND persona.sexo IN (" + (@vic_sexo).map{|k| "'" + k + "'"}.join(', ') + ")") if @vic_sexo.count >= 1
          filtros << ("
            AND categoria.id IN (" + (@vic_categorias).join(', ') + ")") if @vic_categorias.count >= 1
          valores_dep = ActiveRecord::Base.connection.execute(consulta_gen(desagr, filtros)).values.to_h 
          predep = {name: dep.nombre, data: valores_dep}
          series_gen.push(predep)
        end
      end
      @valores_tot = ActiveRecord::Base.connection.execute(
        consulta_totdep).values.to_h
      @opciones_tot = {
        titulo: 'Victimizaciones por departamento',
        ejex: 'Departamentos',
        ejey: 'Victimizaciones'
      }
    end

    if params[:filtro][:desagregar] == 'Categoria' 
      series_gen= []
      if (@vic_dep.count == 0) || (@vic_sexo.count == 0)
        flash.now[:info] = "Uno de los filtros se encuentra vacío"
      else
        @categorias.each do |cat|
          desagr = "categoria.id ='#{cat}'"
          filtros= ""
          filtros << "
            AND ubi.departamento_id IN (#{(@vic_dep).join(', ')})" if @vic_dep.count >= 1 
          filtros << ("
            AND persona.sexo IN (" + (@vic_sexo).map{|k| "'" + k + "'"}.join(', ') + ')') if @vic_sexo.count >= 1
          valores_cat = ActiveRecord::Base.connection.execute(consulta_gen(desagr, filtros)).values.to_h 
          precat = {name: cat, data: valores_cat}
          series_gen.push(precat)
        end
      end
      @valores_tot = ActiveRecord::Base.connection.execute(consulta_totcat).values.to_h
      @opciones_tot = {
        titulo: 'Victimizaciones por Categorías de violencia',
        ejex: 'Categorías de violencia',
        ejey: 'Victimizaciones'
      }
    end
  else 
    series_gen = graficar_sexo
    sexos = Msip::Persona::sexo_opciones.to_h.invert
    valores = ActiveRecord::Base.connection.execute(consulta_totsex).values.to_h
    @valores_tot= valores.to_a.map{|k| [sexos[k[0].to_sym], k[1]]}.to_h 
    @opciones_tot = {
      titulo: 'Victimizaciones por sexo',
      ejex: 'Sexo',
      ejey: 'Victimizaciones'
    }
  end


  render 'fil23_gen/graficar_apexcharts/victimizaciones_individuales', locals: {series_gen: series_gen},  
    layout: 'application'
end