Module: Heb412Gen::PlantillaHelper
- Defined in:
- app/helpers/heb412_gen/plantilla_helper.rb
Class Method Summary collapse
-
.antcol(col) ⇒ Object
Dado el nombre de una columna de una hoja de cálculo retorna la anterior.
-
.campos_vista_formulario(v, formularios, agrega_ult_ed) ⇒ Object
Recibe una vista, posibles formularios y retorna los campos usables al generar una plantilla.
-
.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.
-
.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).
-
.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.
-
.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 …
-
.sigcol(col) ⇒ Object
Dado el nombre de una columna de una hoja de cálculo retorna la siguiente.
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
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).
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).
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 |