brcobranca 2.0.5 → 2.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/Manifest.txt +24 -0
- data/PostInstall.txt +4 -0
- data/README.rdoc +4 -4
- data/Rakefile +9 -6
- data/brcobranca.gemspec +9 -9
- data/lib/brcobranca/arquivos/logos/banespa.jpg +0 -0
- data/lib/brcobranca/boleto/banco_banespa.rb +85 -0
- data/lib/brcobranca/boleto/banco_bradesco.rb +14 -1
- data/lib/brcobranca/boleto/banco_brasil.rb +18 -9
- data/lib/brcobranca/boleto/banco_hsbc.rb +22 -8
- data/lib/brcobranca/boleto/banco_itau.rb +20 -10
- data/lib/brcobranca/boleto/banco_real.rb +16 -2
- data/lib/brcobranca/boleto/banco_unibanco.rb +19 -5
- data/lib/brcobranca/boleto/base.rb +21 -15
- data/lib/brcobranca/boleto/template/rghost.rb +18 -16
- data/lib/brcobranca/boleto/template/util.rb +2 -0
- data/lib/brcobranca/core_ext.rb +57 -47
- data/lib/brcobranca/currency.rb +7 -10
- data/lib/brcobranca.rb +10 -2
- data/spec/arquivos/CBR64310.RET +28 -0
- data/spec/brcobranca/banco_banespa_spec.rb +195 -0
- data/spec/brcobranca/banco_bradesco_spec.rb +179 -0
- data/spec/brcobranca/banco_brasil_spec.rb +353 -0
- data/spec/brcobranca/banco_hsbc_spec.rb +216 -0
- data/spec/brcobranca/banco_itau_spec.rb +202 -0
- data/spec/brcobranca/banco_real_spec.rb +145 -0
- data/spec/brcobranca/banco_unibanco_spec.rb +193 -0
- data/spec/brcobranca/base_spec.rb +240 -0
- data/spec/brcobranca/core_ext_spec.rb +275 -0
- data/spec/brcobranca/currency_spec.rb +81 -0
- data/spec/brcobranca/retorno_cbr643_spec.rb +69 -0
- data/spec/brcobranca/rghost_spec.rb +36 -0
- data/spec/brcobranca/template/rghost_spec.rb +65 -0
- data/spec/brcobranca/template/util_spec.rb +42 -0
- data/spec/brcobranca_spec.rb +8 -0
- data/spec/rcov.opts +2 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +10 -0
- data/tasks/rcov.rake +12 -0
- data/tasks/rspec.rake +21 -0
- metadata +32 -18
- data/test/test_banco_bradesco.rb +0 -87
- data/test/test_banco_brasil.rb +0 -276
- data/test/test_banco_hsbc.rb +0 -81
- data/test/test_banco_itau.rb +0 -103
- data/test/test_banco_real.rb +0 -112
- data/test/test_banco_unibanco.rb +0 -92
- data/test/test_base.rb +0 -162
- data/test/test_core_ext.rb +0 -227
- data/test/test_currency.rb +0 -51
- data/test/test_helper.rb +0 -5
- data/test/test_retorno_cbr643.rb +0 -66
- data/test/test_rghost.rb +0 -49
@@ -66,7 +66,7 @@ module Brcobranca
|
|
66
66
|
# Responsável por definir dados iniciais quando se cria uma nova intância da classe Base.
|
67
67
|
def initialize(campos={})
|
68
68
|
padrao = { :moeda => "9", :data_documento => Date.today, :dias_vencimento => 1, :quantidade => 1,
|
69
|
-
:especie_documento => "DM", :especie => "R$", :aceite => "S", :valor => 0.0,
|
69
|
+
:especie_documento => "DM", :especie => "R$", :aceite => "S", :valor => 0.0,
|
70
70
|
:local_pagamento => "QUALQUER BANCO ATÉ O VENCIMENTO"}
|
71
71
|
|
72
72
|
campos = padrao.merge!(campos)
|
@@ -100,23 +100,28 @@ module Brcobranca
|
|
100
100
|
self.numero_documento
|
101
101
|
end
|
102
102
|
|
103
|
+
# Campo usado apenas na exibição no boleto
|
104
|
+
# Deverá ser sobreescrito para cada banco
|
105
|
+
def nosso_numero_boleto
|
106
|
+
"Sobreescreva este método na classe referente ao banco que você esta criando"
|
107
|
+
end
|
108
|
+
|
109
|
+
# Campo usado apenas na exibição no boleto
|
110
|
+
# Deverá ser sobreescrito para cada banco
|
111
|
+
def agencia_conta_boleto
|
112
|
+
"Sobreescreva este método na classe referente ao banco que você esta criando"
|
113
|
+
end
|
114
|
+
|
103
115
|
# Retorna o valor total do documento: <b>quantidate * valor</b> ou <b>zero(0)</b> caso não consiga efetuar o cálculo.
|
104
116
|
def valor_documento
|
105
|
-
|
106
|
-
|
107
|
-
rescue
|
108
|
-
0
|
109
|
-
end
|
117
|
+
return 0 unless self.quantidade.kind_of?(Numeric) && self.valor.kind_of?(Numeric)
|
118
|
+
self.quantidade * self.valor.to_f
|
110
119
|
end
|
111
120
|
|
112
121
|
# Retorna data de vencimento baseado na <b>data_documento + dias_vencimento</b> ou <b>false</b> caso não consiga efetuar o cálculo.
|
113
122
|
def data_vencimento
|
114
|
-
|
115
|
-
|
116
|
-
(self.data_documento + self.dias_vencimento.to_i)
|
117
|
-
rescue
|
118
|
-
false
|
119
|
-
end
|
123
|
+
return nil unless self.data_documento.kind_of?(Date) && self.dias_vencimento.kind_of?(Numeric)
|
124
|
+
(self.data_documento + self.dias_vencimento.to_i)
|
120
125
|
end
|
121
126
|
|
122
127
|
# Retorna uma String com 44 caracteres representando o codigo de barras do boleto
|
@@ -131,18 +136,19 @@ module Brcobranca
|
|
131
136
|
# As posições do campo livre ficam a critério de cada Banco arrecadador.
|
132
137
|
def codigo_barras
|
133
138
|
codigo = monta_codigo_43_digitos
|
134
|
-
return
|
135
|
-
return
|
139
|
+
return unless codigo
|
140
|
+
return if codigo.size != 43
|
136
141
|
codigo_dv = codigo.modulo11_2to9
|
137
142
|
|
138
143
|
"#{codigo[0..3]}#{codigo_dv}#{codigo[4..42]}"
|
139
144
|
end
|
140
145
|
|
141
146
|
# Responsável por montar uma String com 43 caracteres que será usado na criação do código de barras
|
142
|
-
# Este metodo precisa ser reescrito para cada classe de boleto a ser criada.
|
147
|
+
# Este metodo precisa ser reescrito para cada classe de boleto a ser criada.
|
143
148
|
def monta_codigo_43_digitos
|
144
149
|
"Sobreescreva este método na classe referente ao banco que você esta criando"
|
145
150
|
end
|
151
|
+
|
146
152
|
end
|
147
153
|
end
|
148
154
|
end
|
@@ -1,12 +1,17 @@
|
|
1
1
|
begin
|
2
|
-
require 'rghost'
|
2
|
+
require 'rghost'
|
3
3
|
rescue LoadError
|
4
|
-
|
4
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
5
|
+
gem 'rghost'
|
6
|
+
require 'rghost'
|
5
7
|
end
|
8
|
+
|
6
9
|
begin
|
7
|
-
require 'rghost_barcode'
|
10
|
+
require 'rghost_barcode'
|
8
11
|
rescue LoadError
|
9
|
-
|
12
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
13
|
+
gem 'rghost_barcode'
|
14
|
+
require 'rghost_barcode'
|
10
15
|
end
|
11
16
|
|
12
17
|
module Brcobranca
|
@@ -15,13 +20,14 @@ module Brcobranca
|
|
15
20
|
# Templates para usar com Rghost
|
16
21
|
module Rghost
|
17
22
|
include RGhost unless self.include?(RGhost)
|
18
|
-
|
23
|
+
|
19
24
|
# Gera o boleto em usando o formato desejado [:pdf, :jpg, :tif, :png, :ps, :laserjet, ... etc]
|
20
25
|
# Veja mais formatos na documentação do rghost: http://wiki.github.com/shairontoledo/rghost/supported-devices-drivers-and-formats
|
21
|
-
|
26
|
+
# TODO - Usar define_method para criar um metodo em tempo real to_{pdf,jpg}
|
27
|
+
def to(formato=Brcobranca::Config::OPCOES[:tipo])
|
22
28
|
modelo_generico(:tipo => formato)
|
23
29
|
end
|
24
|
-
|
30
|
+
|
25
31
|
# Responsável por setar os valores necessários no template genérico
|
26
32
|
# Retorna um stream pronto para gravaçào
|
27
33
|
#
|
@@ -43,7 +49,7 @@ module Brcobranca
|
|
43
49
|
doc.define_tags do
|
44
50
|
tag :grande, :size => 13
|
45
51
|
end
|
46
|
-
|
52
|
+
|
47
53
|
# Busca logo automaticamente
|
48
54
|
logo = monta_logo
|
49
55
|
|
@@ -58,7 +64,7 @@ module Brcobranca
|
|
58
64
|
doc.moveto :x => '0.7 cm' , :y => '23 cm'
|
59
65
|
doc.show self.cedente
|
60
66
|
doc.moveto :x => '11 cm' , :y => '23 cm'
|
61
|
-
doc.show
|
67
|
+
doc.show self.agencia_conta_boleto
|
62
68
|
doc.moveto :x => '14.2 cm' , :y => '23 cm'
|
63
69
|
doc.show self.especie
|
64
70
|
doc.moveto :x => '15.7 cm' , :y => '23 cm'
|
@@ -70,7 +76,7 @@ module Brcobranca
|
|
70
76
|
doc.moveto :x => '12 cm' , :y => '22.2 cm'
|
71
77
|
doc.show self.data_vencimento.to_s_br
|
72
78
|
doc.moveto :x => '16.5 cm' , :y => '23 cm'
|
73
|
-
doc.show self.
|
79
|
+
doc.show self.nosso_numero_boleto
|
74
80
|
doc.moveto :x => '16.5 cm' , :y => '22.2 cm'
|
75
81
|
doc.show self.valor_documento.to_currency
|
76
82
|
doc.moveto :x => '1.4 cm' , :y => '20.9 cm'
|
@@ -93,7 +99,7 @@ module Brcobranca
|
|
93
99
|
doc.moveto :x => '0.7 cm' , :y => '15.2 cm'
|
94
100
|
doc.show self.cedente if self.cedente
|
95
101
|
doc.moveto :x => '16.5 cm' , :y => '15.2 cm'
|
96
|
-
doc.show
|
102
|
+
doc.show self.agencia_conta_boleto
|
97
103
|
doc.moveto :x => '0.7 cm' , :y => '14.4 cm'
|
98
104
|
doc.show self.data_documento.to_s_br if self.data_documento
|
99
105
|
doc.moveto :x => '4.2 cm' , :y => '14.4 cm'
|
@@ -105,7 +111,7 @@ module Brcobranca
|
|
105
111
|
doc.moveto :x => '13 cm' , :y => '14.4 cm'
|
106
112
|
doc.show self.data_processamento.to_s_br if self.data_processamento
|
107
113
|
doc.moveto :x => '16.5 cm' , :y => '14.4 cm'
|
108
|
-
doc.show self.
|
114
|
+
doc.show self.nosso_numero_boleto
|
109
115
|
doc.moveto :x => '4.4 cm' , :y => '13.5 cm'
|
110
116
|
doc.show self.carteira if self.carteira
|
111
117
|
doc.moveto :x => '6.4 cm' , :y => '13.5 cm'
|
@@ -138,10 +144,6 @@ module Brcobranca
|
|
138
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
|
139
145
|
|
140
146
|
# Gerando stream
|
141
|
-
unless options[:tipo]
|
142
|
-
options[:tipo] = Brcobranca::Config::OPCOES[:tipo]
|
143
|
-
end
|
144
|
-
|
145
147
|
options[:tipo] = options[:tipo].to_sym unless options[:tipo].kind_of?(Symbol)
|
146
148
|
doc.render_stream(options[:tipo])
|
147
149
|
end
|
data/lib/brcobranca/core_ext.rb
CHANGED
@@ -24,7 +24,7 @@ module Brcobranca
|
|
24
24
|
when 14 then self.to_br_cnpj
|
25
25
|
else
|
26
26
|
self
|
27
|
-
end
|
27
|
+
end
|
28
28
|
end
|
29
29
|
|
30
30
|
# Remove caracteres que não sejam numéricos do tipo MOEDA
|
@@ -54,9 +54,9 @@ module Brcobranca
|
|
54
54
|
return (("0" * diferenca) + valor_inicial )
|
55
55
|
end
|
56
56
|
|
57
|
-
# Monta a linha digitável padrão para todos os bancos segundo a BACEN.
|
58
|
-
# Retorna + nil + para Codigo de Barras em branco,
|
59
|
-
# Codigo de Barras com tamanho diferente de 44 dígitos e
|
57
|
+
# Monta a linha digitável padrão para todos os bancos segundo a BACEN.
|
58
|
+
# Retorna + nil + para Codigo de Barras em branco,
|
59
|
+
# Codigo de Barras com tamanho diferente de 44 dígitos e
|
60
60
|
# Codigo de Barras que não tenham somente caracteres numéricos.
|
61
61
|
# A linha digitável será composta por cinco campos:
|
62
62
|
# 1º campo
|
@@ -76,7 +76,9 @@ module Brcobranca
|
|
76
76
|
# interpretada por um ponto (.) e a 2ª por um espaço em branco.
|
77
77
|
def linha_digitavel
|
78
78
|
valor_inicial = self.kind_of?(String) ? self : self.to_s
|
79
|
-
|
79
|
+
raise ArgumentError, "Número em branco" if valor_inicial.nil?
|
80
|
+
raise ArgumentError, "Somente números" unless valor_inicial.numeric?
|
81
|
+
raise ArgumentError, "Precisa conter 44 caracteres e você passou um valor com #{valor_inicial.size} caracteres" if valor_inicial.size != 44
|
80
82
|
|
81
83
|
dv_1 = ("#{valor_inicial[0..3]}#{valor_inicial[19..23]}").modulo10
|
82
84
|
campo_1_dv = "#{valor_inicial[0..3]}#{valor_inicial[19..23]}#{dv_1}"
|
@@ -103,7 +105,7 @@ module Brcobranca
|
|
103
105
|
# Método padrão para cálculo de módulo 10 segundo a BACEN.
|
104
106
|
def modulo10
|
105
107
|
valor_inicial = self.kind_of?(String) ? self : self.to_s
|
106
|
-
|
108
|
+
raise ArgumentError, "Somente números" unless valor_inicial.numeric?
|
107
109
|
|
108
110
|
total = 0
|
109
111
|
multiplicador = 2
|
@@ -117,47 +119,40 @@ module Brcobranca
|
|
117
119
|
valor == 10 ? 0 : valor
|
118
120
|
end
|
119
121
|
|
120
|
-
# Método padrão para cálculo de módulo 11 com multiplicaroes de 9 a 2 segundo a BACEN.
|
122
|
+
# Método padrão para cálculo de módulo 11 com multiplicaroes de 9 a 2 segundo a BACEN.
|
121
123
|
# Usado no DV do Nosso Numero, Agência e Cedente.
|
122
124
|
# Retorna + nil + para todos os parametros que nao forem String
|
123
125
|
# Retorna + nil + para String em branco
|
124
126
|
def modulo11_9to2
|
125
|
-
|
126
|
-
return nil if (valor_inicial !~ /\S/)
|
127
|
-
|
128
|
-
multiplicadores = [9,8,7,6,5,4,3,2]
|
129
|
-
total = 0
|
130
|
-
multiplicador_posicao = 0
|
131
|
-
|
132
|
-
valor_inicial.split(//).reverse!.each do |caracter|
|
133
|
-
multiplicador_posicao = 0 if (multiplicador_posicao == 8)
|
134
|
-
total += (caracter.to_i * multiplicadores[multiplicador_posicao])
|
135
|
-
multiplicador_posicao += 1
|
136
|
-
end
|
127
|
+
total = self.multiplicador([9,8,7,6,5,4,3,2])
|
137
128
|
|
138
129
|
return (total % 11 )
|
139
130
|
end
|
140
131
|
|
141
|
-
# Método padrão para cálculo de módulo 11 com multiplicaroes de 2 a 9 segundo a BACEN.
|
132
|
+
# Método padrão para cálculo de módulo 11 com multiplicaroes de 2 a 9 segundo a BACEN.
|
142
133
|
# Usado no DV do Código de Barras.
|
143
134
|
# Retorna + nil + para todos os parametros que não forem String
|
144
135
|
# Retorna + nil + para String em branco
|
145
136
|
def modulo11_2to9
|
137
|
+
total = self.multiplicador([2,3,4,5,6,7,8,9])
|
138
|
+
|
139
|
+
valor = (11 - (total % 11))
|
140
|
+
return [0,10,11].include?(valor) ? 1 : valor
|
141
|
+
end
|
142
|
+
|
143
|
+
def modulo_10_banespa
|
146
144
|
valor_inicial = self.kind_of?(String) ? self : self.to_s
|
147
|
-
|
145
|
+
raise ArgumentError, "Somente números" unless valor_inicial.numeric?
|
148
146
|
|
149
|
-
|
147
|
+
fatores = [7,3,1,9,7,3,1,9,7,3]
|
150
148
|
total = 0
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
total += (caracter.to_i * multiplicadores[multiplicador_posicao])
|
156
|
-
multiplicador_posicao += 1
|
149
|
+
posicao = 0
|
150
|
+
valor_inicial.split(//).each do |digito|
|
151
|
+
total += (digito.to_i * fatores[posicao]).to_s.split(//)[-1].to_i
|
152
|
+
posicao = (posicao < (fatores.size - 1)) ? (posicao + 1) : 0
|
157
153
|
end
|
158
|
-
|
159
|
-
|
160
|
-
return [0,10,11].include?(valor) ? 1 : valor
|
154
|
+
dv = 10 - total.to_s.split(//)[-1].to_i
|
155
|
+
dv == 10 ? 0 : dv
|
161
156
|
end
|
162
157
|
|
163
158
|
# Retorna o dígito verificador de <b>modulo 11(9-2)</b> trocando retorno <b>10 por X</b>.
|
@@ -174,7 +169,7 @@ module Brcobranca
|
|
174
169
|
valor == 10 ? 0 : valor
|
175
170
|
end
|
176
171
|
|
177
|
-
# Soma números inteiros positivos com 2 dígitos ou mais
|
172
|
+
# Soma números inteiros positivos com 2 dígitos ou mais
|
178
173
|
# Retorna <b>0(zero)</b> caso seja impossível.
|
179
174
|
# Ex. 1 = 1
|
180
175
|
# Ex. 11 = (1+1) = 2
|
@@ -191,6 +186,20 @@ module Brcobranca
|
|
191
186
|
|
192
187
|
return total
|
193
188
|
end
|
189
|
+
|
190
|
+
def multiplicador(fatores)
|
191
|
+
valor_inicial = self.kind_of?(String) ? self : self.to_s
|
192
|
+
raise ArgumentError, "Somente números" unless valor_inicial.numeric?
|
193
|
+
|
194
|
+
total = 0
|
195
|
+
multiplicador_posicao = 0
|
196
|
+
|
197
|
+
valor_inicial.split(//).reverse!.each do |caracter|
|
198
|
+
total += (caracter.to_i * fatores[multiplicador_posicao])
|
199
|
+
multiplicador_posicao = (multiplicador_posicao < (fatores.size - 1)) ? (multiplicador_posicao + 1) : 0
|
200
|
+
end
|
201
|
+
total.to_i
|
202
|
+
end
|
194
203
|
end
|
195
204
|
|
196
205
|
# Métodos auxiliares de verificação e validação.
|
@@ -200,8 +209,8 @@ module Brcobranca
|
|
200
209
|
# Ex. -1.232.33
|
201
210
|
# Ex. 1.232.33
|
202
211
|
def moeda?
|
203
|
-
|
204
|
-
|
212
|
+
value = self.kind_of?(String) ? self : self.to_s
|
213
|
+
value =~ /^(\+|-)?\d+((\.|,)\d{3}*)*((\.|,)\d{2}*)$/ ? true : false
|
205
214
|
end
|
206
215
|
end
|
207
216
|
|
@@ -209,7 +218,6 @@ module Brcobranca
|
|
209
218
|
module Limpeza
|
210
219
|
# Retorna uma String contendo exatamente o valor FLOAT
|
211
220
|
def limpa_valor_moeda
|
212
|
-
return self unless self.kind_of?(Float)
|
213
221
|
valor_inicial = self.to_s
|
214
222
|
(valor_inicial + ("0" * (2 - valor_inicial.split(/\./).last.size ))).somente_numeros
|
215
223
|
end
|
@@ -231,7 +239,7 @@ module Brcobranca
|
|
231
239
|
self.strftime('%d/%m/%Y')
|
232
240
|
end
|
233
241
|
# Retorna string contendo número de dias julianos:
|
234
|
-
# O cálculo é feito subtraindo-se a data atual, pelo último dia válido do ano anterior,
|
242
|
+
# O cálculo é feito subtraindo-se a data atual, pelo último dia válido do ano anterior,
|
235
243
|
# acrescentando-se o último algarismo do ano atual na quarta posição.
|
236
244
|
# Deve retornar string com 4 digitos.
|
237
245
|
# Ex. Data atual = 11/02/2009
|
@@ -249,21 +257,23 @@ module Brcobranca
|
|
249
257
|
end
|
250
258
|
end
|
251
259
|
|
252
|
-
|
253
|
-
|
254
|
-
include Brcobranca::
|
255
|
-
|
260
|
+
# NEW AND COOL
|
261
|
+
[ String, Numeric ].each do |klass|
|
262
|
+
klass.class_eval { include Brcobranca::Formatacao }
|
263
|
+
end
|
264
|
+
|
265
|
+
[ String, Numeric ].each do |klass|
|
266
|
+
klass.class_eval { include Brcobranca::Validacao }
|
256
267
|
end
|
257
268
|
|
258
|
-
|
259
|
-
include Brcobranca::
|
260
|
-
include Brcobranca::Calculo
|
269
|
+
[ String, Numeric ].each do |klass|
|
270
|
+
klass.class_eval { include Brcobranca::Calculo }
|
261
271
|
end
|
262
272
|
|
263
|
-
|
264
|
-
include Brcobranca::Limpeza
|
273
|
+
[ Float ].each do |klass|
|
274
|
+
klass.class_eval { include Brcobranca::Limpeza }
|
265
275
|
end
|
266
276
|
|
267
|
-
|
268
|
-
include Brcobranca::CalculoData
|
277
|
+
[ Date ].each do |klass|
|
278
|
+
klass.class_eval { include Brcobranca::CalculoData }
|
269
279
|
end
|
data/lib/brcobranca/currency.rb
CHANGED
@@ -56,15 +56,12 @@ module Brcobranca #:nodoc:[all]
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
|
60
|
-
|
59
|
+
# TODO - porque não incluir somente na Numeric?
|
60
|
+
# [ Fixnum, Bignum, Float ].each do |klass|
|
61
|
+
[ Numeric].each do |klass|
|
62
|
+
klass.class_eval { include Brcobranca::Currency::Number }
|
61
63
|
end
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
class Float #:nodoc:[all]
|
66
|
-
include Brcobranca::Currency::Number
|
67
|
-
end
|
68
|
-
class String #:nodoc:[all]
|
69
|
-
include Brcobranca::Currency::String
|
64
|
+
|
65
|
+
[ String ].each do |klass|
|
66
|
+
klass.class_eval { include Brcobranca::Currency::String }
|
70
67
|
end
|
data/lib/brcobranca.rb
CHANGED
@@ -1,8 +1,16 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
2
2
|
|
3
|
+
begin
|
4
|
+
require 'date'
|
5
|
+
rescue LoadError
|
6
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
7
|
+
gem 'date'
|
8
|
+
require 'date'
|
9
|
+
end
|
10
|
+
|
3
11
|
%w(core_ext currency config).each {|req| require File.join(File.dirname(__FILE__),"brcobranca",req) }
|
4
12
|
|
5
|
-
%w(base banco_brasil banco_itau banco_hsbc banco_real banco_bradesco banco_unibanco).each {|req| require File.join(File.dirname(__FILE__),"brcobranca","boleto",req) }
|
13
|
+
%w(base banco_brasil banco_itau banco_hsbc banco_real banco_bradesco banco_unibanco banco_banespa).each {|req| require File.join(File.dirname(__FILE__),"brcobranca","boleto",req) }
|
6
14
|
|
7
15
|
%w(util rghost).each {|req| require File.join(File.dirname(__FILE__),"brcobranca","boleto","template",req) }
|
8
16
|
|
@@ -23,5 +31,5 @@ else
|
|
23
31
|
end
|
24
32
|
|
25
33
|
module Brcobranca
|
26
|
-
VERSION = '2.0.
|
34
|
+
VERSION = '2.0.6'
|
27
35
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
02RETORNO01COBRANCA 33251000289353000000INSTITUTO MATO-GROSSENSE DO AL001BANCO DO BRASIL2001090000007 000000009703754590 1622420 000001
|
2
|
+
70000000000000000332510002893531622420 1622420000000000310000001 01900000000000 1806200109 000000000000000906400114923002201090000500000000000000000000000000000000000000000000000000000000000000000000000000009064000000000000000000000000000000000000000000000000856420000000000000 0000000000000000000000000000000000000000000000000004000002
|
3
|
+
70000000000000000332510002893531622420 1622420000000003010000001 01900000000000 1806200109 000000000000002235239909430002201090000500000000000000000000000000000000000000000000000000000000000000000000000000022352000000000000000000000000000000000000000000000002185220000000000000 0000000000000000000000000000000000000000000000000010000003
|
4
|
+
70000000000000000332510002893531622420 1622420000000003110000001 01900000000000 1806200109 00000000000000165330012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000016533000000000000000000000000000000000000000000000001603320000000000000 0000000000000000000000000000000000000000000000000002000004
|
5
|
+
70000000000000000332510002893531622420 1622420000000003210000001 01900000000000 1806200109 00000000000000157740012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000015774000000000000000000000000000000000000000000000001527420000000000000 0000000000000000000000000000000000000000000000000002000005
|
6
|
+
70000000000000000332510002893531622420 1622420000000003310000001 01900000000000 1806200109 00000000000000414440012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000041444000000000000000000000000000000000000000000000004094420000000000000 0000000000000000000000000000000000000000000000000002000006
|
7
|
+
70000000000000000332510002893531622420 1622420000000003410000001 01900000000000 1806200109 00000000000000610280012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000061028000000000000000000000000000000000000000000000006052820000000000000 0000000000000000000000000000000000000000000000000002000007
|
8
|
+
70000000000000000332510002893531622420 1622420000000003510000001 01900000000000 1806200109 00000000000000608040012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000060804000000000000000000000000000000000000000000000006030420000000000000 0000000000000000000000000000000000000000000000000002000008
|
9
|
+
70000000000000000332510002893531622420 1622420000000003610000001 01900000000000 1806200109 000000000000005610074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000010000009
|
10
|
+
70000000000000000332510002893531622420 1622420000000003710000001 01900000000000 1806200109 000000000000000565474808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000005654000000000000000000000000000000000000000000000000515420000000000000 0000000000000000000000000000000000000000000000000010000010
|
11
|
+
70000000000000000332510002893531622420 1622420000000003810000001 01900000000000 1806200109 000000000000005610074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000010000011
|
12
|
+
70000000000000000332510002893531622420 1622420000000003910000001 01900000000000 1806200109 000000000000000528074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000005280000000000000000000000000000000000000000000000000478020000000000000 0000000000000000000000000000000000000000000000000010000012
|
13
|
+
70000000000000000332510002893531622420 1622420000000004010000001 01900000000000 1806200109 000000000000005610074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000010000013
|
14
|
+
70000000000000000332510002893531622420 1622420000000004110000001 01900000000000 1806200109 000000000000000528074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000005280000000000000000000000000000000000000000000000000478020000000000000 0000000000000000000000000000000000000000000000000010000014
|
15
|
+
70000000000000000332510002893531622420 1622420000000004210000001 01900000000000 1806200109 000000000000005610000136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000004000015
|
16
|
+
70000000000000000332510002893531622420 1622420000000004310000001 01900000000000 1806200109 000000000000001672000136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000016720000000000000000000000000000000000000000000000001622020000000000000 0000000000000000000000000000000000000000000000000004000016
|
17
|
+
70000000000000000332510002893531622420 1622420000000004410000001 01900000000000 1806200109 000000000000000535300136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000005353000000000000000000000000000000000000000000000000485320000000000000 0000000000000000000000000000000000000000000000000004000017
|
18
|
+
70000000000000000332510002893531622420 1622420000000004510000001 01900000000000 1806200109 000000000000005210700130376002201090000500000000000000000000000000000000000000000000000000000000000000000000000000052107000000000000000000000000000000000000000000000005160720000000000000 0000000000000000000000000000000000000000000000000008000018
|
19
|
+
70000000000000000332510002893531622420 1622420000000004610000001 01900000000000 1806200109 000000000000006043600114923002201090000500000000000000000000000000000000000000000000000000000000000000000000000000060436000000000000000000000000000000000000000000000005993620000000000000 0000000000000000000000000000000000000000000000000002000019
|
20
|
+
70000000000000000332510002893531622420 1622420000000004710000001 01900000000000 1806200109 000000000000005610000136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000004000020
|
21
|
+
70000000000000000332510002893531622420 1622420000000004810000001 01900000000000 1806200109 000000000000000495000136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000004950000000000000000000000000000000000000000000000000445020000000000000 0000000000000000000000000000000000000000000000000004000021
|
22
|
+
70000000000000000332510002893531622420 1622420000000005010000001 01900000000000 1806200109 000000000000005707000114923002201090000500000000000000000000000000000000000000000000000000000000000000000000000000057070000000000000000000000000000000000000000000000005657020000000000000 0000000000000000000000000000000000000000000000000002000022
|
23
|
+
70000000000000000332510002893531622420 1622420000000005110000001 01900000000000 1806200109 000000000000005638600106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056386000000000000000000000000000000000000000000000005588620000000000000 0000000000000000000000000000000000000000000000000002000023
|
24
|
+
70000000000000000332510002893531622420 1622420000000005210000001 01900000000000 1806200109 000000000000005610000106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000002000024
|
25
|
+
70000000000000000332510002893531622420 1622420000000005310000001 01900000000000 1806200109 000000000000005856400106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000058564000000000000000000000000000000000000000000000005806420000000000000 0000000000000000000000000000000000000000000000000002000025
|
26
|
+
70000000000000000332510002893531622420 1622420000000005410000001 01900000000000 1806200109 000000000000005704600106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000057046000000000000000000000000000000000000000000000005654620000000000000 0000000000000000000000000000000000000000000000000002000026
|
27
|
+
70000000000000000332510002893531622420 1622420000000005510000001 01900000000000 1806200109 000000000000005673800106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056738000000000000000000000000000000000000000000000005623820000000000000 0000000000000000000000000000000000000000000000000002000027
|
28
|
+
9201001 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000028
|
@@ -0,0 +1,195 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe BancoBanespa do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@valid_attributes = {
|
7
|
+
:especie_documento => "DM",
|
8
|
+
:moeda => "9",
|
9
|
+
:banco => "033",
|
10
|
+
:data_documento => Date.today,
|
11
|
+
:dias_vencimento => 1,
|
12
|
+
:aceite => "S",
|
13
|
+
:quantidade => 1,
|
14
|
+
:valor => 0.0,
|
15
|
+
:local_pagamento => "QUALQUER BANCO ATÉ O VENCIMENTO",
|
16
|
+
:cedente => "Kivanio Barbosa",
|
17
|
+
:documento_cedente => "12345678912",
|
18
|
+
:sacado => "Claudio Pozzebom",
|
19
|
+
:sacado_documento => "12345678900",
|
20
|
+
:agencia => "400",
|
21
|
+
:conta_corrente => "61900",
|
22
|
+
:convenio => 12387989,
|
23
|
+
:numero_documento => "777700168"
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should create a new default instance" do
|
28
|
+
boleto_novo = BancoBanespa.new
|
29
|
+
boleto_novo.banco.should eql("033")
|
30
|
+
boleto_novo.especie_documento.should eql("DM")
|
31
|
+
boleto_novo.especie.should eql("R$")
|
32
|
+
boleto_novo.moeda.should eql("9")
|
33
|
+
boleto_novo.data_documento.should eql(Date.today)
|
34
|
+
boleto_novo.dias_vencimento.should eql(1)
|
35
|
+
boleto_novo.data_vencimento.should eql(Date.today + 1)
|
36
|
+
boleto_novo.aceite.should eql("S")
|
37
|
+
boleto_novo.quantidade.should eql(1)
|
38
|
+
boleto_novo.valor.should eql(0.0)
|
39
|
+
boleto_novo.valor_documento.should eql(0.0)
|
40
|
+
boleto_novo.local_pagamento.should eql("QUALQUER BANCO ATÉ O VENCIMENTO")
|
41
|
+
boleto_novo.carteira.should eql("COB")
|
42
|
+
boleto_novo.should be_instance_of(BancoBanespa)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should create a new instance given valid attributes" do
|
46
|
+
boleto_novo = BancoBanespa.new(@valid_attributes)
|
47
|
+
boleto_novo.banco.should eql("033")
|
48
|
+
boleto_novo.especie_documento.should eql("DM")
|
49
|
+
boleto_novo.especie.should eql("R$")
|
50
|
+
boleto_novo.moeda.should eql("9")
|
51
|
+
boleto_novo.data_documento.should eql(Date.today)
|
52
|
+
boleto_novo.dias_vencimento.should eql(1)
|
53
|
+
boleto_novo.data_vencimento.should eql(Date.today + 1)
|
54
|
+
boleto_novo.aceite.should eql("S")
|
55
|
+
boleto_novo.quantidade.should eql(1)
|
56
|
+
boleto_novo.valor.should eql(0.0)
|
57
|
+
boleto_novo.valor_documento.should eql(0.0)
|
58
|
+
boleto_novo.local_pagamento.should eql("QUALQUER BANCO ATÉ O VENCIMENTO")
|
59
|
+
boleto_novo.cedente.should eql("Kivanio Barbosa")
|
60
|
+
boleto_novo.documento_cedente.should eql("12345678912")
|
61
|
+
boleto_novo.sacado.should eql("Claudio Pozzebom")
|
62
|
+
boleto_novo.sacado_documento.should eql("12345678900")
|
63
|
+
boleto_novo.conta_corrente.should eql("61900")
|
64
|
+
boleto_novo.agencia.should eql("400")
|
65
|
+
boleto_novo.convenio.should eql(12387989)
|
66
|
+
boleto_novo.numero_documento.should eql("777700168")
|
67
|
+
boleto_novo.carteira.should eql("COB")
|
68
|
+
boleto_novo.should be_instance_of(BancoBanespa)
|
69
|
+
end
|
70
|
+
|
71
|
+
# TODO - should give exception
|
72
|
+
it "should return nil when attributes are nil" do
|
73
|
+
@valid_attributes[:valor] = 0
|
74
|
+
@valid_attributes[:data_documento] = Date.parse("2008-02-01")
|
75
|
+
@valid_attributes[:dias_vencimento] = 0
|
76
|
+
@valid_attributes[:numero_documento] = ""
|
77
|
+
@valid_attributes[:banco] = ""
|
78
|
+
@valid_attributes[:carteira] = ""
|
79
|
+
@valid_attributes[:moeda] = ""
|
80
|
+
@valid_attributes[:convenio] = ""
|
81
|
+
|
82
|
+
boleto_novo = BancoBanespa.new(@valid_attributes)
|
83
|
+
boleto_novo.should be_instance_of(BancoBanespa)
|
84
|
+
boleto_novo.monta_codigo_43_digitos.should be_nil
|
85
|
+
boleto_novo.codigo_barras.should be_nil
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should mount a valid bank invoice" do
|
89
|
+
@valid_attributes[:valor] = 103.58
|
90
|
+
@valid_attributes[:data_documento] = Date.parse("2001-08-01")
|
91
|
+
@valid_attributes[:dias_vencimento] = 0
|
92
|
+
@valid_attributes[:convenio] = 14813026478
|
93
|
+
@valid_attributes[:numero_documento] = "0004952"
|
94
|
+
@valid_attributes[:conta_corrente] = "0403005"
|
95
|
+
boleto_novo = BancoBanespa.new(@valid_attributes)
|
96
|
+
boleto_novo.should be_instance_of(BancoBanespa)
|
97
|
+
boleto_novo.conta_corrente_dv.should eql(2)
|
98
|
+
boleto_novo.monta_codigo_43_digitos.should eql("0339139400000103581481302647800049520003306")
|
99
|
+
boleto_novo.codigo_barras.should eql("03398139400000103581481302647800049520003306")
|
100
|
+
boleto_novo.codigo_barras.linha_digitavel.should eql("03391.48132 02647.800040 95200.033066 8 13940000010358")
|
101
|
+
|
102
|
+
@valid_attributes[:valor] = 2952.95
|
103
|
+
@valid_attributes[:data_documento] = Date.parse("2009-08-14")
|
104
|
+
@valid_attributes[:dias_vencimento] = 5
|
105
|
+
@valid_attributes[:convenio] = 40013012168
|
106
|
+
@valid_attributes[:numero_documento] = "1234567"
|
107
|
+
@valid_attributes[:conta_corrente] = "0403005"
|
108
|
+
boleto_novo = BancoBanespa.new(@valid_attributes)
|
109
|
+
boleto_novo.should be_instance_of(BancoBanespa)
|
110
|
+
boleto_novo.conta_corrente_dv.should eql(2)
|
111
|
+
boleto_novo.monta_codigo_43_digitos.should eql("0339433400002952954001301216812345670003361")
|
112
|
+
boleto_novo.codigo_barras.should eql("03398433400002952954001301216812345670003361")
|
113
|
+
boleto_novo.codigo_barras.linha_digitavel.should eql("03394.00137 01216.812345 56700.033618 8 43340000295295")
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should mount a valid campo_livre_com_dv1_e_dv2" do
|
117
|
+
@valid_attributes[:convenio] = "40013012168"
|
118
|
+
@valid_attributes[:numero_documento] = "7469108"
|
119
|
+
boleto_novo = BancoBanespa.new(@valid_attributes)
|
120
|
+
boleto_novo.should be_instance_of(BancoBanespa)
|
121
|
+
boleto_novo.campo_livre_com_dv1_e_dv2.should eql("4001301216874691080003384")
|
122
|
+
|
123
|
+
@valid_attributes[:convenio] = "40013012168"
|
124
|
+
@valid_attributes[:numero_documento] = "1234567"
|
125
|
+
boleto_novo = BancoBanespa.new(@valid_attributes)
|
126
|
+
boleto_novo.should be_instance_of(BancoBanespa)
|
127
|
+
boleto_novo.campo_livre_com_dv1_e_dv2.should eql("4001301216812345670003361")
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should mount a valid nosso_numero and nosso_numero_dv" do
|
131
|
+
@valid_attributes[:numero_documento] = "0403005"
|
132
|
+
boleto_novo = BancoBanespa.new(@valid_attributes)
|
133
|
+
boleto_novo.should be_instance_of(BancoBanespa)
|
134
|
+
boleto_novo.nosso_numero.should eql("4000403005")
|
135
|
+
boleto_novo.nosso_numero_dv.should eql(6)
|
136
|
+
boleto_novo.nosso_numero_boleto.should eql("400 0403005 6")
|
137
|
+
|
138
|
+
@valid_attributes[:numero_documento] = "403005"
|
139
|
+
boleto_novo = BancoBanespa.new(@valid_attributes)
|
140
|
+
boleto_novo.should be_instance_of(BancoBanespa)
|
141
|
+
boleto_novo.nosso_numero.should eql("4000403005")
|
142
|
+
boleto_novo.nosso_numero_dv.should eql(6)
|
143
|
+
boleto_novo.nosso_numero_boleto.should eql("400 0403005 6")
|
144
|
+
|
145
|
+
@valid_attributes[:numero_documento] = "1234567"
|
146
|
+
boleto_novo = BancoBanespa.new(@valid_attributes)
|
147
|
+
boleto_novo.should be_instance_of(BancoBanespa)
|
148
|
+
boleto_novo.nosso_numero.should eql("4001234567")
|
149
|
+
boleto_novo.nosso_numero_dv.should eql(8)
|
150
|
+
boleto_novo.nosso_numero_boleto.should eql("400 1234567 8")
|
151
|
+
|
152
|
+
@valid_attributes[:agencia] = "123"
|
153
|
+
boleto_novo = BancoBanespa.new(@valid_attributes)
|
154
|
+
boleto_novo.should be_instance_of(BancoBanespa)
|
155
|
+
boleto_novo.nosso_numero.should eql("1231234567")
|
156
|
+
boleto_novo.nosso_numero_dv.should eql(0)
|
157
|
+
boleto_novo.nosso_numero_boleto.should eql("123 1234567 0")
|
158
|
+
|
159
|
+
@valid_attributes[:agencia] = "123"
|
160
|
+
@valid_attributes[:numero_documento] = "7469108"
|
161
|
+
boleto_novo = BancoBanespa.new(@valid_attributes)
|
162
|
+
boleto_novo.should be_instance_of(BancoBanespa)
|
163
|
+
boleto_novo.nosso_numero.should eql("1237469108")
|
164
|
+
boleto_novo.nosso_numero_dv.should eql(3)
|
165
|
+
boleto_novo.nosso_numero_boleto.should eql("123 7469108 3")
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should mount a valid agencia_conta_dv" do
|
169
|
+
boleto_novo = BancoBanespa.new(@valid_attributes)
|
170
|
+
boleto_novo.should be_instance_of(BancoBanespa)
|
171
|
+
boleto_novo.agencia_conta_boleto.should eql("000 12 38798 9")
|
172
|
+
end
|
173
|
+
|
174
|
+
it "should test outputs" do
|
175
|
+
@valid_attributes[:valor] = 2952.95
|
176
|
+
@valid_attributes[:data_documento] = Date.parse("2009-08-14")
|
177
|
+
@valid_attributes[:dias_vencimento] = 5
|
178
|
+
@valid_attributes[:convenio] = 40013012168
|
179
|
+
@valid_attributes[:numero_documento] = "1234567"
|
180
|
+
@valid_attributes[:conta_corrente] = "0403005"
|
181
|
+
boleto_novo = BancoBanespa.new(@valid_attributes)
|
182
|
+
boleto_novo.should be_instance_of(BancoBanespa)
|
183
|
+
%w| pdf jpg tif png ps |.each do |format|
|
184
|
+
file_body=boleto_novo.to(format.to_sym)
|
185
|
+
tmp_file=Tempfile.new("foobar." << format)
|
186
|
+
tmp_file.puts file_body
|
187
|
+
tmp_file.close
|
188
|
+
File.exist?(tmp_file.path).should be_true
|
189
|
+
File.stat(tmp_file.path).zero?.should be_false
|
190
|
+
File.delete(tmp_file.path).should eql(1)
|
191
|
+
File.exist?(tmp_file.path).should be_false
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
end
|