tulios-brcobranca-rails2 2.0.8 → 2.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +3 -1
- data/lib/brcobranca/boleto/template/rghost.rb +146 -63
- data/lib/brcobranca/config.rb +1 -1
- data/lib/brcobranca.rb +2 -1
- data/spec/brcobranca/banco_caixa_spec.rb +19 -0
- data/spec/brcobranca/base_spec.rb +5 -0
- data/spec/brcobranca/template/rghost_spec.rb +19 -19
- data/spec/brcobranca/template/util_spec.rb +4 -0
- metadata +4 -4
data/History.txt
CHANGED
@@ -19,135 +19,218 @@ module Brcobranca
|
|
19
19
|
module Template
|
20
20
|
# Templates para usar com Rghost
|
21
21
|
module Rghost
|
22
|
+
extend self
|
22
23
|
include RGhost unless self.include?(RGhost)
|
23
24
|
|
24
25
|
# Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
25
|
-
#
|
26
|
-
#
|
27
|
-
|
28
|
-
|
26
|
+
#
|
27
|
+
# @return [Stream]
|
28
|
+
# @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
|
29
|
+
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
|
30
|
+
def to(formato = Brcobranca::Config::OPCOES[:tipo], options={})
|
31
|
+
|
32
|
+
# Adicionando :formato apenas para garantir a compatibilidade com o codigo da versao 3
|
33
|
+
options = Brcobranca::Config::OPCOES.merge(options)
|
34
|
+
|
35
|
+
modelo_generico(self, options.merge!({:formato => formato}))
|
36
|
+
end
|
37
|
+
|
38
|
+
# Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
39
|
+
#
|
40
|
+
# @return [Stream]
|
41
|
+
# @see http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats Veja mais formatos na documentação do rghost.
|
42
|
+
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
|
43
|
+
def imprimir_lista(boletos, options={})
|
44
|
+
|
45
|
+
# Adicionando :formato apenas para garantir a compatibilidade com o codigo da versao 3
|
46
|
+
options = Brcobranca::Config::OPCOES.merge({
|
47
|
+
:formato => Brcobranca::Config::OPCOES[:tipo]
|
48
|
+
}).merge(options)
|
49
|
+
|
50
|
+
modelo_generico_multipage(boletos, options)
|
29
51
|
end
|
30
52
|
|
31
|
-
#
|
32
|
-
# Retorna um stream pronto para gravaçào
|
53
|
+
# Cria o métodos dinâmicos (to_pdf, to_gif e etc) com todos os fomátos válidos.
|
33
54
|
#
|
34
|
-
#
|
35
|
-
#
|
55
|
+
# @return [Stream]
|
56
|
+
# @see Rghost#modelo_generico Recebe os mesmos parâmetros do Rghost#modelo_generico.
|
57
|
+
# @example
|
58
|
+
# @boleto.to_pdf #=> boleto gerado no formato pdf
|
59
|
+
def method_missing(m, *args)
|
60
|
+
method = m.to_s
|
61
|
+
if method.start_with?("to_")
|
62
|
+
modelo_generico(self, (args.first || {}).merge!({:formato => method[3..-1]}))
|
63
|
+
else
|
64
|
+
super
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
# Retorna um stream pronto para gravação em arquivo.
|
36
71
|
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
|
72
|
+
# @return [Stream]
|
73
|
+
# @param [Boleto] Instância de uma classe de boleto.
|
74
|
+
# @param [Hash] options Opção para a criação do boleto.
|
75
|
+
# @option options [Symbol] :resolucao Resolução em pixels.
|
76
|
+
# @option options [Symbol] :formato Formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
77
|
+
def modelo_generico(boleto, options={})
|
40
78
|
doc=Document.new :paper => :A4 # 210x297
|
41
79
|
|
42
80
|
template_path = File.join(File.dirname(__FILE__),'..','..','arquivos','templates','modelo_generico.eps')
|
43
81
|
|
44
82
|
raise "Não foi possível encontrar o template. Verifique o caminho" unless File.exist?(template_path)
|
45
83
|
|
84
|
+
modelo_generico_template(doc, boleto, template_path)
|
85
|
+
modelo_generico_cabecalho(doc, boleto)
|
86
|
+
modelo_generico_rodape(doc, boleto)
|
87
|
+
|
88
|
+
#Gerando codigo de barra com rghost_barcode
|
89
|
+
doc.barcode_interleaved2of5(boleto.codigo_barras, :width => '10.3 cm', :height => '1.3 cm', :x => '0.7 cm', :y => '5.8 cm' ) if boleto.codigo_barras
|
90
|
+
|
91
|
+
# Gerando stream
|
92
|
+
formato = options.delete(:formato)
|
93
|
+
resolucao = options.delete(:resolucao)
|
94
|
+
doc.render_stream(formato.to_sym, :resolution => resolucao)
|
95
|
+
end
|
96
|
+
|
97
|
+
# Retorna um stream para multiplos boletos pronto para gravação em arquivo.
|
98
|
+
#
|
99
|
+
# @return [Stream]
|
100
|
+
# @param [Array] Instâncias de classes de boleto.
|
101
|
+
# @param [Hash] options Opção para a criação do boleto.
|
102
|
+
# @option options [Symbol] :resolucao Resolução em pixels.
|
103
|
+
# @option options [Symbol] :formato Formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
104
|
+
def modelo_generico_multipage(boletos, options={})
|
105
|
+
doc=Document.new :paper => :A4 # 210x297
|
106
|
+
|
107
|
+
template_path = File.join(File.dirname(__FILE__),'..','..','arquivos','templates','modelo_generico.eps')
|
108
|
+
|
109
|
+
raise "Não foi possível encontrar o template. Verifique o caminho" unless File.exist?(template_path)
|
110
|
+
|
111
|
+
boletos.each_with_index do |boleto, index|
|
112
|
+
|
113
|
+
modelo_generico_template(doc, boleto, template_path)
|
114
|
+
modelo_generico_cabecalho(doc, boleto)
|
115
|
+
modelo_generico_rodape(doc, boleto)
|
116
|
+
|
117
|
+
#Gerando codigo de barra com rghost_barcode
|
118
|
+
doc.barcode_interleaved2of5(boleto.codigo_barras, :width => '10.3 cm', :height => '1.3 cm', :x => '0.7 cm', :y => '5.8 cm' ) if boleto.codigo_barras
|
119
|
+
#Cria nova página se não for o último boleto
|
120
|
+
doc.next_page unless index == boletos.length-1
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
# Gerando stream
|
125
|
+
formato = options.delete(:formato)
|
126
|
+
resolucao = options.delete(:resolucao)
|
127
|
+
doc.render_stream(formato.to_sym, :resolution => resolucao)
|
128
|
+
end
|
129
|
+
|
130
|
+
# Define o template a ser usado no boleto
|
131
|
+
def modelo_generico_template(doc, boleto, template_path)
|
46
132
|
doc.define_template(:template, template_path, :x => '0.3 cm', :y => "0 cm")
|
47
133
|
doc.use_template :template
|
48
134
|
|
49
135
|
doc.define_tags do
|
50
136
|
tag :grande, :size => 13
|
51
137
|
end
|
138
|
+
end
|
52
139
|
|
53
|
-
|
54
|
-
|
55
|
-
|
140
|
+
# Monta o cabeçalho do layout do boleto
|
141
|
+
def modelo_generico_cabecalho(doc, boleto)
|
56
142
|
#INICIO Primeira parte do BOLETO
|
57
143
|
# LOGOTIPO do BANCO
|
58
|
-
doc.image(
|
144
|
+
doc.image(boleto.monta_logo, :x => '0.5 cm', :y => '23.85 cm', :zoom => 80)
|
59
145
|
# Dados
|
60
146
|
doc.moveto :x => '5.2 cm' , :y => '23.85 cm'
|
61
|
-
doc.show "#{
|
147
|
+
doc.show "#{boleto.banco}-#{boleto.banco_dv}", :tag => :grande
|
62
148
|
doc.moveto :x => '7.5 cm' , :y => '23.85 cm'
|
63
|
-
doc.show
|
149
|
+
doc.show boleto.codigo_barras.linha_digitavel, :tag => :grande
|
64
150
|
doc.moveto :x => '0.7 cm' , :y => '23 cm'
|
65
|
-
doc.show
|
151
|
+
doc.show boleto.cedente
|
66
152
|
doc.moveto :x => '11 cm' , :y => '23 cm'
|
67
|
-
doc.show
|
153
|
+
doc.show boleto.agencia_conta_boleto
|
68
154
|
doc.moveto :x => '14.2 cm' , :y => '23 cm'
|
69
|
-
doc.show
|
155
|
+
doc.show boleto.especie
|
70
156
|
doc.moveto :x => '15.7 cm' , :y => '23 cm'
|
71
|
-
doc.show
|
157
|
+
doc.show boleto.quantidade
|
72
158
|
doc.moveto :x => '0.7 cm' , :y => '22.2 cm'
|
73
|
-
doc.show
|
159
|
+
doc.show boleto.numero_documento
|
74
160
|
doc.moveto :x => '7 cm' , :y => '22.2 cm'
|
75
|
-
doc.show "#{
|
161
|
+
doc.show "#{boleto.documento_cedente.formata_documento}"
|
76
162
|
doc.moveto :x => '12 cm' , :y => '22.2 cm'
|
77
|
-
doc.show
|
163
|
+
doc.show boleto.data_vencimento.to_s_br
|
78
164
|
doc.moveto :x => '16.5 cm' , :y => '23 cm'
|
79
|
-
doc.show
|
165
|
+
doc.show boleto.nosso_numero_boleto
|
80
166
|
doc.moveto :x => '16.5 cm' , :y => '22.2 cm'
|
81
|
-
doc.show
|
167
|
+
doc.show boleto.valor_documento.to_currency
|
82
168
|
doc.moveto :x => '1.4 cm' , :y => '20.9 cm'
|
83
|
-
doc.show "#{
|
169
|
+
doc.show "#{boleto.sacado} - #{boleto.sacado_documento.formata_documento}"
|
84
170
|
doc.moveto :x => '1.4 cm' , :y => '20.6 cm'
|
85
|
-
doc.show "#{
|
171
|
+
doc.show "#{boleto.sacado_endereco}"
|
86
172
|
#FIM Primeira parte do BOLETO
|
173
|
+
end
|
87
174
|
|
175
|
+
# Monta o corpo e rodapé do layout do boleto
|
176
|
+
def modelo_generico_rodape(doc, boleto)
|
88
177
|
#INICIO Segunda parte do BOLETO BB
|
89
178
|
# LOGOTIPO do BANCO
|
90
|
-
doc.image(
|
179
|
+
doc.image(boleto.monta_logo, :x => '0.5 cm', :y => '16.8 cm', :zoom => 80)
|
91
180
|
doc.moveto :x => '5.2 cm' , :y => '16.8 cm'
|
92
|
-
doc.show "#{
|
181
|
+
doc.show "#{boleto.banco}-#{boleto.banco_dv}", :tag => :grande
|
93
182
|
doc.moveto :x => '7.5 cm' , :y => '16.8 cm'
|
94
|
-
doc.show
|
183
|
+
doc.show boleto.codigo_barras.linha_digitavel, :tag => :grande
|
95
184
|
doc.moveto :x => '0.7 cm' , :y => '16 cm'
|
96
|
-
doc.show
|
185
|
+
doc.show boleto.local_pagamento
|
97
186
|
doc.moveto :x => '16.5 cm' , :y => '16 cm'
|
98
|
-
doc.show
|
187
|
+
doc.show boleto.data_vencimento.to_s_br if boleto.data_vencimento
|
99
188
|
doc.moveto :x => '0.7 cm' , :y => '15.2 cm'
|
100
|
-
doc.show
|
189
|
+
doc.show boleto.cedente
|
101
190
|
doc.moveto :x => '16.5 cm' , :y => '15.2 cm'
|
102
|
-
doc.show
|
191
|
+
doc.show boleto.agencia_conta_boleto
|
103
192
|
doc.moveto :x => '0.7 cm' , :y => '14.4 cm'
|
104
|
-
doc.show
|
193
|
+
doc.show boleto.data_documento.to_s_br if boleto.data_documento
|
105
194
|
doc.moveto :x => '4.2 cm' , :y => '14.4 cm'
|
106
|
-
doc.show
|
195
|
+
doc.show boleto.numero_documento
|
107
196
|
doc.moveto :x => '10 cm' , :y => '14.4 cm'
|
108
|
-
doc.show
|
197
|
+
doc.show boleto.especie
|
109
198
|
doc.moveto :x => '11.7 cm' , :y => '14.4 cm'
|
110
|
-
doc.show
|
199
|
+
doc.show boleto.aceite
|
111
200
|
doc.moveto :x => '13 cm' , :y => '14.4 cm'
|
112
|
-
doc.show
|
201
|
+
doc.show boleto.data_processamento.to_s_br if boleto.data_processamento
|
113
202
|
doc.moveto :x => '16.5 cm' , :y => '14.4 cm'
|
114
|
-
doc.show
|
203
|
+
doc.show boleto.nosso_numero_boleto
|
115
204
|
doc.moveto :x => '4.4 cm' , :y => '13.5 cm'
|
116
|
-
doc.show
|
205
|
+
doc.show boleto.carteira
|
117
206
|
doc.moveto :x => '6.4 cm' , :y => '13.5 cm'
|
118
|
-
doc.show
|
207
|
+
doc.show boleto.moeda
|
119
208
|
doc.moveto :x => '8 cm' , :y => '13.5 cm'
|
120
|
-
doc.show
|
209
|
+
doc.show boleto.quantidade
|
121
210
|
doc.moveto :x => '11 cm' , :y => '13.5 cm'
|
122
|
-
doc.show
|
211
|
+
doc.show boleto.valor.to_currency
|
123
212
|
doc.moveto :x => '16.5 cm' , :y => '13.5 cm'
|
124
|
-
doc.show
|
213
|
+
doc.show boleto.valor_documento.to_currency
|
125
214
|
doc.moveto :x => '0.7 cm' , :y => '12.7 cm'
|
126
|
-
doc.show
|
215
|
+
doc.show boleto.instrucao1
|
127
216
|
doc.moveto :x => '0.7 cm' , :y => '12.3 cm'
|
128
|
-
doc.show
|
217
|
+
doc.show boleto.instrucao2
|
129
218
|
doc.moveto :x => '0.7 cm' , :y => '11.9 cm'
|
130
|
-
doc.show
|
219
|
+
doc.show boleto.instrucao3
|
131
220
|
doc.moveto :x => '0.7 cm' , :y => '11.5 cm'
|
132
|
-
doc.show
|
221
|
+
doc.show boleto.instrucao4
|
133
222
|
doc.moveto :x => '0.7 cm' , :y => '11.1 cm'
|
134
|
-
doc.show
|
223
|
+
doc.show boleto.instrucao5
|
135
224
|
doc.moveto :x => '0.7 cm' , :y => '10.7 cm'
|
136
|
-
doc.show
|
225
|
+
doc.show boleto.instrucao6
|
137
226
|
doc.moveto :x => '1.2 cm' , :y => '8.8 cm'
|
138
|
-
doc.show "#{
|
227
|
+
doc.show "#{boleto.sacado} - #{boleto.sacado_documento.formata_documento}" if boleto.sacado && boleto.sacado_documento
|
139
228
|
doc.moveto :x => '1.2 cm' , :y => '8.4 cm'
|
140
|
-
doc.show "#{
|
229
|
+
doc.show "#{boleto.sacado_endereco}"
|
141
230
|
#FIM Segunda parte do BOLETO
|
142
|
-
|
143
|
-
#Gerando codigo de barra com rghost_barcode
|
144
|
-
doc.barcode_interleaved2of5(self.codigo_barras, :width => '10.3 cm', :height => '1.3 cm', :x => '0.7 cm', :y => '5.8 cm' ) if self.codigo_barras
|
145
|
-
|
146
|
-
# Gerando stream
|
147
|
-
options[:tipo] = options[:tipo].to_sym unless options[:tipo].kind_of?(Symbol)
|
148
|
-
doc.render_stream(options[:tipo])
|
149
231
|
end
|
150
|
-
|
232
|
+
|
233
|
+
end #Base
|
151
234
|
end
|
152
235
|
end
|
153
|
-
end
|
236
|
+
end
|
data/lib/brcobranca/config.rb
CHANGED
@@ -4,6 +4,6 @@ module Brcobranca
|
|
4
4
|
# Opções disponíveis:
|
5
5
|
# Brcobranca::Config::OPCOES[:tipo] - Pode ser pdf, jpg e ps.
|
6
6
|
# Brcobranca::Config::OPCOES[:gerador] - Somente rghost até o momento
|
7
|
-
OPCOES = {:tipo => 'pdf', :gerador => 'rghost'}
|
7
|
+
OPCOES = {:tipo => 'pdf', :gerador => 'rghost', :resolucao => 150}
|
8
8
|
end
|
9
9
|
end
|
data/lib/brcobranca.rb
CHANGED
@@ -24,6 +24,7 @@ when 'rghost'
|
|
24
24
|
module Brcobranca::Boleto
|
25
25
|
Base.class_eval do
|
26
26
|
include Brcobranca::Boleto::Template::Rghost
|
27
|
+
extend Brcobranca::Boleto::Template::Rghost
|
27
28
|
include Brcobranca::Boleto::Template::Util
|
28
29
|
end
|
29
30
|
end
|
@@ -33,7 +34,7 @@ else
|
|
33
34
|
end
|
34
35
|
|
35
36
|
module Brcobranca
|
36
|
-
VERSION = '2.0.
|
37
|
+
VERSION = '2.0.9'
|
37
38
|
|
38
39
|
class NaoImplementado < NotImplementedError
|
39
40
|
end
|
@@ -152,6 +152,25 @@ describe BancoCaixa do #:nodoc:[all]
|
|
152
152
|
File.exist?(tmp_file.path).should be_false
|
153
153
|
end
|
154
154
|
end
|
155
|
+
|
156
|
+
it 'deveria gerar um lote de boletos' do
|
157
|
+
@valid_attributes[:valor] = 135.00
|
158
|
+
@valid_attributes[:data_documento] = Date.parse("2008-02-01")
|
159
|
+
@valid_attributes[:dias_vencimento] = 2
|
160
|
+
@valid_attributes[:numero_documento] = "77700168"
|
161
|
+
boletos = []
|
162
|
+
boletos << BancoCaixa.new(@valid_attributes)
|
163
|
+
boletos << BancoCaixa.new(@valid_attributes)
|
164
|
+
|
165
|
+
file_body = Brcobranca::Boleto::Base.imprimir_lista(boletos)
|
166
|
+
tmp_file=Tempfile.new("foobar.pdf")
|
167
|
+
tmp_file.puts file_body
|
168
|
+
tmp_file.close
|
169
|
+
File.exist?(tmp_file.path).should be_true
|
170
|
+
File.stat(tmp_file.path).zero?.should be_false
|
171
|
+
File.delete(tmp_file.path).should eql(1)
|
172
|
+
File.exist?(tmp_file.path).should be_false
|
173
|
+
end
|
155
174
|
|
156
175
|
it 'deveria possuir o campo livre igual a segunda parte do codigo de barras' do
|
157
176
|
boleto_novo = BancoCaixa.new(@valid_attributes)
|
@@ -234,6 +234,11 @@ module Brcobranca #:nodoc:[all]
|
|
234
234
|
boleto_novo.class.included_modules.include?(Brcobranca::Boleto::Template::Rghost).should be_true
|
235
235
|
boleto_novo.class.included_modules.include?(Brcobranca::Boleto::Template::Util).should be_true
|
236
236
|
end
|
237
|
+
|
238
|
+
it "Incluir módulos de template na classe" do
|
239
|
+
Brcobranca::Boleto::Base.respond_to?(:imprimir_lista).should be_true
|
240
|
+
Brcobranca::Boleto::Base.respond_to?(:to).should be_true
|
241
|
+
end
|
237
242
|
|
238
243
|
end
|
239
244
|
end
|
@@ -39,25 +39,25 @@ module Brcobranca
|
|
39
39
|
boleto_novo.codigo_barras.should eql("00193377100000135000000001238798777770016818")
|
40
40
|
boleto_novo.codigo_barras.linha_digitavel.should eql("00190.00009 01238.798779 77700.168188 3 37710000013500")
|
41
41
|
boleto_novo.conta_corrente_dv.should eql(0)
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
42
|
+
|
43
|
+
%w| pdf jpg tif png ps |.each do |format|
|
44
|
+
file_body=boleto_novo.to(format.to_sym)
|
45
|
+
tmp_file=Tempfile.new("foobar." << format)
|
46
|
+
tmp_file.puts file_body
|
47
|
+
tmp_file.close
|
48
|
+
File.exist?(tmp_file.path).should be_true
|
49
|
+
File.stat(tmp_file.path).zero?.should be_false
|
50
|
+
File.delete(tmp_file.path).should eql(1)
|
51
|
+
File.exist?(tmp_file.path).should be_false
|
52
|
+
end
|
53
|
+
file_body=boleto_novo.to
|
54
|
+
tmp_file=Tempfile.new("foobar.")
|
55
|
+
tmp_file.puts file_body
|
56
|
+
tmp_file.close
|
57
|
+
File.exist?(tmp_file.path).should be_true
|
58
|
+
File.stat(tmp_file.path).zero?.should be_false
|
59
|
+
File.delete(tmp_file.path).should eql(1)
|
60
|
+
File.exist?(tmp_file.path).should be_false
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
@@ -33,6 +33,10 @@ module Brcobranca
|
|
33
33
|
File.exist?(boleto_novo.monta_logo).should be_true
|
34
34
|
File.stat(boleto_novo.monta_logo).zero?.should be_false
|
35
35
|
|
36
|
+
boleto_novo = BancoCaixa.new
|
37
|
+
File.exist?(boleto_novo.monta_logo).should be_true
|
38
|
+
File.stat(boleto_novo.monta_logo).zero?.should be_false
|
39
|
+
|
36
40
|
boleto_novo = Brcobranca::Boleto::Base.new
|
37
41
|
boleto_novo.monta_logo.should be_false
|
38
42
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tulios-brcobranca-rails2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 2.0.
|
9
|
+
- 9
|
10
|
+
version: 2.0.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kivanio Barbosa
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-12-
|
18
|
+
date: 2010-12-29 00:00:00 -02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|