# -*- encoding: utf-8 -*- # # @author Kivanio Barbosa # @author Ronaldo Araujo module Bbrcobranca module Boleto class Santander < Base # Banco Santander attr_writer :codigo_barras, :nosso_numero_dv validates_presence_of :convenio, message: 'não pode estar em branco.' validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.' validates_length_of :convenio, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.' validates_length_of :nosso_numero, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.' # Nova instancia do Santander # @param (see Bbrcobranca::Boleto::Base#initialize) def initialize(campos = {}) campos = { carteira: '102' }.merge!(campos) super(campos) end def codigo_barras instance_variable_get("@codigo_barras") || super end def nosso_numero_dv if instance_variable_get("@nosso_numero_dv") instance_variable_get("@nosso_numero_dv").gsub(/\D/, '') else nosso_numero.modulo11( multiplicador: (2..9).to_a, mapeamento: { 10 => 0, 11 => 0 } ) { |total| 11 - (total % 11) } end end # Codigo do banco emissor (3 dígitos sempre) # # @return [String] 3 caracteres numéricos. def banco '033' end # Número da conta corrente # @return [String] 9 caracteres numéricos. def conta_corrente=(valor) @conta_corrente = valor.to_s.rjust(9, '0') if valor end # Número do convênio/contrato do cliente junto ao banco. No Santander, é # chamado de Código do Cedente. # @return [String] 7 caracteres numéricos. def convenio=(valor) @convenio = valor.to_s.rjust(7, '0') if valor end # Número sequencial utilizado para identificar o boleto. # @return [String] 7 caracteres numéricos. def nosso_numero=(valor) @nosso_numero = valor.to_s.rjust(7, '0') if valor end # Nosso número para exibir no boleto. # @return [String] # @example # boleto.nosso_numero_boleto #=> "9000272-7" def nosso_numero_boleto "#{nosso_numero}-#{nosso_numero_dv}" end # Agência + codigo do cedente do cliente para exibir no boleto. # @return [String] # @example # boleto.agencia_conta_boleto #=> "0059/1899775" def agencia_conta_boleto "#{agencia}/#{convenio}" end # Segunda parte do código de barras. # 9(01) | Fixo 9
# 9(07) | Convenio
# 9(13) | Nosso Numero Com DV
# 9(01) | IOF somente para seguradoras
Fixo 9 # 9(03) | Carteira de cobrança
# # @return [String] 25 caracteres numéricos. def codigo_barras_segunda_parte "9#{convenio}00000#{nosso_numero}#{nosso_numero_dv}0#{carteira}" end end end end