alego_report 0.1.2 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. data/lib/alego_report.rb +224 -204
  2. metadata +3 -3
data/lib/alego_report.rb CHANGED
@@ -1,284 +1,304 @@
1
1
  class Relatorio
2
-
3
- attr_accessor :titulo_relatorio, :modo_layout, :margem_geral, :config_campos, :hash_dados, :doc, :codigo_extra_cabecalho, :codigo_extra_imprimir_campos, :campos_para_impressao, :eixo_x, :eixo_y
4
2
 
5
- def initialize(titulo_relatorio, modo_layout, margem_geral, config_campos, hash_dados)
6
- @titulo_relatorio = titulo_relatorio
7
- @modo_layout = modo_layout
8
- @margem_geral = margem_geral
9
- @config_campos = config_campos
10
- @hash_dados = hash_dados
3
+ attr_accessor :titulo_relatorio, :modo_layout, :margem_geral, :config_campos, :hash_dados, :doc, :codigo_extra_cabecalho, :codigo_extra_imprimir_campos, :campos_para_impressao, :eixo_x, :eixo_y
11
4
 
12
- @doc = nil
13
- @campos_para_impressao = []
14
- @eixo_x = nil
15
- @eixo_y = nil
5
+ def initialize(titulo_relatorio, modo_layout, margem_geral, config_campos, hash_dados)
6
+ @titulo_relatorio = titulo_relatorio
7
+ @modo_layout = modo_layout
8
+ @margem_geral = margem_geral
9
+ @config_campos = config_campos
10
+ @hash_dados = hash_dados
16
11
 
17
- end
12
+ @doc = nil
13
+ @campos_para_impressao = []
14
+ @eixo_x = nil
15
+ @eixo_y = nil
18
16
 
19
- def desenhar_cabecalho
17
+ end
20
18
 
21
- if @modo_layout == "retrato"
22
- @eixo_x = 0.5
23
- @eixo_y = 27.8
24
- # @doc = RGhost::Document.new :paper => :A4, :landscape => false, :margin =>[0.5,0.5,0.5,0.5], :count_pages => 10
25
- else
26
- @eixo_x = 0.5
27
- @eixo_y = 19
28
- # @doc = RGhost::Document.new :paper => :A4, :landscape => true, :margin =>[0.5,0.5,0.5,0.5], :count_pages => 10
29
- end
19
+ def desenhar_cabecalho
30
20
 
31
- @doc = build_rghost_doc(@modo_layout, @margem_geral)
21
+ if @modo_layout == "retrato"
22
+ @eixo_x = 0.5
23
+ @eixo_y = 27.8
24
+ # @doc = RGhost::Document.new :paper => :A4, :landscape => false, :margin =>[0.5,0.5,0.5,0.5], :count_pages => 10
25
+ else
26
+ @eixo_x = 0.5
27
+ @eixo_y = 19
28
+ # @doc = RGhost::Document.new :paper => :A4, :landscape => true, :margin =>[0.5,0.5,0.5,0.5], :count_pages => 10
29
+ end
32
30
 
33
- @doc.image "public/logo.jpg", :x => @eixo_x, :y => @eixo_y, :zoom => 11
31
+ @doc = build_rghost_doc(@modo_layout, @margem_geral)
34
32
 
35
- @doc.next_row
36
- @doc.show titulo_relatorio, :tag=> :hel_negrito_tit, :align => :page_center
33
+ @doc.image "public/logo.jpg", :x => @eixo_x, :y => @eixo_y, :zoom => 11
37
34
 
38
- yield(@doc, @eixo_x, @eixo_y)
35
+ @doc.next_row
36
+ @doc.show titulo_relatorio, :tag=> :hel_negrito_tit, :align => :page_center
39
37
 
40
- end
38
+ yield(@doc, @eixo_x, @eixo_y)
41
39
 
42
- def calcular_campos
40
+ end
43
41
 
44
- campos_agrupados = @config_campos.group_by{|x| x[:visivel]}[true].group_by{|x| x[:prioridade]}
42
+ def calcular_campos
45
43
 
46
- total_catacteres = 0
47
- qtd_campos = 0
44
+ campos_agrupados = @config_campos.group_by{|x| x[:visivel]}[true].group_by{|x| x[:prioridade]}
48
45
 
49
- for i in 0..campos_agrupados.size
46
+ total_catacteres = 0
47
+ qtd_campos = 0
50
48
 
51
- if campos_agrupados[i] != nil
52
- qtd_campos += campos_agrupados[i].size
53
- total_catacteres += campos_agrupados[i].inject(0) {|sum, hash| sum + hash[:qtd_caracteres]}
54
- end
49
+ for i in 0..campos_agrupados.size
55
50
 
56
- end
51
+ if campos_agrupados[i] != nil
52
+ qtd_campos += campos_agrupados[i].size
53
+ total_catacteres += campos_agrupados[i].inject(0) {|sum, hash| sum + hash[:qtd_caracteres]}
54
+ end
57
55
 
58
- espacos_separa_colunas = qtd_campos * 0.6
56
+ end
59
57
 
60
- total_x = (modo_layout == "retrato" ? 20.7 : 29.5)
58
+ espacos_separa_colunas = qtd_campos * 0.6
61
59
 
62
- total_disponivel = ((total_x - (@margem_geral * 2) - espacos_separa_colunas) / 0.2)
63
-
64
- total_restante = (total_disponivel - total_catacteres).to_i
60
+ total_x = (modo_layout == "retrato" ? 20.7 : 29.5)
65
61
 
66
- i = 1
67
- limite = 1
62
+ total_disponivel = ((total_x - (@margem_geral * 2) - espacos_separa_colunas) / 0.2)
68
63
 
69
- while total_restante != 0
64
+ total_restante = (total_disponivel - total_catacteres).to_i
70
65
 
71
- if total_restante > 0
72
- limite = campos_agrupados.size
73
- i = 1
74
- else
75
- i = campos_agrupados.size
76
- limite = 1
77
- end
66
+ i = 1
67
+ limite = 1
78
68
 
79
- while i != 0
69
+ while total_restante != 0
80
70
 
81
- if campos_agrupados[i] != nil
71
+ if total_restante > 0
72
+ limite = campos_agrupados.size
73
+ i = 1
74
+ else
75
+ i = campos_agrupados.size
76
+ limite = 1
77
+ end
82
78
 
83
- caracter_adicional = 0
84
- campos_agrupados[i].each_with_index do |item, ii|
79
+ while i != 0
85
80
 
86
- if total_restante > 0
81
+ if campos_agrupados[i] != nil
87
82
 
88
- caracter_adicional = item[:qtd_caracteres] * ((35.0 - (i * 5.0)) / 100)
83
+ caracter_adicional = 0
84
+ campos_agrupados[i].each_with_index do |item, ii|
89
85
 
90
- #arredonda pra cima
91
- caracter_adicional = ((caracter_adicional*1).ceil/1.0).to_i
86
+ if total_restante > 0
92
87
 
93
- if caracter_adicional == 0
94
- caracter_adicional = 1
95
- end
88
+ caracter_adicional = item[:qtd_caracteres] * ((35.0 - (i * 5.0)) / 100)
96
89
 
97
- if caracter_adicional > total_restante
98
- item[:qtd_caracteres] += total_restante
99
- total_restante = 0
100
- else
101
- item[:qtd_caracteres] += caracter_adicional
102
- total_restante -= caracter_adicional
103
- end
104
- else
90
+ #arredonda pra cima
91
+ caracter_adicional = ((caracter_adicional*1).ceil/1.0).to_i
105
92
 
106
- caracter_adicional = (item[:qtd_caracteres] * ((i * 5.0) / 100.0)) * -1
93
+ if caracter_adicional == 0
94
+ caracter_adicional = 1
95
+ end
107
96
 
108
- #arredonda pra cima
109
- caracter_adicional = ((caracter_adicional*1).ceil/1.0).to_i
97
+ if caracter_adicional > total_restante
98
+ item[:qtd_caracteres] += total_restante
99
+ total_restante = 0
100
+ else
101
+ item[:qtd_caracteres] += caracter_adicional
102
+ total_restante -= caracter_adicional
103
+ end
104
+ else
110
105
 
111
- if caracter_adicional == 0
112
- caracter_adicional = -1
113
- end
106
+ caracter_adicional = (item[:qtd_caracteres] * ((i * 5.0) / 100.0)) * -1
114
107
 
115
- if caracter_adicional > total_restante
116
- item[:qtd_caracteres] += caracter_adicional
117
- total_restante -= caracter_adicional
118
- else
119
- item[:qtd_caracteres] += total_restante
120
- total_restante = 0
121
- end
122
- end
123
- end
124
- end
108
+ #arredonda pra cima
109
+ caracter_adicional = ((caracter_adicional*1).ceil/1.0).to_i
125
110
 
126
- if total_restante > 0
127
- i += 1
111
+ if caracter_adicional == 0
112
+ caracter_adicional = -1
113
+ end
128
114
 
129
- if i == limite
130
- i = 0
131
- end
132
- else
133
- i -= 1
134
- end
135
- end
136
- end
115
+ if caracter_adicional > total_restante
116
+ item[:qtd_caracteres] += caracter_adicional
117
+ total_restante -= caracter_adicional
118
+ else
119
+ item[:qtd_caracteres] += total_restante
120
+ total_restante = 0
121
+ end
122
+ end
123
+ end
124
+ end
137
125
 
138
- campos_agrupados.each do |campo|
126
+ if total_restante > 0
127
+ i += 1
139
128
 
140
- campo[1].each_with_index do |item, i|
141
- @campos_para_impressao << { :nome_campo => item[:nome_campo], :qtd_caracteres => item[:qtd_caracteres], :ordem => item[:ordem], :nome_impressao => item[:nome_impressao] }
142
- end
143
- end
129
+ if i == limite
130
+ i = 0
131
+ end
132
+ else
133
+ i -= 1
134
+ end
135
+ end
136
+ end
144
137
 
145
- end
138
+ campos_agrupados.each do |campo|
146
139
 
147
- def imprimir_campos(desenhar_linhas=true)
140
+ campo[1].each_with_index do |item, i|
141
+ @campos_para_impressao << { :nome_campo => item[:nome_campo], :qtd_caracteres => item[:qtd_caracteres], :ordem => item[:ordem], :nome_impressao => item[:nome_impressao] }
142
+ end
148
143
 
149
- calcular_campos
144
+ end
150
145
 
151
- configuracao_campos_ordenado = campos_para_impressao.sort_by {|k, v| k[:ordem]}
152
146
 
153
- # if desenhar_linhas == true
154
- # doc.horizontal_line :top, :border => { :color => '#000000', :width => 1 }
155
- # end
147
+ end
156
148
 
157
- colunas_impressas = ""
158
- configuracao_campos_ordenado.each_with_index do |campo, ii|
149
+ def imprimir_campos(desenhar_linhas=true)
159
150
 
160
- espacos_em_branco = campo[:qtd_caracteres] - campo[:nome_impressao].to_s.size
151
+ calcular_campos
161
152
 
162
- espacos_em_branco = 0 if espacos_em_branco < 1
163
- colunas_impressas += campo[:nome_impressao].upcase + (" " * (espacos_em_branco / 0.5 + 3))
164
- end
153
+ configuracao_campos_ordenado = @campos_para_impressao.sort_by {|k, v| k[:ordem]}
165
154
 
166
- # if desenhar_linhas == true
167
- # doc.horizontal_line :bottom, :border => { :color => '#000000', :width => 1 }
168
- # end
155
+ if desenhar_linhas == true
156
+ doc.horizontal_line :top, :border => { :color => '#000000', :width => 1 }
157
+ end
169
158
 
170
- doc.moveto :x => @eixo_x, :y => @eixo_y
171
- doc.show colunas_impressas, :tag => :hel_negrito
159
+ colunas_impressas = ""
160
+ configuracao_campos_ordenado.each_with_index do |campo, ii|
172
161
 
173
- eixo_x_inicial = @eixo_x
174
- eixo_y_inicial = @eixo_y
175
- eixo_y_temporario = 0
176
- qtd_linhas_do_registro = 0
177
- valor_linha = 0.5
178
- qtd_maior_linhas = 0
162
+ espacos_em_branco = campo[:qtd_caracteres] - campo[:nome_impressao].to_s.size
179
163
 
180
- hash_dados.each_with_index do |item, indice_item|
164
+ espacos_em_branco = 0 if espacos_em_branco < 1
165
+ colunas_impressas += campo[:nome_impressao].upcase + (" " * (espacos_em_branco / 0.5 + 3))
166
+ end
181
167
 
182
- if indice_item == 0
183
- @eixo_y -= valor_linha
168
+ if desenhar_linhas == true
169
+ doc.horizontal_line :bottom, :border => { :color => '#000000', :width => 1 }
170
+ end
184
171
 
185
- else
186
- @eixo_y -= (qtd_maior_linhas + 1) * valor_linha
187
- qtd_maior_linhas = 0
188
- end
172
+ doc.moveto :x => @eixo_x, :y => @eixo_y
173
+ doc.show colunas_impressas, :tag => :hel_negrito
189
174
 
190
- if @eixo_y < 2
191
- doc.next_page
192
- @eixo_y = eixo_y_inicial
193
- end
175
+ eixo_x_inicial = @eixo_x
176
+ eixo_y_inicial = @eixo_y
194
177
 
195
- @eixo_x = eixo_x_inicial
178
+ valor_linha = 0.5
179
+ qtd_maior_linhas = 0
196
180
 
197
- configuracao_campos_ordenado.each_with_index do |campo, ii|
181
+ @hash_dados.each_with_index do |item, indice_item|
198
182
 
199
- nome_campo = campo[:nome_campo]
200
- qtd_caracteres = campo[:qtd_caracteres]
201
-
202
- valor_campo = item[nome_campo].to_s.upcase
183
+ if indice_item == 0
184
+ @eixo_y -= valor_linha
203
185
 
204
- qtd_linhas_do_registro = valor_campo.size / qtd_caracteres
186
+ else
187
+ @eixo_y -= (qtd_maior_linhas + 1) * valor_linha
188
+ qtd_maior_linhas = 0
189
+ end
205
190
 
206
- #Pode ocorrer do tamanho do campo ser igual a quantidade de caracteres delimitado para aquele campo.
207
- if qtd_linhas_do_registro == 1
208
- qtd_linhas_do_registro = 0 if valor_campo.size <= qtd_caracteres
209
- end
191
+ if @eixo_y < 2
192
+ doc.next_page
193
+ @eixo_y = 19.6
194
+ segunda_pagina = true
195
+ end
210
196
 
211
- qtd_maior_linhas = qtd_linhas_do_registro if qtd_linhas_do_registro > qtd_maior_linhas
197
+ @eixo_x = eixo_x_inicial
212
198
 
213
- if valor_campo.size > qtd_caracteres
199
+ configuracao_campos_ordenado.each_with_index do |campo, ii|
214
200
 
215
- eixo_y_temporario = eixo_y
201
+ nome_campo = campo[:nome_campo]
202
+ qtd_caracteres = campo[:qtd_caracteres]
216
203
 
217
- for linha in 0..qtd_linhas_do_registro
204
+ valor_campo = item[nome_campo].to_s.upcase
218
205
 
219
- inicio_string = linha * qtd_caracteres
220
- inicio_string += 1 if linha != 0
206
+ qtd_linhas_do_registro = valor_campo.size / qtd_caracteres
221
207
 
222
- fim_string = (linha + 1) * qtd_caracteres
208
+ #Pode ocorrer do tamanho do campo ser igual a quantidade de caracteres delimitado para aquele campo.
209
+ if qtd_linhas_do_registro == 1
210
+ qtd_linhas_do_registro = 0 if valor_campo.size <= qtd_caracteres
211
+ end
223
212
 
224
- if fim_string > valor_campo.size
225
- fim_string = -1
226
- end
213
+ qtd_maior_linhas = qtd_linhas_do_registro if qtd_linhas_do_registro > qtd_maior_linhas
227
214
 
228
- ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
229
- doc.moveto :x => @eixo_x, :y => eixo_y_temporario
230
- doc.show ic.iconv((valor_campo[inicio_string..fim_string].upcase) + ' ' )[0..-2], :tag => :cour_normal_reduzido
231
- eixo_y_temporario -= 0.4
232
-
233
- end
234
- @eixo_x += (qtd_caracteres * 0.2) + 0.65
235
- else
236
- doc.moveto :x => @eixo_x, :y => @eixo_y
237
- doc.show valor_campo, :tag => :cour_normal_reduzido
238
- @eixo_x += (qtd_caracteres * 0.2) + 0.65
239
- end
240
- end
215
+ ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
216
+ valor_campo = ic.iconv((valor_campo.gsub("(", "").gsub(")", "").upcase) + ' ' )[0..-2]
241
217
 
242
- doc.jump_rows(qtd_maior_linhas + 1)
218
+ if valor_campo.size > qtd_caracteres
243
219
 
244
- # doc.horizontal_line :bottom, :border => { :color => '#000000', :width => 0.5 }
245
- end
220
+ eixo_y_temporario = @eixo_y
246
221
 
247
- yield(@doc, @eixo_x, @eixo_y)
248
- end
222
+ for linha in 0..qtd_linhas_do_registro
249
223
 
250
- private
251
- def build_rghost_doc(modo_layout, margem)
224
+ inicio_string = linha * qtd_caracteres
225
+ inicio_string += 1 if linha != 0
252
226
 
253
- if modo_layout == "retrato"
254
- doc = RGhost::Document.new :paper => :A4, :landscape => false, :margin =>[margem,margem,margem,margem]
255
- else
256
- doc = RGhost::Document.new :paper => :A4, :landscape => true, :margin =>[margem,margem,margem,margem]
257
- end
227
+ fim_string = (linha + 1) * qtd_caracteres
258
228
 
259
- doc.before_page_create do |chunk|
260
- chunk.text_in :x => 28, :y => 19.9, :write => "%current_page%"
261
- chunk.image "public/template.eps", :x => 0.8, :y => 0.65 if modo_layout == "retrato"
262
- end
229
+ if fim_string > valor_campo.size
230
+ fim_string = -1
231
+ end
263
232
 
264
- doc.define_tags do
265
- tag :hel_normal, :name => 'Helvetica', :size => 10, :color => '#000000'
266
- tag :hel_negrito, :name => 'Helvetica-Bold', :size => 10, :color => '#000000'
233
+ doc.moveto :x => @eixo_x, :y => eixo_y_temporario
267
234
 
268
- tag :hel_normal_destaque, :name => 'Helvetica', :size => 10, :color => '#000000'
269
- tag :hel_negrito_destaque, :name => 'Helvetica-Bold', :size => 14, :color => '#000000'
270
- tag :hel_negrito_destaque_reduzido, :name => 'Helvetica-Bold', :size => 12, :color => '#000000'
235
+ #begin
271
236
 
272
- tag :hel_normal_tit, :name => 'Helvetica', :size => 18, :color => '#000000'
273
- tag :hel_negrito_tit, :name => 'Helvetica-Bold', :size => 16, :color => '#000000'
237
+ doc.show ic.iconv(valor_campo[inicio_string..fim_string] + ' ')[0..-2], :tag => :cour_normal_reduzido
238
+ eixo_y_temporario -= 0.4
274
239
 
275
- tag :cour_normal, :name => 'Courier', :size => 10, :color => '#000000'
276
- tag :cour_normal_reduzido, :name => 'Courier', :size => 8, :color => '#000000'
277
- tag :cour_negrito, :name => 'Courier-Bold', :size => 10, :color => '#000000'
278
- tag :cour_negrito_destaque, :name => 'Courier-Bold', :size => 12, :color => '#000000'
279
- end
240
+ #rescue
241
+ # Rails.logger.warn "Erro #{item["codigo_produto"]} - #{valor_campo[inicio_string..fim_string]}"
242
+ #end
243
+
244
+ end
245
+ @eixo_x += (qtd_caracteres * 0.2) + 0.65
246
+ else
247
+
248
+ #begin
249
+
250
+ doc.moveto :x => @eixo_x, :y => @eixo_y
251
+ doc.show ic.iconv(valor_campo + ' ')[0..-2], :tag => :cour_normal_reduzido
252
+ @eixo_x += (qtd_caracteres * 0.2) + 0.65
253
+
254
+ #rescue
255
+ # Rails.logger.warn "Erro #{item["codigo_produto"]} - #{valor_campo}"
256
+ #end
257
+ end
258
+ end
259
+
260
+ doc.jump_rows(qtd_maior_linhas + 1)
261
+
262
+ doc.horizontal_line :bottom, :border => { :color => '#000000', :width => 0.5 }
263
+
264
+ end
265
+
266
+ yield(@doc, @eixo_x, @eixo_y)
267
+ end
268
+
269
+ private
270
+ def build_rghost_doc(modo_layout, margem)
271
+
272
+ if modo_layout == "retrato"
273
+ doc = RGhost::Document.new :paper => :A4, :landscape => false, :margin =>[margem,margem,margem,margem]
274
+ else
275
+ doc = RGhost::Document.new :paper => :A4, :landscape => true, :margin =>[margem,margem,margem,margem]
276
+ end
277
+
278
+ doc.before_page_create do |chunk|
279
+ chunk.text_in :x => 28, :y => 19.9, :write => "%current_page%"
280
+ chunk.image "public/template.eps", :x => 0.8, :y => 0.65 if modo_layout == "retrato"
281
+ end
282
+
283
+ doc.define_tags do
284
+ tag :hel_normal, :name => 'Helvetica', :size => 10, :color => '#000000'
285
+ tag :hel_negrito, :name => 'Helvetica-Bold', :size => 10, :color => '#000000'
286
+
287
+ tag :hel_normal_destaque, :name => 'Helvetica', :size => 10, :color => '#000000'
288
+ tag :hel_negrito_destaque, :name => 'Helvetica-Bold', :size => 14, :color => '#000000'
289
+ tag :hel_negrito_destaque_reduzido, :name => 'Helvetica-Bold', :size => 12, :color => '#000000'
290
+
291
+ tag :hel_normal_tit, :name => 'Helvetica', :size => 18, :color => '#000000'
292
+ tag :hel_negrito_tit, :name => 'Helvetica-Bold', :size => 16, :color => '#000000'
293
+
294
+ tag :cour_normal, :name => 'Courier', :size => 10, :color => '#000000'
295
+ tag :cour_normal_reduzido, :name => 'Courier', :size => 8, :color => '#000000'
296
+ tag :cour_negrito, :name => 'Courier-Bold', :size => 10, :color => '#000000'
297
+ tag :cour_negrito_destaque, :name => 'Courier-Bold', :size => 12, :color => '#000000'
298
+ end
299
+
300
+ doc
301
+ end
280
302
 
281
- doc
282
- end
283
303
 
284
304
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alego_report
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
10
- version: 0.1.2
9
+ - 8
10
+ version: 0.1.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Gustavo Gomes da F\xC3\xA9"