public override RetornoWebservice ConsultaNFSe(DateTime?inicio, DateTime?fim, string numeroNfse, int pagina, string cnpjTomador,
                                                       string imTomador, string nomeInter, string cnpjInter, string imInter, string serie, NotaFiscalCollection notas)
        {
            var retornoWebservice = new RetornoWebservice();

            var loteBuilder = new StringBuilder();

            loteBuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            loteBuilder.Append("<WS_ConsultaNfse.Execute xmlns:fiss=\"FISS-LEX\">");
            loteBuilder.Append("<fiss:Consultarnfseenvio>");
            loteBuilder.Append("<Prestador>");
            loteBuilder.Append($"<Cnpj>{Configuracoes.PrestadorPadrao.CpfCnpj.ZeroFill(14)}</Cnpj>");
            loteBuilder.Append($"<InscricaoMunicipal>{Configuracoes.PrestadorPadrao.InscricaoMunicipal}</InscricaoMunicipal>");
            loteBuilder.Append("</Prestador>");

            if (!numeroNfse.IsEmpty())
            {
                loteBuilder.Append($"<NumeroNfse>{numeroNfse}</NumeroNfse>");
            }

            if (inicio.HasValue && fim.HasValue)
            {
                loteBuilder.Append("<PeriodoEmissao>");
                loteBuilder.Append($"<DataInicial>{inicio:yyyy-MM-dd}</DataInicial>");
                loteBuilder.Append($"<DataFinal>{fim:yyyy-MM-dd}</DataFinal>");
                loteBuilder.Append("</PeriodoEmissao>");
            }

            if (!cnpjTomador.IsEmpty() || !imTomador.IsEmpty())
            {
                loteBuilder.Append("<Tomador>");
                loteBuilder.Append("<CpfCnpj>");
                loteBuilder.Append(cnpjTomador.IsCNPJ()
                    ? $"<Cnpj>{cnpjTomador.ZeroFill(14)}</Cnpj>"
                    : $"<Cpf>{cnpjTomador.ZeroFill(11)}</Cpf>");
                loteBuilder.Append("</CpfCnpj>");
                if (!imTomador.IsEmpty())
                {
                    loteBuilder.Append($"<InscricaoMunicipal>{imTomador}</InscricaoMunicipal>");
                }
                loteBuilder.Append("</Tomador>");
            }

            if (!nomeInter.IsEmpty() && !cnpjInter.IsEmpty())
            {
                loteBuilder.Append("<IntermediarioServico>");
                loteBuilder.Append($"<RazaoSocial>{nomeInter}</RazaoSocial>");
                loteBuilder.Append(cnpjInter.IsCNPJ()
                    ? $"<Cnpj>{cnpjInter.ZeroFill(14)}</Cnpj>"
                    : $"<Cpf>{cnpjInter.ZeroFill(11)}</Cpf>");
                loteBuilder.Append("</CpfCnpj>");
                if (!imInter.IsEmpty())
                {
                    loteBuilder.Append($"<InscricaoMunicipal>{imInter}</InscricaoMunicipal>");
                }
                loteBuilder.Append("</IntermediarioServico>");
            }

            loteBuilder.Append("</fiss:Consultarnfseenvio>");
            loteBuilder.Append("</WS_ConsultaNfse.Execute>");
            retornoWebservice.XmlEnvio = loteBuilder.ToString();

            if (Configuracoes.Geral.RetirarAcentos)
            {
                retornoWebservice.XmlEnvio = retornoWebservice.XmlEnvio.RemoveAccent();
            }

            GravarArquivoEmDisco(retornoWebservice.XmlEnvio, $"ConNota-{DateTime.Now:yyyyMMddssfff}-{numeroNfse}-env.xml");

            // Verifica Schema
            ValidarSchema(retornoWebservice, GetSchema(TipoUrl.ConsultaNFSe));
            if (retornoWebservice.Erros.Any())
            {
                return(retornoWebservice);
            }

            // Recebe mensagem de retorno
            try
            {
                using (var cliente = GetClient(TipoUrl.ConsultaNFSe))
                {
                    retornoWebservice.XmlRetorno      = cliente.ConsultarNFSe(GerarCabecalho(), retornoWebservice.XmlEnvio);
                    retornoWebservice.EnvelopeEnvio   = cliente.EnvelopeEnvio;
                    retornoWebservice.EnvelopeRetorno = cliente.EnvelopeRetorno;
                }
            }
            catch (Exception ex)
            {
                retornoWebservice.Erros.Add(new Evento {
                    Codigo = "0", Descricao = ex.Message
                });
                return(retornoWebservice);
            }
            GravarArquivoEmDisco(retornoWebservice.XmlRetorno, $"ConNota-{DateTime.Now:yyyyMMddssfff}-{numeroNfse}-ret.xml");

            // Analisa mensagem de retorno
            var xmlRet = XDocument.Parse(AjustarRetorno(retornoWebservice.XmlRetorno));

            MensagemErro(retornoWebservice, xmlRet, "WS_ConsultaNfse.ExecuteResponse", "Listamensagemretorno", "tcMensagemRetorno");

            if (retornoWebservice.Erros.Count > 0)
            {
                return(retornoWebservice);
            }

            var retornoLote = xmlRet.ElementAnyNs("WS_ConsultaNfse.ExecuteResponse").ElementAnyNs("Consultarnfseresposta");
            var listaNfse   = retornoLote?.ElementAnyNs("ListaNfse");

            if (listaNfse == null)
            {
                retornoWebservice.Erros.Add(new Evento {
                    Codigo = "0", Descricao = "Lista de NFSe não encontrada! (ListaNfse)"
                });
                return(retornoWebservice);
            }

            foreach (var compNfse in listaNfse.ElementsAnyNs("CompNfse"))
            {
                // Carrega a nota fiscal na coleção de Notas Fiscais
                var nota = LoadXml(compNfse.AsString());
                notas.Add(nota);
            }

            retornoWebservice.Sucesso = true;

            return(retornoWebservice);
        }
示例#2
0
        public override RetornoWebservice ConsultarLoteRps(int lote, string protocolo, NotaFiscalCollection notas)
        {
            var retornoWebservice = new RetornoWebservice();

            retornoWebservice.XmlEnvio = new StringBuilder()
                                         .Append($"<es:esConsultarLoteRpsEnvio xmlns:es=\"http://www.equiplano.com.br/esnfs\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.equiplano.com.br/enfs esConsultarLoteRpsEnvio_v01.xsd\">")
                                         .Append("<prestador>")
                                         .Append($"<cnpj>{ Configuracoes.PrestadorPadrao.CpfCnpj }</cnpj>")
                                         .Append($"<idEntidade>{ Municipio.IdEntidade }</idEntidade>")
                                         .Append("</prestador>")
                                         .Append($"<nrLoteRps>{ lote }</nrLoteRps>")
                                         .Append("</es:esConsultarLoteRpsEnvio>")
                                         .ToString();

            if (Configuracoes.Geral.RetirarAcentos)
            {
                retornoWebservice.XmlEnvio = retornoWebservice.XmlEnvio.RemoveAccent();
            }

            retornoWebservice.XmlEnvio = XmlSigning.AssinarXml(retornoWebservice.XmlEnvio, "es:esConsultarLoteRpsEnvio", "", Certificado);

            retornoWebservice.XmlEnvio = new StringBuilder()
                                         .Append("<esConsultarLoteNfse xmlns=\"http://services.enfsws.es\">")
                                         .Append("<nrVersaoXml>1</nrVersaoXml>")
                                         .Append("<xml>")
                                         .AppendEnvio(retornoWebservice.XmlEnvio)
                                         .Append("</xml>")
                                         .Append("</esConsultarLoteNfse>")
                                         .ToString();

            GravarArquivoEmDisco(retornoWebservice.XmlEnvio, $"ConsultarLote-{DateTime.Now:yyyyMMddssfff}-{""}-env.xml");

            // Verifica Schema
            ValidarSchema(retornoWebservice, "esConsultarLoteRpsEnvio_v01.xsd");
            if (retornoWebservice.Erros.Any())
            {
                return(retornoWebservice);
            }

            // Recebe mensagem de retorno
            try
            {
                using (var cliente = GetClient(TipoUrl.ConsultarSituacao))
                {
                    retornoWebservice.XmlRetorno = cliente.ConsultarLoteRps(null, retornoWebservice.XmlEnvio);
                    retornoWebservice.XmlRetorno = retornoWebservice.XmlRetorno.AjustarString();
                }
            }
            catch (Exception ex)
            {
                retornoWebservice.Erros.Add(new Evento {
                    Codigo = "0", Descricao = ex.Message
                });
                return(retornoWebservice);
            }

            GravarArquivoEmDisco(retornoWebservice.XmlRetorno, $"ConsultarLoteRps-{DateTime.Now:yyyyMMddssfff}-{lote}-ret.xml");

            retornoWebservice.XmlRetorno = retornoWebservice.XmlRetorno
                                           .Replace("<ns:esConsultarLoteRpsResponse xmlns:ns=\"http://services.enfsws.es\">", "")
                                           .Replace("<ns:return>", "")
                                           .Replace("</ns:return>", "")
                                           .Replace("</ns:esConsultarLoteRpsResponse>", "");

            // Analisa mensagem de retorno
            var xmlRet      = XDocument.Parse(retornoWebservice.XmlRetorno);
            var rootElement = xmlRet.ElementAnyNs("esConsultarLoteRpsResposta");

            MensagemErro(retornoWebservice, rootElement, "mensagemRetorno");
            if (retornoWebservice.Erros.Count > 0)
            {
                return(retornoWebservice);
            }

            var elementRoot = xmlRet.ElementAnyNs("esConsultarLoteRpsResposta");

            var listaNfse = elementRoot.ElementAnyNs("listaNfse");

            if (listaNfse == null)
            {
                retornoWebservice.Erros.Add(new Evento {
                    Codigo = "0", Descricao = "Lista de NFSe não encontrada! (listaNfse)"
                });
                return(retornoWebservice);
            }

            foreach (var nfse in listaNfse.ElementsAnyNs("nfse"))
            {
                var nota = new NotaFiscal();
                nota.IdentificacaoNFSe.Chave       = nfse?.ElementAnyNs("cdAutenticacao")?.GetValue <string>() ?? string.Empty;
                nota.IdentificacaoNFSe.Numero      = nfse?.ElementAnyNs("nrNfse")?.GetValue <string>() ?? string.Empty;
                nota.IdentificacaoRps.Numero       = nfse?.ElementAnyNs("nrRps")?.GetValue <string>() ?? string.Empty;
                nota.IdentificacaoNFSe.DataEmissao = nfse.ElementAnyNs("dtEmissaoNfs")?.GetValue <DateTime>() ?? DateTime.MinValue;

                notas.Add(nota);
            }

            retornoWebservice.Sucesso = true;
            return(retornoWebservice);
        }
        public override RetornoWebservice ConsultaNFSeRps(string numero, string serie, TipoRps tipo, NotaFiscalCollection notas)
        {
            var retornoWebservice = new RetornoWebservice();

            if (numero.IsEmpty())
            {
                retornoWebservice.Erros.Add(new Evento {
                    Codigo = "0", Descricao = "Número da NFSe não informado para a consulta."
                });
                return(retornoWebservice);
            }

            var loteBuilder = new StringBuilder();

            loteBuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            loteBuilder.Append("<WS_ConsultaNfsePorRps.Execute xmlns:fiss=\"FISS-LEX\">");
            loteBuilder.Append("<fiss:Consultarnfserpsenvio>");
            loteBuilder.Append("<IdentificacaoRps>");
            loteBuilder.Append($"<Numero>{numero}</Numero>");
            loteBuilder.Append($"<Serie>{serie}</Serie>");
            loteBuilder.Append($"<Tipo>{(int)tipo + 1}</Tipo>");
            loteBuilder.Append("</IdentificacaoRps>");
            loteBuilder.Append("<Prestador>");
            loteBuilder.Append($"<Cnpj>{Configuracoes.PrestadorPadrao.CpfCnpj.ZeroFill(14)}</Cnpj>");
            loteBuilder.Append($"<InscricaoMunicipal>{Configuracoes.PrestadorPadrao.InscricaoMunicipal}</InscricaoMunicipal>");
            loteBuilder.Append("</Prestador>");
            loteBuilder.Append("</fiss:Consultarnfserpsenvio>");
            loteBuilder.Append("</WS_ConsultaNfsePorRps.Execute>");
            retornoWebservice.XmlEnvio = loteBuilder.ToString();

            if (Configuracoes.Geral.RetirarAcentos)
            {
                retornoWebservice.XmlEnvio = retornoWebservice.XmlEnvio.RemoveAccent();
            }

            GravarArquivoEmDisco(retornoWebservice.XmlEnvio, $"ConNotaRps-{numero}-env.xml");

            // Verifica Schema
            ValidarSchema(retornoWebservice, GetSchema(TipoUrl.ConsultaNFSeRps));
            if (retornoWebservice.Erros.Any())
            {
                return(retornoWebservice);
            }

            // Recebe mensagem de retorno
            try
            {
                using (var cliente = GetClient(TipoUrl.ConsultaNFSeRps))
                {
                    retornoWebservice.XmlRetorno      = cliente.ConsultarNFSePorRps(GerarCabecalho(), retornoWebservice.XmlEnvio);
                    retornoWebservice.EnvelopeEnvio   = cliente.EnvelopeEnvio;
                    retornoWebservice.EnvelopeRetorno = cliente.EnvelopeRetorno;
                }
            }
            catch (Exception ex)
            {
                retornoWebservice.Erros.Add(new Evento {
                    Codigo = "0", Descricao = ex.Message
                });
                return(retornoWebservice);
            }

            GravarArquivoEmDisco(retornoWebservice.XmlRetorno, $"ConNotaRps-{numero}-ret.xml");

            // Analisa mensagem de retorno
            var xmlRet = XDocument.Parse(AjustarRetorno(retornoWebservice.XmlRetorno));

            MensagemErro(retornoWebservice, xmlRet, "WS_ConsultaNfsePorRps.ExecuteResponse", "Listamensagemretorno", "tcMensagemRetorno");
            if (retornoWebservice.Erros.Any())
            {
                return(retornoWebservice);
            }

            var elementRoot = xmlRet.ElementAnyNs("WS_ConsultaNfsePorRps.ExecuteResponse");
            var compNfse    = elementRoot.ElementAnyNs("Consultarnfserpsresposta")?.ElementAnyNs("CompNfse");

            if (compNfse == null)
            {
                retornoWebservice.Erros.Add(new Evento {
                    Codigo = "0", Descricao = "Nota Fiscal não encontrada! (CompNfse)"
                });
                return(retornoWebservice);
            }

            // Carrega a nota fiscal na coleção de Notas Fiscais
            var nota = LoadXml(compNfse.AsString());

            notas.Add(nota);

            retornoWebservice.Sucesso = true;
            return(retornoWebservice);
        }
示例#4
0
        public override RetornoWebservice ConsultaNFSe(DateTime?inicio, DateTime?fim, string numeroNfse, int pagina, string cnpjPrestador, string imPrestador, string nomeInter, string cnpjInter, string imInter, string serie, NotaFiscalCollection notas)
        {
            var retornoWebservice = new RetornoWebservice();
            var xml = new StringBuilder()
                      .Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
                      .Append("<es:esConsultarNfseEnvio xmlns:es=\"http://www.equiplano.com.br/esnfs\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.equiplano.com.br/enfs esConsultarNfsePorRpsEnvio_v01.xsd\">")
                      .Append("<prestador>")
                      .Append($"<cnpj>{ Configuracoes.PrestadorPadrao.CpfCnpj }</cnpj>")
                      .Append($"<idEntidade>{ Municipio.IdEntidade }</idEntidade>")
                      .Append("</prestador>");

            if (!numeroNfse.IsEmpty())
            {
                xml = xml.Append($"<nrNfse>{ numeroNfse }</nrNfse>");
            }
            else
            {
                if (inicio == null || fim == null)
                {
                    retornoWebservice.Erros.Add(new Evento {
                        Codigo = "0", Descricao = "Data de início ou fim não informada para a consulta."
                    });
                    return(retornoWebservice);
                }

                xml = xml
                      .Append("<periodoEmissao>")
                      .Append($"<dtInicial>{inicio.Value:yyyy'-'MM'-'dd'T'HH':'mm':'ss}</dtInicial>")
                      .Append($"<dtFinal>{fim.Value:yyyy'-'MM'-'dd'T'HH':'mm':'ss}</dtFinal>")
                      .Append("</periodoEmissao>");
            }
            xml = xml.Append("</es:esConsultarNfseEnvio>");

            retornoWebservice.XmlEnvio = xml.ToString();;

            if (Configuracoes.Geral.RetirarAcentos)
            {
                retornoWebservice.XmlEnvio = retornoWebservice.XmlEnvio.RemoveAccent();
            }

            var xmlAssinado = XmlSigning.AssinarXml(retornoWebservice.XmlEnvio, "es:esConsultarNfseEnvio", "", Certificado);

            retornoWebservice.XmlEnvio = new StringBuilder()
                                         .Append("<esConsultarNfse xmlns=\"http://services.enfsws.es\">")
                                         .Append("<nrVersaoXml>1</nrVersaoXml>")
                                         .Append("<xml>")
                                         .AppendEnvio(xmlAssinado)
                                         .Append("</xml>")
                                         .Append("</esConsultarNfse>")
                                         .ToString();

            GravarArquivoEmDisco(retornoWebservice.XmlEnvio, $"ConNota-env.xml");

            // Verifica Schema
            ValidarSchema(retornoWebservice, "esConsultarNfseEnvio_v01.xsd");
            if (retornoWebservice.Erros.Any())
            {
                return(retornoWebservice);
            }

            // Recebe mensagem de retorno
            try
            {
                using (var cliente = GetClient(TipoUrl.ConsultaNFSe))
                {
                    retornoWebservice.XmlRetorno = cliente.ConsultarNFSe(null, retornoWebservice.XmlEnvio);
                    retornoWebservice.XmlRetorno = retornoWebservice.XmlRetorno.AjustarString();
                }
            }
            catch (Exception ex)
            {
                retornoWebservice.Erros.Add(new Evento {
                    Codigo = "0", Descricao = ex.Message
                });
                return(retornoWebservice);
            }
            GravarArquivoEmDisco(retornoWebservice.XmlRetorno, $"ConNotaRps-ret.xml");

            retornoWebservice.XmlRetorno = retornoWebservice.XmlRetorno
                                           .Replace("<ns:esConsultarNfseResponse xmlns:ns=\"http://services.enfsws.es\">", "")
                                           .Replace("<ns:return>", "")
                                           .Replace("</ns:return>", "")
                                           .Replace("</ns:esConsultarNfseResponse>", "");

            // Analisa mensagem de retorno
            var xmlRet = XDocument.Parse(retornoWebservice.XmlRetorno);

            MensagemErro(retornoWebservice, xmlRet.ElementAnyNs("esConsultarNfseResposta"), "mensagemRetorno");
            if (retornoWebservice.Erros.Count > 0)
            {
                return(retornoWebservice);
            }

            var elementRoot = xmlRet.ElementAnyNs("esConsultarNfseResposta");

            var listaNfse = elementRoot.ElementAnyNs("listaNfse");

            if (listaNfse == null)
            {
                retornoWebservice.Erros.Add(new Evento {
                    Codigo = "0", Descricao = "Lista de NFSe não encontrada! (listaNfse)"
                });
                return(retornoWebservice);
            }

            foreach (var nfse in listaNfse.ElementsAnyNs("nfse"))
            {
                var nota = new NotaFiscal();
                nota.IdentificacaoNFSe.Chave       = nfse?.ElementAnyNs("cdAutenticacao")?.GetValue <string>() ?? string.Empty;
                nota.IdentificacaoNFSe.Numero      = nfse?.ElementAnyNs("nrNfse")?.GetValue <string>() ?? string.Empty;
                nota.IdentificacaoRps.Numero       = nfse?.ElementAnyNs("nrRps")?.GetValue <string>() ?? string.Empty;
                nota.IdentificacaoNFSe.DataEmissao = nfse.ElementAnyNs("dtEmissaoNfs")?.GetValue <DateTime>() ?? DateTime.MinValue;
                nota.Situacao = SituacaoNFSeRps.Normal;

                var infoCancelamento = nfse.ElementAnyNs("cancelamento");
                if (infoCancelamento != null)
                {
                    nota.Cancelamento.DataHora           = infoCancelamento.ElementAnyNs("dtCancelamento")?.GetValue <DateTime>() ?? DateTime.MinValue;
                    nota.Cancelamento.MotivoCancelamento = infoCancelamento?.ElementAnyNs("dsCancelamento")?.GetValue <string>() ?? string.Empty;
                    nota.Situacao = SituacaoNFSeRps.Cancelado;
                }

                notas.Add(nota);
            }

            retornoWebservice.Sucesso = true;
            return(retornoWebservice);
        }