alego_report 0.1.2 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
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"