Skip to content

Commit

Permalink
Merge pull request #255 from adrianotrentim/main
Browse files Browse the repository at this point in the history
Varias correções para Abrasf 2.04
  • Loading branch information
rftd authored May 19, 2023
2 parents 6f3992d + 0ec84db commit 8893d19
Show file tree
Hide file tree
Showing 7 changed files with 162 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ public string SubstituirNFSe(string cabec, string msg)
message.Append("<nfseDadosMsg>");
message.Append(msg);
message.Append("</nfseDadosMsg>");
message.Append("</nfse:SubstituirNfseRequest>");
message.Append("</nfse:SubstituirNfse>");

return Execute("http://nfse.abrasf.org.br/SubstituirNfse", message.ToString(), "SubstituirNfseResponse");
}
Expand Down
127 changes: 122 additions & 5 deletions src/OpenAC.Net.NFSe/Providers/ISSNet/ProviderISSNet204.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,15 @@
// <summary></summary>
// ***********************************************************************

using OpenAC.Net.Core.Extensions;
using OpenAC.Net.DFe.Core.Extensions;
using OpenAC.Net.NFSe.Configuracao;
using System.Text;
using OpenAC.Net.NFSe.Nota;
using OpenAC.Net.DFe.Core;
using System.Linq;
using System.Xml.Linq;
using OpenAC.Net.DFe.Core.Common;

namespace OpenAC.Net.NFSe.Providers;

Expand All @@ -46,12 +53,122 @@ public ProviderISSNet204(ConfigNFSe config, OpenMunicipioNFSe municipio) : base(
#endregion Constructors

#region Methods

protected override IServiceClient GetClient(TipoUrl tipo) => new ISSNet204ServiceClient(this, tipo, Certificado);

protected override string GetSchema(TipoUrl tipo) => "nfse.xsd";
protected override string GerarCabecalho() => $"<cabecalho versao=\"1.00\" {GetNamespace()}><versaoDados>{Versao.GetDFeValue()}</versaoDados></cabecalho>";

protected override string GerarCabecalho() => $"<cabecalho versao=\"2.04\" {GetNamespace()}><versaoDados>{Versao.GetDFeValue()}</versaoDados></cabecalho>";

#endregion Methods

#region Services

protected override void AssinarConsultarNFSeRps(RetornoConsultarNFSeRps retornoWebservice)
{
retornoWebservice.XmlEnvio = XmlSigning.AssinarXmlTodos(retornoWebservice.XmlEnvio, "ConsultarNfseRpsEnvio", "", Certificado);
}

protected override void PrepararConsultarNFSeRps(RetornoConsultarNFSeRps retornoWebservice, NotaServicoCollection notas)
{
if (retornoWebservice.NumeroRps < 1)
{
retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "Número da RPS não informado para a consulta." });
return;
}

var loteBuilder = new StringBuilder();
loteBuilder.Append($"<ConsultarNfseRpsEnvio {GetNamespace()}>");
loteBuilder.Append("<Pedido>");
loteBuilder.Append("<IdentificacaoRps>");
loteBuilder.Append($"<Numero>{retornoWebservice.NumeroRps}</Numero>");
loteBuilder.Append($"<Serie>{retornoWebservice.Serie}</Serie>");
loteBuilder.Append($"<Tipo>{(int)retornoWebservice.Tipo + 1}</Tipo>");
loteBuilder.Append("</IdentificacaoRps>");
loteBuilder.Append("<Prestador>");
loteBuilder.Append("<CpfCnpj>");
loteBuilder.Append(Configuracoes.PrestadorPadrao.CpfCnpj.IsCNPJ()
? $"<Cnpj>{Configuracoes.PrestadorPadrao.CpfCnpj.ZeroFill(14)}</Cnpj>"
: $"<Cpf>{Configuracoes.PrestadorPadrao.CpfCnpj.ZeroFill(11)}</Cpf>");
loteBuilder.Append("</CpfCnpj>");
if (!Configuracoes.PrestadorPadrao.InscricaoMunicipal.IsEmpty()) loteBuilder.Append($"<InscricaoMunicipal>{Configuracoes.PrestadorPadrao.InscricaoMunicipal}</InscricaoMunicipal>");
loteBuilder.Append("</Prestador>");
loteBuilder.Append("</Pedido>");
loteBuilder.Append("</ConsultarNfseRpsEnvio>");
retornoWebservice.XmlEnvio = loteBuilder.ToString();
}

protected override void TratarRetornoSubstituirNFSe(RetornoSubstituirNFSe retornoWebservice, NotaServicoCollection notas)
{
// Analisa mensagem de retorno
var xmlRet = XDocument.Parse(retornoWebservice.XmlRetorno);
MensagemErro(retornoWebservice, xmlRet, "SubstituirNfseResult");
if (retornoWebservice.Erros.Any()) return;

var retornoLote = xmlRet.Root.ElementAnyNs("RetSubstituicao");
var nfseSubstituida = retornoLote?.ElementAnyNs("NfseSubstituida");
var nfseSubstituidora = retornoLote?.ElementAnyNs("NfseSubstituidora");

if (nfseSubstituida == null) retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "NFSe Substituida não encontrada! (NfseSubstituida)" });
if (nfseSubstituidora == null) retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "NFSe Substituidora não encontrada! (NfseSubstituidora)" });
if (retornoWebservice.Erros.Any()) return;


/******* TRATANDO A NOTA SUBSTITUÍDA *******/
var compNfse = nfseSubstituida.ElementAnyNs("CompNfse");
if (compNfse == null) retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "NFSe não encontrada! (CompNfse)" });
if (retornoWebservice.Erros.Any()) return;

var notaSubistituida = LoadXml(compNfse.ToString());

var notaSubistituidaExistente = notas.FirstOrDefault(t => t.IdentificacaoRps.Numero == notaSubistituida.IdentificacaoRps.Numero);
if (notaSubistituidaExistente == null)
{
notaSubistituidaExistente = notaSubistituida;
notas.Add(notaSubistituidaExistente);
}
else
{
notaSubistituidaExistente.IdentificacaoNFSe.Numero = notaSubistituida.IdentificacaoNFSe.Numero;
notaSubistituidaExistente.IdentificacaoNFSe.Chave = notaSubistituida.IdentificacaoNFSe.Chave;
notaSubistituidaExistente.IdentificacaoNFSe.DataEmissao = notaSubistituida.IdentificacaoNFSe.DataEmissao;
notaSubistituidaExistente.XmlOriginal = compNfse.ToString();
}

/******* TRATANDO A NOTA SUBSTITUIDORA *******/
compNfse = nfseSubstituidora.ElementAnyNs("CompNfse");
if (compNfse == null) retornoWebservice.Erros.Add(new Evento { Codigo = "0", Descricao = "NFSe não encontrada! (CompNfse)" });
if (retornoWebservice.Erros.Any()) return;

var notaSubistituidora = LoadXml(compNfse.ToString());

var notaSubistituidoraExistente = notas.FirstOrDefault(t => t.IdentificacaoRps.Numero == notaSubistituidora.IdentificacaoRps.Numero);
if (notaSubistituidoraExistente == null)
{
notaSubistituidoraExistente = notaSubistituidora;
notas.Add(notaSubistituidoraExistente);
}
else
{
notaSubistituidoraExistente.IdentificacaoNFSe.Numero = notaSubistituidora.IdentificacaoNFSe.Numero;
notaSubistituidoraExistente.IdentificacaoNFSe.Chave = notaSubistituidora.IdentificacaoNFSe.Chave;
notaSubistituidoraExistente.IdentificacaoNFSe.DataEmissao = notaSubistituidora.IdentificacaoNFSe.DataEmissao;
notaSubistituidoraExistente.XmlOriginal = compNfse.ToString();
}

/******* TRATAMENTOS FINAIS *******/
retornoWebservice.Sucesso = true;

notaSubistituidoraExistente.RpsSubstituido.NFSeSubstituidora = notaSubistituidoraExistente.IdentificacaoNFSe.Numero;
notaSubistituidoraExistente.RpsSubstituido.NumeroNfse = notaSubistituidaExistente.IdentificacaoNFSe.Numero;
notaSubistituidoraExistente.RpsSubstituido.DataEmissaoNfseSubstituida = notaSubistituidaExistente.IdentificacaoNFSe.DataEmissao;
notaSubistituidoraExistente.RpsSubstituido.Id = notaSubistituidaExistente.Id;
notaSubistituidoraExistente.RpsSubstituido.NumeroRps = notaSubistituidaExistente.IdentificacaoRps.Numero;
notaSubistituidoraExistente.RpsSubstituido.Serie = notaSubistituidaExistente.IdentificacaoRps.Serie;
notaSubistituidoraExistente.RpsSubstituido.Signature = notaSubistituidaExistente.Signature;

retornoWebservice.Nota = notaSubistituidoraExistente;
}

#endregion
}
5 changes: 4 additions & 1 deletion src/OpenAC.Net.NFSe/Providers/NFSeHttpServiceClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,10 @@ protected void Execute(HttpContent content, HttpMethod method)
if (content != null)
request.Content = content;

var response = client.SendAsync(request).GetAwaiter().GetResult().EnsureSuccessStatusCode();
var response = client.SendAsync(request).GetAwaiter().GetResult();

//response.EnsureSuccessStatusCode();

EnvelopeRetorno = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();

GravarEnvio(EnvelopeRetorno, $"{DateTime.Now:yyyyMMddssfff}_{PrefixoResposta}_retorno.xml");
Expand Down
31 changes: 31 additions & 0 deletions src/OpenAC.Net.NFSe/Providers/ProviderABRASF200.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1233,6 +1233,37 @@ protected override void TratarRetornoConsultarNFSeRps(RetornoConsultarNFSeRps re
nota.IdentificacaoNFSe.Chave = chaveNFSe;
nota.IdentificacaoNFSe.DataEmissao = dataNFSe;
nota.XmlOriginal = compNfse.ToString();

var nfseCancelamento = compNfse.ElementAnyNs("NfseCancelamento");

if (nfseCancelamento != null)
{
nota.Situacao = SituacaoNFSeRps.Cancelado;

var confirmacaoCancelamento = nfseCancelamento
.ElementAnyNs("Confirmacao");

if (confirmacaoCancelamento != null)
{
var pedido = confirmacaoCancelamento.ElementAnyNs("Pedido");

if (pedido != null)
{
var codigoCancelamento = pedido
.ElementAnyNs("InfPedidoCancelamento")
.ElementAnyNs("CodigoCancelamento")
.GetValue<string>();

nota.Cancelamento.Pedido.CodigoCancelamento = codigoCancelamento;

nota.Cancelamento.Signature = DFeSignature.Load(pedido.ElementAnyNs("Signature").ToString());
}
}

nota.Cancelamento.DataHora = confirmacaoCancelamento
.ElementAnyNs("DataHora")
.GetValue<DateTime>();
}
}

retornoWebservice.Nota = nota;
Expand Down
1 change: 1 addition & 0 deletions src/OpenAC.Net.NFSe/Providers/ProviderABRASF204.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
// <summary></summary>
// ***********************************************************************

using System;
using System.Xml.Linq;
using OpenAC.Net.Core.Extensions;
using OpenAC.Net.DFe.Core.Serializer;
Expand Down
2 changes: 1 addition & 1 deletion src/OpenAC.Net.NFSe/Providers/ProviderBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -868,7 +868,7 @@ public RetornoSubstituirNFSe SubstituirNFSe(NotaServicoCollection notas, string

// Recebe mensagem de retorno

using (var cliente = GetClient(TipoUrl.CancelarNFSeLote))
using (var cliente = GetClient(TipoUrl.SubstituirNFSe))
{
retornoWebservice.XmlRetorno = cliente.SubstituirNFSe(GerarCabecalho(), retornoWebservice.XmlEnvio);
retornoWebservice.EnvelopeEnvio = cliente.EnvelopeEnvio;
Expand Down
2 changes: 2 additions & 0 deletions src/OpenAC.Net.NFSe/Resources/Municipios.nfse
Original file line number Diff line number Diff line change
Expand Up @@ -10363,6 +10363,7 @@
</Item>
<Item>
<TipoUrl>SubstituirNFSe</TipoUrl>
<Url>https://www.issnetonline.com.br/homologaabrasf/webservicenfse204/nfse.asmx</Url>
</Item>
<Item>
<TipoUrl>Autenticacao</TipoUrl>
Expand Down Expand Up @@ -10405,6 +10406,7 @@
</Item>
<Item>
<TipoUrl>SubstituirNFSe</TipoUrl>
<Url>https://nfse.issnetonline.com.br/abrasf204/ribeiraopreto/nfse.asmx</Url>
</Item>
<Item>
<TipoUrl>Autenticacao</TipoUrl>
Expand Down

0 comments on commit 8893d19

Please sign in to comment.