Class: NfsePrefeituraSp::Services::Sync::CancelamentoNfe

Inherits:
Object
  • Object
show all
Defined in:
lib/nfse_prefeitura_sp/services/sync/cancelamento_nfe.rb

Overview

PedidoCancelamentoNFe

Constant Summary collapse

OPERATION_REQUEST =
:cancelamento_n_fe
OPERATION_RESPONSE =
:cancelamento_n_fe_response

Instance Method Summary collapse

Constructor Details

#initialize(data, signer) ⇒ CancelamentoNfe

Returns a new instance of CancelamentoNfe.



6
7
8
9
# File 'lib/nfse_prefeitura_sp/services/sync/cancelamento_nfe.rb', line 6

def initialize(data, signer)
  @data   = data
  @signer = signer
end

Instance Method Details

#request_xmlObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/nfse_prefeitura_sp/services/sync/cancelamento_nfe.rb', line 11

def request_xml
  builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
    xml.PedidoCancelamentoNFe("xmlns" => "http://www.prefeitura.sp.gov.br/nfe") do
      xml.Cabecalho('Versao' => '2', 'xmlns' => '') do
        xml.CPFCNPJRemetente do
          xml.CNPJ @data[:cnpj_remetente]
        end
        xml.transacao (@data[:transacao] == false ? false : true)
      end

      Array(@data[:detalhes]).each do |detalhe|
        xml.Detalhe('xmlns' => '') do
          NfsePrefeituraSp::Types::TpChaveNfe.new('ChaveNFe', detalhe[:chave_nfe]).add_tag_to_xml(xml)

          # Cadeia de caracteres (com informações do RPS emitido) assinada conforme descrito no item 4.3.10.
          inscricao_prestador = detalhe[:chave_nfe][:inscricao_prestador].to_s.rjust(8, '0')
          numero              = detalhe[:chave_nfe][:numero_nfe].to_s.rjust(12, '0')
          str_to_sign         = "#{inscricao_prestador}#{numero}"

          xml.AssinaturaCancelamento @signer.sign(str_to_sign)
        end
      end
    end
  end

  signed_xml = @signer.sign_xml(builder.to_xml)
  ("<VersaoSchema>#{NfsePrefeituraSp::XSD_VERSION.to_s}</VersaoSchema><MensagemXML>" + "<![CDATA[#{signed_xml}]]>" + "</MensagemXML>").gsub(/\n/,'')
end