diff --git a/NFe.Servicos/ServicosNFe.cs b/NFe.Servicos/ServicosNFe.cs index e7094b240..286a2bf86 100644 --- a/NFe.Servicos/ServicosNFe.cs +++ b/NFe.Servicos/ServicosNFe.cs @@ -289,21 +289,6 @@ public RetornoNfeInutilizacao NfeInutilizacao(string cnpj, int ano, ModeloDocume { var versaoServico = ServicoNFe.NfeInutilizacao.VersaoServicoParaString(_cFgServico.VersaoNfeInutilizacao); - #region Cria o objeto wdsl para consulta - - var ws = CriarServico(ServicoNFe.NfeInutilizacao); - - if (_cFgServico.VersaoNfeStatusServico != VersaoServico.Versao400) - { - ws.nfeCabecMsg = new nfeCabecMsg - { - cUF = _cFgServico.cUF, - versaoDados = versaoServico - }; - } - - #endregion - #region Cria o objeto inutNFe var pedInutilizacao = new inutNFe @@ -328,18 +313,47 @@ public RetornoNfeInutilizacao NfeInutilizacao(string cnpj, int ano, ModeloDocume pedInutilizacao.infInut.serie.ToString().PadLeft(3, '0'), pedInutilizacao.infInut.nNFIni.ToString().PadLeft(9, '0'), pedInutilizacao.infInut.nNFFin.ToString().PadLeft(9, '0')); + pedInutilizacao.infInut.Id = "ID" + numId; pedInutilizacao.Assina(_certificado, _cFgServico.Certificado.SignatureMethodSignedXml, _cFgServico.Certificado.DigestMethodReference, _cFgServico.RemoverAcentos); #endregion + return NfeInutilizacao(pedInutilizacao); + } + + /// + /// Inutilizar uma faíxa de números já assinado. + /// + /// + /// + public RetornoNfeInutilizacao NfeInutilizacao(inutNFe pedInutilizacao) + { + var versaoServico = ServicoNFe.NfeInutilizacao.VersaoServicoParaString(_cFgServico.VersaoNfeInutilizacao); + + #region Cria o objeto wdsl para consulta + + var ws = CriarServico(ServicoNFe.NfeInutilizacao); + + if (_cFgServico.VersaoNfeStatusServico != VersaoServico.Versao400) + { + ws.nfeCabecMsg = new nfeCabecMsg + { + cUF = _cFgServico.cUF, + versaoDados = versaoServico + }; + } + + #endregion + #region Valida, Envia os dados e obtém a resposta var xmlInutilizacao = _cFgServico.RemoverAcentos ? pedInutilizacao.ObterXmlString().RemoverAcentos() : pedInutilizacao.ObterXmlString(); + var numId = pedInutilizacao.infInut.Id.Replace("ID", ""); SalvarArquivoXml(numId + "-ped-inu.xml", xmlInutilizacao); if (_cFgServico.ValidarSchemas) @@ -378,7 +392,7 @@ public RetornoNfeInutilizacao NfeInutilizacao(string cnpj, int ano, ModeloDocume /// Tipo de serviço do evento: valores válidos: RecepcaoEventoCancelmento, RecepcaoEventoCartaCorrecao, RecepcaoEventoEpec e RecepcaoEventoManifestacaoDestinatario /// Versão do serviço para o evento /// Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento - private RetornoRecepcaoEvento RecepcaoEvento(int idlote, List eventos, ServicoNFe servicoEvento, VersaoServico versaoEvento) + private RetornoRecepcaoEvento RecepcaoEvento(int idlote, List eventos, ServicoNFe servicoEvento, VersaoServico versaoEvento, bool assinar) { var listaEventos = new List { @@ -419,11 +433,14 @@ private RetornoRecepcaoEvento RecepcaoEvento(int idlote, List eventos, S evento = eventos }; - foreach (var evento in eventos) + if (assinar) { - evento.infEvento.Id = "ID" + ((int)evento.infEvento.tpEvento) + evento.infEvento.chNFe + - evento.infEvento.nSeqEvento.ToString().PadLeft(2, '0'); - evento.Assina(_certificado, _cFgServico.Certificado.SignatureMethodSignedXml, _cFgServico.Certificado.DigestMethodReference, _cFgServico.RemoverAcentos); + foreach (var evento in eventos) + { + evento.infEvento.Id = "ID" + ((int)evento.infEvento.tpEvento) + evento.infEvento.chNFe + + evento.infEvento.nSeqEvento.ToString().PadLeft(2, '0'); + evento.Assina(_certificado, _cFgServico.Certificado.SignatureMethodSignedXml, _cFgServico.Certificado.DigestMethodReference, _cFgServico.RemoverAcentos); + } } #endregion @@ -496,6 +513,18 @@ public RetornoRecepcaoEvento RecepcaoEventoCancelamento(int idlote, int sequenci protocoloAutorizacao, chaveNFe, justificativa, cpfcnpj, dhEvento: dhEvento); } + /// + /// Envia eventos do tipo "Cancelamento" já assinado. + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoCancelamento(int idlote, List eventos) + { + var retorno = RecepcaoEvento(idlote, eventos, ServicoNFe.RecepcaoEventoCancelmento, _cFgServico.VersaoRecepcaoEventoCceCancelamento, false); + return retorno; + } + /// /// Envia um evento do tipo "Cancelamento por substituição" /// @@ -549,7 +578,7 @@ private RetornoRecepcaoEvento RecepcaoEventoCancelamento(NFeTipoEvento tipoEvent var evento = new evento { versao = versaoServico, infEvento = infEvento }; - var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoCancelmento, _cFgServico.VersaoRecepcaoEventoCceCancelamento); + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoCancelmento, _cFgServico.VersaoRecepcaoEventoCceCancelamento, true); return retorno; } @@ -597,7 +626,19 @@ public RetornoRecepcaoEvento RecepcaoEventoCartaCorrecao(int idlote, int sequenc var evento = new evento { versao = versaoServico, infEvento = infEvento }; - var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoCartaCorrecao, _cFgServico.VersaoRecepcaoEventoCceCancelamento); + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoCartaCorrecao, _cFgServico.VersaoRecepcaoEventoCceCancelamento, true); + return retorno; + } + + /// + /// Envia eventos do tipo "Carta de correção" já assinado. + /// + /// + /// + /// + public RetornoRecepcaoEvento RecepcaoEventoCartaCorrecao(int idlote, List eventos) + { + var retorno = RecepcaoEvento(idlote, eventos, ServicoNFe.RecepcaoEventoCartaCorrecao, _cFgServico.VersaoRecepcaoEventoCceCancelamento, false); return retorno; } @@ -633,7 +674,7 @@ public RetornoRecepcaoEvento RecepcaoEventoManifestacaoDestinatario(int idlote, { var infEvento = new infEventoEnv { - cOrgao = Estado.AN, + cOrgao = Estado.AN, tpAmb = _cFgServico.tpAmb, chNFe = chaveNFe, dhEvento = dhEvento ?? DateTime.Now, @@ -652,7 +693,7 @@ public RetornoRecepcaoEvento RecepcaoEventoManifestacaoDestinatario(int idlote, var retorno = RecepcaoEvento(idlote, eventos, - ServicoNFe.RecepcaoEventoManifestacaoDestinatario, _cFgServico.VersaoRecepcaoEventoManifestacaoDestinatario); + ServicoNFe.RecepcaoEventoManifestacaoDestinatario, _cFgServico.VersaoRecepcaoEventoManifestacaoDestinatario, true); return retorno; } @@ -711,7 +752,21 @@ public RetornoRecepcaoEvento RecepcaoEventoEpec(int idlote, int sequenciaEvento, var evento = new evento { versao = versaoServico, infEvento = infEvento }; - var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoEpec, _cFgServico.VersaoRecepcaoEventoEpec); + var retorno = RecepcaoEvento(idlote, new List { evento }, ServicoNFe.RecepcaoEventoEpec, _cFgServico.VersaoRecepcaoEventoEpec, true); + return retorno; + } + + /// + /// Envia eventos do tipo "EPEC" já assinado + /// + /// + /// + /// + /// + /// Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento + public RetornoRecepcaoEvento RecepcaoEventoEpec(int idlote, List eventos) + { + var retorno = RecepcaoEvento(idlote, eventos, ServicoNFe.RecepcaoEventoCartaCorrecao, _cFgServico.VersaoRecepcaoEventoCceCancelamento, false); return retorno; } @@ -1028,9 +1083,9 @@ public RetornoNfeRecepcao NfeRecepcao(int idLote, List nFes) SalvarArquivoXml(idLote + "-env-lot.xml", xmlEnvio); - if (_cFgServico.ValidarSchemas) + if (_cFgServico.ValidarSchemas) Validador.Valida(ServicoNFe.NfeRecepcao, _cFgServico.VersaoNfeRecepcao, xmlEnvio, cfgServico: _cFgServico); - + var dadosEnvio = new XmlDocument(); dadosEnvio.LoadXml(xmlEnvio); @@ -1507,6 +1562,6 @@ public void Dispose() Dispose(false); } - #endregion - } + #endregion + } }