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
@@ -0,0 +1,67 @@
1
+ # Implementação feita por Nando Vieira do http://simplesideias.com.br
2
+ # post http://simplesideias.com.br/usando-number_to_currency-em-modelos-no-rails
3
+ module Brcobranca #:nodoc:[all]
4
+ module Currency #:nodoc:[all]
5
+ BRL = {:delimiter => ".", :separator => ",", :unit => "R$", :precision => 2, :position => "before"}
6
+ USD = {:delimiter => ',', :separator => ".", :unit => "US$", :precision => 2, :position => "before"}
7
+ DEFAULT = BRL.merge(:unit => "")
8
+
9
+ module String #:nodoc:[all]
10
+ def to_number(options={})
11
+ return self.gsub(/,/, '.').to_f if self.numeric?
12
+ nil
13
+ end
14
+
15
+ def numeric?
16
+ self =~ /^(\+|-)?[0-9]+((\.|,)[0-9]+)?$/ ? true : false
17
+ end
18
+ end
19
+
20
+ module Number #:nodoc:[all]
21
+ def to_currency(options = {})
22
+ number = self
23
+ default = Brcobranca::Currency::DEFAULT
24
+ options = default.merge(options)
25
+ precision = options[:precision] || default[:precision]
26
+ unit = options[:unit] || default[:unit]
27
+ position = options[:position] || default[:position]
28
+ separator = precision > 0 ? options[:separator] || default[:separator] : ""
29
+ delimiter = options[:delimiter] || default[:delimiter]
30
+
31
+ begin
32
+ parts = number.with_precision(precision).split('.')
33
+ number = parts[0].to_i.with_delimiter(delimiter) + separator + parts[1].to_s
34
+ position == "before" ? unit + number : number + unit
35
+ rescue
36
+ number
37
+ end
38
+ end
39
+
40
+ def with_delimiter(delimiter=",", separator=".")
41
+ number = self
42
+ begin
43
+ parts = number.to_s.split(separator)
44
+ parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{delimiter}")
45
+ parts.join separator
46
+ rescue
47
+ self
48
+ end
49
+ end
50
+
51
+ def with_precision(precision=3)
52
+ number = self
53
+ "%01.#{precision}f" % number
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ # TODO - porque não incluir somente na Numeric?
60
+ # [ Fixnum, Bignum, Float ].each do |klass|
61
+ [ Numeric].each do |klass|
62
+ klass.class_eval { include Brcobranca::Currency::Number }
63
+ end
64
+
65
+ [ String ].each do |klass|
66
+ klass.class_eval { include Brcobranca::Currency::String }
67
+ end
@@ -0,0 +1,43 @@
1
+ module Brcobranca
2
+ module Retorno
3
+ class Base
4
+ # Agência com DV, posições 17 à 21
5
+ attr_accessor :agencia_com_dv
6
+ attr_accessor :cedente_com_dv
7
+ attr_accessor :convenio
8
+ attr_accessor :nosso_numero
9
+ attr_accessor :tipo_cobranca
10
+ attr_accessor :tipo_cobranca_anterior
11
+ attr_accessor :natureza_recebimento
12
+ attr_accessor :carteira_variacao
13
+ attr_accessor :desconto
14
+ attr_accessor :iof
15
+ attr_accessor :carteira
16
+ attr_accessor :comando
17
+ attr_accessor :data_liquidacao
18
+ attr_accessor :data_vencimento
19
+ attr_accessor :valor_titulo
20
+ attr_accessor :banco_recebedor
21
+ attr_accessor :agencia_recebedora_com_dv
22
+ attr_accessor :especie_documento
23
+ attr_accessor :data_credito
24
+ attr_accessor :valor_tarifa
25
+ attr_accessor :outras_despesas
26
+ attr_accessor :juros_desconto
27
+ attr_accessor :iof_desconto
28
+ attr_accessor :valor_abatimento
29
+ attr_accessor :desconto_concedito
30
+ attr_accessor :valor_recebido
31
+ attr_accessor :juros_mora
32
+ attr_accessor :outros_recebimento
33
+ attr_accessor :abatimento_nao_aproveitado
34
+ attr_accessor :valor_lancamento
35
+ attr_accessor :indicativo_lancamento
36
+ attr_accessor :indicador_valor
37
+ attr_accessor :valor_ajuste
38
+ attr_accessor :sequencial
39
+ attr_accessor :arquivo
40
+ end
41
+ end
42
+ end
43
+
@@ -0,0 +1,44 @@
1
+ require 'parseline'
2
+
3
+ # Formato de Retorno CNAB 643
4
+ class RetornoCbr643 < Brcobranca::Retorno::Base
5
+ # Extendendo parseline
6
+ extend ParseLine::FixedWidth
7
+
8
+ fixed_width_layout do |parse|
9
+ parse.field :agencia_com_dv,17..21
10
+ parse.field :cedente_com_dv,22..30
11
+ parse.field :convenio,31..37
12
+ parse.field :nosso_numero,63..79
13
+ parse.field :tipo_cobranca,80..80
14
+ parse.field :tipo_cobranca_anterior,81..81
15
+ parse.field :natureza_recebimento,86..87
16
+ parse.field :carteira_variacao,91..93
17
+ parse.field :desconto,95..99
18
+ parse.field :iof,100..104
19
+ parse.field :carteira,106..107
20
+ parse.field :comando,108..109
21
+ parse.field :data_liquidacao,110..115
22
+ parse.field :data_vencimento,146..151
23
+ parse.field :valor_titulo,152..164
24
+ parse.field :banco_recebedor,165..167
25
+ parse.field :agencia_recebedora_com_dv,168..172
26
+ parse.field :especie_documento,173..174
27
+ parse.field :data_credito,175..180
28
+ parse.field :valor_tarifa,181..187
29
+ parse.field :outras_despesas,188..200
30
+ parse.field :juros_desconto,201..213
31
+ parse.field :iof_desconto,214..226
32
+ parse.field :valor_abatimento,227..239
33
+ parse.field :desconto_concedito,240..252
34
+ parse.field :valor_recebido,253..265
35
+ parse.field :juros_mora,266..278
36
+ parse.field :outros_recebimento,279..291
37
+ parse.field :abatimento_nao_aproveitado,292..304
38
+ parse.field :valor_lancamento,305..317
39
+ parse.field :indicativo_lancamento,318..318
40
+ parse.field :indicador_valor,319..319
41
+ parse.field :valor_ajuste,320..331
42
+ parse.field :sequencial,394..399
43
+ end
44
+ end
data/lib/brcobranca.rb ADDED
@@ -0,0 +1,43 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
2
+
3
+ begin
4
+ require 'date'
5
+ rescue LoadError
6
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
7
+ gem 'date'
8
+ require 'date'
9
+ end
10
+
11
+ %w(core_ext currency config).each {|req| require File.join(File.dirname(__FILE__),"brcobranca",req) }
12
+
13
+ %w(base banco_brasil banco_itau banco_hsbc banco_real banco_bradesco banco_unibanco banco_banespa banco_caixa).each do |req|
14
+ require File.join(File.dirname(__FILE__),"brcobranca","boleto",req)
15
+ end
16
+
17
+ %w(util rghost).each {|req| require File.join(File.dirname(__FILE__),"brcobranca","boleto","template",req) }
18
+
19
+ %w(base retorno_cbr643).each {|req| require File.join(File.dirname(__FILE__),"brcobranca","retorno",req) }
20
+
21
+ case Brcobranca::Config::OPCOES[:gerador]
22
+ when 'rghost'
23
+
24
+ module Brcobranca::Boleto
25
+ Base.class_eval do
26
+ include Brcobranca::Boleto::Template::Rghost
27
+ include Brcobranca::Boleto::Template::Util
28
+ end
29
+ end
30
+
31
+ else
32
+ "Configure o gerador na opção 'Brcobranca::Config::OPCOES[:gerador]' corretamente!!!"
33
+ end
34
+
35
+ module Brcobranca
36
+ VERSION = '2.0.8'
37
+
38
+ class NaoImplementado < NotImplementedError
39
+ end
40
+
41
+ class BoletoInvalido < StandardError
42
+ end
43
+ end
@@ -0,0 +1,28 @@
1
+ 02RETORNO01COBRANCA 33251000289353000000INSTITUTO MATO-GROSSENSE DO AL001BANCO DO BRASIL2001090000007 000000009703754590 1622420 000001
2
+ 70000000000000000332510002893531622420 1622420000000000310000001 01900000000000 1806200109 000000000000000906400114923002201090000500000000000000000000000000000000000000000000000000000000000000000000000000009064000000000000000000000000000000000000000000000000856420000000000000 0000000000000000000000000000000000000000000000000004000002
3
+ 70000000000000000332510002893531622420 1622420000000003010000001 01900000000000 1806200109 000000000000002235239909430002201090000500000000000000000000000000000000000000000000000000000000000000000000000000022352000000000000000000000000000000000000000000000002185220000000000000 0000000000000000000000000000000000000000000000000010000003
4
+ 70000000000000000332510002893531622420 1622420000000003110000001 01900000000000 1806200109 00000000000000165330012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000016533000000000000000000000000000000000000000000000001603320000000000000 0000000000000000000000000000000000000000000000000002000004
5
+ 70000000000000000332510002893531622420 1622420000000003210000001 01900000000000 1806200109 00000000000000157740012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000015774000000000000000000000000000000000000000000000001527420000000000000 0000000000000000000000000000000000000000000000000002000005
6
+ 70000000000000000332510002893531622420 1622420000000003310000001 01900000000000 1806200109 00000000000000414440012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000041444000000000000000000000000000000000000000000000004094420000000000000 0000000000000000000000000000000000000000000000000002000006
7
+ 70000000000000000332510002893531622420 1622420000000003410000001 01900000000000 1806200109 00000000000000610280012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000061028000000000000000000000000000000000000000000000006052820000000000000 0000000000000000000000000000000000000000000000000002000007
8
+ 70000000000000000332510002893531622420 1622420000000003510000001 01900000000000 1806200109 00000000000000608040012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000060804000000000000000000000000000000000000000000000006030420000000000000 0000000000000000000000000000000000000000000000000002000008
9
+ 70000000000000000332510002893531622420 1622420000000003610000001 01900000000000 1806200109 000000000000005610074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000010000009
10
+ 70000000000000000332510002893531622420 1622420000000003710000001 01900000000000 1806200109 000000000000000565474808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000005654000000000000000000000000000000000000000000000000515420000000000000 0000000000000000000000000000000000000000000000000010000010
11
+ 70000000000000000332510002893531622420 1622420000000003810000001 01900000000000 1806200109 000000000000005610074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000010000011
12
+ 70000000000000000332510002893531622420 1622420000000003910000001 01900000000000 1806200109 000000000000000528074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000005280000000000000000000000000000000000000000000000000478020000000000000 0000000000000000000000000000000000000000000000000010000012
13
+ 70000000000000000332510002893531622420 1622420000000004010000001 01900000000000 1806200109 000000000000005610074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000010000013
14
+ 70000000000000000332510002893531622420 1622420000000004110000001 01900000000000 1806200109 000000000000000528074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000005280000000000000000000000000000000000000000000000000478020000000000000 0000000000000000000000000000000000000000000000000010000014
15
+ 70000000000000000332510002893531622420 1622420000000004210000001 01900000000000 1806200109 000000000000005610000136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000004000015
16
+ 70000000000000000332510002893531622420 1622420000000004310000001 01900000000000 1806200109 000000000000001672000136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000016720000000000000000000000000000000000000000000000001622020000000000000 0000000000000000000000000000000000000000000000000004000016
17
+ 70000000000000000332510002893531622420 1622420000000004410000001 01900000000000 1806200109 000000000000000535300136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000005353000000000000000000000000000000000000000000000000485320000000000000 0000000000000000000000000000000000000000000000000004000017
18
+ 70000000000000000332510002893531622420 1622420000000004510000001 01900000000000 1806200109 000000000000005210700130376002201090000500000000000000000000000000000000000000000000000000000000000000000000000000052107000000000000000000000000000000000000000000000005160720000000000000 0000000000000000000000000000000000000000000000000008000018
19
+ 70000000000000000332510002893531622420 1622420000000004610000001 01900000000000 1806200109 000000000000006043600114923002201090000500000000000000000000000000000000000000000000000000000000000000000000000000060436000000000000000000000000000000000000000000000005993620000000000000 0000000000000000000000000000000000000000000000000002000019
20
+ 70000000000000000332510002893531622420 1622420000000004710000001 01900000000000 1806200109 000000000000005610000136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000004000020
21
+ 70000000000000000332510002893531622420 1622420000000004810000001 01900000000000 1806200109 000000000000000495000136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000004950000000000000000000000000000000000000000000000000445020000000000000 0000000000000000000000000000000000000000000000000004000021
22
+ 70000000000000000332510002893531622420 1622420000000005010000001 01900000000000 1806200109 000000000000005707000114923002201090000500000000000000000000000000000000000000000000000000000000000000000000000000057070000000000000000000000000000000000000000000000005657020000000000000 0000000000000000000000000000000000000000000000000002000022
23
+ 70000000000000000332510002893531622420 1622420000000005110000001 01900000000000 1806200109 000000000000005638600106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056386000000000000000000000000000000000000000000000005588620000000000000 0000000000000000000000000000000000000000000000000002000023
24
+ 70000000000000000332510002893531622420 1622420000000005210000001 01900000000000 1806200109 000000000000005610000106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000002000024
25
+ 70000000000000000332510002893531622420 1622420000000005310000001 01900000000000 1806200109 000000000000005856400106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000058564000000000000000000000000000000000000000000000005806420000000000000 0000000000000000000000000000000000000000000000000002000025
26
+ 70000000000000000332510002893531622420 1622420000000005410000001 01900000000000 1806200109 000000000000005704600106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000057046000000000000000000000000000000000000000000000005654620000000000000 0000000000000000000000000000000000000000000000000002000026
27
+ 70000000000000000332510002893531622420 1622420000000005510000001 01900000000000 1806200109 000000000000005673800106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056738000000000000000000000000000000000000000000000005623820000000000000 0000000000000000000000000000000000000000000000000002000027
28
+ 9201001 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000028
@@ -0,0 +1,195 @@
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
@@ -0,0 +1,179 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe BancoBradesco do
4
+ before(:each) do
5
+ @valid_attributes = {
6
+ :especie_documento => "DM",
7
+ :moeda => "9",
8
+ :data_documento => Date.today,
9
+ :dias_vencimento => 1,
10
+ :aceite => "S",
11
+ :quantidade => 1,
12
+ :valor => 0.0,
13
+ :local_pagamento => "QUALQUER BANCO ATÉ O VENCIMENTO",
14
+ :cedente => "Kivanio Barbosa",
15
+ :documento_cedente => "12345678912",
16
+ :sacado => "Claudio Pozzebom",
17
+ :sacado_documento => "12345678900",
18
+ :agencia => "4042",
19
+ :conta_corrente => "61900",
20
+ :convenio => 12387989,
21
+ :numero_documento => "777700168"
22
+ }
23
+ end
24
+
25
+ it "should create a new default instance" do
26
+ boleto_novo = BancoBradesco.new
27
+ boleto_novo.banco.should eql("237")
28
+ boleto_novo.especie_documento.should eql("DM")
29
+ boleto_novo.especie.should eql("R$")
30
+ boleto_novo.moeda.should eql("9")
31
+ boleto_novo.data_documento.should eql(Date.today)
32
+ boleto_novo.dias_vencimento.should eql(1)
33
+ boleto_novo.data_vencimento.should eql(Date.today + 1)
34
+ boleto_novo.aceite.should eql("S")
35
+ boleto_novo.quantidade.should eql(1)
36
+ boleto_novo.valor.should eql(0.0)
37
+ boleto_novo.valor_documento.should eql(0.0)
38
+ boleto_novo.local_pagamento.should eql("QUALQUER BANCO ATÉ O VENCIMENTO")
39
+ boleto_novo.carteira.should eql("06")
40
+ boleto_novo.should be_instance_of(BancoBradesco)
41
+ end
42
+
43
+ it "should create a new instance given valid attributes" do
44
+ boleto_novo = BancoBradesco.new(@valid_attributes)
45
+ boleto_novo.banco.should eql("237")
46
+ boleto_novo.especie_documento.should eql("DM")
47
+ boleto_novo.especie.should eql("R$")
48
+ boleto_novo.moeda.should eql("9")
49
+ boleto_novo.data_documento.should eql(Date.today)
50
+ boleto_novo.dias_vencimento.should eql(1)
51
+ boleto_novo.data_vencimento.should eql(Date.today + 1)
52
+ boleto_novo.aceite.should eql("S")
53
+ boleto_novo.quantidade.should eql(1)
54
+ boleto_novo.valor.should eql(0.0)
55
+ boleto_novo.valor_documento.should eql(0.0)
56
+ boleto_novo.local_pagamento.should eql("QUALQUER BANCO ATÉ O VENCIMENTO")
57
+ boleto_novo.cedente.should eql("Kivanio Barbosa")
58
+ boleto_novo.documento_cedente.should eql("12345678912")
59
+ boleto_novo.sacado.should eql("Claudio Pozzebom")
60
+ boleto_novo.sacado_documento.should eql("12345678900")
61
+ boleto_novo.conta_corrente.should eql("61900")
62
+ boleto_novo.agencia.should eql("4042")
63
+ boleto_novo.convenio.should eql(12387989)
64
+ boleto_novo.numero_documento.should eql("777700168")
65
+ boleto_novo.carteira.should eql("06")
66
+ boleto_novo.should be_instance_of(BancoBradesco)
67
+ end
68
+
69
+ it "should mount codigo de barras para carteira numero 06" do
70
+ @valid_attributes[:valor] = 2952.95
71
+ @valid_attributes[:data_documento] = Date.parse("2009-04-30")
72
+ @valid_attributes[:dias_vencimento] = 0
73
+ @valid_attributes[:numero_documento] = "75896452"
74
+ @valid_attributes[:conta_corrente] = "0403005"
75
+ @valid_attributes[:agencia] = "1172"
76
+ boleto_novo = BancoBradesco.new(@valid_attributes)
77
+ boleto_novo.should be_instance_of(BancoBradesco)
78
+ boleto_novo.monta_codigo_43_digitos.should eql("2379422300002952951172060007589645204030050")
79
+ boleto_novo.codigo_barras.should eql("23795422300002952951172060007589645204030050")
80
+ boleto_novo.codigo_barras.linha_digitavel.should eql("23791.17209 60007.589645 52040.300502 5 42230000295295")
81
+ end
82
+
83
+ it "should mount codigo de barras para carteira numero 03" do
84
+ @valid_attributes[:valor] = 135.00
85
+ @valid_attributes[:dias_vencimento] = 1
86
+ @valid_attributes[:data_documento] = Date.parse("2008-02-01")
87
+ @valid_attributes[:numero_documento] = "777700168"
88
+ @valid_attributes[:conta_corrente] = "61900"
89
+ @valid_attributes[:agencia] = "4042"
90
+ @valid_attributes[:carteira] = "03"
91
+ boleto_novo = BancoBradesco.new(@valid_attributes)
92
+ boleto_novo.should be_instance_of(BancoBradesco)
93
+ boleto_novo.monta_codigo_43_digitos.should eql("2379377000000135004042030077770016800619000")
94
+ boleto_novo.codigo_barras.should eql("23791377000000135004042030077770016800619000")
95
+ boleto_novo.codigo_barras.linha_digitavel.should eql("23794.04201 30077.770011 68006.190000 1 37700000013500")
96
+ end
97
+
98
+ # TODO - should give exception
99
+ it "should return nil when attributes are nil" do
100
+ @valid_attributes[:valor] = 0
101
+ @valid_attributes[:data_documento] = Date.parse("2008-02-01")
102
+ @valid_attributes[:dias_vencimento] = 0
103
+ @valid_attributes[:numero_documento] = ""
104
+ @valid_attributes[:banco] = ""
105
+ @valid_attributes[:carteira] = ""
106
+ @valid_attributes[:moeda] = ""
107
+ @valid_attributes[:convenio] = ""
108
+ @valid_attributes[:conta_corrente] = ""
109
+ @valid_attributes[:agencia] = ""
110
+ @valid_attributes[:carteira] = ""
111
+
112
+ boleto_novo = BancoBradesco.new(@valid_attributes)
113
+ boleto_novo.should be_instance_of(BancoBradesco)
114
+ boleto_novo.monta_codigo_43_digitos.should be_nil
115
+ boleto_novo.codigo_barras.should be_nil
116
+ end
117
+
118
+ it "should mount nosso_numero_boleto" do
119
+ boleto_novo = BancoBradesco.new(@valid_attributes)
120
+ boleto_novo.should be_instance_of(BancoBradesco)
121
+ boleto_novo.numero_documento = "4042"
122
+ boleto_novo.carteira = "06"
123
+ boleto_novo.nosso_numero_boleto.should eql("06/00000004042-8")
124
+ boleto_novo.nosso_numero_dv.should eql(8)
125
+ boleto_novo.numero_documento = "61900"
126
+ boleto_novo.carteira = "05"
127
+ boleto_novo.nosso_numero_boleto.should eql("05/00000061900-0")
128
+ boleto_novo.nosso_numero_dv.should eql(0)
129
+ boleto_novo.numero_documento = "0719"
130
+ boleto_novo.carteira = "07"
131
+ boleto_novo.nosso_numero_boleto.should eql("07/00000000719-6")
132
+ boleto_novo.nosso_numero_dv.should eql(6)
133
+ boleto_novo.numero_documento = 4042
134
+ boleto_novo.carteira = "06"
135
+ boleto_novo.nosso_numero_boleto.should eql("06/00000004042-8")
136
+ boleto_novo.nosso_numero_dv.should eql(8)
137
+ boleto_novo.numero_documento = 61900
138
+ boleto_novo.carteira = "05"
139
+ boleto_novo.nosso_numero_boleto.should eql("05/00000061900-0")
140
+ boleto_novo.nosso_numero_dv.should eql(0)
141
+ boleto_novo.numero_documento = 719
142
+ boleto_novo.carteira = "07"
143
+ boleto_novo.nosso_numero_boleto.should eql("07/00000000719-6")
144
+ boleto_novo.nosso_numero_dv.should eql(6)
145
+ end
146
+
147
+ it "should mount agencia_conta_boleto" do
148
+ boleto_novo = BancoBradesco.new(@valid_attributes)
149
+ boleto_novo.should be_instance_of(BancoBradesco)
150
+ boleto_novo.agencia_conta_boleto.should eql("4042-8 / 61900-0")
151
+ boleto_novo.agencia = "0719"
152
+ boleto_novo.agencia_conta_boleto.should eql("0719-6 / 61900-0")
153
+ boleto_novo.agencia = "0548"
154
+ boleto_novo.conta_corrente = "1448"
155
+ boleto_novo.agencia_conta_boleto.should eql("0548-7 / 1448-6")
156
+ end
157
+
158
+ it "should test outputs" do
159
+ @valid_attributes[:valor] = 2952.95
160
+ @valid_attributes[:data_documento] = Date.parse("2009-04-30")
161
+ @valid_attributes[:dias_vencimento] = 0
162
+ @valid_attributes[:numero_documento] = "75896452"
163
+ @valid_attributes[:conta_corrente] = "0403005"
164
+ @valid_attributes[:agencia] = "1172"
165
+ boleto_novo = BancoBradesco.new(@valid_attributes)
166
+ boleto_novo.should be_instance_of(BancoBradesco)
167
+ %w| pdf jpg tif png ps |.each do |format|
168
+ file_body=boleto_novo.to(format.to_sym)
169
+ tmp_file=Tempfile.new("foobar." << format)
170
+ tmp_file.puts file_body
171
+ tmp_file.close
172
+ File.exist?(tmp_file.path).should be_true
173
+ File.stat(tmp_file.path).zero?.should be_false
174
+ File.delete(tmp_file.path).should eql(1)
175
+ File.exist?(tmp_file.path).should be_false
176
+ end
177
+ end
178
+
179
+ end