Skip to content

Commit 208f7cb

Browse files
authored
Merge pull request #352 from wsskakoal/nfse-porto-velho
Reimplementação Nfse em PortoVelho RO
2 parents 2850d71 + 5b7cd56 commit 208f7cb

5 files changed

Lines changed: 2205 additions & 270 deletions

File tree

src/OpenAC.Net.NFSe/Commom/Types/NFSeProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public enum NFSeProvider : sbyte
143143
/// Provedor IISPortoVelho.
144144
/// </summary>
145145
[Description("Porto Velho")]
146-
IISPortoVelho = 32,
146+
ISSPortoVelho = 32,
147147

148148
/// <summary>
149149
/// Provedor IPM.

src/OpenAC.Net.NFSe/Providers/ISSPortoVelho/ISSPortoVelhoServiceClient.cs

Lines changed: 93 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -30,159 +30,167 @@
3030
// ***********************************************************************
3131

3232
using System;
33+
using System.Security.Cryptography.X509Certificates;
3334
using System.Text;
3435
using System.Xml.Linq;
3536
using OpenAC.Net.Core.Extensions;
3637
using OpenAC.Net.DFe.Core;
37-
using OpenAC.Net.NFSe.Commom;
3838
using OpenAC.Net.NFSe.Commom.Client;
3939
using OpenAC.Net.NFSe.Commom.Interface;
4040
using OpenAC.Net.NFSe.Commom.Types;
41+
using System.Linq;
4142

4243
namespace OpenAC.Net.NFSe.Providers;
4344

4445
internal sealed class ISSPortoVelhoServiceClient : NFSeSoapServiceClient, IServiceClient
4546
{
4647
#region Constructors
4748

48-
public ISSPortoVelhoServiceClient(ProviderISSPortoVelho provider, TipoUrl tipoUrl) : base(provider, tipoUrl,
49-
SoapVersion.Soap11)
49+
public ISSPortoVelhoServiceClient(ProviderISSPortoVelho provider, TipoUrl tipoUrl, X509Certificate2 certificado) : base(provider, tipoUrl, certificado, SoapVersion.Soap11)
5050
{
5151
}
5252

5353
#endregion Constructors
5454

5555
#region Methods
5656

57-
public string CancelarNFSe(string cabec, string msg)
57+
public string Enviar(string cabec, string msg)
5858
{
5959
var message = new StringBuilder();
60-
message.Append("<nfse:CancelarNfseRequest>");
61-
message.Append("<nfseCabecMsg>");
62-
message.AppendCData(cabec);
63-
message.Append("</nfseCabecMsg>");
64-
message.Append("<nfseDadosMsg>");
65-
message.AppendCData(msg);
66-
message.Append("</nfseDadosMsg>");
67-
message.Append("</nfse:CancelarNfseRequest>");
68-
return Execute("CancelarNfseEnvio", message.ToString(), "CancelarNfseResponse");
60+
61+
message.Append("<nfse:GerarNfse xmlns:nfse=\"http://nfse.abrasf.org.br\">");
62+
message.Append("<nfse:GerarNfseRequest>");
63+
64+
message.Append("<nfseCabecMsg><![CDATA[");
65+
message.Append(cabec);
66+
message.Append("]]></nfseCabecMsg>");
67+
68+
message.Append("<nfseDadosMsg><![CDATA[");
69+
message.Append(msg);
70+
message.Append("]]></nfseDadosMsg>");
71+
72+
message.Append("</nfse:GerarNfseRequest>");
73+
message.Append("</nfse:GerarNfse>");
74+
75+
return Execute("GerarNfse", new[] { "GerarNfseResponse", "outputXML" }, message.ToString());
6976
}
7077

71-
public string CancelarNFSeLote(string cabec, string msg)
78+
public string EnviarSincrono(string cabec, string msg)
79+
{
80+
throw new NotImplementedException();
81+
}
82+
83+
public string ConsultarSituacao(string cabec, string msg)
7284
{
7385
throw new NotImplementedException();
7486
}
7587

7688
public string ConsultarLoteRps(string cabec, string msg)
7789
{
7890
var message = new StringBuilder();
91+
92+
message.Append("<nfse:ConsultarLoteRps xmlns:nfse=\"http://nfse.abrasf.org.br\">");
7993
message.Append("<nfse:ConsultarLoteRpsRequest>");
80-
message.Append("<nfseCabecMsg>");
81-
message.AppendCData(cabec);
82-
message.Append("</nfseCabecMsg>");
83-
message.Append("<nfseDadosMsg>");
84-
message.AppendCData(msg);
85-
message.Append("</nfseDadosMsg>");
94+
95+
message.Append("<nfseCabecMsg><![CDATA[");
96+
message.Append(cabec);
97+
message.Append("]]></nfseCabecMsg>");
98+
99+
message.Append("<nfseDadosMsg><![CDATA[");
100+
message.Append(msg);
101+
message.Append("]]></nfseDadosMsg>");
102+
86103
message.Append("</nfse:ConsultarLoteRpsRequest>");
87-
return Execute("ConsultarLoteRpsEnvio", message.ToString(), "ConsultarLoteRpsResponse");
104+
message.Append("</nfse:ConsultarLoteRps>");
105+
106+
return Execute("ConsultarLoteRps", new[] { "ConsultarLoteRpsResponse", "outputXML" }, message.ToString());
88107
}
89108

90-
public string ConsultarNFSe(string cabec, string msg)
109+
public string ConsultarSequencialRps(string cabec, string msg)
91110
{
92-
var message = new StringBuilder();
93-
message.Append("<nfse:ConsultarNfseServicoPrestadoRequest>");
94-
message.Append("<nfseCabecMsg>");
95-
message.AppendCData(cabec);
96-
message.Append("</nfseCabecMsg>");
97-
message.Append("<nfseDadosMsg>");
98-
message.AppendCData(msg);
99-
message.Append("</nfseDadosMsg>");
100-
message.Append("</nfse:ConsultarNfseServicoPrestadoRequest>");
101-
return Execute("ConsultarNfseServicoPrestadoEnvio", message.ToString(), "ConsultarNfseServicoPrestadoResponse");
111+
throw new NotImplementedException();
102112
}
103113

104114
public string ConsultarNFSeRps(string cabec, string msg)
105115
{
106116
var message = new StringBuilder();
117+
118+
message.Append("<nfse:ConsultarNfsePorRps xmlns:nfse=\"http://nfse.abrasf.org.br\">");
107119
message.Append("<nfse:ConsultarNfsePorRpsRequest>");
108-
message.Append("<nfseCabecMsg>");
109-
message.AppendCData(cabec);
110-
message.Append("</nfseCabecMsg>");
111-
message.Append("<nfseDadosMsg>");
112-
message.AppendCData(msg);
113-
message.Append("</nfseDadosMsg>");
120+
121+
message.Append("<nfseCabecMsg><![CDATA[");
122+
message.Append(cabec);
123+
message.Append("]]></nfseCabecMsg>");
124+
125+
message.Append("<nfseDadosMsg><![CDATA[");
126+
message.Append(msg);
127+
message.Append("]]></nfseDadosMsg>");
128+
114129
message.Append("</nfse:ConsultarNfsePorRpsRequest>");
115-
return Execute("ConsultarNfseRpsEnvio", message.ToString(), "ConsultarNfsePorRpsResponse");
116-
}
130+
message.Append("</nfse:ConsultarNfsePorRps>");
117131

118-
public string ConsultarSequencialRps(string cabec, string msg)
119-
{
120-
throw new NotImplementedException();
132+
return Execute("ConsultarNfsePorRps", new[] { "ConsultarNfsePorRpsResponse", "outputXML" }, message.ToString());
121133
}
122134

123-
public string ConsultarSituacao(string cabec, string msg)
135+
public string ConsultarNFSe(string cabec, string msg)
124136
{
125137
throw new NotImplementedException();
126138
}
127139

128-
public string Enviar(string cabec, string msg)
140+
public string CancelarNFSe(string cabec, string msg)
129141
{
130142
var message = new StringBuilder();
131-
message.Append("<nfse:RecepcionarLoteRpsRequest>");
132-
message.Append("<nfseCabecMsg>");
133-
message.AppendCData(cabec);
134-
message.Append("</nfseCabecMsg>");
135-
message.Append("<nfseDadosMsg>");
136-
message.AppendCData(msg);
137-
message.Append("</nfseDadosMsg>");
138-
message.Append("</nfse:RecepcionarLoteRpsRequest>");
139-
return Execute("EnviarLoteRpsEnvio", message.ToString(), "RecepcionarLoteRpsResponse");
143+
144+
message.Append("<nfse:CancelarNfse xmlns:nfse=\"http://nfse.abrasf.org.br\">");
145+
message.Append("<nfse:CancelarNfseRequest>");
146+
147+
message.Append("<nfseCabecMsg><![CDATA[");
148+
message.Append(cabec);
149+
message.Append("]]></nfseCabecMsg>");
150+
151+
message.Append("<nfseDadosMsg><![CDATA[");
152+
message.Append(msg);
153+
message.Append("]]></nfseDadosMsg>");
154+
155+
message.Append("</nfse:CancelarNfseRequest>");
156+
message.Append("</nfse:CancelarNfse>");
157+
158+
return Execute("CancelarNfse", new[] { "CancelarNfseResponse", "outputXML" },message.ToString());
140159
}
141160

142-
public string EnviarSincrono(string cabec, string msg)
161+
public string CancelarNFSeLote(string cabec, string msg)
143162
{
144-
var message = new StringBuilder();
145-
message.Append("<nfse:RecepcionarLoteRpsSincronoRequest>");
146-
message.Append("<nfseCabecMsg>");
147-
message.AppendCData(cabec);
148-
message.Append("</nfseCabecMsg>");
149-
message.Append("<nfseDadosMsg>");
150-
message.AppendCData(msg);
151-
message.Append("</nfseDadosMsg>");
152-
message.Append("</nfse:RecepcionarLoteRpsSincronoRequest>");
153-
return Execute("EnviarLoteRpsSincronoEnvio", message.ToString(), "RecepcionarLoteRpsSincronoResponse");
163+
throw new NotImplementedException();
154164
}
155165

156166
public string SubstituirNFSe(string cabec, string msg)
157167
{
158-
var message = new StringBuilder();
159-
message.Append("<nfse:SubstituirNfseRequest>");
160-
message.Append("<nfseCabecMsg>");
161-
message.AppendCData(cabec);
162-
message.Append("</nfseCabecMsg>");
163-
message.Append("<nfseDadosMsg>");
164-
message.AppendCData(msg);
165-
message.Append("</nfseDadosMsg>");
166-
message.Append("</nfse:SubstituirNfseRequest>");
167-
return Execute("SubstituirNfseEnvio", message.ToString(), "SubstituirNfseResponse");
168+
throw new NotImplementedException();
169+
}
170+
171+
private string Execute(string soapAction, string[] responseTag, string message)
172+
{
173+
return Execute(soapAction, message, "", responseTag, ["xmlns:ws=\"http://nfse.abrasf.org.br\""]);
168174
}
169175

170176
protected override string TratarRetorno(XElement xmlDocument, string[] responseTag)
171177
{
172-
var element = xmlDocument.ElementAnyNs("Fault");
173-
if (element != null)
178+
var fault = xmlDocument.ElementAnyNs("Fault");
179+
if (fault != null)
174180
{
175-
var exMessage =
176-
$"{element.ElementAnyNs("faultcode").GetValue<string>()} - {element.ElementAnyNs("faultstring").GetValue<string>()}";
177-
throw new OpenDFeCommunicationException(exMessage);
181+
var code = fault.ElementAnyNs("faultcode")?.Value;
182+
var message = fault.ElementAnyNs("faultstring")?.Value;
183+
throw new OpenDFeCommunicationException($"{code} - {message}");
178184
}
179185

180-
return xmlDocument.ElementAnyNs(responseTag[0]).ElementAnyNs("outputXML").Value;
181-
}
186+
var outputXml = xmlDocument
187+
.Descendants()
188+
.FirstOrDefault(x => x.Name.LocalName == "outputXML");
182189

183-
private string Execute(string soapAction, string message, string responseTag)
184-
{
185-
return Execute(soapAction, message, "", [responseTag], ["xmlns:nfse=\"http://nfse.abrasf.org.br\""]);
190+
if (outputXml == null)
191+
throw new OpenDFeCommunicationException("Retorno da NFSe não contém a tag <outputXML>.");
192+
193+
return outputXml.Value;
186194
}
187195

188196
#endregion Methods

0 commit comments

Comments
 (0)