Class: Heb412Gen::GeneralistadoJob

Inherits:
ApplicationJob show all
Defined in:
app/jobs/heb412_gen/generalistado_job.rb

Instance Method Summary collapse

Instance Method Details

#perform(idplantilla, cmodelo, ccontrolador, ids, narch, parsimp, extension, campoid = :id, params = nil) ⇒ Object

Llena plantilla hoja de calculo con id idplantilla a partir de los datos del modelo cmodelo con identificaciones ids, empleando funciones de clase del controlador ccontrolador y generando el archivo narch.

Para lograr una generación rápida y con la información que se desee da oportunidad de:

  1. crear una vista en la base de datos –si no se especifica se usarán los registros filtrados en el listado

  2. convertir de la base de datos a objetos ruby usando el método presenta

Parameters:

  • idplantilla

    Id de la plantilla

  • cmodelo

    Clase del modelo

  • ccontrolador

    Clase del controlador

  • ids

    Lista de ids por incluir en el reporte

  • narch

    Nombre de archivo por generar

  • parsimp

    Algunos parámetros simples y comunes ya reconocidos

  • extension

    Extensión del archivo por generar

  • campoid (defaults to: :id)

    Id del campo que sirvie como id de la consulta

  • params (defaults to: nil)

    listado completo de parámetros



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
# File 'app/jobs/heb412_gen/generalistado_job.rb', line 27

def perform(idplantilla, cmodelo, ccontrolador, ids, narch, parsimp,
  extension, campoid = :id, params = nil)
  puts "Inicio de generación de plantilla #{idplantilla}, con modelo #{cmodelo}, controlador #{ccontrolador}, cantidad de ids #{ids.length}, en #{narch}#{extension}"
  plant = Heb412Gen::Plantillahcm.find(idplantilla)
  controlador = ccontrolador.constantize
  modelo = cmodelo.constantize
  if controlador.respond_to?(:vista_listado)
    # Damos oportunidad de crear una vista si conviene
    vista = controlador.vista_listado(
      plant, ids, modelo, narch, parsimp, extension, campoid, params
    )
    if vista.class == String
      # Suponemos que ya generó hoja de cálculo
    end
    # Podría dar un arreglo con registros de los cuales extraer
    # la información --empleando los nombres de campos apropiados
    # o podría ser un objeto ActiveModel con las diversos registros
  else
    # Si no usamos los registros con las ids dadas para hacer
    # un ActiveModel
    vista = Heb412Gen::ModelosController.vista_listado(
      plant, ids, modelo, narch, parsimp, campoid, params
    )
  end
  if vista.class == String
    n = vista
  else
    fd = if vista.class == Array
      vista
    else
      controlador.cons_a_fd(
        vista,
        plant.campoplantillahcm.map(&:nombrecampo),
      )
    end
    ultp = 0
    n = Heb412Gen::PlantillahcmController
      .llena_plantilla_multiple_fd(plant, fd) do |t, i|
      p = 0
      if t > 0
        p = 100 * i / t
      end
      if p != ultp
        FileUtils.mv(
          "#{narch}#{extension}-#{ultp}",
          "#{narch}#{extension}-#{p}",
        )
        ultp = p
      end
    end
    FileUtils.mv("#{narch}#{extension}-#{ultp}", "#{narch}#{extension}-99")
  end
  nextension = if n.include?(".")
    "." + n.split(".")[-1]
  else
    ".ods"
  end
  if nextension == extension
    FileUtils.mv(n, "#{narch}#{extension}")
  else
    if File.exist?("#{narch}#{extension}")
      File.delete("#{narch}#{extension}")
    end
    dir = File.dirname(narch)
    bn = File.basename(narch)
    if n != "/tmp/#{bn}#{nextension}"
      FileUtils.mv(n, "/tmp/#{bn}#{nextension}")
    end

    if nextension == ".ods" && extension == ".pdf"
      res = %x(libreoffice --headless --convert-to pdf "/tmp/#{bn}#{nextension}" --outdir #{dir})
    elsif nextension == ".ods" && extension == ".xlsx"
      res = %x(libreoffice --headless --convert-to xlsx "/tmp/#{bn}#{nextension}" --outdir #{dir})
    elsif nextension == ".xlsx" && extension == ".ods"

      res = %x(libreoffice --headless --convert-to ods "/tmp/#{bn}#{nextension}" --outdir #{dir})
    elsif nextension == ".xlsx" && extension == ".pdf"

      res = %x(libreoffice --headless --convert-to pdf "/tmp/#{bn}#{nextension}" --outdir #{dir})
    end

    puts "OJO res=#{res}, n=#{n}, dir=#{dir}, bn=#{bn}"
    File.delete("/tmp/#{bn}#{nextension}")
  end
  FileUtils.rm_f("#{narch}#{extension}-99")
  puts "Fin de generación de plantilla #{idplantilla} en #{narch}"
end