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
@@ -1,70 +0,0 @@
1
- # Banco REAL
2
- class BancoReal < Brcobranca::Boleto::Base
3
- # Responsável por definir dados iniciais quando se cria uma nova intancia da classe BancoReal
4
- def initialize(campos={})
5
- padrao={:carteira => "57", :banco => "356"}
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.numero_documento}-#{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
- # CALCULO DO DIGITO:
23
- # APLICA-SE OS PESOS 2,1,2,1,.... AOS ALGARISMOS DO NUMERO COMPOSTO POR:
24
- # NUMERO DO BANCO : COM 7 DIGITOS P/ COBRANCA REGISTRADA
25
- # ATE 15 DIGITOS P/ COBRANCA SEM REGISTRO
26
- # CODIGO DA AGENCIA: 4 DIGITOS
27
- # NUMERO DA CONTA : 7 DIGITOS
28
- def agencia_conta_corrente_nosso_numero_dv
29
- case self.carteira.to_i
30
- when 57
31
- #agencia é 4 digitos
32
- agencia = self.agencia.zeros_esquerda(:tamanho => 4)
33
- #conta é 7 digitos
34
- conta = self.conta_corrente.zeros_esquerda(:tamanho => 7)
35
- #nosso número com maximo de 13 digitos
36
- numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 13)
37
- "#{numero_documento}#{agencia}#{conta}".modulo10
38
- else
39
- #agencia é 4 digitos
40
- agencia = self.agencia.zeros_esquerda(:tamanho => 4)
41
- #conta é 7 digitos
42
- conta = self.conta_corrente.zeros_esquerda(:tamanho => 7)
43
- #nosso número com maximo de 13 digitos
44
- numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 7)
45
- "#{numero_documento}#{agencia}#{conta}".modulo10
46
- end
47
- end
48
-
49
- # Responsável por montar uma String com 43 caracteres que será usado na criação do código de barras
50
- def monta_codigo_43_digitos
51
- banco = self.banco.zeros_esquerda(:tamanho => 3)
52
- valor_documento = self.valor_documento.limpa_valor_moeda.zeros_esquerda(:tamanho => 10)
53
- conta = self.conta_corrente.zeros_esquerda(:tamanho => 7)
54
- agencia = self.agencia.zeros_esquerda(:tamanho => 4)
55
- fator = self.data_vencimento.fator_vencimento
56
- # Montagem é baseada no tipo de carteira, com registro e sem registro
57
- case self.carteira.to_i
58
- # Carteira sem registro
59
- when 57
60
- numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 13)
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
63
- else
64
- # TODO verificar com o banco, pois não consta na documentação
65
- numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 7)
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
68
- end
69
- end
70
- end
@@ -1,79 +0,0 @@
1
- # Banco UNIBANCO
2
- class BancoUnibanco < Brcobranca::Boleto::Base
3
- # Responsável por definir dados iniciais quando se cria uma nova intancia da classe BancoUnibanco
4
- # Com Registro 4
5
- # Sem Registro 5
6
- def initialize(campos={})
7
- padrao={:carteira => "5", :banco => "409"}
8
- campos = padrao.merge!(campos)
9
- super(campos)
10
- end
11
-
12
- def nosso_numero_dv
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}"
26
- end
27
-
28
- # Responsável por montar uma String com 43 caracteres que será usado na criação do código de barras
29
- def monta_codigo_43_digitos
30
- banco = self.banco.zeros_esquerda(:tamanho => 3)
31
- fator = self.data_vencimento.fator_vencimento
32
- valor_documento = self.valor_documento.limpa_valor_moeda.zeros_esquerda(:tamanho => 10)
33
- carteira = self.carteira.zeros_esquerda(:tamanho => 1)
34
-
35
- case carteira.to_i
36
- when 5
37
-
38
- # Cobrança sem registro (CÓDIGO DE BARRAS)
39
- # Posição Tamanho Descrição
40
- # 1 a 3 3 número de identificação do Unibanco: 409 (número FIXO)
41
- # 4 1 código da moeda. Real (R$)=9 (número FIXO)
42
- # 5 1 dígito verificador do CÓDIGO DE BARRAS
43
- # 6 a 9 4 fator de vencimento
44
- # 10 a 19 10 valor do título com zeros à esquerda
45
- # 20 1 código para transação CVT: 5 (número FIXO)(5=7744-5)
46
- # 21 a 27 7 número do cliente no CÓDIGO DE BARRAS + dígito verificador
47
- # 28 a 29 2 vago. Usar 00 (número FIXO)
48
- # 30 a 43 14 Número de referência do cliente
49
- # 44 1 Dígito verificador
50
-
51
- convenio = self.convenio.zeros_esquerda(:tamanho => 6)
52
- numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 14)
53
- codigo = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{carteira}#{convenio}00#{numero_documento}#{self.nosso_numero_dv}"
54
- codigo.size == 43 ? codigo : nil
55
- when 4
56
-
57
- # Cobrança com registro (CÓDIGO DE BARRAS)
58
- # Posição Tamanho Descrição
59
- # 1 a 3 3 Número de identificação do Unibanco: 409 (número FIXO)
60
- # 4 1 Código da moeda. Real (R$)=9 (número FIXO)
61
- # 5 1 dígito verificador do CÓDIGO DE BARRAS
62
- # 6 a 9 4 fator de vencimento em 4 algarismos, conforme tabela da página 14
63
- # 10 a 19 10 valor do título com zeros à esquerda
64
- # 20 a 21 2 Código para transação CVT: 04 (número FIXO) (04=5539-5)
65
- # 22 a 27 6 data de vencimento (AAMMDD)
66
- # 28 a 32 5 Código da agência + dígito verificador
67
- # 33 a 43 11 “Nosso Número” (NNNNNNNNNNN)
68
- # 44 1 Super dígito do “Nosso Número” (calculado com o MÓDULO 11 (de 2 a 9))
69
-
70
- data = self.data_vencimento.strftime('%y%m%d')
71
- agencia = self.agencia.zeros_esquerda(:tamanho => 4)
72
- numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 11)
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
75
- else
76
- nil
77
- end
78
- end
79
- end
@@ -1,32 +0,0 @@
1
- module Brcobranca
2
- module Boleto
3
- module Template
4
- # Métodos auxiliares de montagem de template
5
- module Util
6
- # Responsável por definir a logotipo usada no template genérico,
7
- # retorna o caminho para o <b>logotipo</b> ou <b>false</b> caso nao consiga encontrar o logotipo.
8
- def monta_logo
9
- case self.class.to_s
10
- when "BancoBrasil"
11
- imagem = 'bb.jpg'
12
- when "BancoItau"
13
- imagem = 'itau.jpg'
14
- when "BancoHsbc"
15
- imagem = 'hsbc.jpg'
16
- when "BancoReal"
17
- imagem = 'real.jpg'
18
- when "BancoBradesco"
19
- imagem = 'bradesco.jpg'
20
- when "BancoUnibanco"
21
- imagem = 'unibanco.jpg'
22
- when "BancoBanespa"
23
- imagem = 'banespa.jpg'
24
- else
25
- return false
26
- end
27
- File.join(File.dirname(__FILE__),'..','..','arquivos','logos',imagem)
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,9 +0,0 @@
1
- module Brcobranca
2
- # Módulo de configuração.
3
- module Config
4
- # Opções disponíveis:
5
- # Brcobranca::Config::OPCOES[:tipo] - Pode ser pdf, jpg e ps.
6
- # Brcobranca::Config::OPCOES[:gerador] - Somente rghost até o momento
7
- OPCOES = {:tipo => 'pdf', :gerador => 'rghost'}
8
- end
9
- end
@@ -1,279 +0,0 @@
1
- module Brcobranca
2
- # Métodos auxiliares de formatação
3
- module Formatacao
4
- # Formata como CPF
5
- def to_br_cpf
6
- (self.kind_of?(String) ? self : self.to_s).gsub(/^(.{3})(.{3})(.{3})(.{2})$/,'\1.\2.\3-\4')
7
- end
8
-
9
- # Formata como CEP
10
- def to_br_cep
11
- (self.kind_of?(String) ? self : self.to_s).gsub(/^(.{5})(.{3})$/,'\1-\2')
12
- end
13
-
14
- # Formata como CNPJ
15
- def to_br_cnpj
16
- (self.kind_of?(String) ? self : self.to_s).gsub(/^(.{2})(.{3})(.{3})(.{4})(.{2})$/,'\1.\2.\3/\4-\5')
17
- end
18
-
19
- # Gera formatação automatica do documento baseado no tamanho do campo.
20
- def formata_documento
21
- case (self.kind_of?(String) ? self : self.to_s).size
22
- when 8 then self.to_br_cep
23
- when 11 then self.to_br_cpf
24
- when 14 then self.to_br_cnpj
25
- else
26
- self
27
- end
28
- end
29
-
30
- # Remove caracteres que não sejam numéricos do tipo MOEDA
31
- def limpa_valor_moeda
32
- return self unless self.kind_of?(String) && self.moeda?
33
- self.somente_numeros
34
- end
35
-
36
- # Remove caracteres que não sejam numéricos
37
- def somente_numeros
38
- return self unless self.kind_of?(String)
39
- self.gsub(/\D/,'')
40
- end
41
-
42
- # Completa zeros a esquerda.
43
- # Ex. numero="123" :tamanho=>3 | numero="123"
44
- # Ex. numero="123" :tamanho=>4 | numero="0123"
45
- # Ex. numero="123" :tamanho=>5 | numero="00123"
46
- def zeros_esquerda(options={})
47
- valor_inicial = self.kind_of?(String) ? self : self.to_s
48
- return valor_inicial if (valor_inicial !~ /\S/)
49
- digitos = options[:tamanho] || valor_inicial.size
50
-
51
- diferenca = (digitos - valor_inicial.size)
52
-
53
- return valor_inicial if (diferenca <= 0)
54
- return (("0" * diferenca) + valor_inicial )
55
- end
56
-
57
- # Monta a linha digitável padrão para todos os bancos segundo a BACEN.
58
- # Retorna + nil + para Codigo de Barras em branco,
59
- # Codigo de Barras com tamanho diferente de 44 dígitos e
60
- # Codigo de Barras que não tenham somente caracteres numéricos.
61
- # A linha digitável será composta por cinco campos:
62
- # 1º campo
63
- # Composto pelo código de Banco, código da moeda, as cinco primeiras posições do campo livre
64
- # e o dígito verificador deste campo;
65
- # 2º campo
66
- # Composto pelas posições 6ª a 15ª do campo livre e o dígito verificador deste campo;
67
- # 3º campo
68
- # Composto pelas posições 16ª a 25ª do campo livre e o dígito verificador deste campo;
69
- # 4º campo
70
- # Composto pelo dígito verificador do código de barras, ou seja, a 5ª posição do código de
71
- # barras;
72
- # 5º campo
73
- # Composto pelo fator de vencimento com 4(quatro) caracteres e o valor do documento com
74
- # 10(dez) caracteres, sem separadores e sem edição.
75
- # Entre cada campo deverá haver espaço equivalente a 2 (duas) posições, sendo a 1ª
76
- # interpretada por um ponto (.) e a 2ª por um espaço em branco.
77
- def linha_digitavel
78
- valor_inicial = self.kind_of?(String) ? self : self.to_s
79
- raise ArgumentError, "Número em branco" if valor_inicial.nil?
80
- raise ArgumentError, "Somente números" unless valor_inicial.numeric?
81
- raise ArgumentError, "Precisa conter 44 caracteres e você passou um valor com #{valor_inicial.size} caracteres" if valor_inicial.size != 44
82
-
83
- dv_1 = ("#{valor_inicial[0..3]}#{valor_inicial[19..23]}").modulo10
84
- campo_1_dv = "#{valor_inicial[0..3]}#{valor_inicial[19..23]}#{dv_1}"
85
- campo_linha_1 = "#{campo_1_dv[0..4]}.#{campo_1_dv[5..9]}"
86
-
87
- dv_2 = "#{valor_inicial[24..33]}".modulo10
88
- campo_2_dv = "#{valor_inicial[24..33]}#{dv_2}"
89
- campo_linha_2 = "#{campo_2_dv[0..4]}.#{campo_2_dv[5..10]}"
90
-
91
- dv_3 = "#{valor_inicial[34..43]}".modulo10
92
- campo_3_dv = "#{valor_inicial[34..43]}#{dv_3}"
93
- campo_linha_3 = "#{campo_3_dv[0..4]}.#{campo_3_dv[5..10]}"
94
-
95
- campo_linha_4 = "#{valor_inicial[4..4]}"
96
-
97
- campo_linha_5 = "#{valor_inicial[5..18]}"
98
-
99
- "#{campo_linha_1} #{campo_linha_2} #{campo_linha_3} #{campo_linha_4} #{campo_linha_5}"
100
- end
101
- end
102
-
103
- # métodos auxiliares de cálculos
104
- module Calculo
105
- # Método padrão para cálculo de módulo 10 segundo a BACEN.
106
- def modulo10
107
- valor_inicial = self.kind_of?(String) ? self : self.to_s
108
- raise ArgumentError, "Somente números" unless valor_inicial.numeric?
109
-
110
- total = 0
111
- multiplicador = 2
112
-
113
- valor_inicial.split(//).reverse!.each do |caracter|
114
- total += (caracter.to_i * multiplicador).soma_digitos
115
- multiplicador = multiplicador == 2 ? 1 : 2
116
- end
117
-
118
- valor = (10 - (total % 10))
119
- valor == 10 ? 0 : valor
120
- end
121
-
122
- # Método padrão para cálculo de módulo 11 com multiplicaroes de 9 a 2 segundo a BACEN.
123
- # Usado no DV do Nosso Numero, Agência e Cedente.
124
- # Retorna + nil + para todos os parametros que nao forem String
125
- # Retorna + nil + para String em branco
126
- def modulo11_9to2
127
- total = self.multiplicador([9,8,7,6,5,4,3,2])
128
-
129
- return (total % 11 )
130
- end
131
-
132
- # Método padrão para cálculo de módulo 11 com multiplicaroes de 2 a 9 segundo a BACEN.
133
- # Usado no DV do Código de Barras.
134
- # Retorna + nil + para todos os parametros que não forem String
135
- # Retorna + nil + para String em branco
136
- def modulo11_2to9
137
- total = self.multiplicador([2,3,4,5,6,7,8,9])
138
-
139
- valor = (11 - (total % 11))
140
- return [0,10,11].include?(valor) ? 1 : valor
141
- end
142
-
143
- def modulo_10_banespa
144
- valor_inicial = self.kind_of?(String) ? self : self.to_s
145
- raise ArgumentError, "Somente números" unless valor_inicial.numeric?
146
-
147
- fatores = [7,3,1,9,7,3,1,9,7,3]
148
- total = 0
149
- posicao = 0
150
- valor_inicial.split(//).each do |digito|
151
- total += (digito.to_i * fatores[posicao]).to_s.split(//)[-1].to_i
152
- posicao = (posicao < (fatores.size - 1)) ? (posicao + 1) : 0
153
- end
154
- dv = 10 - total.to_s.split(//)[-1].to_i
155
- dv == 10 ? 0 : dv
156
- end
157
-
158
- # Retorna o dígito verificador de <b>modulo 11(9-2)</b> trocando retorno <b>10 por X</b>.
159
- # Usado por alguns bancos.
160
- def modulo11_9to2_10_como_x
161
- valor = self.modulo11_9to2
162
- valor == 10 ? "X" : valor
163
- end
164
-
165
- # Retorna o dígito verificador de <b>modulo 11(9-2)</b> trocando retorno <b>10 por 0</b>.
166
- # Usado por alguns bancos.
167
- def modulo11_9to2_10_como_zero
168
- valor = self.modulo11_9to2
169
- valor == 10 ? 0 : valor
170
- end
171
-
172
- # Soma números inteiros positivos com 2 dígitos ou mais
173
- # Retorna <b>0(zero)</b> caso seja impossível.
174
- # Ex. 1 = 1
175
- # Ex. 11 = (1+1) = 2
176
- # Ex. 13 = (1+3) = 4
177
- def soma_digitos
178
- valor_inicial = self.kind_of?(Fixnum) ? self : self.to_i
179
- return 0 if valor_inicial == 0
180
- return valor_inicial if valor_inicial <= 9
181
-
182
- valor_inicial = valor_inicial.to_s
183
- total = 0
184
-
185
- 0.upto(valor_inicial.size-1) {|digito| total += valor_inicial[digito,1].to_i }
186
-
187
- return total
188
- end
189
-
190
- def multiplicador(fatores)
191
- valor_inicial = self.kind_of?(String) ? self : self.to_s
192
- raise ArgumentError, "Somente números" unless valor_inicial.numeric?
193
-
194
- total = 0
195
- multiplicador_posicao = 0
196
-
197
- valor_inicial.split(//).reverse!.each do |caracter|
198
- total += (caracter.to_i * fatores[multiplicador_posicao])
199
- multiplicador_posicao = (multiplicador_posicao < (fatores.size - 1)) ? (multiplicador_posicao + 1) : 0
200
- end
201
- total.to_i
202
- end
203
- end
204
-
205
- # Métodos auxiliares de verificação e validação.
206
- module Validacao
207
- # Verifica se o valor é moeda.
208
- # Ex. +1.232.33
209
- # Ex. -1.232.33
210
- # Ex. 1.232.33
211
- def moeda?
212
- value = self.kind_of?(String) ? self : self.to_s
213
- value =~ /^(\+|-)?\d+((\.|,)\d{3}*)*((\.|,)\d{2}*)$/ ? true : false
214
- end
215
- end
216
-
217
- # Métodos auxiliares de limpeza.
218
- module Limpeza
219
- # Retorna uma String contendo exatamente o valor FLOAT
220
- def limpa_valor_moeda
221
- valor_inicial = self.to_s
222
- (valor_inicial + ("0" * (2 - valor_inicial.split(/\./).last.size ))).somente_numeros
223
- end
224
- end
225
-
226
- # Métodos auxiliares de cálculos envolvendo <b>Datas</b>.
227
- module CalculoData
228
- # Calcula o número de dias corridos entre a <b>data base ("Fixada" em 07.10.1997)</b> e a <b>data de vencimento</b> desejado:
229
- # VENCIMENTO 04/07/2000
230
- # DATA BASE - 07/10/1997
231
- # FATOR DE VENCIMENTO 1001
232
- def fator_vencimento
233
- data_base = Date.parse "1997-10-07"
234
- (self - data_base).to_i
235
- end
236
-
237
- # Mostra a data em formato <b>dia/mês/ano</b>
238
- def to_s_br
239
- self.strftime('%d/%m/%Y')
240
- end
241
- # Retorna string contendo número de dias julianos:
242
- # O cálculo é feito subtraindo-se a data atual, pelo último dia válido do ano anterior,
243
- # acrescentando-se o último algarismo do ano atual na quarta posição.
244
- # Deve retornar string com 4 digitos.
245
- # Ex. Data atual = 11/02/2009
246
- # Data válida ano anterior = 31/12/2008
247
- # (Data atual - Data válida ano anterior) = 42
248
- # último algarismo do ano atual = 9
249
- # String atual 42+9 = 429
250
- # Completa zero esquerda para formar 4 digitos = "0429"
251
- def to_juliano
252
- ultima_data = Date.parse("#{self.year - 1}-12-31")
253
- ultimo_digito_ano = self.to_s[3..3]
254
- dias = (self - ultima_data)
255
- (dias.to_s + ultimo_digito_ano).zeros_esquerda(:tamanho => 4)
256
- end
257
- end
258
- end
259
-
260
- # NEW AND COOL
261
- [ String, Numeric ].each do |klass|
262
- klass.class_eval { include Brcobranca::Formatacao }
263
- end
264
-
265
- [ String, Numeric ].each do |klass|
266
- klass.class_eval { include Brcobranca::Validacao }
267
- end
268
-
269
- [ String, Numeric ].each do |klass|
270
- klass.class_eval { include Brcobranca::Calculo }
271
- end
272
-
273
- [ Float ].each do |klass|
274
- klass.class_eval { include Brcobranca::Limpeza }
275
- end
276
-
277
- [ Date ].each do |klass|
278
- klass.class_eval { include Brcobranca::CalculoData }
279
- end
@@ -1,195 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe BancoBanespa do
4
-
5
- before(:each) do
6
- @valid_attributes = {
7
- :especie_documento => "DM",
8
- :moeda => "9",
9
- :banco => "033",
10
- :data_documento => Date.today,
11
- :dias_vencimento => 1,
12
- :aceite => "S",
13
- :quantidade => 1,
14
- :valor => 0.0,
15
- :local_pagamento => "QUALQUER BANCO ATÉ O VENCIMENTO",
16
- :cedente => "Kivanio Barbosa",
17
- :documento_cedente => "12345678912",
18
- :sacado => "Claudio Pozzebom",
19
- :sacado_documento => "12345678900",
20
- :agencia => "400",
21
- :conta_corrente => "61900",
22
- :convenio => 12387989,
23
- :numero_documento => "777700168"
24
- }
25
- end
26
-
27
- it "should create a new default instance" do
28
- boleto_novo = BancoBanespa.new
29
- boleto_novo.banco.should eql("033")
30
- boleto_novo.especie_documento.should eql("DM")
31
- boleto_novo.especie.should eql("R$")
32
- boleto_novo.moeda.should eql("9")
33
- boleto_novo.data_documento.should eql(Date.today)
34
- boleto_novo.dias_vencimento.should eql(1)
35
- boleto_novo.data_vencimento.should eql(Date.today + 1)
36
- boleto_novo.aceite.should eql("S")
37
- boleto_novo.quantidade.should eql(1)
38
- boleto_novo.valor.should eql(0.0)
39
- boleto_novo.valor_documento.should eql(0.0)
40
- boleto_novo.local_pagamento.should eql("QUALQUER BANCO ATÉ O VENCIMENTO")
41
- boleto_novo.carteira.should eql("COB")
42
- boleto_novo.should be_instance_of(BancoBanespa)
43
- end
44
-
45
- it "should create a new instance given valid attributes" do
46
- boleto_novo = BancoBanespa.new(@valid_attributes)
47
- boleto_novo.banco.should eql("033")
48
- boleto_novo.especie_documento.should eql("DM")
49
- boleto_novo.especie.should eql("R$")
50
- boleto_novo.moeda.should eql("9")
51
- boleto_novo.data_documento.should eql(Date.today)
52
- boleto_novo.dias_vencimento.should eql(1)
53
- boleto_novo.data_vencimento.should eql(Date.today + 1)
54
- boleto_novo.aceite.should eql("S")
55
- boleto_novo.quantidade.should eql(1)
56
- boleto_novo.valor.should eql(0.0)
57
- boleto_novo.valor_documento.should eql(0.0)
58
- boleto_novo.local_pagamento.should eql("QUALQUER BANCO ATÉ O VENCIMENTO")
59
- boleto_novo.cedente.should eql("Kivanio Barbosa")
60
- boleto_novo.documento_cedente.should eql("12345678912")
61
- boleto_novo.sacado.should eql("Claudio Pozzebom")
62
- boleto_novo.sacado_documento.should eql("12345678900")
63
- boleto_novo.conta_corrente.should eql("61900")
64
- boleto_novo.agencia.should eql("400")
65
- boleto_novo.convenio.should eql(12387989)
66
- boleto_novo.numero_documento.should eql("777700168")
67
- boleto_novo.carteira.should eql("COB")
68
- boleto_novo.should be_instance_of(BancoBanespa)
69
- end
70
-
71
- # TODO - should give exception
72
- it "should return nil when attributes are nil" do
73
- @valid_attributes[:valor] = 0
74
- @valid_attributes[:data_documento] = Date.parse("2008-02-01")
75
- @valid_attributes[:dias_vencimento] = 0
76
- @valid_attributes[:numero_documento] = ""
77
- @valid_attributes[:banco] = ""
78
- @valid_attributes[:carteira] = ""
79
- @valid_attributes[:moeda] = ""
80
- @valid_attributes[:convenio] = ""
81
-
82
- boleto_novo = BancoBanespa.new(@valid_attributes)
83
- boleto_novo.should be_instance_of(BancoBanespa)
84
- boleto_novo.monta_codigo_43_digitos.should be_nil
85
- boleto_novo.codigo_barras.should be_nil
86
- end
87
-
88
- it "should mount a valid bank invoice" do
89
- @valid_attributes[:valor] = 103.58
90
- @valid_attributes[:data_documento] = Date.parse("2001-08-01")
91
- @valid_attributes[:dias_vencimento] = 0
92
- @valid_attributes[:convenio] = 14813026478
93
- @valid_attributes[:numero_documento] = "0004952"
94
- @valid_attributes[:conta_corrente] = "0403005"
95
- boleto_novo = BancoBanespa.new(@valid_attributes)
96
- boleto_novo.should be_instance_of(BancoBanespa)
97
- boleto_novo.conta_corrente_dv.should eql(2)
98
- boleto_novo.monta_codigo_43_digitos.should eql("0339139400000103581481302647800049520003306")
99
- boleto_novo.codigo_barras.should eql("03398139400000103581481302647800049520003306")
100
- boleto_novo.codigo_barras.linha_digitavel.should eql("03391.48132 02647.800040 95200.033066 8 13940000010358")
101
-
102
- @valid_attributes[:valor] = 2952.95
103
- @valid_attributes[:data_documento] = Date.parse("2009-08-14")
104
- @valid_attributes[:dias_vencimento] = 5
105
- @valid_attributes[:convenio] = 40013012168
106
- @valid_attributes[:numero_documento] = "1234567"
107
- @valid_attributes[:conta_corrente] = "0403005"
108
- boleto_novo = BancoBanespa.new(@valid_attributes)
109
- boleto_novo.should be_instance_of(BancoBanespa)
110
- boleto_novo.conta_corrente_dv.should eql(2)
111
- boleto_novo.monta_codigo_43_digitos.should eql("0339433400002952954001301216812345670003361")
112
- boleto_novo.codigo_barras.should eql("03398433400002952954001301216812345670003361")
113
- boleto_novo.codigo_barras.linha_digitavel.should eql("03394.00137 01216.812345 56700.033618 8 43340000295295")
114
- end
115
-
116
- it "should mount a valid campo_livre_com_dv1_e_dv2" do
117
- @valid_attributes[:convenio] = "40013012168"
118
- @valid_attributes[:numero_documento] = "7469108"
119
- boleto_novo = BancoBanespa.new(@valid_attributes)
120
- boleto_novo.should be_instance_of(BancoBanespa)
121
- boleto_novo.campo_livre_com_dv1_e_dv2.should eql("4001301216874691080003384")
122
-
123
- @valid_attributes[:convenio] = "40013012168"
124
- @valid_attributes[:numero_documento] = "1234567"
125
- boleto_novo = BancoBanespa.new(@valid_attributes)
126
- boleto_novo.should be_instance_of(BancoBanespa)
127
- boleto_novo.campo_livre_com_dv1_e_dv2.should eql("4001301216812345670003361")
128
- end
129
-
130
- it "should mount a valid nosso_numero and nosso_numero_dv" do
131
- @valid_attributes[:numero_documento] = "0403005"
132
- boleto_novo = BancoBanespa.new(@valid_attributes)
133
- boleto_novo.should be_instance_of(BancoBanespa)
134
- boleto_novo.nosso_numero.should eql("4000403005")
135
- boleto_novo.nosso_numero_dv.should eql(6)
136
- boleto_novo.nosso_numero_boleto.should eql("400 0403005 6")
137
-
138
- @valid_attributes[:numero_documento] = "403005"
139
- boleto_novo = BancoBanespa.new(@valid_attributes)
140
- boleto_novo.should be_instance_of(BancoBanespa)
141
- boleto_novo.nosso_numero.should eql("4000403005")
142
- boleto_novo.nosso_numero_dv.should eql(6)
143
- boleto_novo.nosso_numero_boleto.should eql("400 0403005 6")
144
-
145
- @valid_attributes[:numero_documento] = "1234567"
146
- boleto_novo = BancoBanespa.new(@valid_attributes)
147
- boleto_novo.should be_instance_of(BancoBanespa)
148
- boleto_novo.nosso_numero.should eql("4001234567")
149
- boleto_novo.nosso_numero_dv.should eql(8)
150
- boleto_novo.nosso_numero_boleto.should eql("400 1234567 8")
151
-
152
- @valid_attributes[:agencia] = "123"
153
- boleto_novo = BancoBanespa.new(@valid_attributes)
154
- boleto_novo.should be_instance_of(BancoBanespa)
155
- boleto_novo.nosso_numero.should eql("1231234567")
156
- boleto_novo.nosso_numero_dv.should eql(0)
157
- boleto_novo.nosso_numero_boleto.should eql("123 1234567 0")
158
-
159
- @valid_attributes[:agencia] = "123"
160
- @valid_attributes[:numero_documento] = "7469108"
161
- boleto_novo = BancoBanespa.new(@valid_attributes)
162
- boleto_novo.should be_instance_of(BancoBanespa)
163
- boleto_novo.nosso_numero.should eql("1237469108")
164
- boleto_novo.nosso_numero_dv.should eql(3)
165
- boleto_novo.nosso_numero_boleto.should eql("123 7469108 3")
166
- end
167
-
168
- it "should mount a valid agencia_conta_dv" do
169
- boleto_novo = BancoBanespa.new(@valid_attributes)
170
- boleto_novo.should be_instance_of(BancoBanespa)
171
- boleto_novo.agencia_conta_boleto.should eql("000 12 38798 9")
172
- end
173
-
174
- it "should test outputs" do
175
- @valid_attributes[:valor] = 2952.95
176
- @valid_attributes[:data_documento] = Date.parse("2009-08-14")
177
- @valid_attributes[:dias_vencimento] = 5
178
- @valid_attributes[:convenio] = 40013012168
179
- @valid_attributes[:numero_documento] = "1234567"
180
- @valid_attributes[:conta_corrente] = "0403005"
181
- boleto_novo = BancoBanespa.new(@valid_attributes)
182
- boleto_novo.should be_instance_of(BancoBanespa)
183
- %w| pdf jpg tif png ps |.each do |format|
184
- file_body=boleto_novo.to(format.to_sym)
185
- tmp_file=Tempfile.new("foobar." << format)
186
- tmp_file.puts file_body
187
- tmp_file.close
188
- File.exist?(tmp_file.path).should be_true
189
- File.stat(tmp_file.path).zero?.should be_false
190
- File.delete(tmp_file.path).should eql(1)
191
- File.exist?(tmp_file.path).should be_false
192
- end
193
- end
194
-
195
- end