Skip to content

Commit 8b0c789

Browse files
authored
Merge pull request #313 from marcianobandeira/smarapd
SmarAPD - Diferentes Implementações da Versão 2.04
2 parents f039df0 + c86966f commit 8b0c789

5 files changed

Lines changed: 15715 additions & 46 deletions

File tree

src/OpenAC.Net.NFSe/Commom/ParametrosProvider.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,19 @@ static ParametrosProvider()
5555
VersoesAfetadas = [VersaoNFSe.ve100]
5656
}
5757
]
58+
},
59+
{
60+
NFSeProvider.SmarAPD,
61+
[
62+
new ParametroProvider
63+
{
64+
Nome = "SubVersao",
65+
Descricao = "Indica o tipo de implementação com relação às TAGs do XML do provedor SmarAPD",
66+
Tipo = TipoParametro.Int,
67+
Obrigatoria = false,
68+
VersoesAfetadas = [VersaoNFSe.ve204]
69+
}
70+
]
5871
}
5972
};
6073
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
public enum TipoParametro
44
{
55
Text,
6-
Boolean
6+
Boolean,
7+
Int
78
}

src/OpenAC.Net.NFSe/Providers/SmarAPD/ProviderSmarAPD204.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,25 @@ internal sealed class ProviderSmarAPD204 : ProviderABRASF204
4747
public ProviderSmarAPD204(ConfigNFSe config, OpenMunicipioNFSe municipio) : base(config, municipio)
4848
{
4949
Name = "SmarAPD";
50+
if (this.Municipio.Parametros.TryGetValue(nameof(SubVersao), out string? value))
51+
{
52+
if (int.TryParse(value, out var subversao))
53+
this.SubVersao = subversao;
54+
}
5055
}
5156

5257
#endregion Constructors
5358

59+
#region Properties
60+
61+
/// <summary>
62+
/// Inicializado com 1 para manter o mesmo funcionamento do código anterior
63+
/// Também para ter uma lógica de configuração semelhante ao projeto ACBr
64+
/// </summary>
65+
public int SubVersao { get; } = 1;
66+
67+
#endregion
68+
5469
#region Methods
5570

5671
#region Protected Methods

src/OpenAC.Net.NFSe/Providers/SmarAPD/SmarAPD204ServiceClient.cs

Lines changed: 175 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,17 @@ namespace OpenAC.Net.NFSe.Providers;
4444

4545
internal sealed class SmarAPD204ServiceClient : NFSeSoapServiceClient, IServiceClient
4646
{
47+
#region Fields
48+
49+
private int _subVersao;
50+
51+
#endregion
52+
4753
#region Constructors
4854

4955
public SmarAPD204ServiceClient(ProviderSmarAPD204 provider, TipoUrl tipoUrl, X509Certificate2 certificado) : base(provider, tipoUrl, certificado, SoapVersion.Soap11)
5056
{
57+
this._subVersao = provider.SubVersao;
5158
}
5259

5360
#endregion Constructors
@@ -57,25 +64,60 @@ public SmarAPD204ServiceClient(ProviderSmarAPD204 provider, TipoUrl tipoUrl, X50
5764
public string Enviar(string cabec, string msg)
5865
{
5966
var message = new StringBuilder();
60-
message.Append("<e:recepcionarLoteRps>");
61-
message.Append("<xml>");
62-
message.AppendCData(msg);
63-
message.Append("</xml>");
64-
message.Append("</e:recepcionarLoteRps>");
67+
string tagResponse;
68+
if (this._subVersao == 1)
69+
{
70+
tagResponse = "recepcionarLoteRpsResponse";
71+
message.Append("<nfse:recepcionarLoteRps>");
72+
message.Append("<xml>");
73+
message.AppendCData(msg);
74+
message.Append("</xml>");
75+
message.Append("</nfse:recepcionarLoteRps>");
76+
}
77+
else
78+
{
79+
tagResponse = "RecepcionarLoteRpsResponse";
80+
message.Append("<nfse:RecepcionarLoteRpsRequest>");
81+
message.Append("<nfseCabecMsg>");
82+
message.AppendCData(cabec);
83+
message.Append("</nfseCabecMsg>");
84+
message.Append("<nfseDadosMsg>");
85+
message.AppendCData(msg);
86+
message.Append("</nfseDadosMsg>");
87+
message.Append("</nfse:RecepcionarLoteRpsRequest>");
88+
}
6589

66-
return Execute("http://nfse.abrasf.org.br/RecepcionarLoteRps", message.ToString(), "recepcionarLoteRpsResponse");
90+
return Execute("http://nfse.abrasf.org.br/RecepcionarLoteRps", message.ToString(), tagResponse);
6791
}
6892

6993
public string EnviarSincrono(string cabec, string msg)
7094
{
7195
var message = new StringBuilder();
72-
message.Append("<e:recepcionarLoteRpsSincrono>");
73-
message.Append("<xml>");
74-
message.AppendCData(msg);
75-
message.Append("</xml>");
76-
message.Append("</e:recepcionarLoteRpsSincrono>");
96+
string tagResponse;
97+
if (this._subVersao == 1)
98+
{
99+
tagResponse = "recepcionarLoteRpsSincronoResponse";
100+
message.Append("<nfse:recepcionarLoteRpsSincrono>");
101+
message.Append("<xml>");
102+
message.AppendCData(msg);
103+
message.Append("</xml>");
104+
message.Append("</nfse:recepcionarLoteRpsSincrono>");
105+
}
106+
else
107+
{
108+
tagResponse = "RecepcionarLoteRpsSincronoResponse";
109+
message.Append("<nfse:RecepcionarLoteRpsSincronoRequest>");
110+
message.Append("<nfseCabecMsg>");
111+
message.AppendCData(cabec);
112+
message.Append("</nfseCabecMsg>");
113+
message.Append("<nfseDadosMsg>");
114+
message.AppendCData(msg);
115+
message.Append("</nfseDadosMsg>");
116+
message.Append("</nfse:RecepcionarLoteRpsSincronoRequest>");
117+
}
77118

78-
return Execute("http://nfse.abrasf.org.br/RecepcionarLoteRpsSincrono", message.ToString(), "recepcionarLoteRpsSincronoResponse");
119+
120+
return Execute("http://nfse.abrasf.org.br/RecepcionarLoteRpsSincrono", message.ToString(), tagResponse);
79121
}
80122

81123
public string ConsultarSituacao(string cabec, string msg)
@@ -86,13 +128,30 @@ public string ConsultarSituacao(string cabec, string msg)
86128
public string ConsultarLoteRps(string cabec, string msg)
87129
{
88130
var message = new StringBuilder();
89-
message.Append("<e:consultarLoteRps>");
90-
message.Append("<xml>");
91-
message.AppendCData(msg);
92-
message.Append("</xml>");
93-
message.Append("</e:consultarLoteRps>");
131+
string tagResponse;
132+
if (this._subVersao == 1)
133+
{
134+
tagResponse = "consultarLoteRpsResponse";
135+
message.Append("<nfse:consultarLoteRps>");
136+
message.Append("<xml>");
137+
message.AppendCData(msg);
138+
message.Append("</xml>");
139+
message.Append("</nfse:consultarLoteRps>");
140+
}
141+
else
142+
{
143+
tagResponse = "ConsultarLoteRpsResponse";
144+
message.Append("<nfse:ConsultarLoteRpsRequest>");
145+
message.Append("<nfseCabecMsg>");
146+
message.AppendCData(cabec);
147+
message.Append("</nfseCabecMsg>");
148+
message.Append("<nfseDadosMsg>");
149+
message.AppendCData(msg);
150+
message.Append("</nfseDadosMsg>");
151+
message.Append("</nfse:ConsultarLoteRpsRequest>");
152+
}
94153

95-
return Execute("http://nfse.abrasf.org.br/ConsultarLoteRps", message.ToString(), "consultarLoteRpsResponse");
154+
return Execute("http://nfse.abrasf.org.br/ConsultarLoteRps", message.ToString(), tagResponse);
96155
}
97156

98157
public string ConsultarSequencialRps(string cabec, string msg)
@@ -103,37 +162,88 @@ public string ConsultarSequencialRps(string cabec, string msg)
103162
public string ConsultarNFSeRps(string cabec, string msg)
104163
{
105164
var message = new StringBuilder();
106-
message.Append("<e:consultarNfsePorRps>");
107-
message.Append("<xml>");
108-
message.AppendCData(msg);
109-
message.Append("</xml>");
110-
message.Append("</e:consultarNfsePorRps>");
165+
string tagResponse;
166+
if (this._subVersao == 1)
167+
{
168+
tagResponse = "consultarNfsePorRpsResponse";
169+
message.Append("<nfse:consultarNfsePorRps>");
170+
message.Append("<xml>");
171+
message.AppendCData(msg);
172+
message.Append("</xml>");
173+
message.Append("</nfse:consultarNfsePorRps>");
174+
}
175+
else
176+
{
177+
tagResponse = "ConsultarNfsePorRpsResponse";
178+
message.Append("<nfse:ConsultarNfsePorRpsRequest>");
179+
message.Append("<nfseCabecMsg>");
180+
message.AppendCData(cabec);
181+
message.Append("</nfseCabecMsg>");
182+
message.Append("<nfseDadosMsg>");
183+
message.AppendCData(msg);
184+
message.Append("</nfseDadosMsg>");
185+
message.Append("</nfse:ConsultarNfsePorRpsRequest>");
186+
}
111187

112-
return Execute("http://nfse.abrasf.org.br/ConsultarNfsePorRps", message.ToString(), "consultarNfsePorRpsResponse");
188+
return Execute("http://nfse.abrasf.org.br/ConsultarNfsePorRps", message.ToString(), tagResponse);
113189
}
114190

115191
public string ConsultarNFSe(string cabec, string msg)
116192
{
117193
var message = new StringBuilder();
118-
message.Append("<e:consultarNfseServicoPrestado>");
119-
message.Append("<xml>");
120-
message.AppendCData(msg);
121-
message.Append("</xml>");
122-
message.Append("</e:consultarNfseServicoPrestado>");
194+
string tagResponse;
195+
if (this._subVersao == 1)
196+
{
197+
tagResponse = "consultarNfsePorRpsResponse";
198+
message.Append("<nfse:consultarNfseServicoPrestado>");
199+
message.Append("<xml>");
200+
message.AppendCData(msg);
201+
message.Append("</xml>");
202+
message.Append("</nfse:consultarNfseServicoPrestado>");
203+
}
204+
else
205+
{
206+
tagResponse = "ConsultarNfsePorRpsResponse";
207+
message.Append("<nfse:ConsultarNfseServicoPrestadoRequest>");
208+
message.Append("<nfseCabecMsg>");
209+
message.AppendCData(cabec);
210+
message.Append("</nfseCabecMsg>");
211+
message.Append("<nfseDadosMsg>");
212+
message.AppendCData(msg);
213+
message.Append("</nfseDadosMsg>");
214+
message.Append("</nfse:ConsultarNfseServicoPrestadoRequest>");
215+
}
123216

124-
return Execute("http://nfse.abrasf.org.br/ConsultarNfseServicoPrestado", message.ToString(), "consultarNfseServicoPrestadoResponse");
217+
return Execute("http://nfse.abrasf.org.br/ConsultarNfseServicoPrestado", message.ToString(), tagResponse);
125218
}
126219

127220
public string CancelarNFSe(string cabec, string msg)
128221
{
129222
var message = new StringBuilder();
130-
message.Append("<e:cancelarNfse>");
131-
message.Append("<xml>");
132-
message.AppendCData(msg);
133-
message.Append("</xml>");
134-
message.Append("</e:cancelarNfse>");
223+
string tagResponse;
224+
if (this._subVersao == 1)
225+
{
226+
tagResponse = "cancelarNfseResponse";
227+
message.Append("<nfse:cancelarNfse>");
228+
message.Append("<xml>");
229+
message.AppendCData(msg);
230+
message.Append("</xml>");
231+
message.Append("</nfse:cancelarNfse>");
232+
}
233+
else
234+
{
235+
tagResponse = "CancelarNfseResponse";
236+
message.Append("<nfse:CancelarNfseRequest>");
237+
message.Append("<nfseCabecMsg>");
238+
message.AppendCData(cabec);
239+
message.Append("</nfseCabecMsg>");
240+
message.Append("<nfseDadosMsg>");
241+
message.AppendCData(msg);
242+
message.Append("</nfseDadosMsg>");
243+
message.Append("</nfse:CancelarNfseRequest>");
244+
}
135245

136-
return Execute("http://nfse.abrasf.org.br/CancelarNfse", message.ToString(), "cancelarNfseResponse");
246+
return Execute("http://nfse.abrasf.org.br/CancelarNfse", message.ToString(), tagResponse);
137247
}
138248

139249
public string CancelarNFSeLote(string cabec, string msg)
@@ -144,18 +254,35 @@ public string CancelarNFSeLote(string cabec, string msg)
144254
public string SubstituirNFSe(string cabec, string msg)
145255
{
146256
var message = new StringBuilder();
147-
message.Append("<e:substituirNfse>");
148-
message.Append("<xml>");
149-
message.AppendCData(msg);
150-
message.Append("</xml>");
151-
message.Append("</e:substituirNfse>");
257+
string tagResponse;
258+
if (this._subVersao == 1)
259+
{
260+
tagResponse = "substituirNfseResponse";
261+
message.Append("<nfse:substituirNfse>");
262+
message.Append("<xml>");
263+
message.AppendCData(msg);
264+
message.Append("</xml>");
265+
message.Append("</nfse:substituirNfse>");
266+
}
267+
else
268+
{
269+
tagResponse = "SubstituirNfseResponse";
270+
message.Append("<nfse:SubstituirNfseRequest>");
271+
message.Append("<nfseCabecMsg>");
272+
message.AppendCData(cabec);
273+
message.Append("</nfseCabecMsg>");
274+
message.Append("<nfseDadosMsg>");
275+
message.AppendCData(msg);
276+
message.Append("</nfseDadosMsg>");
277+
message.Append("</nfse:SubstituirNfseRequest>");
278+
}
152279

153-
return Execute("http://nfse.abrasf.org.br/SubstituirNfse", message.ToString(), "substituirNfseResponse");
280+
return Execute("http://nfse.abrasf.org.br/SubstituirNfse", message.ToString(), tagResponse);
154281
}
155282

156283
private string Execute(string soapAction, string message, string responseTag)
157284
{
158-
return Execute(soapAction, message, "", [responseTag], ["xmlns:e=\"http://nfse.abrasf.org.br\""]);
285+
return Execute(soapAction, message, "", [responseTag], ["xmlns:nfse=\"http://nfse.abrasf.org.br\""]);
159286
}
160287

161288
protected override bool ValidarCertificadoServidor()
@@ -172,7 +299,11 @@ protected override string TratarRetorno(XElement xmlDocument, string[] responseT
172299
throw new OpenDFeCommunicationException(exMessage);
173300
}
174301

175-
return xmlDocument.ElementAnyNs(responseTag[0]).ElementAnyNs("return").Value;
302+
if (this._subVersao == 1)
303+
return xmlDocument.ElementAnyNs(responseTag[0]).ElementAnyNs("return").Value;
304+
else
305+
306+
return xmlDocument.ElementAnyNs(responseTag[0]).ElementAnyNs("outputXML").Value;
176307
}
177308

178309
#endregion Methods

src/OpenAC.Net.NFSe/Resources/Municipios.nfse

Lines changed: 15510 additions & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)