# -*- encoding: utf-8 -*- module Brcobranca module Remessa class Pagamento # Validações do Rails 3 include ActiveModel::Validations # REQUERIDO: nosso numero attr_accessor :nosso_numero # REQUERIDO: data do vencimento do boleto attr_accessor :data_vencimento # REQUERIDO: data de emissao do boleto attr_accessor :data_emissao # REQUERIDO: valor do boleto attr_accessor :valor # REQUERIDO: documento do sacado (cliente) attr_accessor :documento_sacado # REQUERIDO: nome do sacado (cliente) attr_accessor :nome_sacado # REQUERIDO: endereco do sacado (cliente) attr_accessor :endereco_sacado # REQUERIDO: bairro do sacado (cliente) attr_accessor :bairro_sacado # REQUERIDO: CEP do sacado (cliente) attr_accessor :cep_sacado # REQUERIDO: cidade do sacado (cliente) attr_accessor :cidade_sacado # REQUERIDO: UF do sacado (cliente) attr_accessor :uf_sacado # REQUERIDO: Código da ocorrência attr_accessor :identificacao_ocorrencia # OPCIONAL: nome do avalista attr_accessor :nome_avalista # OPCIONAL: documento do avalista attr_accessor :documento_avalista # OPCIONAL: codigo da 1a instrucao attr_accessor :cod_primeira_instrucao # OPCIONAL: codigo da 2a instrucao attr_accessor :cod_segunda_instrucao # OPCIONAL: valor da mora ao dia attr_accessor :valor_mora # OPCIONAL: data limite para o desconto attr_accessor :data_desconto # OPCIONAL: valor a ser concedido de desconto attr_accessor :valor_desconto # OPCIONAL: codigo do desconto (para CNAB240) attr_accessor :cod_desconto # OPCIONAL: valor do IOF attr_accessor :valor_iof # OPCIONAL: valor do abatimento attr_accessor :valor_abatimento # OPCIONAL: Número do Documento de Cobrança - Número adotado e controlado pelo Cliente, # para identificar o título de cobrança. # Informação utilizada para referenciar a identificação do documento objeto de cobrança. # Poderá conter número de duplicata, no caso de cobrança de duplicatas; número da apólice, # no caso de cobrança de seguros, etc attr_accessor :numero_documento # OPCIONAL: data limite para o desconto attr_accessor :data_segundo_desconto # OPCIONAL: valor a ser concedido de desconto attr_accessor :valor_segundo_desconto # OPCIONAL: espécie do título attr_accessor :especie_titulo # OPCIONAL: código da multa attr_accessor :codigo_multa # OPCIONAL: Percentual multa por atraso % attr_accessor :percentual_multa # OPCIONAL: Data para cobrança de multa attr_accessor :data_multa validates_presence_of :nosso_numero, :data_vencimento, :valor, :documento_sacado, :nome_sacado, :endereco_sacado, :cep_sacado, :cidade_sacado, :uf_sacado, message: 'não pode estar em branco.' validates_length_of :cep_sacado, is: 8, message: 'deve ter 8 dígitos.' validates_length_of :cod_desconto, is: 1, message: 'deve ter 1 dígito.' validates_length_of :especie_titulo, is: 2, message: 'deve ter 2 dígitos.', allow_blank: true validates_length_of :identificacao_ocorrencia, is: 2, message: 'deve ter 2 dígitos.' # Nova instancia da classe Pagamento # # @param campos [Hash] # def initialize(campos = {}) padrao = { data_emissao: Date.today, valor_mora: 0.0, valor_desconto: 0.0, valor_segundo_desconto: 0.0, valor_iof: 0.0, valor_abatimento: 0.0, nome_avalista: '', cod_desconto: '0', especie_titulo: '01', identificacao_ocorrencia: '01', codigo_multa: '0', percentual_multa: '0' } campos = padrao.merge!(campos) campos.each do |campo, valor| send "#{campo}=", valor end yield self if block_given? end # Formata a data de desconto de acordo com o formato passado # # @return [String] # def formata_data_desconto(formato = '%d%m%y') data_desconto.strftime(formato) rescue if formato == '%d%m%y' '000000' else '00000000' end end # Formata a data de segundo desconto de acordo com o formato passado # # @return [String] # def formata_data_segundo_desconto(formato = '%d%m%y') data_segundo_desconto.strftime(formato) rescue if formato == '%d%m%y' '000000' else '00000000' end end # Formata a data de cobrança da multa # # @return [String] # def formata_data_multa(formato = '%d%m%y') data_multa.strftime(formato) rescue if formato == '%d%m%y' '000000' else '00000000' end end # Formata o campo valor # referentes as casas decimais # exe. R$199,90 => 0000000019990 # # @param tamanho [Integer] # quantidade de caracteres a ser retornado # def formata_valor(tamanho = 13) format_value(valor, tamanho) end # Formata o campo valor da mora # # @param tamanho [Integer] # quantidade de caracteres a ser retornado # def formata_valor_mora(tamanho = 13) format_value(valor_mora, tamanho) end # Formata o campo valor do desconto # # @param tamanho [Integer] # quantidade de caracteres a ser retornado # def formata_valor_desconto(tamanho = 13) format_value(valor_desconto, tamanho) end # Formata o campo valor do segundo desconto # # @param tamanho [Integer] # quantidade de caracteres a ser retornado # def formata_valor_segundo_desconto(tamanho = 13) format_value(valor_segundo_desconto, tamanho) end # Formata o campo valor do IOF # # @param tamanho [Integer] # quantidade de caracteres a ser retornado # def formata_valor_iof(tamanho = 13) format_value(valor_iof, tamanho) end # Formata o campo valor do IOF # # @param tamanho [Integer] # quantidade de caracteres a ser retornado # def formata_valor_abatimento(tamanho = 13) format_value(valor_abatimento, tamanho) end # Retorna a identificacao do pagador # Se for pessoa fisica (CPF com 11 digitos) é 1 # Se for juridica (CNPJ com 14 digitos) é 2 # def identificacao_sacado(zero = true) Brcobranca::Util::Empresa.new(documento_sacado, zero).tipo end # Retorna a identificacao do avalista # Se for pessoa fisica (CPF com 11 digitos) é 1 # Se for juridica (CNPJ com 14 digitos) é 2 # def identificacao_avalista(zero = true) return '0' if documento_avalista.nil? Brcobranca::Util::Empresa.new(documento_avalista, zero).tipo end private def format_value(value, tamanho) raise ValorInvalido.new('Deve ser um Float') if !(value.to_s =~ /\./) sprintf('%.2f', value).delete('.').rjust(tamanho, '0') end end end end