Module: Heb412Gen::PlantillaHelper

Defined in:
app/helpers/heb412_gen/plantilla_helper.rb

Class Method Summary collapse

Class Method Details

.antcol(col) ⇒ Object

Dado el nombre de una columna de una hoja de cálculo retorna la anterior

Supone que el nombre de la columna usa el alfabeto en inglés y en mayúsculas. Por ejemplo antcol(‘B’) es ‘A’, antco(‘AA’) es ‘Z’



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
# File 'app/helpers/heb412_gen/plantilla_helper.rb', line 72

def antcol(col)
  if col == ""
    raise "No puede calcular antcol(nil)"
  end

  res = ""
  i = col.length - 1
  resta = 1
  while i >= 0
    if resta == 1 && col[i] == "A" && i == 0
      # elimina saltando
    elsif resta == 1 && col[i] == "A"
      res = "Z" + res
      resta = 1
    elsif resta == 1
      c0 = col[i].ord - 1
      res = c0.chr + res
      resta = 0
    else
      res = col[i] + res
    end
    i -= 1
  end
  res
end

.campos_vista_formulario(v, formularios, agrega_ult_ed) ⇒ Object

Recibe una vista, posibles formularios y retorna los campos usables

al generar una plantilla

Parameters:

  • v

    Vista

  • formularios

    Enumerable con formularios de los cuales sacar campos

  • agrega_ult_ed

    Agrega último editor



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
# File 'app/helpers/heb412_gen/plantilla_helper.rb', line 10

def campos_vista_formulario(v, formularios, agrega_ult_ed)
  ab = ::Ability.new
  col = if v.nil? || ab.campos_plantillas[v].nil?
    [["", ""]]
  else
    ab.campos_plantillas[v][:campos]
  end
  if formularios
    formularios.each do |fr|
      nf = fr.nombreinterno
      if agrega_ult_ed
        col |= ["#{nf}.ultimo_editor"]
        col |= ["#{nf}.fecha_ultimaedicion"]
      end
      fr.campo.each do |c|
        puts "c=#{c.nombreinterno}"
        col |= ["#{nf}.#{c.nombreinterno}"]
        next unless c.tipo == Mr519Gen::ApplicationHelper::SELECCIONMULTIPLE

        c.opcioncs.each do |op|
          col |= ["#{nf}.#{c.nombreinterno}.#{op.valor}"]
        end
      end
    end
  end
  col = col.localize(:es).to_a.map { |x| x.to_s }.sort
  col
end

.compara_columnas(col1, col2) ⇒ Object

Compara columnas de hoja de cálculo col1 y col2, -1 si col1 es menor que col1 0 si son iguales 1 si col1 es mayor que col2



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'app/helpers/heb412_gen/plantilla_helper.rb', line 103

def compara_columnas(col1, col2)
  if col1.length < col2.length
    return -1
  end
  if col2.length < col1.length
    return 1
  end

  # col1.length == col2.length
  i = 0
  i += 1 while i < col1.length && col1[i] == col2[i]

  if i < col1.length
    if col1[i] < col2[i]
      return -1
    else
      return 1
    end
  end

  0
end

.elimina_columna(plantillahcm_id, id) ⇒ Object

En la plantillahcm para hoja de cálculo con id plantillahcm_id, y uno de sus campos con la id dada, digamos en la columna col, emula operación en una hoja de cálculo de eliminar la col-esima columna (que desplaza todas las columnas a la derecha de la col-esima una posición a la izquierda)

otro con ese id).

Parameters:

  • id

    Nuevo id por crear para un campoplantillahcm (no debe haber



163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'app/helpers/heb412_gen/plantilla_helper.rb', line 163

def elimina_columna(plantillahcm_id, id)
  pore = Heb412Gen::Campoplantillahcm
    .where(plantillahcm_id: plantillahcm_id).where(id: id).take
  unless pore
    raise "No se encontró columna con id #{id} en "\
      "plantilla con id #{plantillahcm_id}"
  end
  col = pore.columna
  pore.destroy

  cols = Heb412Gen::Campoplantillahcm
    .where(plantillahcm_id: plantillahcm_id)
    .pluck(:id, :columna)

  cols.each do |icol|
    comp = compara_columnas(icol[1], col)
    next unless comp > 0

    # Mueve cada una de las que esté a la derecha de la col-esima
    c = Heb412Gen::Campoplantillahcm.find(icol[0])
    c.columna = Heb412Gen::PlantillaHelper.antcol(c.columna)
    c.save!(validate: false) # Permitir columnas repetidas temporalmente
  end
end

.inserta_columna(plantillahcm_id, id, col, nombrecampo) ⇒ Object

En la plantillahcm para hoja de cálculo con id plantillahcm_id, emula operación en una hoja de cálculo de insertar una nueva columna a la izquierda de la columna col. Y para poner en la nueva columna col crea un nuevo campoplantillahcm la id y nombrecampo recibidos por parámetros

otro con ese id).

Parameters:

  • id

    Nuevo id por crear para un campoplantillahcm (no debe haber



135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'app/helpers/heb412_gen/plantilla_helper.rb', line 135

def inserta_columna(plantillahcm_id, id, col, nombrecampo)
  cols = Heb412Gen::Campoplantillahcm
    .where(plantillahcm_id: plantillahcm_id).pluck(:id, :columna)
  cols.each do |icol|
    comp = compara_columnas(icol[1], col)
    next unless comp >= 0

    c = Heb412Gen::Campoplantillahcm.find(icol[0])
    c.columna = Heb412Gen::PlantillaHelper.sigcol(c.columna)
    c.save!(validate: false) # Permitir columnas repetidas temporalmente
  end
  Heb412Gen::Campoplantillahcm.create!(
    id: id,
    plantillahcm_id: plantillahcm_id,
    nombrecampo: nombrecampo,
    columna: col,
  )
end

.numero_a_columna(n) ⇒ Object

Convierte el número de una columna a su representación en hoja de cálculo como letras 1 es A 2 es B … 26 es Z 27 es AA …



197
198
199
200
201
202
203
204
205
206
207
208
209
210
# File 'app/helpers/heb412_gen/plantilla_helper.rb', line 197

def numero_a_columna(n)
  if n <= 0
    return ""
  end
  lini = n
  col = ""
  loop do
    letrafin= ((lini - 1) % 26) + 65
    col = letrafin.chr + col
    lini = (lini - 1) / 26
    break if lini <= 0
  end
  return col
end

.sigcol(col) ⇒ Object

Dado el nombre de una columna de una hoja de cálculo retorna la siguiente

Supone que el nombre de la columna usa el alfabeto en inglés y en mayúsculas. Por ejemplo sigcol(‘A’) es ‘B’, sigcol(‘Z’) es ‘AA’



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'app/helpers/heb412_gen/plantilla_helper.rb', line 44

def sigcol(col)
  res = ""
  i = col.length - 1
  lleva = 1
  while i >= 0
    if lleva == 1 && col[i] == "Z"
      res = "A" + res
      lleva = 1
    elsif lleva == 1
      c0 = col[i].ord + 1
      res = c0.chr + res
      lleva = 0
    else
      res = col[i] + res
    end
    i -= 1
  end
  if lleva == 1
    res = "A" + res
  end
  res
end