Motor heb412_gen para manejar nube de documentos y plantillas (hojas de cálculo .ods y documentos .odt)

Revisado por Hound Pruebas y seguridad:Estado Construcción Clima del Código Cobertura de Pruebas

Logo de heb412_gen

Este es el motor principal de la aplicación (https://gitlab.com/pasosdeJesus/heb412)[Heb412] que maneja una nube de documentos y plantillas ods y odt

Aplican practicamente las mismas instrucciones de otros motores genérico basados en msip, ver por ejemplo: https://gitlab.com/pasosdeJesus/sal7711_gen

Las funcionalidades que provee al momento de este escrito son:

  1. Nube de documentos
  2. Exportación de información
    1. Exportación de un sólo registro a una plantilla .ods
    2. Exportación de un sólo registro a una plantilla .odt
    3. Exportación de un conjunto de registros a una plantilla .ods (estilo listado)
  3. Importación de información
    1. Importación de un conjunto de registros desde un listado .ods

La exportación e importación requieren la previa configuración de la nube.

1. Configure gemas, javascript y base de datos

Este motor opera sobre msip y mr519_gen

En su Gemfile asegure tener:

    gem 'rspreadsheet'
    gem 'redcarpet'

        gem 'msip', 
          git: 'https://gitlab.com/pasosdeJesus/heb412_gen.git'
    gem 'mr519_gen', 
          git: 'https://gitlab.com/pasosdeJesus/mr519_gen.git'
    gem 'heb412_gen', 
      git: 'https://gitlab.com/pasosdeJesus/heb412_gen.git'

Incluya el motor javascript en su app/assets/javascript/application.js   por ejemplo después de //= require msip/motor agregue:

//= require heb412_gen/motor

  y despúes de msip_prepara_eventos_comunes... agregue:

heb412_gen_prepara_eventos_comunes(root);

Ejecute migraciones que agregarán las tablas necesarias

bin/rails db:migrate

2. Configure su aplicación para proveer Nube

2.1 Directorio

Cree un directorio que será la raíz del sistema de archivos y que debe poder ser escrito por el usuario que ejecute la aplicación, e.g

    mkdir public/heb412/

2.2 Configurar directorio en aplicación

Configure esa ruta en su aplicación en config/application.rb con

    config.x.heb412_ruta = Pathname(                                             
          ENV.fetch('HEB412_RUTA', Rails.root.join('public', 'heb412').to_s)         
        )   

y en su archivo .env algo como:

if (test "$HEB412_RUTA" = "") then {                                             
  export HEB412_RUTA=${DIRAP}/public/heb412                                      
} fi;  

2.3 Menú

Agregue un menú o enlaces a los urls de la nube por ejemplo en

</code>
<%= menu_item "Nube", heb412_gen.sisini_path %>

### 2.4 Configurar rutas
En ```config/routes.rb```
mount Heb412Gen::Engine, at: '/', as: 'heb412_gen'

## 3. Configure su aplicación para utilizar llenadores de plantillas

Hay 3 tipos de llenadores de plantillas:
- Para llenar una plantilla ODS con datos de un listado (vista index),
  que se supone puede demorarse en generar una conjunto grande de datos

- Para llenar una plantilla ODS con datos de un resumen (vista show), 
  que suponemos se genera r
CAMPOS_PLANTILLAS_PROPIAS = {
  'Actividad' => { 
    campos: [
      'id', 'fecha', 'responsable', 'nombre', 
      'areas', 'subareas', 'convenios_financieros', 
      'actividades_de_convenio', 'objetivo', 'poblacion'
    ],
    controlador: 'Cor1440Gen::ActividadesController',
ruta: '/actividades'
  }
}

def campos_plantillas 
  Heb412Gen::Ability::CAMPOS_PLANTILLAS_PROPIAS.
    clone.merge(CAMPOS_PLANTILLAS_PROPIAS)
end
Vea un ejemplo m
can :manage, Heb412Gen::Doc
can :manage, Heb412Gen::Plantillahcm
can :manage, Heb412Gen::Plantillahcr
can :manage, Heb412Gen::Plantilladoc
  y a usuarios que necesiten generarlas por lo menos de lectura
can :read, Heb412Gen::Doc
can :manage, Heb412Gen::Plantillahcm
can :manage, Heb412Gen::Plantillahcr
can :manage, Heb412Gen::Plantilladoc

### 3.3 Menú para gestionar plantillas

Cree una entrada en el men

<% if can? :manage, Heb412Gen::Plantillahcm %> <%= opcion_menu "Definir plantillas para listados en hojas de calculo", heb412_gen.plantillashcm_path, desplegable: true %> <% end %>


### 3.4 Configure una vista `index` que llenará un listado .ods

Ser

... class ActoressocialesController < Heb412Gen::ModelosController ... def vistas_manejadas ['Actorsocial'] end ...


Despu

<%= simple_form_for :filtro, { remote: true, url: sivel2_gen.envia_casos_filtro_path, method: "get" } do |f| %> ...

Generar Plantilla
<%= f.input :disgenera, collection: @plantillas, label: false, include_blank: false %>
<%= link_to t('Generar'), '#', class: 'btn', target: '_blank', onclick: 'heb412_gen_completa_generarp(this, \'#filtro_disgenera\', \'/casos/filtro\', \'casos/\')' %>

    </div>
    <div class="col-sm-3">
    </div>
  </div> <!-- row -->
<% end %> 
Este m
      def presenta(atr)
        case atr.to_s
        when 'nacionalde'
          nacionalde ? nacional.nombre : ''
        when 'tdoc'
          self.tdocumento.sigla if self.tdocumento
        else
          presenta_gen(atr)
        end
      end
Y la funci