tulios-brcobranca-rails2 2.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/History.txt +29 -0
  2. data/Manifest.txt +54 -0
  3. data/PostInstall.txt +4 -0
  4. data/README.rdoc +75 -0
  5. data/Rakefile +41 -0
  6. data/brcobranca.gemspec +43 -0
  7. data/lib/brcobranca/arquivos/logos/banespa.jpg +0 -0
  8. data/lib/brcobranca/arquivos/logos/bb.jpg +0 -0
  9. data/lib/brcobranca/arquivos/logos/bradesco.jpg +0 -0
  10. data/lib/brcobranca/arquivos/logos/caixa.jpg +0 -0
  11. data/lib/brcobranca/arquivos/logos/hsbc.jpg +0 -0
  12. data/lib/brcobranca/arquivos/logos/itau.jpg +0 -0
  13. data/lib/brcobranca/arquivos/logos/real.jpg +0 -0
  14. data/lib/brcobranca/arquivos/logos/unibanco.jpg +0 -0
  15. data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
  16. data/lib/brcobranca/boleto/banco_banespa.rb +85 -0
  17. data/lib/brcobranca/boleto/banco_bradesco.rb +44 -0
  18. data/lib/brcobranca/boleto/banco_brasil.rb +88 -0
  19. data/lib/brcobranca/boleto/banco_caixa.rb +118 -0
  20. data/lib/brcobranca/boleto/banco_hsbc.rb +77 -0
  21. data/lib/brcobranca/boleto/banco_itau.rb +115 -0
  22. data/lib/brcobranca/boleto/banco_real.rb +70 -0
  23. data/lib/brcobranca/boleto/banco_unibanco.rb +79 -0
  24. data/lib/brcobranca/boleto/base.rb +154 -0
  25. data/lib/brcobranca/boleto/template/rghost.rb +153 -0
  26. data/lib/brcobranca/boleto/template/util.rb +34 -0
  27. data/lib/brcobranca/config.rb +9 -0
  28. data/lib/brcobranca/core_ext.rb +287 -0
  29. data/lib/brcobranca/currency.rb +67 -0
  30. data/lib/brcobranca/retorno/base.rb +43 -0
  31. data/lib/brcobranca/retorno/retorno_cbr643.rb +44 -0
  32. data/lib/brcobranca.rb +43 -0
  33. data/spec/arquivos/CBR64310.RET +28 -0
  34. data/spec/brcobranca/banco_banespa_spec.rb +195 -0
  35. data/spec/brcobranca/banco_bradesco_spec.rb +179 -0
  36. data/spec/brcobranca/banco_brasil_spec.rb +353 -0
  37. data/spec/brcobranca/banco_caixa_spec.rb +192 -0
  38. data/spec/brcobranca/banco_hsbc_spec.rb +216 -0
  39. data/spec/brcobranca/banco_itau_spec.rb +202 -0
  40. data/spec/brcobranca/banco_real_spec.rb +145 -0
  41. data/spec/brcobranca/banco_unibanco_spec.rb +193 -0
  42. data/spec/brcobranca/base_spec.rb +240 -0
  43. data/spec/brcobranca/core_ext_spec.rb +275 -0
  44. data/spec/brcobranca/currency_spec.rb +81 -0
  45. data/spec/brcobranca/retorno_cbr643_spec.rb +69 -0
  46. data/spec/brcobranca/rghost_spec.rb +36 -0
  47. data/spec/brcobranca/template/rghost_spec.rb +65 -0
  48. data/spec/brcobranca/template/util_spec.rb +42 -0
  49. data/spec/brcobranca_spec.rb +8 -0
  50. data/spec/rcov.opts +2 -0
  51. data/spec/spec.opts +6 -0
  52. data/spec/spec_helper.rb +10 -0
  53. data/tasks/rcov.rake +12 -0
  54. data/tasks/rspec.rake +21 -0
  55. metadata +202 -0
data/History.txt ADDED
@@ -0,0 +1,29 @@
1
+ == 2.0.7 22-12-2010
2
+
3
+ * Incluindo boleto para banco Caixa - Túlio Ornelas
4
+
5
+ == 2.0.6 16-08-2009
6
+
7
+ * Incluindo boleto para banco Santander Banespa - Diego Lucena
8
+
9
+ == 2.0.4 04-05-2009
10
+
11
+ * Solucionado problemas com refatoração do retorno.
12
+
13
+ == 2.0.3 25-04-2009
14
+
15
+ * Incluindo boleto para o banco Bradesco(Todas as Carteiras)
16
+ * Incluindo boleto para o banco UNIBANCO(com e sem registro)
17
+
18
+ == 2.0.2 21-04-2009
19
+
20
+ * Incluindo boleto para o banco Real(com e sem registro)
21
+
22
+ == 2.0.1 19-04-2009
23
+
24
+ * Ajustes finais para lançamento
25
+
26
+ == 2.0.0 06-04-2009
27
+
28
+ * 1 acts_as_payment torna-se brcobranca:
29
+ * Release inicial com versão em 2.0.0
data/Manifest.txt ADDED
@@ -0,0 +1,54 @@
1
+ History.txt
2
+ Manifest.txt
3
+ PostInstall.txt
4
+ README.rdoc
5
+ Rakefile
6
+ brcobranca.gemspec
7
+ lib/brcobranca.rb
8
+ lib/brcobranca/arquivos/logos/banespa.jpg
9
+ lib/brcobranca/arquivos/logos/bb.jpg
10
+ lib/brcobranca/arquivos/logos/bradesco.jpg
11
+ lib/brcobranca/arquivos/logos/hsbc.jpg
12
+ lib/brcobranca/arquivos/logos/itau.jpg
13
+ lib/brcobranca/arquivos/logos/real.jpg
14
+ lib/brcobranca/arquivos/logos/unibanco.jpg
15
+ lib/brcobranca/arquivos/logos/caixa.jpg
16
+ lib/brcobranca/arquivos/templates/modelo_generico.eps
17
+ lib/brcobranca/boleto/banco_banespa.rb
18
+ lib/brcobranca/boleto/banco_bradesco.rb
19
+ lib/brcobranca/boleto/banco_brasil.rb
20
+ lib/brcobranca/boleto/banco_hsbc.rb
21
+ lib/brcobranca/boleto/banco_itau.rb
22
+ lib/brcobranca/boleto/banco_real.rb
23
+ lib/brcobranca/boleto/banco_unibanco.rb
24
+ lib/brcobranca/boleto/banco_caixa.rb
25
+ lib/brcobranca/boleto/base.rb
26
+ lib/brcobranca/boleto/template/rghost.rb
27
+ lib/brcobranca/boleto/template/util.rb
28
+ lib/brcobranca/config.rb
29
+ lib/brcobranca/core_ext.rb
30
+ lib/brcobranca/currency.rb
31
+ lib/brcobranca/retorno/base.rb
32
+ lib/brcobranca/retorno/retorno_cbr643.rb
33
+ spec/arquivos/CBR64310.RET
34
+ spec/brcobranca/banco_banespa_spec.rb
35
+ spec/brcobranca/banco_bradesco_spec.rb
36
+ spec/brcobranca/banco_brasil_spec.rb
37
+ spec/brcobranca/banco_hsbc_spec.rb
38
+ spec/brcobranca/banco_itau_spec.rb
39
+ spec/brcobranca/banco_real_spec.rb
40
+ spec/brcobranca/banco_unibanco_spec.rb
41
+ spec/brcobranca/banco_caixa_spec.rb
42
+ spec/brcobranca/base_spec.rb
43
+ spec/brcobranca/core_ext_spec.rb
44
+ spec/brcobranca/currency_spec.rb
45
+ spec/brcobranca/retorno_cbr643_spec.rb
46
+ spec/brcobranca/rghost_spec.rb
47
+ spec/brcobranca/template/rghost_spec.rb
48
+ spec/brcobranca/template/util_spec.rb
49
+ spec/brcobranca_spec.rb
50
+ spec/rcov.opts
51
+ spec/spec.opts
52
+ spec/spec_helper.rb
53
+ tasks/rcov.rake
54
+ 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 ADDED
@@ -0,0 +1,75 @@
1
+ = brcobranca
2
+
3
+ * http://brcobranca.rubyforge.org
4
+
5
+ == EXEMPLO
6
+
7
+ * http://www.boletorails.com.br
8
+
9
+ == DESCRIÇÃO
10
+
11
+ Gem para emissão de bloquetos de cobrança para bancos brasileiros
12
+
13
+ == Bancos Disponíveis
14
+
15
+ * Banco do Brasil
16
+ * TODAS AS CARTEIRAS PRESENTES NA DOCUMENTAÇÃO
17
+
18
+ * Banco Itaú
19
+ * TODAS AS CARTEIRAS PRESENTES NA DOCUMENTAÇÃO
20
+
21
+ * Banco HSBC
22
+ * CNR
23
+
24
+ * Banco Real
25
+ * Sem registro
26
+ * Com registro
27
+
28
+ * Banco Bradesco
29
+ * TODAS AS CARTEIRAS PRESENTES NA DOCUMENTAÇÃO
30
+
31
+ * Banco UNIBANCO
32
+ * Sem registro
33
+ * Com registro
34
+
35
+ * Banco Caixa
36
+ * Sem registro
37
+
38
+ == Esta perdido?
39
+
40
+ Veja a documentação em http://brcobranca.rubyforge.org/rdoc
41
+
42
+ == REQUISITOS
43
+
44
+ * rghost
45
+ * rghost_barcode
46
+ * parseline
47
+ * GhostScript > 8.0
48
+
49
+ == INSTALAÇÃO
50
+
51
+ * sudo gem install brcobranca
52
+
53
+ == FONTES
54
+
55
+ * http://github.com/kivanio/brcobranca/tree/master
56
+
57
+ == WIKI
58
+
59
+ * http://wiki.github.com/kivanio/brcobranca
60
+
61
+ == PROBLEMAS? QUERENDO MAIS?
62
+
63
+ Informe em http://github.com/kivanio/brcobranca/issues
64
+
65
+ == Gostou?
66
+
67
+ Recomende-nos no http://www.workingwithrails.com/recommendation/new/person/5679-kivanio-pereira-barbosa
68
+
69
+ == LICENSA
70
+
71
+ BSD
72
+
73
+ De brasileiro para brasileiros.
74
+
75
+ Copyleft 2009 Kivanio Barbosa
data/Rakefile ADDED
@@ -0,0 +1,41 @@
1
+ require 'rubygems'
2
+ gem 'hoe', '>= 2.1.0'
3
+ require 'hoe'
4
+ require 'fileutils'
5
+ require './lib/brcobranca'
6
+
7
+ Hoe.plugin :newgem
8
+ Hoe.plugin :website
9
+ # Hoe.plugin :cucumberfeatures
10
+
11
+ # Generate all the Rake tasks
12
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
13
+ $hoe = Hoe.spec 'tulios-brcobranca-rails2' do
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
17
+ self.extra_deps = [
18
+ ['rghost','>= 0.8.7'],
19
+ ['rghost_barcode','>= 0.8'],
20
+ ['parseline','>= 1.0.3']
21
+ ]
22
+
23
+ self.summary = %Q{Gem que permite trabalhar com bloquetos de cobrança para bancos brasileiros.
24
+ Fork de https://github.com/kivanio/brcobranca, tag 2.0.6 adicionando o banco Caixa.
25
+ }
26
+ self.description = %Q{Gem que permite trabalhar com bloquetos de cobrança para bancos brasileiros.
27
+ Fork de https://github.com/kivanio/brcobranca, tag 2.0.6 adicionando o banco Caixa.
28
+ }
29
+ self.clean_globs |= %w[**/.DS_Store tmp *.log]
30
+ # self.rdoc_pattern = /rb$|rdoc$/
31
+ path = (self.rubyforge_name == self.name) ? self.rubyforge_name : "\#{self.rubyforge_name}/\#{self.name}"
32
+ self.remote_rdoc_dir = File.join(path.gsub(/^#{self.rubyforge_name}\/?/,''), 'rdoc')
33
+ self.rsync_args = '-av --delete --ignore-errors'
34
+ end
35
+
36
+ require 'newgem/tasks'
37
+ Dir['tasks/**/*.rake'].each { |t| load t }
38
+
39
+ # TODO - want other tests/tasks run by default? Add them to the list
40
+ # remove_task :default
41
+ # task :default => [:spec, :features]
@@ -0,0 +1,43 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{brcobranca}
5
+ s.version = "2.0.6"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Kivanio Barbosa"]
9
+ s.date = %q{2009-08-17}
10
+ s.description = %q{Gem para emissão de bloquetos de cobrança de bancos brasileiros.}
11
+ s.email = ["kivanio@gmail.com"]
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
+ s.homepage = %q{http://brcobranca.rubyforge.org}
15
+ s.post_install_message = %q{PostInstall.txt}
16
+ s.rdoc_options = ["--main", "README.rdoc"]
17
+ s.require_paths = ["lib"]
18
+ s.rubyforge_project = %q{brcobranca}
19
+ s.rubygems_version = %q{1.3.5}
20
+ s.summary = %q{Gem que permite trabalhar com bloquetos de cobrança para bancos brasileiros.}
21
+
22
+ if s.respond_to? :specification_version then
23
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
+ s.specification_version = 3
25
+
26
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
27
+ s.add_runtime_dependency(%q<rghost>, [">= 0.8.7"])
28
+ s.add_runtime_dependency(%q<rghost_barcode>, [">= 0.8"])
29
+ s.add_runtime_dependency(%q<parseline>, [">= 1.0.3"])
30
+ s.add_development_dependency(%q<hoe>, [">= 2.3.3"])
31
+ else
32
+ s.add_dependency(%q<rghost>, [">= 0.8.7"])
33
+ s.add_dependency(%q<rghost_barcode>, [">= 0.8"])
34
+ s.add_dependency(%q<parseline>, [">= 1.0.3"])
35
+ s.add_dependency(%q<hoe>, [">= 2.3.3"])
36
+ end
37
+ else
38
+ s.add_dependency(%q<rghost>, [">= 0.8.7"])
39
+ s.add_dependency(%q<rghost_barcode>, [">= 0.8"])
40
+ s.add_dependency(%q<parseline>, [">= 1.0.3"])
41
+ s.add_dependency(%q<hoe>, [">= 2.3.3"])
42
+ end
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
@@ -0,0 +1,44 @@
1
+ # Banco BRADESCO
2
+ class BancoBradesco < Brcobranca::Boleto::Base
3
+ # Responsável por definir dados iniciais quando se cria uma nova intancia da classe BancoBradesco
4
+ def initialize(campos={})
5
+ padrao={:carteira => "06", :banco => "237"}
6
+ campos = padrao.merge!(campos)
7
+ super(campos)
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
21
+
22
+ # Responsável por montar uma String com 43 caracteres que será usado na criação do código de barras
23
+ # As posições do campo livre ficam a critério de cada Banco arrecadador, sendo que o
24
+ # padrão do Bradesco é:
25
+ # Posição Tamanho Conteúdo
26
+ # 20 a 23 4 Agência Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)
27
+ # 24 a 25 2 Carteira
28
+ # 26 a 36 11 Número do Nosso Número(Sem o digito verificador)
29
+ # 37 a 43 7 Conta do Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)
30
+ # 44 a 44 1 Zero
31
+
32
+ def monta_codigo_43_digitos
33
+ banco = self.banco.zeros_esquerda(:tamanho => 3)
34
+ fator = self.data_vencimento.fator_vencimento
35
+ valor_documento = self.valor_documento.limpa_valor_moeda.zeros_esquerda(:tamanho => 10)
36
+ agencia = self.agencia.zeros_esquerda(:tamanho => 4)
37
+ carteira = self.carteira.zeros_esquerda(:tamanho => 2)
38
+ numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 11)
39
+ conta = self.conta_corrente.zeros_esquerda(:tamanho => 7)
40
+
41
+ numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{agencia}#{carteira}#{numero_documento}#{conta}0"
42
+ numero.size == 43 ? numero : nil
43
+ end
44
+ end
@@ -0,0 +1,88 @@
1
+ # Banco do Brasil
2
+ class BancoBrasil < Brcobranca::Boleto::Base
3
+
4
+ # Responsável por definir dados iniciais quando se cria uma nova intância da classe BancoBrasil
5
+ def initialize(campos={})
6
+ padrao={:carteira => "18", :banco => "001", :codigo_servico => false}
7
+ campos = padrao.merge!(campos)
8
+ super(campos)
9
+ end
10
+
11
+ # Retorna digito verificador do banco, calculado com modulo11 de 9 para 2, porem em caso de resultado ser 10, usa-se 'X'
12
+ def banco_dv
13
+ self.banco.modulo11_9to2_10_como_x
14
+ end
15
+
16
+ # Retorna digito verificador da agencia, calculado com modulo11 de 9 para 2, porem em caso de resultado ser 10, usa-se 'X'
17
+ def agencia_dv
18
+ self.agencia.modulo11_9to2_10_como_x
19
+ end
20
+
21
+ # Retorna digito verificador da conta corrente, calculado com modulo11 de 9 para 2, porem em caso de resultado ser 10, usa-se 'X'
22
+ def conta_corrente_dv
23
+ self.conta_corrente.modulo11_9to2_10_como_x
24
+ end
25
+
26
+ # Retorna digito verificador do nosso numero, calculado com modulo11 de 9 para 2, porem em caso de resultado ser 10, usa-se 'X'
27
+ # Inclui ainda o numero do convenio no calculo
28
+ def nosso_numero_dv
29
+ "#{self.convenio}#{self.numero_documento}".modulo11_9to2_10_como_x
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
37
+
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}"
42
+ end
43
+
44
+ # Responsavel por montar uma String com 43 caracteres que será usado na criacao do codigo de barras
45
+ def monta_codigo_43_digitos
46
+ banco = self.banco.zeros_esquerda(:tamanho => 3)
47
+ valor_documento = self.valor_documento.limpa_valor_moeda.zeros_esquerda(:tamanho => 10)
48
+ convenio = self.convenio.to_s
49
+ fator = self.data_vencimento.fator_vencimento
50
+ # A montagem é feita baseada na quantidade de dígitos do convênio.
51
+ case convenio.size
52
+ when 8 # Nosso Numero de 17 dígitos com Convenio de 8 dígitos e numero_documento de 9 dígitos
53
+ numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 9)
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
55
+ numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}000000#{convenio}#{numero_documento}#{self.carteira}"
56
+ when 7 # Nosso Numero de 17 dígitos com Convenio de 7 dígitos e numero_documento de 10 dígitos
57
+ numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 10)
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
59
+ numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}000000#{convenio}#{numero_documento}#{self.carteira}"
60
+ when 6 # Convenio de 6 dígitos
61
+ if self.codigo_servico == false
62
+ # Nosso Numero de 11 dígitos com Convenio de 6 dígitos e numero_documento de 5 digitos
63
+ numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 5)
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
65
+ agencia = self.agencia.zeros_esquerda(:tamanho => 4)
66
+ conta = self.conta_corrente.zeros_esquerda(:tamanho => 8)
67
+ numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{convenio}#{numero_documento}#{agencia}#{conta}#{self.carteira}"
68
+ else
69
+ # Nosso Numero de 17 dígitos com Convenio de 6 dígitos e sem numero_documento, carteira 16 e 18
70
+ numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 17)
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)
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))
73
+ numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{convenio}#{numero_documento}21"
74
+ end
75
+ when 4 # Nosso Numero de 7 dígitos com Convenio de 4 dígitos e sem numero_documento
76
+ numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 7)
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
78
+ agencia = self.agencia.zeros_esquerda(:tamanho => 4)
79
+ conta = self.conta_corrente.zeros_esquerda(:tamanho => 8)
80
+ numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{convenio}#{numero_documento}#{agencia}#{conta}#{self.carteira}"
81
+ else
82
+ numero = ""
83
+ end
84
+
85
+ numero.size == 43 ? numero : nil
86
+ end
87
+
88
+ end