public async Task <retEnvEvento> ManifestarAsync(ChaveFiscal chaveNFe, eTipoEventoNFe tipoEvento, string justificativa = null)
        {
            if (tipoEvento != eTipoEventoNFe.CienciaOperacao &&
                tipoEvento != eTipoEventoNFe.ConfirmacaoOperacao &&
                tipoEvento != eTipoEventoNFe.DesconhecimentoOperacao &&
                tipoEvento != eTipoEventoNFe.OperacaoNaoRealizada)
            {
                throw new Exception("Evento não permitido nesse serviço");
            }

            var xmlEvento = GerarXmlEvento(chaveNFe.Chave, tipoEvento, justificativa);

            var arqEnv = Path.Combine("Logs", Arquivo.MontarNomeArquivo("ped-eve.xml", config));
            await storage.SaveAsync(arqEnv, xmlEvento);

            await storage.SaveAsync($"{DateTime.Now.Ticks}-ped-eve.xml", xmlEvento);

            Schemas.ValidarSchema(eTipoServico.ManifestacaoDestinatario, xmlEvento, config);
            var envelope   = SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.ManifestacaoDestinatario, xmlEvento);
            var sefazUrl   = FabricarUrl.ObterUrl(eTipoServico.ManifestacaoDestinatario, config.TipoAmbiente, eModeloDocumento.NFe, eUF.AN);
            var xmlRetorno = await transmitir.TransmitirAsync(sefazUrl, envelope);

            var xmlRetLimpo = Soap.LimparEnvelope(xmlRetorno, "retEnvEvento").OuterXml;

            var arqRet = Path.Combine("Logs", Arquivo.MontarNomeArquivo("ret-eve.xml", config));
            await storage.SaveAsync(arqRet, xmlRetLimpo);

            var retEnvEvento = XmlUtils.XmlStringParaClasse <retEnvEvento>(xmlRetLimpo);

            return(retEnvEvento);
        }
        public async Task <retConsSitNFe> ConsultarPelaChave(string chaveAcesso, string versao)
        {
            var chave   = new ChaveFiscal(chaveAcesso);
            var consSit = new consSitNFe
            {
                chNFe  = chaveAcesso,
                tpAmb  = Configuracao.TipoAmbiente,
                versao = versao
            };

            var xmlEvento = XmlUtils.ClasseParaXmlString <consSitNFe>(consSit);

            var arqEnv = Path.Combine("Logs", $"{DateTime.Now.Ticks}-pedConsSitNFe.xml");
            await storage.SaveAsync(arqEnv, xmlEvento);

            var modeloDoc = chave.Modelo;

            var sefazUrl = Fabrica.FabricarUrl.ObterUrl(eTipoServico.ConsultaSituacaoNFe, Configuracao.TipoAmbiente, modeloDoc, Configuracao.UF);

            var envelope = Fabrica.SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.ConsultaSituacaoNFe, xmlEvento);

            var retornoXmlString = await Transmitir.TransmitirAsync(sefazUrl, envelope);

            var retornoXmlStringLimpa = Soap.LimparEnvelope(retornoXmlString, "retConsSitNFe").OuterXml;

            var arqRet = Path.Combine("Logs", $"{DateTime.Now.Ticks}-retConsSitNFe.xml");
            await storage.SaveAsync(arqRet, retornoXmlStringLimpa);

            var retEnvEvento = new retConsSitNFe().CarregarDeXmlString(retornoXmlStringLimpa, xmlEvento);

            return(retEnvEvento);
        }
        private async Task <string> PrepararTransmissao(distDFeInt distDFeInt, bool validarXmlConsulta = true)
        {
            var xml = XmlUtils.ClasseParaXmlString <distDFeInt>(distDFeInt);

            if (validarXmlConsulta)
            {
                Schemas.ValidarSchema(eTipoServico.NFeDistribuicaoDFe, xml, Configuracao);
            }

            var nomeArqEnv = $"{Configuracao.Emitente.CNPJ ?? Configuracao.Emitente.CPF}-{DateTime.Now.Ticks}-ped-DistDFeInt.xml";
            var arqEnv     = Path.Combine("Logs", nomeArqEnv);
            var stRet      = await storage.SaveAsync(arqEnv, xml);

            var envelope = SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.NFeDistribuicaoDFe, xml);

            var sefazUrl = FabricarUrl.ObterUrl(eTipoServico.NFeDistribuicaoDFe, Configuracao.TipoAmbiente, eModeloDocumento.NFe, eUF.AN);
            var retorno  = await Transmitir.TransmitirAsync(sefazUrl, envelope);

            var retornoLimpo = Soap.LimparEnvelope(retorno, "retDistDFeInt").OuterXml;

            var nomeArqRetorno = $"{Configuracao.Emitente.CNPJ ?? Configuracao.Emitente.CPF}-{DateTime.Now.Ticks}-retDistDFeInt.xml";
            var arqRet         = Path.Combine("Logs", nomeArqRetorno);
            await storage.SaveAsync(arqRet, retornoLimpo);

            return(retornoLimpo);
        }
        public async Task <retConsSitNFe> ConsultarPelaChave(string chaveAcesso)
        {
            chaveAcesso = chaveAcesso.Replace("NFe", "");
            var consSit = new consSitNFe
            {
                chNFe  = chaveAcesso,
                tpAmb  = cfgServico.TipoAmbiente,
                versao = versao
            };

            var xmlEvento = XmlUtils.ClasseParaXmlString <consSitNFe>(consSit);

            var arqEnv = Path.Combine("Logs", Arquivo.MontarNomeArquivo("pedConsSitNFe.xml", cfgServico));
            await storage.SaveAsync(arqEnv, xmlEvento);

            var modeloDoc = chaveAcesso.Substring(20, 2).ModeloDocumento();

            var sefazUrl = FabricarUrl.ObterUrl(eTipoServico.ConsultaSituacaoNFe, cfgServico.TipoAmbiente, modeloDoc, cfgServico.UF);
            var envelope = SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.ConsultaSituacaoNFe, xmlEvento);

            var retornoXmlString = await sefaz.TransmitirAsync(sefazUrl, envelope);

            var retornoXmlStringLimpa = Soap.LimparEnvelope(retornoXmlString, "retConsSitNFe").OuterXml;

            var arqRet = Path.Combine("Logs", Arquivo.MontarNomeArquivo("retConsSitNFe.xml", cfgServico));
            await storage.SaveAsync(arqRet, retornoXmlStringLimpa);

            var retEnvEvento = new retConsSitNFe().CarregarDeXmlString(retornoXmlStringLimpa, xmlEvento);

            return(retEnvEvento);
        }
示例#5
0
        private async Task <IRetornoAutorizacao> Autorizar(string xmlenviNFe4, eModeloDocumento modeloDocumento)
        {
            var arqEnv = Path.Combine(cfgServico.DiretorioSalvarXml, "Logs", $"{DateTime.Now.Ticks}-env-nfe.xml", xmlenviNFe4);
            await storage.SaveAsync(arqEnv, xmlenviNFe4);

            var urlSefaz = Fabrica.FabricarUrl.ObterUrl(eTipoServico.AutorizarNFe, cfgServico.TipoAmbiente, modeloDocumento, cfgServico.UF);

            var envelope = Fabrica.SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.AutorizarNFe, xmlenviNFe4);

            var retornoXmlString = await transmitir.TransmitirAsync(urlSefaz, envelope);

            var retornoLimpo = Soap.LimparEnvelope(retornoXmlString, "retEnviNFe").OuterXml;

            var arqRet = Path.Combine("Logs", $"{DateTime.Now.Ticks}-ret-env-nfe.xml");
            await storage.SaveAsync(arqRet, retornoLimpo);

            var retEnviNFe = new RetNFeAutorizacao4(retornoLimpo);

            retEnviNFe.XmlEnviado = xmlenviNFe4;
            return(retEnviNFe);
        }
        public async Task <retInutNFe> Inutilizar(int ano, eModeloDocumento modeloDocumento, int serie, int numeroInicial, int numeroFinal, string justificativa)
        {
            var cnpj            = cfgServico.Emitente.CNPJ ?? cfgServico.Emitente.CPF;
            var tpAmb           = cfgServico.TipoAmbiente;
            var uf              = cfgServico.UF;
            var pedInutilizacao = FabricarInutNFe(tpAmb, uf, ano, cnpj, modeloDocumento, serie, numeroInicial, numeroFinal, justificativa);

            var xmlInutilizacao = XmlUtils.ClasseParaXmlString <inutNFe>(pedInutilizacao);

            var arqEnv = Path.Combine("Logs", Arquivo.MontarNomeArquivo("ped-inut.xml", cfgServico));
            await storage.SaveAsync(arqEnv, xmlInutilizacao);

            var envelope         = SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.InutilizacaoNFe, xmlInutilizacao);
            var sefazUrl         = FabricarUrl.ObterUrl(eTipoServico.InutilizacaoNFe, cfgServico.TipoAmbiente, modeloDocumento, cfgServico.UF);
            var retornoXmlString = await transmitir.TransmitirAsync(sefazUrl, envelope);

            var retornoLimpo = Soap.LimparEnvelope(retornoXmlString, "retInutNFe").OuterXml;

            var arqRet = Path.Combine("Logs", Arquivo.MontarNomeArquivo("ret-inut.xml", cfgServico));
            await storage.SaveAsync(arqRet, retornoLimpo);

            return(XmlUtils.XmlStringParaClasse <retInutNFe>(retornoLimpo));
        }
示例#7
0
        private async Task <retEnvEvento> Cancelar(List <evento> eventos, eModeloDocumento modeloDoc)
        {
            var pedEvento = new envEvento
            {
                versao = versao,
                idLote = 1,
                evento = eventos
            };

            foreach (var eventoTmp in eventos)
            {
                eventoTmp.infEvento.Id = "ID" + ((int)eventoTmp.infEvento.tpEvento) + eventoTmp.infEvento.chNFe +
                                         eventoTmp.infEvento.nSeqEvento.ToString().PadLeft(2, '0');

                var _certificado = ObterCertificado.Obter(cfgServico.ConfigCertificado);
                eventoTmp.Assinar(_certificado, cfgServico.ConfigCertificado.SignatureMethodSignedXml, cfgServico.ConfigCertificado.DigestMethodReference);
            }

            var xmlEvento = XmlUtils.ClasseParaXmlString <envEvento>(pedEvento);

            var arqEnv = Path.Combine("Logs", $"{DateTime.Now.Ticks}-ped-eve.xml");
            await storage.SaveAsync(arqEnv, xmlEvento);

            var sefazUrl = Fabrica.FabricarUrl.ObterUrl(eTipoServico.CancelarNFe, cfgServico.TipoAmbiente, modeloDoc, cfgServico.UF);
            var envelope = Fabrica.SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.CancelarNFe, xmlEvento);

            var retornoXmlString = await transmitir.TransmitirAsync(sefazUrl, envelope);

            var retornoXmlStringLimpa = Soap.LimparEnvelope(retornoXmlString, "retEnvEvento").OuterXml;

            var arqRet = Path.Combine("Logs", $"{DateTime.Now.Ticks}-ret-eve.xml");
            await storage.SaveAsync(arqRet, retornoXmlStringLimpa);

            var retEnvEvento = new retEnvEvento().CarregarDeXmlString(retornoXmlStringLimpa, xmlEvento);

            return(retEnvEvento);
        }
        public async Task <retEnvEvento> TransmitirCorrecao(IList <InfoCartaCorrecao> infos)
        {
            if (infos == null || infos.Count <= 0)
            {
                throw new Exception("Informações da NFe não encontrada");
            }

            if (infos.Count > 20)
            {
                throw new Exception("No máximo 20 NFes podem ser Corrigidas");
            }


            List <evento> eventos = new List <evento>();

            foreach (var item in infos)
            {
                var chave      = item.ChaveAcesso;
                var correcao   = item.Correcao;
                var nSeqEvento = item.nSeqEvento;
                chave = chave.Replace("NFe", "");
                eModeloDocumento _modeloDocumento = chave.Substring(20, 2).ModeloDocumento();

                if (item.Correcao.Length < 15 || item.Correcao.Length > 1000)
                {
                    throw new FalhaValidacaoException("A descrição da correção deve conter entre 15 e 1000 caracteres");
                }

                if (_modeloDocumento != eModeloDocumento.NFe)
                {
                    throw new FalhaValidacaoException("Somente NFe pode ter Carta Correção");
                }

                var infEvento = new infEventoEnv
                {
                    chNFe      = chave,
                    CNPJ       = cfgServico.Emitente.CNPJ,
                    CPF        = cfgServico.Emitente.CPF,
                    cOrgao     = cfgServico.UF,
                    dhEvento   = DateTime.Now,
                    nSeqEvento = nSeqEvento,
                    tpAmb      = cfgServico.TipoAmbiente,
                    tpEvento   = eTipoEventoNFe.NFeCartaCorrecao,
                    verEvento  = _versao,
                    detEvento  = new detEvento()
                    {
                        versao     = _versao,
                        descEvento = "Carta de Correção",
                        xCorrecao  = correcao
                    }
                };
                var evento = new evento {
                    versao = _versao, infEvento = infEvento
                };
                eventos.Add(evento);
            }

            foreach (var eventoTmp in eventos)
            {
                eventoTmp.infEvento.Id = "ID" + ((int)eventoTmp.infEvento.tpEvento) + eventoTmp.infEvento.chNFe +
                                         eventoTmp.infEvento.nSeqEvento.ToString().PadLeft(2, '0');

                var _certificado = ObterCertificado.Obter(cfgServico.ConfigCertificado);
                eventoTmp.Assinar(_certificado, cfgServico.ConfigCertificado.SignatureMethodSignedXml, cfgServico.ConfigCertificado.DigestMethodReference);
            }

            var pedEvento = new envEvento
            {
                versao = _versao,
                idLote = 1,
                evento = eventos
            };

            var xmlEvento = XmlUtils.ClasseParaXmlString <envEvento>(pedEvento);

            var arqEnv = Path.Combine("Logs", Arquivo.MontarNomeArquivo("ped-eve.xml", cfgServico));
            await storage.SaveAsync(arqEnv, xmlEvento);

            var sefazUrl = Fabrica.FabricarUrl.ObterUrl(eTipoServico.CartaCorrecao, cfgServico.TipoAmbiente, eModeloDocumento.NFe, cfgServico.UF);
            var envelope = Fabrica.SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.CartaCorrecao, xmlEvento);

            var retornoXmlString = await transmitir.TransmitirAsync(sefazUrl, envelope);

            var retornoXmlStringLimpa = Soap.LimparEnvelope(retornoXmlString, "retEnvEvento").OuterXml;

            var arqRet = Path.Combine("Logs", Arquivo.MontarNomeArquivo("ret-eve.xml", cfgServico));
            await storage.SaveAsync(arqRet, retornoXmlStringLimpa);

            var retorno = new retEnvEvento().CarregarDeXmlString(retornoXmlStringLimpa, xmlEvento);

            return(retorno);
        }