alego_report 0.0.6

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 +249 -0
  2. metadata +55 -0
@@ -0,0 +1,249 @@
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
+
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
11
+
12
+ @doc = nil
13
+ @campos_para_impressao = []
14
+ @eixo_x = nil
15
+ @eixo_y = nil
16
+
17
+ end
18
+
19
+ def desenhar_cabecalho
20
+
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
30
+
31
+ @doc = Funcoes::build_rghost_doc(@modo_layout, @margem_geral)
32
+
33
+ @doc.image "public/logo.jpg", :x => @eixo_x, :y => @eixo_y, :zoom => 11
34
+
35
+ @doc.next_row
36
+ @doc.show titulo_relatorio, :tag=> :hel_negrito_tit, :align => :page_center
37
+
38
+ yield(@doc, @eixo_x, @eixo_y)
39
+
40
+ end
41
+
42
+ def calcular_campos
43
+
44
+ campos_agrupados = @config_campos.group_by{|x| x[:visivel]}[true].group_by{|x| x[:prioridade]}
45
+
46
+ total_catacteres = 0
47
+ qtd_campos = 0
48
+
49
+ for i in 0..campos_agrupados.size
50
+
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
55
+
56
+ end
57
+
58
+ espacos_separa_colunas = qtd_campos * 0.6
59
+
60
+ total_x = (modo_layout == "retrato" ? 20.7 : 29.5)
61
+
62
+ total_disponivel = ((total_x - (@margem_geral * 2) - espacos_separa_colunas) / 0.2)
63
+
64
+ total_restante = (total_disponivel - total_catacteres).to_i
65
+
66
+ i = 1
67
+ limite = 1
68
+
69
+ while total_restante != 0
70
+
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
78
+
79
+ while i != 0
80
+
81
+ if campos_agrupados[i] != nil
82
+
83
+ caracter_adicional = 0
84
+ campos_agrupados[i].each_with_index do |item, ii|
85
+
86
+ if total_restante > 0
87
+
88
+ caracter_adicional = item[:qtd_caracteres] * ((35.0 - (i * 5.0)) / 100)
89
+
90
+ #arredonda pra cima
91
+ caracter_adicional = ((caracter_adicional*1).ceil/1.0).to_i
92
+
93
+ if caracter_adicional == 0
94
+ caracter_adicional = 1
95
+ end
96
+
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
105
+
106
+ caracter_adicional = (item[:qtd_caracteres] * ((i * 5.0) / 100.0)) * -1
107
+
108
+ #arredonda pra cima
109
+ caracter_adicional = ((caracter_adicional*1).ceil/1.0).to_i
110
+
111
+ if caracter_adicional == 0
112
+ caracter_adicional = -1
113
+ end
114
+
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
125
+
126
+ if total_restante > 0
127
+ i += 1
128
+
129
+ if i == limite
130
+ i = 0
131
+ end
132
+ else
133
+ i -= 1
134
+ end
135
+ end
136
+ end
137
+
138
+ campos_agrupados.each do |campo|
139
+
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
144
+
145
+ end
146
+
147
+ def imprimir_campos(desenhar_linhas=true)
148
+
149
+ calcular_campos
150
+
151
+ configuracao_campos_ordenado = campos_para_impressao.sort_by {|k, v| k[:ordem]}
152
+
153
+ if desenhar_linhas == true
154
+ doc.horizontal_line :top, :border => { :color => '#000000', :width => 1 }
155
+ end
156
+
157
+ colunas_impressas = ""
158
+ configuracao_campos_ordenado.each_with_index do |campo, ii|
159
+
160
+ espacos_em_branco = campo[:qtd_caracteres] - campo[:nome_impressao].to_s.size
161
+
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
165
+
166
+ if desenhar_linhas == true
167
+ doc.horizontal_line :bottom, :border => { :color => '#000000', :width => 1 }
168
+ end
169
+
170
+ doc.moveto :x => @eixo_x, :y => @eixo_y
171
+ doc.show colunas_impressas, :tag => :hel_negrito
172
+
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
179
+
180
+ hash_dados.each_with_index do |item, indice_item|
181
+
182
+ if indice_item == 0
183
+ @eixo_y -= valor_linha
184
+
185
+ else
186
+ @eixo_y -= (qtd_maior_linhas + 1) * valor_linha
187
+ qtd_maior_linhas = 0
188
+ end
189
+
190
+ if @eixo_y < 2
191
+ doc.next_page
192
+ @eixo_y = eixo_y_inicial
193
+ end
194
+
195
+ @eixo_x = eixo_x_inicial
196
+
197
+ configuracao_campos_ordenado.each_with_index do |campo, ii|
198
+
199
+ nome_campo = campo[:nome_campo]
200
+ qtd_caracteres = campo[:qtd_caracteres]
201
+
202
+ valor_campo = item[nome_campo].to_s.upcase
203
+
204
+ qtd_linhas_do_registro = valor_campo.size / qtd_caracteres
205
+
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
210
+
211
+ qtd_maior_linhas = qtd_linhas_do_registro if qtd_linhas_do_registro > qtd_maior_linhas
212
+
213
+ if valor_campo.size > qtd_caracteres
214
+
215
+ eixo_y_temporario = eixo_y
216
+
217
+ for linha in 0..qtd_linhas_do_registro
218
+
219
+ inicio_string = linha * qtd_caracteres
220
+ inicio_string += 1 if linha != 0
221
+
222
+ fim_string = (linha + 1) * qtd_caracteres
223
+
224
+ if fim_string > valor_campo.size
225
+ fim_string = -1
226
+ end
227
+
228
+ doc.moveto :x => @eixo_x, :y => eixo_y_temporario
229
+ doc.show valor_campo[inicio_string..fim_string].upcase, :tag => :cour_normal_reduzido
230
+ eixo_y_temporario -= 0.4
231
+
232
+ end
233
+ @eixo_x += (qtd_caracteres * 0.2) + 0.65
234
+ else
235
+ doc.moveto :x => @eixo_x, :y => @eixo_y
236
+ doc.show valor_campo, :tag => :cour_normal_reduzido
237
+ @eixo_x += (qtd_caracteres * 0.2) + 0.65
238
+ end
239
+ end
240
+
241
+ doc.jump_rows(qtd_maior_linhas + 1)
242
+
243
+ doc.horizontal_line :bottom, :border => { :color => '#000000', :width => 0.5 }
244
+ end
245
+
246
+ yield(@doc, @eixo_x, @eixo_y)
247
+ end
248
+
249
+ end
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: alego_report
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.6
6
+ platform: ruby
7
+ authors:
8
+ - "Gustavo Gomes da F\xC3\xA9"
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2012-11-22 00:00:00 Z
14
+ dependencies: []
15
+
16
+ description: "Tem a funcionalidade de facilitar a gera\xC3\xA7\xC3\xA3o de relat\xC3\xB3rios utilizando rghost"
17
+ email:
18
+ - ggomes.fe@gmail.com
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files: []
24
+
25
+ files:
26
+ - lib/alego_report.rb
27
+ homepage: ""
28
+ licenses: []
29
+
30
+ post_install_message:
31
+ rdoc_options: []
32
+
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "0"
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ requirements: []
48
+
49
+ rubyforge_project: alego_report
50
+ rubygems_version: 1.8.24
51
+ signing_key:
52
+ specification_version: 3
53
+ summary: Alego Report
54
+ test_files: []
55
+