brcobranca 2.0.6 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/.document +5 -0
  2. data/.gitignore +30 -0
  3. data/Gemfile +11 -0
  4. data/Gemfile.lock +48 -0
  5. data/History.txt +13 -1
  6. data/LICENSE +20 -0
  7. data/README.rdoc +12 -5
  8. data/Rakefile +33 -37
  9. data/VERSION +1 -0
  10. data/brcobranca.gemspec +26 -35
  11. data/lib/brcobranca/arquivos/logos/{bb.jpg → bancobrasil.jpg} +0 -0
  12. data/lib/brcobranca/arquivos/logos/banespa.jpg +0 -0
  13. data/lib/brcobranca/arquivos/logos/caixa.jpg +0 -0
  14. data/lib/brcobranca/boleto/banco_brasil.rb +150 -77
  15. data/lib/brcobranca/boleto/base.rb +146 -75
  16. data/lib/brcobranca/boleto/bradesco.rb +69 -0
  17. data/lib/brcobranca/boleto/caixa.rb +100 -0
  18. data/lib/brcobranca/boleto/hsbc.rb +95 -0
  19. data/lib/brcobranca/boleto/itau.rb +133 -0
  20. data/lib/brcobranca/boleto/real.rb +74 -0
  21. data/lib/brcobranca/boleto/template/base.rb +13 -0
  22. data/lib/brcobranca/boleto/template/rghost.rb +136 -62
  23. data/lib/brcobranca/boleto/unibanco.rb +115 -0
  24. data/lib/brcobranca/calculo.rb +132 -0
  25. data/lib/brcobranca/calculo_data.rb +42 -0
  26. data/lib/brcobranca/currency.rb +3 -4
  27. data/lib/brcobranca/formatacao.rb +102 -0
  28. data/lib/brcobranca/limpeza.rb +19 -0
  29. data/lib/brcobranca/retorno/base.rb +1 -2
  30. data/lib/brcobranca/retorno/retorno_cbr643.rb +42 -40
  31. data/lib/brcobranca/version.rb +3 -0
  32. data/lib/brcobranca.rb +93 -16
  33. data/spec/brcobranca/banco_bradesco_spec.rb +63 -50
  34. data/spec/brcobranca/banco_brasil_spec.rb +102 -136
  35. data/spec/brcobranca/banco_caixa_spec.rb +166 -0
  36. data/spec/brcobranca/banco_hsbc_spec.rb +83 -76
  37. data/spec/brcobranca/banco_real_spec.rb +54 -37
  38. data/spec/brcobranca/banco_unibanco_spec.rb +69 -52
  39. data/spec/brcobranca/base_spec.rb +24 -79
  40. data/spec/brcobranca/boletos_em_lote_spec.rb +46 -0
  41. data/spec/brcobranca/core_ext_spec.rb +24 -114
  42. data/spec/brcobranca/currency_spec.rb +1 -0
  43. data/spec/brcobranca/{banco_itau_spec.rb → itau_spec.rb} +112 -67
  44. data/spec/brcobranca/retorno_cbr643_spec.rb +13 -12
  45. data/spec/brcobranca/rghost_spec.rb +8 -7
  46. data/spec/brcobranca_spec.rb +16 -6
  47. data/spec/spec_helper.rb +11 -8
  48. metadata +107 -58
  49. data/Manifest.txt +0 -51
  50. data/PostInstall.txt +0 -4
  51. data/lib/brcobranca/boleto/banco_banespa.rb +0 -85
  52. data/lib/brcobranca/boleto/banco_bradesco.rb +0 -44
  53. data/lib/brcobranca/boleto/banco_hsbc.rb +0 -77
  54. data/lib/brcobranca/boleto/banco_itau.rb +0 -115
  55. data/lib/brcobranca/boleto/banco_real.rb +0 -70
  56. data/lib/brcobranca/boleto/banco_unibanco.rb +0 -79
  57. data/lib/brcobranca/boleto/template/util.rb +0 -32
  58. data/lib/brcobranca/config.rb +0 -9
  59. data/lib/brcobranca/core_ext.rb +0 -279
  60. data/spec/brcobranca/banco_banespa_spec.rb +0 -195
  61. data/spec/brcobranca/template/rghost_spec.rb +0 -65
  62. data/spec/brcobranca/template/util_spec.rb +0 -42
  63. data/spec/rcov.opts +0 -2
  64. data/spec/spec.opts +0 -6
  65. data/tasks/rcov.rake +0 -12
  66. data/tasks/rspec.rake +0 -21
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,30 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+ scratch_directory
21
+ tmp
22
+ .yardoc
23
+
24
+ ## PROJECT::SPECIFIC
25
+ config
26
+ config/*.*
27
+ pkg
28
+ pkg/*.8
29
+ doc
30
+ doc/*.*
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source :rubygems
2
+
3
+ # Specify your gem's dependencies in brcobranca.gemspec
4
+ gemspec
5
+
6
+ gem "rake"
7
+
8
+ group :test do
9
+ gem "rspec", :require => false
10
+ gem "ruby-debug", :require => false, :platform => :ruby_18
11
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,48 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ brcobranca (3.0.0)
5
+ activemodel (>= 3.0.0)
6
+ parseline (>= 1.0.3)
7
+ rghost (>= 0.8.7)
8
+ rghost_barcode (>= 0.8)
9
+
10
+ GEM
11
+ remote: http://rubygems.org/
12
+ specs:
13
+ activemodel (3.0.6)
14
+ activesupport (= 3.0.6)
15
+ builder (~> 2.1.2)
16
+ i18n (~> 0.5.0)
17
+ activesupport (3.0.6)
18
+ builder (2.1.2)
19
+ columnize (0.3.2)
20
+ diff-lcs (1.1.2)
21
+ i18n (0.5.0)
22
+ linecache (0.43)
23
+ parseline (1.0.3)
24
+ rake (0.8.7)
25
+ rghost (0.8.7.5)
26
+ rghost_barcode (0.9)
27
+ rspec (2.5.0)
28
+ rspec-core (~> 2.5.0)
29
+ rspec-expectations (~> 2.5.0)
30
+ rspec-mocks (~> 2.5.0)
31
+ rspec-core (2.5.1)
32
+ rspec-expectations (2.5.0)
33
+ diff-lcs (~> 1.1.2)
34
+ rspec-mocks (2.5.0)
35
+ ruby-debug (0.10.4)
36
+ columnize (>= 0.1)
37
+ ruby-debug-base (~> 0.10.4.0)
38
+ ruby-debug-base (0.10.4)
39
+ linecache (>= 0.3)
40
+
41
+ PLATFORMS
42
+ ruby
43
+
44
+ DEPENDENCIES
45
+ brcobranca!
46
+ rake
47
+ rspec
48
+ ruby-debug
data/History.txt CHANGED
@@ -1,3 +1,15 @@
1
+ == 3.0.0 14-04-2011
2
+
3
+ * Múltiplos boletos em lote com RGhost
4
+ * Validações
5
+ * Incluindo boleto para CAIXA by Túlio Ornelas
6
+ * Removendo BANESPA que virou Santander
7
+
8
+ == 2.0.7 14-05-2010
9
+
10
+ * Resolução de imagens com maior qualidade - Anderson Dias
11
+ * Correção do campo de exibição agencia/conta no boleto do Itáu (Solicitado pelo banco em homologação) - Antonio Carlos
12
+
1
13
  == 2.0.6 16-08-2009
2
14
 
3
15
  * Incluindo boleto para banco Santander Banespa - Diego Lucena
@@ -22,4 +34,4 @@
22
34
  == 2.0.0 06-04-2009
23
35
 
24
36
  * 1 acts_as_payment torna-se brcobranca:
25
- * Release inicial com versão em 2.0.0
37
+ * Release inicial com versão em 2.0.0
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Kivanio Barbosa
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc CHANGED
@@ -1,10 +1,11 @@
1
1
  = brcobranca
2
2
 
3
- * http://brcobranca.rubyforge.org
3
+ * http://rubygems.org/gems/brcobranca
4
4
 
5
5
  == EXEMPLO
6
6
 
7
7
  * http://www.boletorails.com.br
8
+ * http://github.com/kivanio/brcobranca_exemplo
8
9
 
9
10
  == DESCRIÇÃO
10
11
 
@@ -12,6 +13,9 @@ Gem para emissão de bloquetos de cobrança para bancos brasileiros
12
13
 
13
14
  == Bancos Disponíveis
14
15
 
16
+ * Banco Banespa
17
+ * COB
18
+
15
19
  * Banco do Brasil
16
20
  * TODAS AS CARTEIRAS PRESENTES NA DOCUMENTAÇÃO
17
21
 
@@ -32,15 +36,18 @@ Gem para emissão de bloquetos de cobrança para bancos brasileiros
32
36
  * Sem registro
33
37
  * Com registro
34
38
 
39
+ * Banco Caixa
40
+ * Sem registro (SR) by Túlio Ornelas - https://github.com/tulios
41
+
35
42
  == Esta perdido?
36
43
 
37
- Veja a documentação em http://brcobranca.rubyforge.org/rdoc
44
+ Veja a documentação da versão atual em http://rubydoc.info/gems/brcobranca e da versão de desenvolvimento em http://rubydoc.info/github/kivanio/brcobranca/master/frames
38
45
 
39
46
  == REQUISITOS
40
47
 
41
- * rghost
42
- * rghost_barcode
43
- * parseline
48
+ * rghost >= 0.8.7
49
+ * rghost_barcode >= 0.8
50
+ * parseline >= 1.0.3
44
51
  * GhostScript > 8.0
45
52
 
46
53
  == INSTALAÇÃO
data/Rakefile CHANGED
@@ -1,37 +1,33 @@
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 'brcobranca' 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 = 'Gem que permite trabalhar com bloquetos de cobrança para bancos brasileiros.'
24
- self.description = 'Gem para emissão de bloquetos de cobrança de bancos brasileiros.'
25
- self.clean_globs |= %w[**/.DS_Store tmp *.log]
26
- # self.rdoc_pattern = /rb$|rdoc$/
27
- path = (self.rubyforge_name == self.name) ? self.rubyforge_name : "\#{self.rubyforge_name}/\#{self.name}"
28
- self.remote_rdoc_dir = File.join(path.gsub(/^#{self.rubyforge_name}\/?/,''), 'rdoc')
29
- self.rsync_args = '-av --delete --ignore-errors'
30
- end
31
-
32
- require 'newgem/tasks'
33
- Dir['tasks/**/*.rake'].each { |t| load t }
34
-
35
- # TODO - want other tests/tasks run by default? Add them to the list
36
- # remove_task :default
37
- # task :default => [:spec, :features]
1
+ # encoding: UTF-8
2
+
3
+ require 'bundler'
4
+ Bundler::GemHelper.install_tasks
5
+
6
+ require 'rspec/core/rake_task'
7
+
8
+ RSpec::Core::RakeTask.new('spec')
9
+
10
+ # If you want to make this the default task
11
+ task :default => :spec
12
+
13
+ #
14
+ # begin
15
+ # gem 'metric_fu'
16
+ # require 'metric_fu'
17
+ # MetricFu::Configuration.run do |config|
18
+ # #define which metrics you want to use
19
+ # config.metrics = [:churn, :saikuro, :flay, :flog, :reek, :roodi]
20
+ # config.graphs = []
21
+ # config.flay = { :dirs_to_flay => ['lib'], :minimum_score => 20, :filetypes => ['rb'] }
22
+ # config.flog = { :dirs_to_flog => ['lib'] }
23
+ # config.reek = { :dirs_to_reek => ['lib'] }
24
+ # config.roodi = { :dirs_to_roodi => ['lib'] }
25
+ # config.saikuro = {
26
+ # :output_directory => 'scratch_directory/saikuro', :input_directory => ['lib'],
27
+ # :cyclo => "", :filter_cyclo => "0", :warn_cyclo => "5", :error_cyclo => "7",
28
+ # :formater => "text"
29
+ # }
30
+ # config.churn = { :start_date => "3 year ago", :minimum_churn_count => 10}
31
+ # end
32
+ # rescue LoadError
33
+ # end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 3.0.0
data/brcobranca.gemspec CHANGED
@@ -1,43 +1,34 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "brcobranca/version"
2
4
 
3
5
  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=
6
+ s.name = "brcobranca"
7
+ s.version = Brcobranca::VERSION
8
+ s.platform = Gem::Platform::RUBY
8
9
  s.authors = ["Kivanio Barbosa"]
9
- s.date = %q{2009-08-17}
10
+ s.date = %q{2011-04-14}
10
11
  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
12
  s.summary = %q{Gem que permite trabalhar com bloquetos de cobrança para bancos brasileiros.}
13
+ s.email = %q{kivanio@gmail.com}
14
+ s.homepage = %q{http://rubygems.org/gems/brcobranca}
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.requirements = ["GhostScript > 8.0, para gear PDF e c\303\263digo de Barras"]
22
+ s.rubyforge_project = "brcobranca"
21
23
 
22
- if s.respond_to? :specification_version then
23
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
- s.specification_version = 3
24
+ s.add_runtime_dependency(%q<rghost>, [">= 0.8.7"])
25
+ s.add_runtime_dependency(%q<rghost_barcode>, [">= 0.8"])
26
+ s.add_runtime_dependency(%q<parseline>, [">= 1.0.3"])
27
+ s.add_runtime_dependency(%q<activemodel>, [">= 3.0.0"])
25
28
 
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
29
+ s.post_install_message = %[
30
+ ===========================================================================
31
+ Visite http://www.boletorails.com.br para ver exemplos!
32
+ ===========================================================================
33
+ ]
34
+ end
File without changes
@@ -1,88 +1,161 @@
1
- # Banco do Brasil
2
- class BancoBrasil < Brcobranca::Boleto::Base
1
+ # -*- encoding: utf-8 -*-
2
+ module Brcobranca
3
+ module Boleto
4
+ class BancoBrasil < Base # Banco do Brasil
3
5
 
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
6
+ validates_length_of :agencia, :maximum => 4, :message => "deve ser menor ou igual a 4 dígitos."
7
+ validates_length_of :conta_corrente, :maximum => 8, :message => "deve ser menor ou igual a 8 dígitos."
8
+ validates_length_of :carteira, :maximum => 2, :message => "deve ser menor ou igual a 2 dígitos."
9
+ validates_length_of :convenio, :in => 4..8, :message => "não existente para este banco."
10
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
11
+ validates_each :numero_documento do |record, attr, value|
12
+ valor_tamanho = value.to_s.size
13
+ registro_tamanho = record.convenio.to_s.size
14
+ quantidade = case
15
+ when (valor_tamanho > 9) && (registro_tamanho == 8)
16
+ '9'
17
+ when (valor_tamanho > 10) && (registro_tamanho == 7)
18
+ '10'
19
+ when (valor_tamanho > 7) && (registro_tamanho == 4)
20
+ '7'
21
+ when (valor_tamanho > 5) && (registro_tamanho == 6) && (!record.codigo_servico)
22
+ '5'
23
+ when (valor_tamanho > 17) && (registro_tamanho == 6) && (record.codigo_servico)
24
+ '17'
25
+ else
26
+ nil
27
+ end
28
+ record.errors.add attr, "deve ser menor ou igual a #{quantidade} dígitos." if quantidade
29
+ end
15
30
 
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
31
+ # Nova instancia do BancoBrasil
32
+ # @param (see Brcobranca::Boleto::Base#initialize)
33
+ def initialize(campos={})
34
+ campos = {:carteira => "18", :codigo_servico => false}.merge!(campos)
35
+ super(campos)
36
+ end
20
37
 
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
38
+ # Codigo do banco emissor (3 dígitos sempre)
39
+ #
40
+ # @return [String] 3 caracteres numéricos.
41
+ def banco
42
+ "001"
43
+ end
25
44
 
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
45
+ # Carteira
46
+ #
47
+ # @return [String] 2 caracteres numéricos.
48
+ def carteira=(valor)
49
+ @carteira = valor.to_s.rjust(2,'0') unless valor.nil?
50
+ end
37
51
 
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
52
+ # Dígito verificador do banco
53
+ #
54
+ # @return [String] 1 caracteres numéricos.
55
+ def banco_dv
56
+ self.banco.modulo11_9to2_10_como_x
57
+ end
43
58
 
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"
59
+ # Retorna dígito verificador da agência
60
+ #
61
+ # @return [String] 1 caracteres numéricos.
62
+ def agencia_dv
63
+ self.agencia.modulo11_9to2_10_como_x
74
64
  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
65
 
85
- numero.size == 43 ? numero : nil
86
- end
66
+ # Conta corrente
67
+ # @return [String] 8 caracteres numéricos.
68
+ def conta_corrente=(valor)
69
+ @conta_corrente = valor.to_s.rjust(8,'0') unless valor.nil?
70
+ end
87
71
 
72
+ # Dígito verificador da conta corrente
73
+ # @return [String] 1 caracteres numéricos.
74
+ def conta_corrente_dv
75
+ self.conta_corrente.modulo11_9to2_10_como_x
76
+ end
77
+
78
+ # Número seqüencial utilizado para identificar o boleto.
79
+ # (Número de dígitos depende do tipo de convênio).
80
+ # @raise [Brcobranca::NaoImplementado] Caso o tipo de convênio não seja suportado pelo Brcobranca.
81
+ #
82
+ # @overload numero_documento
83
+ # Nosso Número de 17 dígitos com Convenio de 8 dígitos.
84
+ # @return [String] 9 caracteres numéricos.
85
+ # @overload numero_documento
86
+ # Nosso Número de 17 dígitos com Convenio de 7 dígitos.
87
+ # @return [String] 10 caracteres numéricos.
88
+ # @overload numero_documento
89
+ # Nosso Número de 7 dígitos com Convenio de 4 dígitos.
90
+ # @return [String] 4 caracteres numéricos.
91
+ # @overload numero_documento
92
+ # Nosso Número de 11 dígitos com Convenio de 6 dígitos e {#codigo_servico} false.
93
+ # @return [String] 5 caracteres numéricos.
94
+ # @overload numero_documento
95
+ # Nosso Número de 17 dígitos com Convenio de 6 dígitos e {#codigo_servico} true. (carteira 16 e 18)
96
+ # @return [String] 17 caracteres numéricos.
97
+ def numero_documento
98
+ quantidade = case @convenio.to_s.size
99
+ when 8
100
+ 9
101
+ when 7
102
+ 10
103
+ when 4
104
+ 7
105
+ when 6
106
+ self.codigo_servico ? 17 : 5
107
+ else
108
+ raise Brcobranca::NaoImplementado.new("Tipo de convênio não implementado.")
109
+ end
110
+ quantidade ? @numero_documento.to_s.rjust(quantidade,'0') : @numero_documento
111
+ end
112
+
113
+ # Dígito verificador do nosso número.
114
+ # @return [String] 1 caracteres numéricos.
115
+ # @see BancoBrasil#numero_documento
116
+ def nosso_numero_dv
117
+ "#{self.convenio}#{self.numero_documento}".modulo11_9to2_10_como_x
118
+ end
119
+
120
+ # Nosso número para exibir no boleto.
121
+ # @return [String]
122
+ # @example
123
+ # boleto.nosso_numero_boleto #=> "12387989000004042-4"
124
+ def nosso_numero_boleto
125
+ "#{self.convenio}#{self.numero_documento}-#{self.nosso_numero_dv}"
126
+ end
127
+
128
+ # Agência + conta corrente do cliente para exibir no boleto.
129
+ # @return [String]
130
+ # @example
131
+ # boleto.agencia_conta_boleto #=> "0548-7 / 00001448-6"
132
+ def agencia_conta_boleto
133
+ "#{self.agencia}-#{self.agencia_dv} / #{self.conta_corrente}-#{self.conta_corrente_dv}"
134
+ end
135
+
136
+ # Segunda parte do código de barras.
137
+ # A montagem é feita baseada na quantidade de dígitos do convênio.
138
+ # @return [String] 25 caracteres numéricos.
139
+ def codigo_barras_segunda_parte
140
+ case self.convenio.to_s.size
141
+ when 8 # Nosso Número de 17 dígitos com Convenio de 8 dígitos e numero_documento de 9 dígitos
142
+ "000000#{self.convenio}#{self.numero_documento}#{self.carteira}"
143
+ when 7 # Nosso Número de 17 dígitos com Convenio de 7 dígitos e numero_documento de 10 dígitos
144
+ "000000#{self.convenio}#{self.numero_documento}#{self.carteira}"
145
+ when 6 # Convenio de 6 dígitos
146
+ if self.codigo_servico == false
147
+ # Nosso Número de 11 dígitos com Convenio de 6 dígitos e numero_documento de 5 dígitos
148
+ "#{self.convenio}#{self.numero_documento}#{self.agencia}#{self.conta_corrente}#{self.carteira}"
149
+ else
150
+ # Nosso Número de 17 dígitos com Convenio de 6 dígitos e sem numero_documento, carteira 16 e 18
151
+ 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))
152
+ "#{self.convenio}#{self.numero_documento}21"
153
+ end
154
+ when 4 # Nosso Número de 7 dígitos com Convenio de 4 dígitos e sem numero_documento
155
+ "#{self.convenio}#{self.numero_documento}#{self.agencia}#{self.conta_corrente}#{self.carteira}"
156
+ end
157
+ end
158
+
159
+ end
160
+ end
88
161
  end