# -*- encoding: utf-8 -*-
module Brcobranca
module Boleto
class Banespa < Base # Banco BANESPA
validates_length_of :agencia, :maximum => 3, :message => "deve ser menor ou igual a 3 dígitos."
validates_length_of :convenio, :maximum => 11, :message => "deve ser menor ou igual a 11 dígitos."
validates_length_of :numero_documento, :maximum => 7, :message => "deve ser menor ou igual a 7 dígitos."
# Nova instancia do Banespa
# @param (see Brcobranca::Boleto::Base#initialize)
def initialize(campos={})
campos = {:carteira => "COB"}.merge!(campos)
super(campos)
end
# Codigo do banco emissor (3 dígitos sempre)
#
# @return [String] 3 caracteres numéricos.
def banco
"033"
end
# Código da agência
# @return [String] 3 caracteres numéricos.
def agencia=(valor)
@agencia = valor.to_s.rjust(3,'0') unless valor.nil?
end
# Número do convênio/contrato do cliente junto ao banco.
# @return [String] 11 caracteres numéricos.
def convenio=(valor)
@convenio = valor.to_s.rjust(11,'0') unless valor.nil?
end
# Número seqüencial utilizado para identificar o boleto.
# @return [String] 7 caracteres numéricos.
def numero_documento=(valor)
@numero_documento = valor.to_s.rjust(7,'0') unless valor.nil?
end
# Agência + Número sequencial.
# @return [String] 10 caracteres numéricos.
def nosso_numero
"#{self.agencia}#{self.numero_documento}"
end
# Dígito verificador do nosso número.
# @return [String] 1 caracteres numéricos.
def nosso_numero_dv
self.nosso_numero.modulo_10_banespa
end
# Nosso número para exibir no boleto.
# @return [String]
# @example
# boleto.nosso_numero_boleto #=> "400 0403005 6"
def nosso_numero_boleto
"#{self.nosso_numero.gsub(/^(.{3})(.{7})$/,'\1 \2')} #{self.nosso_numero_dv}"
end
# Número do convênio/contrato do cliente para exibir no boleto.
# @return [String]
# @example
# boleto.agencia_conta_boleto #=> "000 12 38798 9"
def agencia_conta_boleto
self.convenio.gsub(/^(.{3})(.{2})(.{5})(.{1})$/,'\1 \2 \3 \4')
end
# Segunda parte do código de barras.
#
# Código do cedente | (011)
# Nosso número | (007)
# Filler | (002) = 00
# Código do banco cedente | (003) = 033
# Dígito verificador 1 | (001)
# Dígito verificador 2 | (001)
#
# @return [String] 25 caracteres numéricos.
def codigo_barras_segunda_parte
dv1 = campo_livre.modulo10 #dv 1 inicial
dv2 = nil
begin
recalcular_dv2 = false
valor_inicial = "#{campo_livre}#{dv1}"
total = valor_inicial.multiplicador([2,3,4,5,6,7])
case total % 11
when 0 then
dv2 = 0
when 1 then
if dv1 == 9
dv1 = 0
else
dv1 += 1
end
recalcular_dv2 = true
else
dv2 = 11 - (total % 11)
end
end while(recalcular_dv2)
return "#{campo_livre}#{dv1}#{dv2}"
end
private
# Campo Livre
#
# Primeiros 23 caracteres numéricos da segunda parte do código de barras.
# Código do cedente | (011)
# Nosso número | (007)
# Filler | (002) = 00
# Código do banco cedente | (003) = 033
#
# @return [String] 23 caracteres numéricos.
def campo_livre
"#{self.convenio}#{self.numero_documento}00#{self.banco}"
end
end
end
end