class InovadoraXml::Modules::XmlRetorno

Attributes

cancelada[RW]
codigo_verificacao_nfse[RW]
data_hora_cancelamento[RW]
datahora_aprovacao[RW]
errors[RW]
fnnfse[RW]
fnnfses_xml[RW]
numero_nota[RW]
protocolo_prefeitura[RW]

Public Class Methods

new(args={}) click to toggle source
# File lib/inovadora_xml/modules/xml_retorno.rb, line 10
def initialize args={}
  self.errors = args[:errors] || ActiveModel::Errors.new(self)
  self.fnnfse = args[:fnnfse]
  validar_dados_iniciais(args)
  persistir_fnnfses_xml(args)
end

Public Instance Methods

get_texto_errors() click to toggle source
# File lib/inovadora_xml/modules/xml_retorno.rb, line 62
def get_texto_errors
  texto_errors = '<erros>\n'
  texto_errors += "<erro>XML apresentou erros na geração e transmissão para o webservice</erro>\n"
  if self.errors.present?
    self.errors.full_messages.each do |msg|
      texto_errors += "<erro>#{msg}</erro>\n"
    end
  end
  texto_errors += '</erros>\n'
  texto_errors
end
persistir_fnnfses_xml(args) click to toggle source
# File lib/inovadora_xml/modules/xml_retorno.rb, line 74
def persistir_fnnfses_xml(args)
  xml_resposta_ws = (args[:xml_retorno] rescue get_texto_errors)
  if xml_resposta_ws.blank?
    xml_resposta_ws = get_texto_errors
  end
  self.fnnfses_xml = FnnfsesXml.create(
    fnnfse_id: self.fnnfse.id,
    tipo_documento: args[:tipo_documento],
    xml_envio: (args[:xml_envio] rescue get_texto_errors),
    xml_resposta: xml_resposta_ws
  )
  if self.fnnfses_xml.try(:get_erros).present?
    self.fnnfses_xml.get_erros.each do |erro|
      self.errors.add(:base, "Erro retornado pela prefeitura: #{erro}")
    end
  end

  if self.errors.blank?
    self.numero_nota             = self.fnnfses_xml.get_numero_nota              if (self.fnnfses_xml.get_numero_nota.present?)
    self.link_nota               = self.fnnfses_xml.get_link_nota                if (self.fnnfses_xml.get_link_nota.present?)
    self.codigo_verificacao_nfse = self.fnnfses_xml.get_codigo_verificacao_nfse  if (self.fnnfses_xml.get_codigo_verificacao_nfse.present?)
    self.datahora_aprovacao      = self.fnnfses_xml.get_data_emissao             if (self.fnnfses_xml.get_data_emissao.present?)
    self.protocolo_prefeitura    = self.fnnfses_xml.get_protocolo_prefeitura     if (self.fnnfses_xml.get_protocolo_prefeitura.present?)
    if (self.fnnfses_xml.get_data_hora_cancelamento.present? rescue false)
      self.cancelada = true
      self.data_hora_cancelamento = self.fnnfses_xml.get_data_hora_cancelamento
    end
  end
end
retornou_dados_nota?() click to toggle source
# File lib/inovadora_xml/modules/xml_retorno.rb, line 33
def retornou_dados_nota?
  self.errors.add(:base, "Número da nota não encontrado no XML de retorno da prefeitura")             if self.numero_nota.blank?
  # self.errors.add(:base, "Link da nota não encontrado no XML de retorno da prefeitura")               if self.link_nota.blank?
  self.errors.add(:base, "Código verificação da nota não encontrado no XML de retorno da prefeitura") if self.codigo_verificacao_nfse.blank?
  self.errors.add(:base, "Data aprovação da nota não encontrado no XML de retorno da prefeitura")     if self.datahora_aprovacao.blank?
  self.valid?
end
save() click to toggle source
# File lib/inovadora_xml/modules/xml_retorno.rb, line 41
def save
  if retornou_dados_nota?
    if self.valid?
      self.fnnfse.nao_validar_nota_autenticada = true
      self.fnnfse.fnnfses_sancionada.numero_nota             = self.numero_nota
      self.fnnfse.fnnfses_sancionada.link_nota               = self.link_nota
      self.fnnfse.fnnfses_sancionada.codigo_verificacao_nfse = self.codigo_verificacao_nfse
      self.fnnfse.fnnfses_sancionada.datahora_aprovacao      = self.datahora_aprovacao
      self.fnnfse.fnnfses_sancionada.protocolo_prefeitura    = self.protocolo_prefeitura
      self.fnnfse.save
    end
    if self.cancelada && self.data_hora_cancelamento.present?
      self.fnnfse.reload
      fnnfses_sancionada = self.fnnfse.fnnfses_sancionada
      fnnfses_sancionada.cancelada = true
      fnnfses_sancionada.motivo_cancelamento = fnnfses_sancionada.motivo_cancelamento.to_s + " Data/Hora cancelamento: #{self.data_hora_cancelamento.to_s_br}"
      fnnfses_sancionada.save
    end
  end
end
valid?() click to toggle source
# File lib/inovadora_xml/modules/xml_retorno.rb, line 29
def valid?
  self.errors.blank?
end
validar_dados_iniciais(args) click to toggle source
# File lib/inovadora_xml/modules/xml_retorno.rb, line 17
def validar_dados_iniciais(args)
  if self.fnnfse.nil?
    self.errors.add(:base, "NFSe não encontrada")
  end
  if args.blank? || args[:xml_envio].blank?
    self.errors.add(:base, "XML para envio está em branco")
  end
  if args.blank? || args[:xml_retorno].blank?
    self.errors.add(:base, "XML de retorno está em branco")
  end
end