brcobranca 2.0.5 → 2.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/History.txt +4 -0
  2. data/Manifest.txt +24 -0
  3. data/PostInstall.txt +4 -0
  4. data/README.rdoc +4 -4
  5. data/Rakefile +9 -6
  6. data/brcobranca.gemspec +9 -9
  7. data/lib/brcobranca/arquivos/logos/banespa.jpg +0 -0
  8. data/lib/brcobranca/boleto/banco_banespa.rb +85 -0
  9. data/lib/brcobranca/boleto/banco_bradesco.rb +14 -1
  10. data/lib/brcobranca/boleto/banco_brasil.rb +18 -9
  11. data/lib/brcobranca/boleto/banco_hsbc.rb +22 -8
  12. data/lib/brcobranca/boleto/banco_itau.rb +20 -10
  13. data/lib/brcobranca/boleto/banco_real.rb +16 -2
  14. data/lib/brcobranca/boleto/banco_unibanco.rb +19 -5
  15. data/lib/brcobranca/boleto/base.rb +21 -15
  16. data/lib/brcobranca/boleto/template/rghost.rb +18 -16
  17. data/lib/brcobranca/boleto/template/util.rb +2 -0
  18. data/lib/brcobranca/core_ext.rb +57 -47
  19. data/lib/brcobranca/currency.rb +7 -10
  20. data/lib/brcobranca.rb +10 -2
  21. data/spec/arquivos/CBR64310.RET +28 -0
  22. data/spec/brcobranca/banco_banespa_spec.rb +195 -0
  23. data/spec/brcobranca/banco_bradesco_spec.rb +179 -0
  24. data/spec/brcobranca/banco_brasil_spec.rb +353 -0
  25. data/spec/brcobranca/banco_hsbc_spec.rb +216 -0
  26. data/spec/brcobranca/banco_itau_spec.rb +202 -0
  27. data/spec/brcobranca/banco_real_spec.rb +145 -0
  28. data/spec/brcobranca/banco_unibanco_spec.rb +193 -0
  29. data/spec/brcobranca/base_spec.rb +240 -0
  30. data/spec/brcobranca/core_ext_spec.rb +275 -0
  31. data/spec/brcobranca/currency_spec.rb +81 -0
  32. data/spec/brcobranca/retorno_cbr643_spec.rb +69 -0
  33. data/spec/brcobranca/rghost_spec.rb +36 -0
  34. data/spec/brcobranca/template/rghost_spec.rb +65 -0
  35. data/spec/brcobranca/template/util_spec.rb +42 -0
  36. data/spec/brcobranca_spec.rb +8 -0
  37. data/spec/rcov.opts +2 -0
  38. data/spec/spec.opts +6 -0
  39. data/spec/spec_helper.rb +10 -0
  40. data/tasks/rcov.rake +12 -0
  41. data/tasks/rspec.rake +21 -0
  42. metadata +32 -18
  43. data/test/test_banco_bradesco.rb +0 -87
  44. data/test/test_banco_brasil.rb +0 -276
  45. data/test/test_banco_hsbc.rb +0 -81
  46. data/test/test_banco_itau.rb +0 -103
  47. data/test/test_banco_real.rb +0 -112
  48. data/test/test_banco_unibanco.rb +0 -92
  49. data/test/test_base.rb +0 -162
  50. data/test/test_core_ext.rb +0 -227
  51. data/test/test_currency.rb +0 -51
  52. data/test/test_helper.rb +0 -5
  53. data/test/test_retorno_cbr643.rb +0 -66
  54. data/test/test_rghost.rb +0 -49
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ == 2.0.6 16-08-2009
2
+
3
+ * Incluindo boleto para banco Santander Banespa - Diego Lucena
4
+
1
5
  == 2.0.4 04-05-2009
2
6
 
3
7
  * Solucionado problemas com refatoração do retorno.
data/Manifest.txt CHANGED
@@ -1,9 +1,11 @@
1
1
  History.txt
2
2
  Manifest.txt
3
+ PostInstall.txt
3
4
  README.rdoc
4
5
  Rakefile
5
6
  brcobranca.gemspec
6
7
  lib/brcobranca.rb
8
+ lib/brcobranca/arquivos/logos/banespa.jpg
7
9
  lib/brcobranca/arquivos/logos/bb.jpg
8
10
  lib/brcobranca/arquivos/logos/bradesco.jpg
9
11
  lib/brcobranca/arquivos/logos/hsbc.jpg
@@ -11,6 +13,7 @@ lib/brcobranca/arquivos/logos/itau.jpg
11
13
  lib/brcobranca/arquivos/logos/real.jpg
12
14
  lib/brcobranca/arquivos/logos/unibanco.jpg
13
15
  lib/brcobranca/arquivos/templates/modelo_generico.eps
16
+ lib/brcobranca/boleto/banco_banespa.rb
14
17
  lib/brcobranca/boleto/banco_bradesco.rb
15
18
  lib/brcobranca/boleto/banco_brasil.rb
16
19
  lib/brcobranca/boleto/banco_hsbc.rb
@@ -25,3 +28,24 @@ lib/brcobranca/core_ext.rb
25
28
  lib/brcobranca/currency.rb
26
29
  lib/brcobranca/retorno/base.rb
27
30
  lib/brcobranca/retorno/retorno_cbr643.rb
31
+ spec/arquivos/CBR64310.RET
32
+ spec/brcobranca/banco_banespa_spec.rb
33
+ spec/brcobranca/banco_bradesco_spec.rb
34
+ spec/brcobranca/banco_brasil_spec.rb
35
+ spec/brcobranca/banco_hsbc_spec.rb
36
+ spec/brcobranca/banco_itau_spec.rb
37
+ spec/brcobranca/banco_real_spec.rb
38
+ spec/brcobranca/banco_unibanco_spec.rb
39
+ spec/brcobranca/base_spec.rb
40
+ spec/brcobranca/core_ext_spec.rb
41
+ spec/brcobranca/currency_spec.rb
42
+ spec/brcobranca/retorno_cbr643_spec.rb
43
+ spec/brcobranca/rghost_spec.rb
44
+ spec/brcobranca/template/rghost_spec.rb
45
+ spec/brcobranca/template/util_spec.rb
46
+ spec/brcobranca_spec.rb
47
+ spec/rcov.opts
48
+ spec/spec.opts
49
+ spec/spec_helper.rb
50
+ tasks/rcov.rake
51
+ tasks/rspec.rake
data/PostInstall.txt ADDED
@@ -0,0 +1,4 @@
1
+
2
+ Para maiores informações veja http://brcobranca.rubyforge.org
3
+
4
+ Para exemplos de como usar veja http://www.boletorails.com.br
data/README.rdoc CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  Gem para emissão de bloquetos de cobrança para bancos brasileiros
12
12
 
13
- == Bancos Disponíveis
13
+ == Bancos Disponíveis
14
14
 
15
15
  * Banco do Brasil
16
16
  * TODAS AS CARTEIRAS PRESENTES NA DOCUMENTAÇÃO
@@ -20,14 +20,14 @@ Gem para emissão de bloquetos de cobrança para bancos brasileiros
20
20
 
21
21
  * Banco HSBC
22
22
  * CNR
23
-
23
+
24
24
  * Banco Real
25
25
  * Sem registro
26
26
  * Com registro
27
-
27
+
28
28
  * Banco Bradesco
29
29
  * TODAS AS CARTEIRAS PRESENTES NA DOCUMENTAÇÃO
30
-
30
+
31
31
  * Banco UNIBANCO
32
32
  * Sem registro
33
33
  * Com registro
data/Rakefile CHANGED
@@ -2,33 +2,36 @@ require 'rubygems'
2
2
  gem 'hoe', '>= 2.1.0'
3
3
  require 'hoe'
4
4
  require 'fileutils'
5
- require File.dirname(__FILE__) + '/lib/brcobranca'
5
+ require './lib/brcobranca'
6
6
 
7
7
  Hoe.plugin :newgem
8
8
  Hoe.plugin :website
9
+ # Hoe.plugin :cucumberfeatures
9
10
 
10
11
  # Generate all the Rake tasks
11
12
  # Run 'rake -T' to see list of generated tasks (from gem root directory)
12
13
  $hoe = Hoe.spec 'brcobranca' do
13
- self.developer('Kivanio Barbosa', 'kivanio@gmail.com')
14
- self.rubyforge_name = self.name
14
+ self.developer 'Kivanio Barbosa', 'kivanio@gmail.com'
15
+ self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
16
+ self.rubyforge_name = self.name # TODO this is default value
15
17
  self.extra_deps = [
16
18
  ['rghost','>= 0.8.7'],
17
19
  ['rghost_barcode','>= 0.8'],
18
20
  ['parseline','>= 1.0.3']
19
21
  ]
20
22
 
21
- # self.rdoc_pattern = /rb$|rdoc$/
22
- self.summary = 'Gem que permite trabalhar com cobranças via bancos brasileiros.'
23
+ self.summary = 'Gem que permite trabalhar com bloquetos de cobrança para bancos brasileiros.'
23
24
  self.description = 'Gem para emissão de bloquetos de cobrança de bancos brasileiros.'
24
25
  self.clean_globs |= %w[**/.DS_Store tmp *.log]
26
+ # self.rdoc_pattern = /rb$|rdoc$/
25
27
  path = (self.rubyforge_name == self.name) ? self.rubyforge_name : "\#{self.rubyforge_name}/\#{self.name}"
26
28
  self.remote_rdoc_dir = File.join(path.gsub(/^#{self.rubyforge_name}\/?/,''), 'rdoc')
27
29
  self.rsync_args = '-av --delete --ignore-errors'
28
30
  end
29
31
 
30
- require 'newgem/tasks' # load /tasks/*.rake
32
+ require 'newgem/tasks'
31
33
  Dir['tasks/**/*.rake'].each { |t| load t }
32
34
 
33
35
  # TODO - want other tests/tasks run by default? Add them to the list
36
+ # remove_task :default
34
37
  # task :default => [:spec, :features]
data/brcobranca.gemspec CHANGED
@@ -2,22 +2,22 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{brcobranca}
5
- s.version = "2.0.5"
5
+ s.version = "2.0.6"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Kivanio Barbosa"]
9
- s.date = %q{2009-07-23}
9
+ s.date = %q{2009-08-17}
10
10
  s.description = %q{Gem para emissão de bloquetos de cobrança de bancos brasileiros.}
11
11
  s.email = ["kivanio@gmail.com"]
12
- s.extra_rdoc_files = ["History.txt", "Manifest.txt"]
13
- s.files = ["History.txt", "Manifest.txt", "README.rdoc", "Rakefile", "brcobranca.gemspec", "lib/brcobranca.rb", "lib/brcobranca/arquivos/logos/bb.jpg", "lib/brcobranca/arquivos/logos/bradesco.jpg", "lib/brcobranca/arquivos/logos/hsbc.jpg", "lib/brcobranca/arquivos/logos/itau.jpg", "lib/brcobranca/arquivos/logos/real.jpg", "lib/brcobranca/arquivos/logos/unibanco.jpg", "lib/brcobranca/arquivos/templates/modelo_generico.eps", "lib/brcobranca/boleto/banco_bradesco.rb", "lib/brcobranca/boleto/banco_brasil.rb", "lib/brcobranca/boleto/banco_hsbc.rb", "lib/brcobranca/boleto/banco_itau.rb", "lib/brcobranca/boleto/banco_real.rb", "lib/brcobranca/boleto/banco_unibanco.rb", "lib/brcobranca/boleto/base.rb", "lib/brcobranca/boleto/template/rghost.rb", "lib/brcobranca/boleto/template/util.rb", "lib/brcobranca/config.rb", "lib/brcobranca/core_ext.rb", "lib/brcobranca/currency.rb", "lib/brcobranca/retorno/base.rb", "lib/brcobranca/retorno/retorno_cbr643.rb", "test/test_banco_bradesco.rb", "test/test_banco_brasil.rb", "test/test_banco_hsbc.rb", "test/test_banco_itau.rb", "test/test_banco_real.rb", "test/test_banco_unibanco.rb", "test/test_base.rb", "test/test_core_ext.rb", "test/test_currency.rb", "test/test_helper.rb", "test/test_retorno_cbr643.rb", "test/test_rghost.rb"]
12
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt", "PostInstall.txt"]
13
+ s.files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "brcobranca.gemspec", "lib/brcobranca.rb", "lib/brcobranca/arquivos/logos/banespa.jpg", "lib/brcobranca/arquivos/logos/bb.jpg", "lib/brcobranca/arquivos/logos/bradesco.jpg", "lib/brcobranca/arquivos/logos/hsbc.jpg", "lib/brcobranca/arquivos/logos/itau.jpg", "lib/brcobranca/arquivos/logos/real.jpg", "lib/brcobranca/arquivos/logos/unibanco.jpg", "lib/brcobranca/arquivos/templates/modelo_generico.eps", "lib/brcobranca/boleto/banco_banespa.rb", "lib/brcobranca/boleto/banco_bradesco.rb", "lib/brcobranca/boleto/banco_brasil.rb", "lib/brcobranca/boleto/banco_hsbc.rb", "lib/brcobranca/boleto/banco_itau.rb", "lib/brcobranca/boleto/banco_real.rb", "lib/brcobranca/boleto/banco_unibanco.rb", "lib/brcobranca/boleto/base.rb", "lib/brcobranca/boleto/template/rghost.rb", "lib/brcobranca/boleto/template/util.rb", "lib/brcobranca/config.rb", "lib/brcobranca/core_ext.rb", "lib/brcobranca/currency.rb", "lib/brcobranca/retorno/base.rb", "lib/brcobranca/retorno/retorno_cbr643.rb", "spec/arquivos/CBR64310.RET", "spec/brcobranca/banco_banespa_spec.rb", "spec/brcobranca/banco_bradesco_spec.rb", "spec/brcobranca/banco_brasil_spec.rb", "spec/brcobranca/banco_hsbc_spec.rb", "spec/brcobranca/banco_itau_spec.rb", "spec/brcobranca/banco_real_spec.rb", "spec/brcobranca/banco_unibanco_spec.rb", "spec/brcobranca/base_spec.rb", "spec/brcobranca/core_ext_spec.rb", "spec/brcobranca/currency_spec.rb", "spec/brcobranca/retorno_cbr643_spec.rb", "spec/brcobranca/rghost_spec.rb", "spec/brcobranca/template/rghost_spec.rb", "spec/brcobranca/template/util_spec.rb", "spec/brcobranca_spec.rb", "spec/rcov.opts", "spec/spec.opts", "spec/spec_helper.rb", "tasks/rcov.rake", "tasks/rspec.rake"]
14
14
  s.homepage = %q{http://brcobranca.rubyforge.org}
15
+ s.post_install_message = %q{PostInstall.txt}
15
16
  s.rdoc_options = ["--main", "README.rdoc"]
16
17
  s.require_paths = ["lib"]
17
18
  s.rubyforge_project = %q{brcobranca}
18
19
  s.rubygems_version = %q{1.3.5}
19
- s.summary = %q{Gem que permite trabalhar com cobranças via bancos brasileiros.}
20
- s.test_files = ["test/test_banco_bradesco.rb", "test/test_banco_brasil.rb", "test/test_banco_hsbc.rb", "test/test_banco_itau.rb", "test/test_banco_real.rb", "test/test_banco_unibanco.rb", "test/test_base.rb", "test/test_core_ext.rb", "test/test_currency.rb", "test/test_helper.rb", "test/test_retorno_cbr643.rb", "test/test_rghost.rb"]
20
+ s.summary = %q{Gem que permite trabalhar com bloquetos de cobrança para bancos brasileiros.}
21
21
 
22
22
  if s.respond_to? :specification_version then
23
23
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
@@ -27,17 +27,17 @@ Gem::Specification.new do |s|
27
27
  s.add_runtime_dependency(%q<rghost>, [">= 0.8.7"])
28
28
  s.add_runtime_dependency(%q<rghost_barcode>, [">= 0.8"])
29
29
  s.add_runtime_dependency(%q<parseline>, [">= 1.0.3"])
30
- s.add_development_dependency(%q<hoe>, [">= 2.3.2"])
30
+ s.add_development_dependency(%q<hoe>, [">= 2.3.3"])
31
31
  else
32
32
  s.add_dependency(%q<rghost>, [">= 0.8.7"])
33
33
  s.add_dependency(%q<rghost_barcode>, [">= 0.8"])
34
34
  s.add_dependency(%q<parseline>, [">= 1.0.3"])
35
- s.add_dependency(%q<hoe>, [">= 2.3.2"])
35
+ s.add_dependency(%q<hoe>, [">= 2.3.3"])
36
36
  end
37
37
  else
38
38
  s.add_dependency(%q<rghost>, [">= 0.8.7"])
39
39
  s.add_dependency(%q<rghost_barcode>, [">= 0.8"])
40
40
  s.add_dependency(%q<parseline>, [">= 1.0.3"])
41
- s.add_dependency(%q<hoe>, [">= 2.3.2"])
41
+ s.add_dependency(%q<hoe>, [">= 2.3.3"])
42
42
  end
43
43
  end
@@ -0,0 +1,85 @@
1
+ # Banco BANESPA
2
+ class BancoBanespa < Brcobranca::Boleto::Base
3
+
4
+ def initialize(campos={})
5
+ padrao = {:carteira => "COB", :banco => "033"}
6
+ campos = padrao.merge!(campos)
7
+ super(campos)
8
+ end
9
+
10
+ # Número sequencial utilizado para distinguir os boletos na agência
11
+ def nosso_numero
12
+ "#{self.agencia.zeros_esquerda(:tamanho => 3)}#{self.numero_documento.zeros_esquerda(:tamanho => 7)}"
13
+ end
14
+
15
+ # Retorna dígito verificador do nosso número calculado como contas na documentação
16
+ def nosso_numero_dv
17
+ self.nosso_numero.zeros_esquerda(:tamanho => 10).modulo_10_banespa
18
+ end
19
+
20
+ # Retorna nosso numero pronto para exibir no boleto
21
+ def nosso_numero_boleto
22
+ "#{self.nosso_numero[0..2]} #{self.nosso_numero[3..9]} #{self.nosso_numero_dv}"
23
+ end
24
+
25
+ def agencia_conta_boleto
26
+ convenio = self.convenio.zeros_esquerda(:tamanho => 11)
27
+ "#{convenio[0..2]} #{convenio[3..4]} #{convenio[5..9]} #{convenio[10..10]}"
28
+ end
29
+
30
+ # Responsável por montar uma String com 43 caracteres que será usado na criação do código de barras.
31
+ def monta_codigo_43_digitos
32
+ banco = self.banco.zeros_esquerda(:tamanho => 3)
33
+ fator = self.data_vencimento.fator_vencimento.zeros_esquerda(:tamanho => 4)
34
+ valor_documento = self.valor_documento.limpa_valor_moeda.zeros_esquerda(:tamanho => 10)
35
+ numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{self.campo_livre_com_dv1_e_dv2}"
36
+ numero.size == 43 ? numero : nil
37
+ end
38
+
39
+ # CAMPO LIVRE
40
+ # Código do cedente PIC 9 (011)
41
+ # Nosso número PIC 9 (007)
42
+ # Filler PIC 9 (002) = 00
43
+ # Código do banco cedente PIC 9 (003) = 033
44
+ # Dígito verificador 1 PIC 9 (001)
45
+ # Dígito verificador 2 PIC 9 (001)
46
+ def campo_livre
47
+ "#{self.convenio.zeros_esquerda(:tamanho => 11)}#{self.numero_documento.zeros_esquerda(:tamanho => 7)}00#{self.banco.zeros_esquerda(:tamanho => 3)}"
48
+ end
49
+
50
+ #campo livre com os digitos verificadores como conta na documentação do banco
51
+ def campo_livre_com_dv1_e_dv2
52
+ dv1 = self.campo_livre.modulo10 #dv 1 inicial
53
+ dv2 = nil
54
+ multiplicadores = [2,3,4,5,6,7]
55
+ begin
56
+ recalcular_dv2 = false
57
+ valor_inicial = "#{self.campo_livre}#{dv1}"
58
+ total = 0
59
+ multiplicador_posicao = 0
60
+
61
+ valor_inicial.split(//).reverse!.each do |caracter|
62
+ multiplicador_posicao = 0 if (multiplicador_posicao == 6)
63
+ total += (caracter.to_i * multiplicadores[multiplicador_posicao])
64
+ multiplicador_posicao += 1
65
+ end
66
+
67
+ case total % 11
68
+ when 0 then
69
+ dv2 = 0
70
+ when 1 then
71
+ if dv1 == 9
72
+ dv1 = 0
73
+ else
74
+ dv1 += 1
75
+ end
76
+ recalcular_dv2 = true
77
+ else
78
+ dv2 = 11 - (total % 11)
79
+ end
80
+ end while(recalcular_dv2)
81
+
82
+ return "#{self.campo_livre}#{dv1}#{dv2}"
83
+ end
84
+
85
+ end
@@ -6,6 +6,18 @@ class BancoBradesco < Brcobranca::Boleto::Base
6
6
  campos = padrao.merge!(campos)
7
7
  super(campos)
8
8
  end
9
+
10
+ # Campo usado apenas na exibição no boleto
11
+ # Deverá ser sobreescrito para cada banco
12
+ def nosso_numero_boleto
13
+ "#{self.carteira}/#{self.numero_documento.zeros_esquerda(:tamanho => 11)}-#{self.nosso_numero_dv}"
14
+ end
15
+
16
+ # Campo usado apenas na exibição no boleto
17
+ # Deverá ser sobreescrito para cada banco
18
+ def agencia_conta_boleto
19
+ "#{self.agencia}-#{self.agencia_dv} / #{self.conta_corrente}-#{self.conta_corrente_dv}"
20
+ end
9
21
 
10
22
  # Responsável por montar uma String com 43 caracteres que será usado na criação do código de barras
11
23
  # As posições do campo livre ficam a critério de cada Banco arrecadador, sendo que o
@@ -26,6 +38,7 @@ class BancoBradesco < Brcobranca::Boleto::Base
26
38
  numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 11)
27
39
  conta = self.conta_corrente.zeros_esquerda(:tamanho => 7)
28
40
 
29
- "#{banco}#{self.moeda}#{fator}#{valor_documento}#{agencia}#{carteira}#{numero_documento}#{conta}0"
41
+ numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{agencia}#{carteira}#{numero_documento}#{conta}0"
42
+ numero.size == 43 ? numero : nil
30
43
  end
31
44
  end
@@ -28,10 +28,17 @@ class BancoBrasil < Brcobranca::Boleto::Base
28
28
  def nosso_numero_dv
29
29
  "#{self.convenio}#{self.numero_documento}".modulo11_9to2_10_como_x
30
30
  end
31
+
32
+ # Campo usado apenas na exibição no boleto
33
+ # Deverá ser sobreescrito para cada banco
34
+ def nosso_numero_boleto
35
+ "#{self.convenio}#{self.numero_documento}-#{self.nosso_numero_dv}"
36
+ end
31
37
 
32
- # Número sequencial utilizado para distinguir os boletos na agência
33
- def nosso_numero
34
- "#{self.convenio}#{self.numero_documento}-#{self.nosso_numero_dv}"
38
+ # Campo usado apenas na exibição no boleto
39
+ # Deverá ser sobreescrito para cada banco
40
+ def agencia_conta_boleto
41
+ "#{self.agencia}-#{self.agencia_dv} / #{self.conta_corrente}-#{self.conta_corrente_dv}"
35
42
  end
36
43
 
37
44
  # Responsavel por montar uma String com 43 caracteres que será usado na criacao do codigo de barras
@@ -45,11 +52,11 @@ class BancoBrasil < Brcobranca::Boleto::Base
45
52
  when 8 # Nosso Numero de 17 dígitos com Convenio de 8 dígitos e numero_documento de 9 dígitos
46
53
  numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 9)
47
54
  raise "Seu complemento está com #{numero_documento.size} dígitos. Com convênio de 8 dígitos, somente permite-se até 9 dígitos no numero_documento do nosso numero." if numero_documento.size > 9
48
- "#{banco}#{self.moeda}#{fator}#{valor_documento}000000#{convenio}#{numero_documento}#{self.carteira}"
55
+ numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}000000#{convenio}#{numero_documento}#{self.carteira}"
49
56
  when 7 # Nosso Numero de 17 dígitos com Convenio de 7 dígitos e numero_documento de 10 dígitos
50
57
  numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 10)
51
58
  raise "Seu complemento está com #{numero_documento.size} dígitos. Com convênio de 7 dígitos, somente permite-se até 10 dígitos no numero_documento do nosso numero." if numero_documento.size > 10
52
- "#{banco}#{self.moeda}#{fator}#{valor_documento}000000#{convenio}#{numero_documento}#{self.carteira}"
59
+ numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}000000#{convenio}#{numero_documento}#{self.carteira}"
53
60
  when 6 # Convenio de 6 dígitos
54
61
  if self.codigo_servico == false
55
62
  # Nosso Numero de 11 dígitos com Convenio de 6 dígitos e numero_documento de 5 digitos
@@ -57,23 +64,25 @@ class BancoBrasil < Brcobranca::Boleto::Base
57
64
  raise "Seu numero_documento está com #{numero_documento.size} dígitos. Com convênio de 6 dígitos, somente permite-se até 5 dígitos no numero_documento do nosso numero. Para emitir boletos com nosso numero de 17 dígitos, coloque o atributo codigo_servico=true" if numero_documento.size > 5
58
65
  agencia = self.agencia.zeros_esquerda(:tamanho => 4)
59
66
  conta = self.conta_corrente.zeros_esquerda(:tamanho => 8)
60
- "#{banco}#{self.moeda}#{fator}#{valor_documento}#{convenio}#{numero_documento}#{agencia}#{conta}#{self.carteira}"
67
+ numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{convenio}#{numero_documento}#{agencia}#{conta}#{self.carteira}"
61
68
  else
62
69
  # Nosso Numero de 17 dígitos com Convenio de 6 dígitos e sem numero_documento, carteira 16 e 18
63
70
  numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 17)
64
71
  raise "Seu numero_documento está com #{numero_documento.size} dígitos. Com convênio de 6 dígitos, somente permite-se até 17 dígitos no numero_documento do nosso numero." if (numero_documento.size > 17)
65
72
  raise "Só é permitido emitir boletos com nosso número de 17 dígitos com carteiras 16 ou 18. Sua carteira atual é #{self.carteira}" unless (["16","18"].include?(self.carteira))
66
- "#{banco}#{self.moeda}#{fator}#{valor_documento}#{convenio}#{numero_documento}21"
73
+ numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{convenio}#{numero_documento}21"
67
74
  end
68
75
  when 4 # Nosso Numero de 7 dígitos com Convenio de 4 dígitos e sem numero_documento
69
76
  numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 7)
70
77
  raise "Seu numero_documento está com #{numero_documento.size} dígitos. Com convênio de 4 dígitos, somente permite-se até 7 dígitos no numero_documento do nosso numero." if numero_documento.size > 7
71
78
  agencia = self.agencia.zeros_esquerda(:tamanho => 4)
72
79
  conta = self.conta_corrente.zeros_esquerda(:tamanho => 8)
73
- "#{banco}#{self.moeda}#{fator}#{valor_documento}#{convenio}#{numero_documento}#{agencia}#{conta}#{self.carteira}"
80
+ numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{convenio}#{numero_documento}#{agencia}#{conta}#{self.carteira}"
74
81
  else
75
- return nil
82
+ numero = ""
76
83
  end
84
+
85
+ numero.size == 43 ? numero : nil
77
86
  end
78
87
 
79
88
  end
@@ -10,7 +10,7 @@ class BancoHsbc < Brcobranca::Boleto::Base
10
10
 
11
11
  # Número sequencial utilizado para distinguir os boletos na agência
12
12
  def nosso_numero
13
- if self.data_vencimento
13
+ if self.data_vencimento.kind_of?(Date)
14
14
  self.codigo_servico = 4
15
15
  dia = self.data_vencimento.day.to_s.zeros_esquerda(:tamanho => 2)
16
16
  mes = self.data_vencimento.month.to_s.zeros_esquerda(:tamanho => 2)
@@ -29,6 +29,18 @@ class BancoHsbc < Brcobranca::Boleto::Base
29
29
  numero
30
30
  end
31
31
  end
32
+
33
+ # Campo usado apenas na exibição no boleto
34
+ # Deverá ser sobreescrito para cada banco
35
+ def nosso_numero_boleto
36
+ "#{self.nosso_numero}"
37
+ end
38
+
39
+ # Campo usado apenas na exibição no boleto
40
+ # Deverá ser sobreescrito para cada banco
41
+ def agencia_conta_boleto
42
+ "#{self.conta_corrente}"
43
+ end
32
44
 
33
45
  # Responsável por montar uma String com 43 caracteres que será usado na criação do código de barras
34
46
  def monta_codigo_43_digitos
@@ -39,23 +51,25 @@ class BancoHsbc < Brcobranca::Boleto::Base
39
51
 
40
52
  # Montagem é baseada no tipo de carteira e na presença da data de vencimento
41
53
  if self.carteira == "CNR"
42
- if self.data_vencimento
54
+ if self.data_vencimento.kind_of?(Date)
43
55
  raise "numero_documento pode ser de no máximo 13 caracteres." if (self.numero_documento.to_s.size > 13)
44
56
  fator = self.data_vencimento.fator_vencimento
45
57
  dias_julianos = self.data_vencimento.to_juliano
46
58
  self.codigo_servico = 4
47
- numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 13)
48
- "#{banco}#{self.moeda}#{fator}#{valor_documento}#{conta}#{numero_documento}#{dias_julianos}2"
59
+ numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 13)
60
+ numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{conta}#{numero_documento}#{dias_julianos}2"
61
+ numero.size == 43 ? numero : nil
49
62
  else
50
63
  # TODO
51
64
  nil
52
65
  end
53
66
  else
54
- raise "numero_documento pode ser de no máximo 6 caracteres." if (self.numero_documento.to_s.size > 6)
55
- numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 6)
56
- nosso_numero = self.nosso_numero.zeros_esquerda(:tamanho => 9)
57
- self.codigo_servico = 5
58
67
  # TODO
68
+ # raise "numero_documento pode ser de no máximo 6 caracteres." if (self.numero_documento.to_s.size > 6)
69
+ # numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 6)
70
+ # nosso_numero = self.nosso_numero.zeros_esquerda(:tamanho => 9)
71
+ # self.codigo_servico = 5
72
+
59
73
  nil
60
74
  end
61
75
  end
@@ -10,10 +10,10 @@ class BancoItau < Brcobranca::Boleto::Base
10
10
  super(campos)
11
11
  end
12
12
 
13
- # Retorna dígito verificador do nosso número, calculado com modulo10.
14
- # Para a grande maioria das carteiras, são considerados para a obtenção do DAC/DV, os dados
15
- # "AGENCIA(sem DAC/DV)/CONTA(sem DAC/DV)/CARTEIRA/NOSSO NUMERO", calculado pelo criterio do Modulo 10.
16
- # A excecao, estão as carteiras 126, 131, 146, 150 e 168 cuja obtenção esta baseada apenas nos
13
+ # Retorna dígito verificador do nosso número, calculado com modulo10.
14
+ # Para a grande maioria das carteiras, são considerados para a obtenção do DAC/DV, os dados
15
+ # "AGENCIA(sem DAC/DV)/CONTA(sem DAC/DV)/CARTEIRA/NOSSO NUMERO", calculado pelo criterio do Modulo 10.
16
+ # A excecao, estão as carteiras 126, 131, 146, 150 e 168 cuja obtenção esta baseada apenas nos
17
17
  # dados "CARTEIRA/NOSSO NUMERO".
18
18
  def nosso_numero_dv
19
19
  if %w(126 131 146 150 168).include?(self.carteira)
@@ -24,16 +24,23 @@ class BancoItau < Brcobranca::Boleto::Base
24
24
  end
25
25
  end
26
26
 
27
- # Número sequencial utilizado para distinguir os boletos na agência
28
- def nosso_numero
29
- "#{self.carteira}/#{self.numero_documento}-#{self.nosso_numero_dv}"
30
- end
31
-
32
- # Calcula o dígito verificador para conta corrente do Itau.
27
+ # Calcula o dígito verificador para conta corrente do Itau.
33
28
  # Retorna apenas o dígito verificador da conta ou nil caso seja impossível calcular.
34
29
  def agencia_conta_corrente_dv
35
30
  "#{self.agencia}#{self.conta_corrente}".modulo10
36
31
  end
32
+
33
+ # Campo usado apenas na exibição no boleto
34
+ # Deverá ser sobreescrito para cada banco
35
+ def nosso_numero_boleto
36
+ "#{self.carteira}/#{self.numero_documento}-#{self.nosso_numero_dv}"
37
+ end
38
+
39
+ # Campo usado apenas na exibição no boleto
40
+ # Deverá ser sobreescrito para cada banco
41
+ def agencia_conta_boleto
42
+ "#{self.agencia}-#{self.agencia_dv} / #{self.conta_corrente}-#{self.conta_corrente_dv}"
43
+ end
37
44
 
38
45
  # Responsável por montar uma String com 43 caracteres que será usado na criação do código de barras.
39
46
  def monta_codigo_43_digitos
@@ -61,6 +68,7 @@ class BancoItau < Brcobranca::Boleto::Base
61
68
  codigo = "#{self.banco}#{self.moeda}#{fator_vencimento}#{valor_documento_formatado}#{self.carteira}"
62
69
  codigo << "#{numero_documento}#{self.nosso_numero_dv}#{self.agencia}#{self.conta_corrente}#{self.agencia_conta_corrente_dv}000"
63
70
  codigo
71
+ codigo.size == 43 ? codigo : nil
64
72
  when 198, 106, 107, 122, 142, 143, 195, 196
65
73
  # CARTEIRAS 198, 106, 107,122, 142, 143, 195 e 196
66
74
  # 01 a 03 03 9(3) Código do Banco na Câmara de Compensação = ‘341’
@@ -83,6 +91,7 @@ class BancoItau < Brcobranca::Boleto::Base
83
91
  codigo = "#{self.banco}#{self.moeda}#{fator_vencimento}#{valor_documento_formatado}#{self.carteira}"
84
92
  codigo << "#{numero_documento}#{seu_numero}#{convenio}#{dv}0"
85
93
  codigo
94
+ codigo.size == 43 ? codigo : nil
86
95
  else
87
96
  # DEMAIS CARTEIRAS
88
97
  # 01 a 03 03 9(03) Código do Banco na Câmara de Compensação = '341'
@@ -100,6 +109,7 @@ class BancoItau < Brcobranca::Boleto::Base
100
109
  codigo = "#{self.banco}#{self.moeda}#{fator_vencimento}#{valor_documento_formatado}#{self.carteira}"
101
110
  codigo << "#{numero_documento}#{self.nosso_numero_dv}#{self.agencia}#{self.conta_corrente}#{self.agencia_conta_corrente_dv}000"
102
111
  codigo
112
+ codigo.size == 43 ? codigo : nil
103
113
  end
104
114
  end
105
115
  end
@@ -6,7 +6,19 @@ class BancoReal < Brcobranca::Boleto::Base
6
6
  campos = padrao.merge!(campos)
7
7
  super(campos)
8
8
  end
9
+
10
+ # Campo usado apenas na exibição no boleto
11
+ # Deverá ser sobreescrito para cada banco
12
+ def nosso_numero_boleto
13
+ "#{self.numero_documento}-#{self.nosso_numero_dv}"
14
+ end
9
15
 
16
+ # Campo usado apenas na exibição no boleto
17
+ # Deverá ser sobreescrito para cada banco
18
+ def agencia_conta_boleto
19
+ "#{self.agencia}-#{self.agencia_dv} / #{self.conta_corrente}-#{self.conta_corrente_dv}"
20
+ end
21
+
10
22
  # CALCULO DO DIGITO:
11
23
  # APLICA-SE OS PESOS 2,1,2,1,.... AOS ALGARISMOS DO NUMERO COMPOSTO POR:
12
24
  # NUMERO DO BANCO : COM 7 DIGITOS P/ COBRANCA REGISTRADA
@@ -46,11 +58,13 @@ class BancoReal < Brcobranca::Boleto::Base
46
58
  # Carteira sem registro
47
59
  when 57
48
60
  numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 13)
49
- "#{banco}#{self.moeda}#{fator}#{valor_documento}#{agencia}#{conta}#{self.agencia_conta_corrente_nosso_numero_dv}#{numero_documento}"
61
+ codigo = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{agencia}#{conta}#{self.agencia_conta_corrente_nosso_numero_dv}#{numero_documento}"
62
+ codigo.size == 43 ? codigo : nil
50
63
  else
51
64
  # TODO verificar com o banco, pois não consta na documentação
52
65
  numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 7)
53
- "#{banco}#{self.moeda}#{fator}#{valor_documento}000000#{agencia}#{conta}#{self.agencia_conta_corrente_nosso_numero_dv}#{numero_documento}"
66
+ codigo = "#{banco}#{self.moeda}#{fator}#{valor_documento}000000#{agencia}#{conta}#{self.agencia_conta_corrente_nosso_numero_dv}#{numero_documento}"
67
+ codigo.size == 43 ? codigo : nil
54
68
  end
55
69
  end
56
70
  end
@@ -10,7 +10,19 @@ class BancoUnibanco < Brcobranca::Boleto::Base
10
10
  end
11
11
 
12
12
  def nosso_numero_dv
13
- self.numero_documento.zeros_esquerda(:tamanho => 11).modulo11_2to9
13
+ self.numero_documento.modulo11_2to9
14
+ end
15
+
16
+ # Campo usado apenas na exibição no boleto
17
+ # Deverá ser sobreescrito para cada banco
18
+ def nosso_numero_boleto
19
+ "#{self.numero_documento.zeros_esquerda(:tamanho => 14)}-#{self.nosso_numero_dv}"
20
+ end
21
+
22
+ # Campo usado apenas na exibição no boleto
23
+ # Deverá ser sobreescrito para cada banco
24
+ def agencia_conta_boleto
25
+ "#{self.agencia} / #{self.conta_corrente}-#{self.conta_corrente_dv}"
14
26
  end
15
27
 
16
28
  # Responsável por montar uma String com 43 caracteres que será usado na criação do código de barras
@@ -34,11 +46,12 @@ class BancoUnibanco < Brcobranca::Boleto::Base
34
46
  # 21 a 27 7 número do cliente no CÓDIGO DE BARRAS + dígito verificador
35
47
  # 28 a 29 2 vago. Usar 00 (número FIXO)
36
48
  # 30 a 43 14 Número de referência do cliente
37
- # 44 1 Dígito verificador
49
+ # 44 1 Dígito verificador
38
50
 
39
51
  convenio = self.convenio.zeros_esquerda(:tamanho => 6)
40
52
  numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 14)
41
- "#{banco}#{self.moeda}#{fator}#{valor_documento}#{carteira}#{convenio}00#{numero_documento}#{self.nosso_numero_dv}"
53
+ codigo = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{carteira}#{convenio}00#{numero_documento}#{self.nosso_numero_dv}"
54
+ codigo.size == 43 ? codigo : nil
42
55
  when 4
43
56
 
44
57
  # Cobrança com registro (CÓDIGO DE BARRAS)
@@ -46,7 +59,7 @@ class BancoUnibanco < Brcobranca::Boleto::Base
46
59
  # 1 a 3 3 Número de identificação do Unibanco: 409 (número FIXO)
47
60
  # 4 1 Código da moeda. Real (R$)=9 (número FIXO)
48
61
  # 5 1 dígito verificador do CÓDIGO DE BARRAS
49
- # 6 a 9 4 fator de vencimento em 4 algarismos, conforme tabela da página 14
62
+ # 6 a 9 4 fator de vencimento em 4 algarismos, conforme tabela da página 14
50
63
  # 10 a 19 10 valor do título com zeros à esquerda
51
64
  # 20 a 21 2 Código para transação CVT: 04 (número FIXO) (04=5539-5)
52
65
  # 22 a 27 6 data de vencimento (AAMMDD)
@@ -57,7 +70,8 @@ class BancoUnibanco < Brcobranca::Boleto::Base
57
70
  data = self.data_vencimento.strftime('%y%m%d')
58
71
  agencia = self.agencia.zeros_esquerda(:tamanho => 4)
59
72
  numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 11)
60
- "#{banco}#{self.moeda}#{fator}#{valor_documento}0#{carteira}#{data}#{agencia}#{self.agencia_dv}#{numero_documento}#{self.nosso_numero_dv}"
73
+ codigo = "#{banco}#{self.moeda}#{fator}#{valor_documento}0#{carteira}#{data}#{agencia}#{self.agencia_dv}#{numero_documento}#{self.nosso_numero_dv}"
74
+ codigo.size == 43 ? codigo : nil
61
75
  else
62
76
  nil
63
77
  end