brcobranca 3.2.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +13 -0
- data/.ruby-version +1 -1
- data/.travis.yml +7 -1
- data/Gemfile +13 -2
- data/Rakefile +2 -2
- data/brcobranca.gemspec +10 -17
- data/lib/brcobranca.rb +2 -5
- data/lib/brcobranca/arquivos/logos/bancobrasil.eps +0 -0
- data/lib/brcobranca/arquivos/logos/bradesco.eps +0 -0
- data/lib/brcobranca/arquivos/logos/caixa.eps +0 -0
- data/lib/brcobranca/arquivos/logos/hsbc.eps +0 -0
- data/lib/brcobranca/arquivos/logos/itau.eps +0 -0
- data/lib/brcobranca/arquivos/logos/santander.eps +0 -0
- data/lib/brcobranca/arquivos/logos/sicredi.eps +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
- data/lib/brcobranca/boleto/banco_brasil.rb +27 -29
- data/lib/brcobranca/boleto/base.rb +29 -30
- data/lib/brcobranca/boleto/bradesco.rb +14 -15
- data/lib/brcobranca/boleto/caixa.rb +25 -23
- data/lib/brcobranca/boleto/hsbc.rb +30 -34
- data/lib/brcobranca/boleto/itau.rb +23 -25
- data/lib/brcobranca/boleto/santander.rb +17 -19
- data/lib/brcobranca/boleto/sicredi.rb +19 -19
- data/lib/brcobranca/boleto/template/base.rb +0 -2
- data/lib/brcobranca/boleto/template/rghost.rb +72 -74
- data/lib/brcobranca/boleto/template/rghost_carne.rb +105 -118
- data/lib/brcobranca/calculo.rb +22 -22
- data/lib/brcobranca/calculo_data.rb +8 -8
- data/lib/brcobranca/currency.rb +11 -11
- data/lib/brcobranca/formatacao.rb +16 -16
- data/lib/brcobranca/limpeza.rb +4 -4
- data/lib/brcobranca/retorno/base.rb +0 -1
- data/lib/brcobranca/retorno/retorno_cbr643.rb +35 -35
- data/lib/brcobranca/retorno/retorno_cnab240.rb +39 -40
- data/lib/brcobranca/retorno/retorno_cnab400.rb +21 -26
- data/lib/brcobranca/version.rb +2 -2
- data/spec/brcobranca/banco_bradesco_spec.rb +113 -113
- data/spec/brcobranca/banco_brasil_spec.rb +167 -167
- data/spec/brcobranca/banco_caixa_spec.rb +58 -58
- data/spec/brcobranca/banco_hsbc_spec.rb +117 -118
- data/spec/brcobranca/banco_sicredi_spec.rb +92 -93
- data/spec/brcobranca/base_spec.rb +78 -78
- data/spec/brcobranca/boletos_em_lote_spec.rb +22 -22
- data/spec/brcobranca/core_ext_spec.rb +134 -135
- data/spec/brcobranca/currency_spec.rb +59 -59
- data/spec/brcobranca/itau_spec.rb +137 -137
- data/spec/brcobranca/retorno_cbr643_spec.rb +32 -32
- data/spec/brcobranca/retorno_cnab400_spec.rb +40 -42
- data/spec/brcobranca/retorno_cnab_240_spec.rb +17 -19
- data/spec/brcobranca/rghost_spec.rb +21 -21
- data/spec/brcobranca/santander_spec.rb +80 -80
- data/spec/brcobranca_spec.rb +4 -4
- data/spec/spec_helper.rb +1 -1
- metadata +12 -54
- data/VERSION +0 -1
- data/lib/brcobranca/arquivos/logos/bancobrasil.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/bradesco.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/caixa.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/hsbc.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/itau.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/santander.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/sicredi.jpg +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f621710db8869fc03fddac6155db867578c8547c
|
|
4
|
+
data.tar.gz: 33139ba620fac2fcd94d27fc5128e6c6a45e63af
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 105035109e371e8280b8444f014489a548447d533e7afdfb47c52576e156c8505fc754e6c276142c6cb66d16eb005933f817c446dd82d64b39f2f3b9b28b2425
|
|
7
|
+
data.tar.gz: 42fa245c3dde817e7fe334383fa009683aef6192dab4bfa7392c0d734ad41339d06af8be61fc30537212372bfcbb7353e1e89b3790ba16a419df6b6f4de47e89
|
data/.rubocop.yml
ADDED
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.1.
|
|
1
|
+
2.1.3
|
data/.travis.yml
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
language: ruby
|
|
2
2
|
rvm:
|
|
3
|
-
- '2.1.
|
|
3
|
+
- '2.1.3'
|
|
4
4
|
- '2.0.0'
|
|
5
5
|
- '1.9.3'
|
|
6
|
+
- 'jruby'
|
|
7
|
+
- 'rbx'
|
|
6
8
|
branches:
|
|
7
9
|
only:
|
|
8
10
|
- master
|
|
9
11
|
addons:
|
|
10
12
|
code_climate:
|
|
11
13
|
repo_token: 69a23bee43b8c53271b1a6fbe18b6167de91a06d66ab19908dd52f73158ab71b
|
|
14
|
+
matrix:
|
|
15
|
+
allow_failures:
|
|
16
|
+
- rvm: jruby
|
|
17
|
+
- rvm: rbx
|
data/Gemfile
CHANGED
|
@@ -2,5 +2,16 @@ source 'https://rubygems.org'
|
|
|
2
2
|
|
|
3
3
|
# Specify your gem's dependencies in brcobranca.gemspec
|
|
4
4
|
gemspec
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
|
|
6
|
+
group :development do
|
|
7
|
+
gem 'pry', '~> 0.10.0'
|
|
8
|
+
gem 'rubocop', '~> 0.26.1'
|
|
9
|
+
gem 'rubocop-rspec', '~> 1.2.0'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
group :test do
|
|
13
|
+
gem 'codeclimate-test-reporter', require: nil
|
|
14
|
+
gem 'coveralls', require: false
|
|
15
|
+
gem 'rspec', '~> 3.1.0'
|
|
16
|
+
gem 'rake', '~> 10.3.2'
|
|
17
|
+
end
|
data/Rakefile
CHANGED
data/brcobranca.gemspec
CHANGED
|
@@ -1,33 +1,26 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
-
require
|
|
4
|
+
require 'brcobranca/version'
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |gem|
|
|
7
|
-
gem.name =
|
|
7
|
+
gem.name = 'brcobranca'
|
|
8
8
|
gem.version = Brcobranca::VERSION
|
|
9
|
-
gem.
|
|
10
|
-
gem.
|
|
11
|
-
gem.
|
|
12
|
-
gem.
|
|
13
|
-
gem.
|
|
14
|
-
gem.email = %q{kivanio@gmail.com}
|
|
15
|
-
gem.homepage = %q{http://rubygems.org/gems/brcobranca}
|
|
9
|
+
gem.authors = ['Kivanio Barbosa']
|
|
10
|
+
gem.description = 'Gem para emissão de bloquetos de cobrança de bancos brasileiros.'
|
|
11
|
+
gem.summary = 'Gem que permite trabalhar com bloquetos de cobrança para bancos brasileiros.'
|
|
12
|
+
gem.email = 'kivanio@gmail.com'
|
|
13
|
+
gem.homepage = 'http://rubygems.org/gems/brcobranca'
|
|
16
14
|
|
|
17
15
|
gem.files = `git ls-files`.split($/)
|
|
18
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
|
19
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
|
20
18
|
gem.require_paths = ['lib']
|
|
21
19
|
|
|
22
|
-
gem.requirements = [
|
|
23
|
-
|
|
24
|
-
# Gems that must be installed for sift to compile and build
|
|
25
|
-
gem.add_development_dependency 'pry', '~> 0.10.0'
|
|
26
|
-
gem.add_development_dependency 'rspec', '~> 3.0.0'
|
|
27
|
-
gem.add_development_dependency 'rake'
|
|
20
|
+
gem.requirements = ['GhostScript > 9.0, para gear PDF e código de Barras']
|
|
28
21
|
|
|
29
22
|
# Gems that must be intalled for sift to work
|
|
30
|
-
gem.add_dependency 'rghost', '0.9.
|
|
23
|
+
gem.add_dependency 'rghost', '0.9.5'
|
|
31
24
|
gem.add_dependency 'rghost_barcode', '~> 0.9'
|
|
32
25
|
gem.add_dependency 'parseline', '~> 1.0.3'
|
|
33
26
|
gem.add_dependency 'activemodel', '>= 3'
|
data/lib/brcobranca.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
2
|
+
$LOAD_PATH.push File.join(File.dirname(__FILE__))
|
|
3
3
|
require 'brcobranca/calculo'
|
|
4
4
|
require 'brcobranca/limpeza'
|
|
5
5
|
require 'brcobranca/formatacao'
|
|
@@ -18,11 +18,10 @@ begin
|
|
|
18
18
|
require 'active_model'
|
|
19
19
|
rescue LoadError
|
|
20
20
|
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
|
21
|
-
gem 'active_model',
|
|
21
|
+
gem 'active_model', '>= 3.0.0'
|
|
22
22
|
require 'active_model'
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
|
|
26
25
|
module Brcobranca
|
|
27
26
|
# Exception lançada quando algum tipo de boleto soicitado ainda não tiver sido implementado.
|
|
28
27
|
class NaoImplementado < NotImplementedError
|
|
@@ -34,7 +33,6 @@ module Brcobranca
|
|
|
34
33
|
# rescue Brcobranca::BoletoInvalido => invalido
|
|
35
34
|
# puts invalido.errors
|
|
36
35
|
class BoletoInvalido < StandardError
|
|
37
|
-
|
|
38
36
|
# Atribui o objeto boleto e pega seus erros de validação
|
|
39
37
|
def initialize(boleto)
|
|
40
38
|
errors = boleto.errors.full_messages.join(', ')
|
|
@@ -120,4 +118,3 @@ module Brcobranca
|
|
|
120
118
|
autoload :RetornoCnab400, 'brcobranca/retorno/retorno_cnab400'
|
|
121
119
|
end
|
|
122
120
|
end
|
|
123
|
-
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
module Brcobranca
|
|
3
3
|
module Boleto
|
|
4
4
|
class BancoBrasil < Base # Banco do Brasil
|
|
5
|
-
|
|
6
|
-
validates_length_of :
|
|
7
|
-
validates_length_of :
|
|
8
|
-
validates_length_of :
|
|
9
|
-
validates_length_of :convenio, :in => 4..8, :message => "não existente para este banco."
|
|
5
|
+
validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
|
|
6
|
+
validates_length_of :conta_corrente, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
|
|
7
|
+
validates_length_of :carteira, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
|
|
8
|
+
validates_length_of :convenio, in: 4..8, message: 'não existente para este banco.'
|
|
10
9
|
|
|
11
10
|
validates_each :numero_documento do |record, attr, value|
|
|
12
11
|
valor_tamanho = value.to_s.size
|
|
@@ -30,8 +29,8 @@ module Brcobranca
|
|
|
30
29
|
|
|
31
30
|
# Nova instancia do BancoBrasil
|
|
32
31
|
# @param (see Brcobranca::Boleto::Base#initialize)
|
|
33
|
-
def initialize(campos={})
|
|
34
|
-
campos = {:
|
|
32
|
+
def initialize(campos = {})
|
|
33
|
+
campos = { carteira: '18', codigo_servico: false }.merge!(campos)
|
|
35
34
|
super(campos)
|
|
36
35
|
end
|
|
37
36
|
|
|
@@ -39,40 +38,40 @@ module Brcobranca
|
|
|
39
38
|
#
|
|
40
39
|
# @return [String] 3 caracteres numéricos.
|
|
41
40
|
def banco
|
|
42
|
-
|
|
41
|
+
'001'
|
|
43
42
|
end
|
|
44
43
|
|
|
45
44
|
# Carteira
|
|
46
45
|
#
|
|
47
46
|
# @return [String] 2 caracteres numéricos.
|
|
48
47
|
def carteira=(valor)
|
|
49
|
-
@carteira = valor.to_s.rjust(2,'0') if valor
|
|
48
|
+
@carteira = valor.to_s.rjust(2, '0') if valor
|
|
50
49
|
end
|
|
51
50
|
|
|
52
51
|
# Dígito verificador do banco
|
|
53
52
|
#
|
|
54
53
|
# @return [String] 1 caracteres numéricos.
|
|
55
54
|
def banco_dv
|
|
56
|
-
|
|
55
|
+
banco.modulo11_9to2_10_como_x
|
|
57
56
|
end
|
|
58
57
|
|
|
59
58
|
# Retorna dígito verificador da agência
|
|
60
59
|
#
|
|
61
60
|
# @return [String] 1 caracteres numéricos.
|
|
62
61
|
def agencia_dv
|
|
63
|
-
|
|
62
|
+
agencia.modulo11_9to2_10_como_x
|
|
64
63
|
end
|
|
65
64
|
|
|
66
65
|
# Conta corrente
|
|
67
66
|
# @return [String] 8 caracteres numéricos.
|
|
68
67
|
def conta_corrente=(valor)
|
|
69
|
-
@conta_corrente = valor.to_s.rjust(8,'0') if valor
|
|
68
|
+
@conta_corrente = valor.to_s.rjust(8, '0') if valor
|
|
70
69
|
end
|
|
71
70
|
|
|
72
71
|
# Dígito verificador da conta corrente
|
|
73
72
|
# @return [String] 1 caracteres numéricos.
|
|
74
73
|
def conta_corrente_dv
|
|
75
|
-
|
|
74
|
+
conta_corrente.modulo11_9to2_10_como_x
|
|
76
75
|
end
|
|
77
76
|
|
|
78
77
|
# Número seqüencial utilizado para identificar o boleto.
|
|
@@ -103,18 +102,18 @@ module Brcobranca
|
|
|
103
102
|
when 4
|
|
104
103
|
7
|
|
105
104
|
when 6
|
|
106
|
-
|
|
105
|
+
codigo_servico ? 17 : 5
|
|
107
106
|
else
|
|
108
|
-
|
|
107
|
+
fail Brcobranca::NaoImplementado.new('Tipo de convênio não implementado.')
|
|
109
108
|
end
|
|
110
|
-
quantidade ? @numero_documento.to_s.rjust(quantidade,'0') : @numero_documento
|
|
109
|
+
quantidade ? @numero_documento.to_s.rjust(quantidade, '0') : @numero_documento
|
|
111
110
|
end
|
|
112
111
|
|
|
113
112
|
# Dígito verificador do nosso número.
|
|
114
113
|
# @return [String] 1 caracteres numéricos.
|
|
115
114
|
# @see BancoBrasil#numero_documento
|
|
116
115
|
def nosso_numero_dv
|
|
117
|
-
"#{
|
|
116
|
+
"#{convenio}#{numero_documento}".modulo11_9to2_10_como_x
|
|
118
117
|
end
|
|
119
118
|
|
|
120
119
|
# Nosso número para exibir no boleto.
|
|
@@ -122,7 +121,7 @@ module Brcobranca
|
|
|
122
121
|
# @example
|
|
123
122
|
# boleto.nosso_numero_boleto #=> "12387989000004042-4"
|
|
124
123
|
def nosso_numero_boleto
|
|
125
|
-
"#{
|
|
124
|
+
"#{convenio}#{numero_documento}-#{nosso_numero_dv}"
|
|
126
125
|
end
|
|
127
126
|
|
|
128
127
|
# Agência + conta corrente do cliente para exibir no boleto.
|
|
@@ -130,32 +129,31 @@ module Brcobranca
|
|
|
130
129
|
# @example
|
|
131
130
|
# boleto.agencia_conta_boleto #=> "0548-7 / 00001448-6"
|
|
132
131
|
def agencia_conta_boleto
|
|
133
|
-
"#{
|
|
132
|
+
"#{agencia}-#{agencia_dv} / #{conta_corrente}-#{conta_corrente_dv}"
|
|
134
133
|
end
|
|
135
134
|
|
|
136
135
|
# Segunda parte do código de barras.
|
|
137
136
|
# A montagem é feita baseada na quantidade de dígitos do convênio.
|
|
138
137
|
# @return [String] 25 caracteres numéricos.
|
|
139
138
|
def codigo_barras_segunda_parte
|
|
140
|
-
case
|
|
139
|
+
case convenio.to_s.size
|
|
141
140
|
when 8 # Nosso Número de 17 dígitos com Convenio de 8 dígitos e numero_documento de 9 dígitos
|
|
142
|
-
"000000#{
|
|
141
|
+
"000000#{convenio}#{numero_documento}#{carteira}"
|
|
143
142
|
when 7 # Nosso Número de 17 dígitos com Convenio de 7 dígitos e numero_documento de 10 dígitos
|
|
144
|
-
"000000#{
|
|
143
|
+
"000000#{convenio}#{numero_documento}#{carteira}"
|
|
145
144
|
when 6 # Convenio de 6 dígitos
|
|
146
|
-
if
|
|
145
|
+
if codigo_servico == false
|
|
147
146
|
# Nosso Número de 11 dígitos com Convenio de 6 dígitos e numero_documento de 5 dígitos
|
|
148
|
-
"#{
|
|
147
|
+
"#{convenio}#{numero_documento}#{agencia}#{conta_corrente}#{carteira}"
|
|
149
148
|
else
|
|
150
149
|
# Nosso Número de 17 dígitos com Convenio de 6 dígitos e sem numero_documento, carteira 16 e 18
|
|
151
|
-
|
|
152
|
-
"#{
|
|
150
|
+
fail "Só é permitido emitir boletos com nosso número de 17 dígitos com carteiras 16 ou 18. Sua carteira atual é #{carteira}" unless %w(16 18).include?(carteira)
|
|
151
|
+
"#{convenio}#{numero_documento}21"
|
|
153
152
|
end
|
|
154
153
|
when 4 # Nosso Número de 7 dígitos com Convenio de 4 dígitos e sem numero_documento
|
|
155
|
-
"#{
|
|
154
|
+
"#{convenio}#{numero_documento}#{agencia}#{conta_corrente}#{carteira}"
|
|
156
155
|
end
|
|
157
156
|
end
|
|
158
|
-
|
|
159
157
|
end
|
|
160
158
|
end
|
|
161
|
-
end
|
|
159
|
+
end
|
|
@@ -73,16 +73,16 @@ module Brcobranca
|
|
|
73
73
|
attr_accessor :sacado_documento
|
|
74
74
|
|
|
75
75
|
# Validações
|
|
76
|
-
validates_presence_of :agencia, :conta_corrente, :moeda, :especie_documento, :especie, :aceite, :numero_documento, :
|
|
77
|
-
validates_numericality_of :convenio, :agencia, :conta_corrente, :numero_documento, :
|
|
76
|
+
validates_presence_of :agencia, :conta_corrente, :moeda, :especie_documento, :especie, :aceite, :numero_documento, message: 'não pode estar em branco.'
|
|
77
|
+
validates_numericality_of :convenio, :agencia, :conta_corrente, :numero_documento, message: 'não é um número.', allow_nil: true
|
|
78
78
|
|
|
79
79
|
# Nova instancia da classe Base
|
|
80
80
|
# @param [Hash] campos
|
|
81
|
-
def initialize(campos={})
|
|
81
|
+
def initialize(campos = {})
|
|
82
82
|
padrao = {
|
|
83
|
-
:
|
|
84
|
-
:
|
|
85
|
-
:
|
|
83
|
+
moeda: '9', data_documento: Date.today, dias_vencimento: 1, quantidade: 1,
|
|
84
|
+
especie_documento: 'DM', especie: 'R$', aceite: 'S', valor: 0.0,
|
|
85
|
+
local_pagamento: 'QUALQUER BANCO ATÉ O VENCIMENTO'
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
campos = padrao.merge!(campos)
|
|
@@ -96,53 +96,53 @@ module Brcobranca
|
|
|
96
96
|
# Logotipo do banco
|
|
97
97
|
# @return [Path] Caminho para o arquivo de logotipo do banco.
|
|
98
98
|
def logotipo
|
|
99
|
-
File.join(File.dirname(__FILE__),'..','arquivos','logos',"#{class_name}.
|
|
99
|
+
File.join(File.dirname(__FILE__), '..', 'arquivos', 'logos', "#{class_name}.eps")
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
# Dígito verificador do banco
|
|
103
103
|
# @return [Integer] 1 caracteres numéricos.
|
|
104
104
|
def banco_dv
|
|
105
|
-
|
|
105
|
+
banco.modulo11_9to2
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
# Código da agencia
|
|
109
109
|
# @return [String] 4 caracteres numéricos.
|
|
110
110
|
def agencia=(valor)
|
|
111
|
-
@agencia = valor.to_s.rjust(4,'0') if valor
|
|
111
|
+
@agencia = valor.to_s.rjust(4, '0') if valor
|
|
112
112
|
end
|
|
113
113
|
|
|
114
114
|
# Dígito verificador da agência
|
|
115
115
|
# @return [Integer] 1 caracteres numéricos.
|
|
116
116
|
def agencia_dv
|
|
117
|
-
|
|
117
|
+
agencia.modulo11_9to2
|
|
118
118
|
end
|
|
119
119
|
|
|
120
120
|
# Dígito verificador da conta corrente
|
|
121
121
|
# @return [Integer] 1 caracteres numéricos.
|
|
122
122
|
def conta_corrente_dv
|
|
123
|
-
|
|
123
|
+
conta_corrente.modulo11_9to2
|
|
124
124
|
end
|
|
125
125
|
|
|
126
126
|
# Dígito verificador do nosso número
|
|
127
127
|
# @return [Integer] 1 caracteres numéricos.
|
|
128
128
|
def nosso_numero_dv
|
|
129
|
-
|
|
129
|
+
numero_documento.modulo11_9to2
|
|
130
130
|
end
|
|
131
131
|
|
|
132
132
|
# @abstract Deverá ser sobreescrito para cada banco.
|
|
133
133
|
def nosso_numero_boleto
|
|
134
|
-
|
|
134
|
+
fail Brcobranca::NaoImplementado.new('Sobreescreva este método na classe referente ao banco que você esta criando')
|
|
135
135
|
end
|
|
136
136
|
|
|
137
137
|
# @abstract Deverá ser sobreescrito para cada banco.
|
|
138
138
|
def agencia_conta_boleto
|
|
139
|
-
|
|
139
|
+
fail Brcobranca::NaoImplementado.new('Sobreescreva este método na classe referente ao banco que você esta criando')
|
|
140
140
|
end
|
|
141
141
|
|
|
142
142
|
# Valor total do documento: <b>quantidate * valor</b>
|
|
143
143
|
# @return [Float]
|
|
144
144
|
def valor_documento
|
|
145
|
-
|
|
145
|
+
quantidade.to_f * valor.to_f
|
|
146
146
|
end
|
|
147
147
|
|
|
148
148
|
# Data de vencimento baseado na <b>data_documento + dias_vencimento</b>
|
|
@@ -150,21 +150,21 @@ module Brcobranca
|
|
|
150
150
|
# @return [Date]
|
|
151
151
|
# @raise [ArgumentError] Caso {#data_documento} esteja em branco.
|
|
152
152
|
def data_vencimento
|
|
153
|
-
|
|
154
|
-
return
|
|
155
|
-
(
|
|
153
|
+
fail ArgumentError, 'data_documento não pode estar em branco.' unless data_documento
|
|
154
|
+
return data_documento unless dias_vencimento
|
|
155
|
+
(data_documento + dias_vencimento.to_i)
|
|
156
156
|
end
|
|
157
157
|
|
|
158
158
|
# Fator de vencimento calculado com base na data de vencimento do boleto.
|
|
159
159
|
# @return [String] 4 caracteres numéricos.
|
|
160
160
|
def fator_vencimento
|
|
161
|
-
|
|
161
|
+
data_vencimento.fator_vencimento
|
|
162
162
|
end
|
|
163
163
|
|
|
164
164
|
# Número da conta corrente
|
|
165
165
|
# @return [String] 7 caracteres numéricos.
|
|
166
166
|
def conta_corrente=(valor)
|
|
167
|
-
@conta_corrente = valor.to_s.rjust(7,'0') if valor
|
|
167
|
+
@conta_corrente = valor.to_s.rjust(7, '0') if valor
|
|
168
168
|
end
|
|
169
169
|
|
|
170
170
|
# Codigo de barras do boleto
|
|
@@ -181,15 +181,15 @@ module Brcobranca
|
|
|
181
181
|
# @raise [Brcobranca::BoletoInvalido] Caso as informações fornecidas não sejam suficientes ou sejam inválidas.
|
|
182
182
|
# @return [String] código de barras formado por 44 caracteres numéricos.
|
|
183
183
|
def codigo_barras
|
|
184
|
-
|
|
185
|
-
codigo = codigo_barras_primeira_parte #18 digitos
|
|
186
|
-
codigo << codigo_barras_segunda_parte #25 digitos
|
|
184
|
+
fail Brcobranca::BoletoInvalido.new(self) unless self.valid?
|
|
185
|
+
codigo = codigo_barras_primeira_parte # 18 digitos
|
|
186
|
+
codigo << codigo_barras_segunda_parte # 25 digitos
|
|
187
187
|
if codigo =~ /^(\d{4})(\d{39})$/
|
|
188
188
|
codigo_dv = codigo.modulo11_2to9
|
|
189
|
-
codigo = "#{
|
|
189
|
+
codigo = "#{Regexp.last_match[1]}#{codigo_dv}#{Regexp.last_match[2]}"
|
|
190
190
|
codigo
|
|
191
191
|
else
|
|
192
|
-
|
|
192
|
+
fail Brcobranca::BoletoInvalido.new(self)
|
|
193
193
|
end
|
|
194
194
|
end
|
|
195
195
|
|
|
@@ -197,7 +197,7 @@ module Brcobranca
|
|
|
197
197
|
#
|
|
198
198
|
# @abstract Deverá ser sobreescrito para cada banco.
|
|
199
199
|
def codigo_barras_segunda_parte
|
|
200
|
-
|
|
200
|
+
fail Brcobranca::NaoImplementado.new('Sobreescreva este método na classe referente ao banco que você esta criando')
|
|
201
201
|
end
|
|
202
202
|
|
|
203
203
|
private
|
|
@@ -205,21 +205,20 @@ module Brcobranca
|
|
|
205
205
|
# Monta a primeira parte do código de barras, que é a mesma para todos bancos.
|
|
206
206
|
# @return [String] 18 caracteres numéricos.
|
|
207
207
|
def codigo_barras_primeira_parte
|
|
208
|
-
"#{
|
|
208
|
+
"#{banco}#{moeda}#{fator_vencimento}#{valor_documento_formatado}"
|
|
209
209
|
end
|
|
210
210
|
|
|
211
211
|
# Valor total do documento
|
|
212
212
|
# @return [String] 10 caracteres numéricos.
|
|
213
213
|
def valor_documento_formatado
|
|
214
|
-
|
|
214
|
+
valor_documento.round(2).limpa_valor_moeda.to_s.rjust(10, '0')
|
|
215
215
|
end
|
|
216
216
|
|
|
217
217
|
# Nome da classe do boleto
|
|
218
218
|
# @return [String]
|
|
219
219
|
def class_name
|
|
220
|
-
self.class.to_s.split(
|
|
220
|
+
self.class.to_s.split('::').last.downcase
|
|
221
221
|
end
|
|
222
|
-
|
|
223
222
|
end
|
|
224
223
|
end
|
|
225
224
|
end
|