alego_report 0.0.6

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 +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
+