diff --git a/src/OpenAC.Net.NFSe/Providers/IPM/ProviderIPM.cs b/src/OpenAC.Net.NFSe/Providers/IPM/ProviderIPM.cs index 9e135e65..589c51bd 100644 --- a/src/OpenAC.Net.NFSe/Providers/IPM/ProviderIPM.cs +++ b/src/OpenAC.Net.NFSe/Providers/IPM/ProviderIPM.cs @@ -62,8 +62,19 @@ protected override IServiceClient GetClient(TipoUrl tipo) return new IPMServiceClient(this, tipo); } - private string GetTipoTomadorIPM(int tipoTomador) + private string GetTipoTomadorIPM(int tipoTomador, string cpfCnpj) { + if (tipoTomador == 0) + { + if (string.IsNullOrEmpty(cpfCnpj)) + return "F"; + + if (cpfCnpj.Length == 14) + { + return "J"; + } + return "F"; + } if (tipoTomador == TipoTomador.Sigiss.PessoaFisica) { //F para Pessoa Física @@ -109,7 +120,7 @@ public override string WriteXmlRps(NotaServico nota, bool identado = true, bool //TOMADOR var tomadorTag = new XElement("tomador"); - tomadorTag.AddChild(AdicionarTag(TipoCampo.Str, "", "tipo", 1, 14, Ocorrencia.Obrigatoria, GetTipoTomadorIPM(nota.Tomador.Tipo))); + tomadorTag.AddChild(AdicionarTag(TipoCampo.Str, "", "tipo", 1, 14, Ocorrencia.Obrigatoria, GetTipoTomadorIPM(nota.Tomador.Tipo, nota.Tomador.CpfCnpj.OnlyNumbers()))); tomadorTag.AddChild(AdicionarTag(TipoCampo.Str, "", "cpfcnpj", 1, 14, Ocorrencia.Obrigatoria, nota.Tomador.CpfCnpj.OnlyNumbers())); tomadorTag.AddChild(AdicionarTag(TipoCampo.Str, "", "ie", 1, 20, Ocorrencia.Obrigatoria, nota.Tomador.InscricaoEstadual.OnlyNumbers())); tomadorTag.AddChild(AdicionarTag(TipoCampo.Str, "", "nome_razao_social", 1, 115, Ocorrencia.Obrigatoria, nota.Tomador.RazaoSocial)); @@ -120,7 +131,7 @@ public override string WriteXmlRps(NotaServico nota, bool identado = true, bool tomadorTag.AddChild(AdicionarTag(TipoCampo.Str, "", "complemento", 1, 120, Ocorrencia.Obrigatoria, nota.Tomador.Endereco.Complemento)); tomadorTag.AddChild(AdicionarTag(TipoCampo.Str, "", "ponto_referencia", 1, 120, Ocorrencia.Obrigatoria, "")); tomadorTag.AddChild(AdicionarTag(TipoCampo.Str, "", "bairro", 1, 120, Ocorrencia.Obrigatoria, nota.Tomador.Endereco.Bairro)); - tomadorTag.AddChild(AdicionarTag(TipoCampo.Str, "", "cidade", 1, 120, Ocorrencia.Obrigatoria, nota.Tomador.Endereco.Municipio)); + tomadorTag.AddChild(AdicionarTag(TipoCampo.Str, "", "cidade", 1, 120, Ocorrencia.Obrigatoria, nota.Tomador.Endereco.CodigoMunicipio)); tomadorTag.AddChild(AdicionarTag(TipoCampo.Str, "", "cep", 1, 120, Ocorrencia.Obrigatoria, nota.Tomador.Endereco.Cep)); tomadorTag.AddChild(AdicionarTag(TipoCampo.Str, "", "ddd_fone_comercial", 1, 120, Ocorrencia.Obrigatoria, nota.Tomador.DadosContato.DDD)); tomadorTag.AddChild(AdicionarTag(TipoCampo.Str, "", "fone_comercial", 1, 120, Ocorrencia.Obrigatoria, nota.Tomador.DadosContato.Telefone)); @@ -167,16 +178,22 @@ protected override void PrepararEnviarSincrono(RetornoEnviar retornoWebservice, retornoWebservice.XmlEnvio = xmlRps; } - protected override void PrepararConsultarNFSeRps(RetornoConsultarNFSeRps retornoWebservice, NotaServicoCollection notas) + protected override void PrepararConsultarLoteRps(RetornoConsultarLoteRps retornoWebservice) { var message = new StringBuilder(); - message.Append(""); - message.Append($"{retornoWebservice.NumeroRps}"); - message.Append($"{retornoWebservice.Serie}"); - message.Append(""); + message.Append(""); + message.Append(""); + message.Append($"{retornoWebservice.Protocolo}"); + message.Append(""); + message.Append(""); retornoWebservice.XmlEnvio = message.ToString(); } + protected override void PrepararConsultarNFSeRps(RetornoConsultarNFSeRps retornoWebservice, NotaServicoCollection notas) + { + throw new NotImplementedException(); + } + protected override void PrepararCancelarNFSe(RetornoCancelar retornoWebservice) { var message = new StringBuilder(); @@ -195,33 +212,37 @@ protected override bool PrecisaValidarSchema(TipoUrl tipo) protected override void TratarRetornoEnviarSincrono(RetornoEnviar retornoWebservice, NotaServicoCollection notas) { - var xmlRet = XDocument.Parse(retornoWebservice.XmlRetorno); - - retornoWebservice.Data = xmlRet.Root?.ElementAnyNs("data_emissao")?.GetValue(new CultureInfo("pt-BR")) ?? DateTime.MinValue; - retornoWebservice.Protocolo = xmlRet.Root?.ElementAnyNs("codigo")?.GetValue() ?? string.Empty; - retornoWebservice.Sucesso = !retornoWebservice.Protocolo.IsEmpty(); - - if (!retornoWebservice.Sucesso) return; - - var numeroNFSe = xmlRet.Root.ElementAnyNs("numero_nf")?.GetValue() ?? string.Empty; - var chaveNFSe = xmlRet.Root.ElementAnyNs("codigo")?.GetValue() ?? string.Empty; - var dataNFSe = xmlRet.Root.ElementAnyNs("data_emissao")?.GetValue(new CultureInfo("pt-BR")) ?? DateTime.Now; - var numeroRps = xmlRet.Root.ElementAnyNs("rps")?.GetValue() ?? string.Empty; - - GravarNFSeEmDisco(xmlRet.AsString(true), $"NFSe-{numeroNFSe}-{chaveNFSe}-.xml", dataNFSe); - - var nota = notas.FirstOrDefault(x => x.IdentificacaoRps.Numero == numeroRps); - if (nota == null) + try { - notas.Load(retornoWebservice.XmlRetorno); - } - else - { - nota.IdentificacaoNFSe.DataEmissao = dataNFSe; - nota.IdentificacaoNFSe.Numero = numeroNFSe; - nota.IdentificacaoNFSe.Chave = chaveNFSe; - nota.XmlOriginal = retornoWebservice.XmlRetorno; + var xmlRet = XDocument.Parse(retornoWebservice.XmlRetorno); + + retornoWebservice.Data = xmlRet.Root?.ElementAnyNs("data_emissao")?.GetValue(new CultureInfo("pt-BR")) ?? DateTime.MinValue; + retornoWebservice.Protocolo = xmlRet.Root?.ElementAnyNs("codigo")?.GetValue() ?? string.Empty; + retornoWebservice.Sucesso = !retornoWebservice.Protocolo.IsEmpty(); + + if (!retornoWebservice.Sucesso) return; + + var numeroNFSe = xmlRet.Root.ElementAnyNs("numero_nf")?.GetValue() ?? string.Empty; + var chaveNFSe = xmlRet.Root.ElementAnyNs("codigo")?.GetValue() ?? string.Empty; + var dataNFSe = xmlRet.Root.ElementAnyNs("data_emissao")?.GetValue(new CultureInfo("pt-BR")) ?? DateTime.Now; + var numeroRps = xmlRet.Root.ElementAnyNs("rps")?.GetValue() ?? string.Empty; + + GravarNFSeEmDisco(xmlRet.AsString(true), $"NFSe-{numeroNFSe}-{chaveNFSe}-.xml", dataNFSe); + + var nota = notas.FirstOrDefault(x => x.IdentificacaoRps.Numero == numeroRps); + if (nota == null) + { + notas.Load(retornoWebservice.XmlRetorno); + } + else + { + nota.IdentificacaoNFSe.DataEmissao = dataNFSe; + nota.IdentificacaoNFSe.Numero = numeroNFSe; + nota.IdentificacaoNFSe.Chave = chaveNFSe; + nota.XmlOriginal = retornoWebservice.XmlRetorno; + } } + catch { } } protected override void TratarRetornoConsultarNFSeRps(RetornoConsultarNFSeRps retornoWebservice, NotaServicoCollection notas) @@ -354,120 +375,53 @@ protected override void AssinarEnviarSincrono(RetornoEnviar retornoWebservice) #region Não implementados - public override string WriteXmlNFSe(NotaServico nota, bool identado = true, bool showDeclaration = true) - { - throw new NotImplementedException(); - } + public override string WriteXmlNFSe(NotaServico nota, bool identado = true, bool showDeclaration = true) => throw new NotImplementedException(); - protected override void PrepararEnviar(RetornoEnviar retornoWebservice, NotaServicoCollection notas) - { - throw new NotImplementedException(); - } + protected override void PrepararEnviar(RetornoEnviar retornoWebservice, NotaServicoCollection notas) => throw new NotImplementedException(); - protected override void PrepararConsultarSituacao(RetornoConsultarSituacao retornoWebservice) - { - throw new NotImplementedException(); - } + protected override void PrepararConsultarSituacao(RetornoConsultarSituacao retornoWebservice) => throw new NotImplementedException(); - protected override void PrepararConsultarLoteRps(RetornoConsultarLoteRps retornoWebservice) - { - throw new NotImplementedException(); - } + protected override void PrepararConsultarSequencialRps(RetornoConsultarSequencialRps retornoWebservice) => throw new NotImplementedException(); - protected override void PrepararConsultarSequencialRps(RetornoConsultarSequencialRps retornoWebservice) - { - throw new NotImplementedException(); - } + protected override void PrepararConsultarNFSe(RetornoConsultarNFSe retornoWebservice) => throw new NotImplementedException(); - protected override void PrepararConsultarNFSe(RetornoConsultarNFSe retornoWebservice) - { - throw new NotImplementedException(); - } + protected override void PrepararCancelarNFSeLote(RetornoCancelarNFSeLote retornoWebservice, NotaServicoCollection notas) => throw new NotImplementedException(); - protected override void PrepararCancelarNFSeLote(RetornoCancelarNFSeLote retornoWebservice, NotaServicoCollection notas) - { - throw new NotImplementedException(); - } + protected override void PrepararSubstituirNFSe(RetornoSubstituirNFSe retornoWebservice, NotaServicoCollection notas) => throw new NotImplementedException(); - protected override void PrepararSubstituirNFSe(RetornoSubstituirNFSe retornoWebservice, NotaServicoCollection notas) - { - throw new NotImplementedException(); - } + protected override void AssinarEnviar(RetornoEnviar retornoWebservice) => throw new NotImplementedException(); - protected override void AssinarEnviar(RetornoEnviar retornoWebservice) - { - throw new NotImplementedException(); - } - - protected override void AssinarConsultarSituacao(RetornoConsultarSituacao retornoWebservice) - { - throw new NotImplementedException(); - } + protected override void AssinarConsultarSituacao(RetornoConsultarSituacao retornoWebservice) => throw new NotImplementedException(); protected override void AssinarConsultarLoteRps(RetornoConsultarLoteRps retornoWebservice) { - throw new NotImplementedException(); + //NAO PRECISA ASSINAR A CONSULTA + return; } - protected override void AssinarConsultarSequencialRps(RetornoConsultarSequencialRps retornoWebservice) - { - throw new NotImplementedException(); - } + protected override void AssinarConsultarSequencialRps(RetornoConsultarSequencialRps retornoWebservice) => throw new NotImplementedException(); - protected override void AssinarConsultarNFSe(RetornoConsultarNFSe retornoWebservice) - { - throw new NotImplementedException(); - } + protected override void AssinarConsultarNFSe(RetornoConsultarNFSe retornoWebservice) => throw new NotImplementedException(); - protected override void AssinarCancelarNFSeLote(RetornoCancelarNFSeLote retornoWebservice) - { - throw new NotImplementedException(); - } + protected override void AssinarCancelarNFSeLote(RetornoCancelarNFSeLote retornoWebservice) => throw new NotImplementedException(); - protected override void AssinarSubstituirNFSe(RetornoSubstituirNFSe retornoWebservice) - { - throw new NotImplementedException(); - } + protected override void AssinarSubstituirNFSe(RetornoSubstituirNFSe retornoWebservice) => throw new NotImplementedException(); - protected override void TratarRetornoEnviar(RetornoEnviar retornoWebservice, NotaServicoCollection notas) - { - throw new NotImplementedException(); - } + protected override void TratarRetornoEnviar(RetornoEnviar retornoWebservice, NotaServicoCollection notas) => throw new NotImplementedException(); - protected override void TratarRetornoConsultarSituacao(RetornoConsultarSituacao retornoWebservice) - { - throw new NotImplementedException(); - } + protected override void TratarRetornoConsultarSituacao(RetornoConsultarSituacao retornoWebservice) => throw new NotImplementedException(); - protected override void TratarRetornoConsultarLoteRps(RetornoConsultarLoteRps retornoWebservice, NotaServicoCollection notas) - { - throw new NotImplementedException(); - } + protected override void TratarRetornoConsultarLoteRps(RetornoConsultarLoteRps retornoWebservice, NotaServicoCollection notas) => throw new NotImplementedException(); - protected override void TratarRetornoConsultarSequencialRps(RetornoConsultarSequencialRps retornoWebservice) - { - throw new NotImplementedException(); - } + protected override void TratarRetornoConsultarSequencialRps(RetornoConsultarSequencialRps retornoWebservice) => throw new NotImplementedException(); - protected override void TratarRetornoConsultarNFSe(RetornoConsultarNFSe retornoWebservice, NotaServicoCollection notas) - { - throw new NotImplementedException(); - } + protected override void TratarRetornoConsultarNFSe(RetornoConsultarNFSe retornoWebservice, NotaServicoCollection notas) => throw new NotImplementedException(); - protected override void TratarRetornoCancelarNFSeLote(RetornoCancelarNFSeLote retornoWebservice, NotaServicoCollection notas) - { - throw new NotImplementedException(); - } + protected override void TratarRetornoCancelarNFSeLote(RetornoCancelarNFSeLote retornoWebservice, NotaServicoCollection notas) => throw new NotImplementedException(); - protected override void TratarRetornoSubstituirNFSe(RetornoSubstituirNFSe retornoWebservice, NotaServicoCollection notas) - { - throw new NotImplementedException(); - } + protected override void TratarRetornoSubstituirNFSe(RetornoSubstituirNFSe retornoWebservice, NotaServicoCollection notas) => throw new NotImplementedException(); - protected override string GetSchema(TipoUrl tipo) - { - throw new NotImplementedException(); - } + protected override string GetSchema(TipoUrl tipo) => throw new NotImplementedException(); #endregion Não implementados }