Class: Sivel2Gen::Ability

Inherits:
Msip::Ability
  • Object
show all
Includes:
CanCan::Ability
Defined in:
app/models/sivel2_gen/ability.rb

Constant Summary collapse

ROLADMIN =
1
ROLOPERADOR =
5
ROLES =
Msip::Ability::ROLES
GRUPO_ANALISTA_CASOS =
20
GRUPO_OBSERVADOR_CASOS =
21
GRUPO_OBSERVADOR_PARTE_CASOS =
22
ROLES_CA =
[
  "Administrar casos, personas, organizaciones sociales " +
  "Administrar plantillas, formularios y encuestas. " +
  "Crear copias de respaldo cifradas y ver bitácoras. " +
  "Administrar usuarios y tablas básicas. ", #1
  "", #2
  "", #3
  "", #4
  "Puede ver reportes, conteos y generar plantillas. "+
  "Si es del grupo ANALISTA puede administrar organizaciones sociales, personas y caso. " +
  "O de lo contrario si es del grupo OBSERVADOR podrá consultar toda la información pero sólo podrá cambiar etiquetas de casos. ", #5
  "O de lo contrario si es del grupo OBSERVADOR DE PARTE podrá consultar la información sólo de algunos casos resultantes de un filtro particular.", #5
  "", #6
  "" #7
]
BASICAS_PROPIAS =
[
  ['Sivel2Gen', 'actividadoficio'],
  ['Sivel2Gen', 'antecedente'],
  ['Sivel2Gen', 'categoria'],
  ['Sivel2Gen', 'contextovictima'],
  ['Sivel2Gen', 'contexto'],
  ['Sivel2Gen', 'escolaridad'],
  ['Sivel2Gen', 'estadocivil'],
  ['Sivel2Gen', 'filiacion'],
  ['Sivel2Gen', 'frontera'],
  ['Sivel2Gen', 'iglesia'],
  ['Sivel2Gen', 'intervalo'],
  ['Sivel2Gen', 'maternidad'],
  ['Sivel2Gen', 'organizacion'],
  ['Sivel2Gen', 'pconsolidado'],
  ['Sivel2Gen', 'presponsable'],
  ['Sivel2Gen', 'profesion'],
  ['Sivel2Gen', 'rangoedad'],
  ['Sivel2Gen', 'region'],
  ['Sivel2Gen', 'resagresion'],
  ['Sivel2Gen', 'sectorsocial'],
  ['Sivel2Gen', 'supracategoria'],
  ['Sivel2Gen', 'tviolencia'],
  ['Sivel2Gen', 'vinculoestado']
]
BASICAS_ID_NOAUTO =

Tablas básicas cuyo id no es autoincremental

[
  ['Sivel2Gen', 'categoria'],
  ['Sivel2Gen', 'tviolencia']
]
NOBASICAS_INDSEQID =

Tablas no básicas pero que tienen índice

[
  ['sivel2_gen', 'caso'],
  ['sivel2_gen', 'actocolectivo'],
  ['sivel2_gen', 'caso_categoria_presponsable'],
  ['Sivel2Gen', 'caso_fotra'],
  ['Sivel2Gen', 'caso_fuenteprensa'],
  ['sivel2_gen', 'caso_solicitud'],
  ['sivel2_gen', 'combatiente'],
  #['Sivel2Gen', 'victima'],
  ['sivel2_gen', 'victimacolectiva']
]
BASICAS_PRIO =

Tablas básicas que deben volcarse primero –por ser requeridas por otras básicas

[
  ['Sivel2Gen', 'pconsolidado'],
  ['Sivel2Gen', 'tviolencia'],
  ['Sivel2Gen', 'supracategoria'],
  ['Sivel2Gen', 'intervalo'],
  ['Sivel2Gen', 'filiacion'],
  ['Sivel2Gen', 'organizacion'],
  ['Sivel2Gen', 'sectorsocial'],
  ['Sivel2Gen', 'vinculoestado'],
  ['Sivel2Gen', 'contextovictima']
]
CAMPOS_PLANTILLAS_PROPIAS =

if ActiveRecord::Base.connection.data_source_exists?(‘sivel2_gen_caso’) Sivel2Gen::Consexpcaso.crea_consexpcaso(nil) end

{
  'Caso' => {
    campos: [
      :caso_id,
      :fecha,
      :memo,
      :ubicaciones,
      :victimas,
      :presponsables,
      :tipificacion,
      :titulo,
      :hora,
      :duracion,
      :grconfiabilidad,
      :gresclarecimiento,
      :grimpunidad,
      :grinformacion,
      :bienes,
      :intervalo_id,
      :created_at,
      :updated_at
    ],
    controlador: 'Sivel2Gen::CasosController',
    ruta: '/casos'
  },
  'Victima' => {
    campos: ActiveRecord::Base.connection.data_source_exists?(
      'sivel2_gen_victima') ?
      (Sivel2Gen::Victima.column_names + [
        :departamento_caso,
        :fecha_caso,
        :municipio_caso,
        :nombre,
        :contextovictima,
        :profesion,
        :presponsables_caso,
        :presponsables_caso_ids,
        :rot1,
        :rot2,
        :rot3,
        :rot4,
        :rot5,
        :rot6,
        :rot7,
        :rot8,
        :rot9,
        :rot10,
        :rot11,
        :rot12,
        :rot13,
        :rot14,
        :rot15,
        :rot16,
        :rot17,
        :rot18,
        :rot19,
        :rot20,
        :rot21,
        :rot22,
        :rot23,
        :rot24,
        :rot25,
        :rot26,
        :rot27,
        :rot28,
        :rot29,
        :rot30,
        :rot31,
        :rot32,
        :rot33,
        :rot34,
        :rot35,
        :rot36,
        :rot37,
        :rot38,
        :rot39,
        :sexo,
        :trimestre_caso,
        :ubicacion_caso,
      ]) : [],
    controlador: 'Sivel2Gen::CasosController',
    ruta: '/casos'
  }

}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.derechosObject



107
108
109
# File 'app/models/sivel2_gen/ability.rb', line 107

def self.derechos
  'Creative Commons Atribución 2.5 Colombia. http://creativecommons.org/licenses/by/2.5/co/'
end

.initialize_sivel2_gen(habilidad, usuario = nil) ⇒ Object

Establece autorizaciones con CanCanCan



213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
# File 'app/models/sivel2_gen/ability.rb', line 213

def self.initialize_sivel2_gen(habilidad, usuario = nil)
  # Sin autenticación puede consultarse información geográfica
  habilidad.can :read, [Msip::Pais, Msip::Departamento, Msip::Municipio, Msip::Centropoblado, Msip::Ubicacionpre]

  # Hacer conteos
  habilidad.can :cuenta, Sivel2Gen::Caso

  # La consulta web es publica dependiendo de
  if !usuario && Rails.application.config.x.sivel2_consulta_web_publica
    habilidad.can :read, Msip::Ubicacionpre

    habilidad.can :buscar, Sivel2Gen::Caso
    habilidad.can :contar, Sivel2Gen::Caso
    habilidad.can :lista, Sivel2Gen::Caso
    
    habilidad.can [:read, :filtra_por_tviolencia], Sivel2Gen::Categoria
    

    # API público
    # Mostrar un caso con casos/101
    # Mostrar un caso en XML - HTML con casos/101.xml
    # Mostrar un caso en XML para descarga casos/101.xrlat
    habilidad.can [:read,:show], Sivel2Gen::Caso

    #Mostrar registros limitados
    habilidad.can :index4000, Sivel2Gen::Caso
  end

  if !usuario || usuario.fechadeshabilitacion
    return
  end

  # Los siguientes son para todo autenticado

  habilidad.can :buscar, Sivel2Gen::Caso
  habilidad.can :contar, Sivel2Gen::Caso
  habilidad.can :exportaCSV, Sivel2Gen::Caso
  habilidad.can :lista, Sivel2Gen::Caso
  habilidad.can :reportar, Sivel2Gen::Caso
  habilidad.can [:read, :update], Mr519Gen::Encuestausuario
  habilidad.can :read, Msip::Orgsocial


  # Conteos
  habilidad.can :victimizaciones, Sivel2Gen::Caso
  habilidad.can :filtra_por_tviolencia, Sivel2Gen::Categoria
  habilidad.can :genvic, Sivel2Gen::Caso
  habilidad.can :personas, Sivel2Gen::Caso

  habilidad.can :descarga_anexo, Msip::Anexo
  habilidad.can :mostrar_portada, Msip::Anexo
  habilidad.can :abre_anexo, Msip::Anexo
  habilidad.can :manage, Sivel2Gen::AnexoCaso


  habilidad.can :manage, Msip::PersonaTrelacion
  habilidad.can :contar, Msip::Ubicacion
  habilidad.can :mundep, Msip::Ubicacionpre


  habilidad.can :manage, Sivel2Gen::CasoEtiqueta
  habilidad.can :manage, Sivel2Gen::CasoFuenteprensa
  habilidad.can :manage, Sivel2Gen::CasoFotra
  habilidad.can :manage, Sivel2Gen::CasoPresponsable
  habilidad.can :manage, Sivel2Gen::CasoSolicitud
  habilidad.can :nuevo, Sivel2Gen::Combatiente
  habilidad.can :nuevo, Sivel2Gen::Presponsable
  habilidad.can :manage, Sivel2Gen::Victima
  habilidad.can :manage, Sivel2Gen::Victimacolectiva

  if usuario && usuario.rol then
    habilidad.can :nuevo, Msip::Ubicacion
    case usuario.rol
    when Ability::ROLANALI
      habilidad.can :read, Heb412Gen::Doc
      habilidad.can :read, Heb412Gen::Plantilladoc
      habilidad.can :read, Heb412Gen::Plantillahcm
      habilidad.can :read, Heb412Gen::Plantillahcr
      habilidad.can :index, Sivel2Gen::Victima

      if usuario.grupo &&
          usuario.grupo.pluck(:id).include?(GRUPO_ANALISTA_CASOS)
        habilidad.can [:read, :new, :edit, :update, :create],
          Msip::Orgsocial
        habilidad.can :create, Msip::Bitacora, usuario: { id: usuario.id }
        habilidad.can :read, Msip::Bitacora, usuario: { id: usuario.id }
        habilidad.can :manage, Msip::Persona
        habilidad.can :manage, Msip::Grupoper

        habilidad.can :manage, Sivel2Gen::Acto
        habilidad.can :manage, Sivel2Gen::Actocolectivo
        habilidad.can [
          :read, :new, :edit, :update, :create, 
          :importa, :importarrelatos, :errores_importacion,
          :nuevo, :nueva, :destroy], Sivel2Gen::Caso

        habilidad.cannot :solocambiaretiquetas, Sivel2Gen::Caso
        habilidad.can [:refresca, :validar], Sivel2Gen::Caso

        habilidad.can :read, Sivel2Gen::Victima
      else
        habilidad.can :read, Msip::Orgsocial
        habilidad.can :read, Msip::Bitacora, usuario: { id: usuario.id }
        habilidad.can :read, Msip::Persona
        habilidad.can :read, Msip::Grupoper

        habilidad.can :read, Sivel2Gen::Acto
        habilidad.can :read, Sivel2Gen::Actocolectivo
        habilidad.cannot [:new, :create], Sivel2Gen::Caso
        habilidad.can :read, Sivel2Gen::Victima

        if usuario.grupo &&
            usuario.grupo.pluck(:id).
            include?(GRUPO_OBSERVADOR_PARTE_CASOS)
          dicc_filtro = {}
          if usuario.filtrodepartamento_ids.count > 0
            dicc_filtro[:ubicacion]={ 
              departamento_id: usuario.filtrodepartamento_ids
            }
          end
          fini = Sivel2Gen::Caso.all.minimum(:fecha) ?
            Sivel2Gen::Caso.all.minimum(:fecha) : Date.new(1970,01,01)
          if usuario.observadorffechaini
            fini = usuario.observadorffechaini
          end
          ffin = Date.today()
          if usuario.observadorffechafin
            ffin = usuario.observadorffechafin
          end
          dicc_filtro[:fecha]=(fini..ffin)
          habilidad.can [:show, :read], Sivel2Gen::Caso, dicc_filtro
        else #Suponemos que es Observador de todo
          habilidad.can [:read, :edit, :solocambiaretiquetas, :update], 
            Sivel2Gen::Caso
        end
      end
    when Ability::ROLADMIN
      habilidad.can :manage, Heb412Gen::Doc
      habilidad.can :manage, Heb412Gen::Plantilladoc
      habilidad.can :manage, Heb412Gen::Plantillahcm
      habilidad.can :manage, Heb412Gen::Plantillahcr

      habilidad.can :manage, Mr519Gen::Formulario
      habilidad.can :manage, Mr519Gen::Encuestausuario 

      habilidad.can :manage, Msip::Orgsocial
      habilidad.can :manage, Msip::Bitacora
      habilidad.can :manage, Msip::Persona
      habilidad.can :manage, Msip::Grupoper
      habilidad.can :manage, Msip::Respaldo7z
      habilidad.can :manage, Msip::Ubicacionpre

      habilidad.can :manage, Sivel2Gen::Acto
      habilidad.can :manage, Sivel2Gen::Actocolectivo
      habilidad.can :manage, Sivel2Gen::Caso
      habilidad.cannot :solocambiaretiquetas, Sivel2Gen::Caso
      habilidad.can :read, Sivel2Gen::Victima

      habilidad.can :manage, Usuario
      habilidad.can :manage, :tablasbasicas
      habilidad.tablasbasicas.each do |t|
        c = Ability.tb_clase(t)
        habilidad.can :manage, c
      end
    end # case
  end # if
end

.organizacion_responsableObject



110
111
112
# File 'app/models/sivel2_gen/ability.rb', line 110

def self.organizacion_responsable
  'Banco de Datos del CINEP'
end

Instance Method Details

#basicas_id_noautoObject



69
70
71
# File 'app/models/sivel2_gen/ability.rb', line 69

def basicas_id_noauto
  Msip::Ability::BASICAS_ID_NOAUTO + BASICAS_ID_NOAUTO
end

#campos_plantillasObject



204
205
206
207
208
209
# File 'app/models/sivel2_gen/ability.rb', line 204

def campos_plantillas
  n = Heb412Gen::Ability::CAMPOS_PLANTILLAS_PROPIAS.
    clone.merge(CAMPOS_PLANTILLAS_PROPIAS)
  #byebug
  return n
end

#initialize_sivel2_gen(usuario = nil) ⇒ Object

def initialize_sivel2_gen



381
382
383
# File 'app/models/sivel2_gen/ability.rb', line 381

def initialize_sivel2_gen(usuario = nil)
  Sivel2Gen::Ability.initialize_sivel2_gen(self, usuario)
end

#nobasicas_indice_seq_con_idObject

Tablas no básicas pero que tienen índice con secuencia id_seq



87
88
89
# File 'app/models/sivel2_gen/ability.rb', line 87

def nobasicas_indice_seq_con_id
  Msip::Ability::NOBASICAS_INDSEQID + NOBASICAS_INDSEQID
end

#tablasbasicasObject



57
58
59
60
61
# File 'app/models/sivel2_gen/ability.rb', line 57

def tablasbasicas
  r = (Msip::Ability::BASICAS_PROPIAS - 
       [['Msip', 'oficina']]) + BASICAS_PROPIAS 
  return r
end

#tablasbasicas_prioObject



104
105
106
# File 'app/models/sivel2_gen/ability.rb', line 104

def tablasbasicas_prio
  Msip::Ability::BASICAS_PRIO + BASICAS_PRIO - [['Msip', 'grupo']]
end