Пример #1
0
        /// <summary>
        ///     Envia um evento do tipo "EPEC"
        /// </summary>
        /// <param name="idlote"></param>
        /// <param name="sequenciaEvento"></param>
        /// <param name="nfe"></param>
        /// <param name="veraplic"></param>
        /// <returns>Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento</returns>
        public RetornoRecepcaoEvento RecepcaoEventoEpec(int idlote, int sequenciaEvento, Classes.NFe nfe, string veraplic)
        {
            var versaoServico = Auxiliar.VersaoServicoParaString(ServicoNFe.RecepcaoEvento, _cFgServico.VersaoRecepcaoEvento);

            if (String.IsNullOrEmpty(nfe.infNFe.Id))
            {
                nfe.Assina().Valida();
            }

            var detevento = new detEvento
            {
                versao      = versaoServico,
                cOrgaoAutor = nfe.infNFe.ide.cUF,
                tpAutor     = TipoAutor.taEmpresaEmitente,
                verAplic    = veraplic,
                dhEmi       = !String.IsNullOrEmpty(nfe.infNFe.ide.dhEmi) ? nfe.infNFe.ide.dhEmi : Convert.ToDateTime(nfe.infNFe.ide.dEmi).ToString("yyyy-MM-ddTHH:mm:sszzz"),
                tpNF        = nfe.infNFe.ide.tpNF,
                IE          = nfe.infNFe.emit.IE,
                dest        = new dest
                {
                    UF    = nfe.infNFe.dest.enderDest.UF,
                    CNPJ  = nfe.infNFe.dest.CNPJ,
                    CPF   = nfe.infNFe.dest.CPF,
                    IE    = nfe.infNFe.dest.IE,
                    vNF   = nfe.infNFe.total.ICMSTot.vNF,
                    vICMS = nfe.infNFe.total.ICMSTot.vICMS,
                    vST   = nfe.infNFe.total.ICMSTot.vST
                }
            };

            var infEvento = new infEventoEnv
            {
                cOrgao     = Estado.AN,
                tpAmb      = nfe.infNFe.ide.tpAmb,
                CNPJ       = nfe.infNFe.emit.CNPJ,
                CPF        = nfe.infNFe.emit.CPF,
                chNFe      = nfe.infNFe.Id.Substring(3),
                dhEvento   = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"),
                tpEvento   = 110140,
                nSeqEvento = sequenciaEvento,
                verEvento  = versaoServico,
                detEvento  = detevento
            };

            var evento = new evento {
                versao = versaoServico, infEvento = infEvento
            };

            var retorno = RecepcaoEvento(idlote, new List <evento> {
                evento
            }, TipoRecepcaoEvento.Epec);

            return(retorno);
        }
        private string GerarXmlEvento(string chaveAcesso, eTipoEventoNFe tipoEvento, string justificativa = null)
        {
            if (tipoEvento == eTipoEventoNFe.OperacaoNaoRealizada && justificativa == null)
            {
                throw new ArgumentNullException("Justificativa deve ser informada");
            }

            if (tipoEvento != eTipoEventoNFe.OperacaoNaoRealizada)
            {
                justificativa = null;
            }

            var infEvento = new infEventoEnv
            {
                chNFe      = chaveAcesso,
                CNPJ       = config.Emitente.CNPJ,
                CPF        = config.Emitente.CPF,
                cOrgao     = eUF.AN,
                dhEvento   = DateTime.Now,
                nSeqEvento = 1,
                tpAmb      = config.TipoAmbiente,
                tpEvento   = tipoEvento,
                verEvento  = config.VersaoManifestacaoDestinatario.Descricao(),
                Id         = "ID" + ((int)tipoEvento) + chaveAcesso + nSeqEvento.ToString().PadLeft(2, '0'),
                detEvento  = new detEvento()
                {
                    versao     = config.VersaoManifestacaoDestinatario.Descricao(),
                    descEvento = tipoEvento.Descricao().RemoverAcentos()
                }
            };

            var evento = new evento
            {
                versao    = config.VersaoManifestacaoDestinatario.Descricao(),
                infEvento = infEvento
            };

            evento.Assinar(ObterCertificado.Obter(config.ConfigCertificado), config.ConfigCertificado.SignatureMethodSignedXml, config.ConfigCertificado.DigestMethodReference);

            var pedEvento = new envEvento
            {
                versao = config.VersaoManifestacaoDestinatario.Descricao(),
                idLote = 1,
                evento = new List <evento> {
                    evento
                }
            };

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

            return(xmlEvento);
        }
Пример #3
0
        public RetornoRecepcaoEvento RecepcaoEventoManifestacaoDestinatario(int idlote,
                                                                            int sequenciaEvento, string chaveNFe,
                                                                            TipoEventoManifestacaoDestinatario tipoEventoManifestacaoDestinatario, string cpfcnpj,
                                                                            string justificativa = null)
        {
            var versaoServico = Conversao.VersaoServicoParaString(ServicoNFe.RecepcaoEventoManifestacaoDestinatario, _cFgServico.VersaoRecepcaoEventoCceCancelamento);
            var detEvento     = new detEvento {
                versao = versaoServico, descEvento = tipoEventoManifestacaoDestinatario.Descricao(), xJust = justificativa
            };
            var infEvento = new infEventoEnv
            {
                cOrgao     = _cFgServico.cUF == Estado.RS ? _cFgServico.cUF : Estado.AN, //RS possui endereço próprio para manifestação do destinatário. Demais UFs usam o ambiente nacional
                tpAmb      = _cFgServico.tpAmb,
                chNFe      = chaveNFe,
                dhEvento   = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"),
                tpEvento   = (int)tipoEventoManifestacaoDestinatario,
                nSeqEvento = sequenciaEvento,
                verEvento  = versaoServico,
                detEvento  = detEvento
            };

            if (cpfcnpj.Length == 11)
            {
                infEvento.CPF = cpfcnpj;
            }
            else
            {
                infEvento.CNPJ = cpfcnpj;
            }

            var evento = new evento {
                versao = versaoServico, infEvento = infEvento
            };

            var retorno = RecepcaoEvento(idlote, new List <evento> {
                evento
            }, ServicoNFe.RecepcaoEventoManifestacaoDestinatario);

            return(retorno);
        }
Пример #4
0
        /// <summary>
        ///     Envia um evento do tipo "Carta de Correção"
        /// </summary>
        /// <param name="idlote"></param>
        /// <param name="sequenciaEvento"></param>
        /// <param name="chaveNFe"></param>
        /// <param name="correcao"></param>
        /// <param name="cpfcnpj"></param>
        /// <returns>Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento</returns>
        public RetornoRecepcaoEvento RecepcaoEventoCartaCorrecao(int idlote, int sequenciaEvento,
                                                                 string chaveNFe, string correcao, string cpfcnpj)
        {
            var versaoServico = Conversao.VersaoServicoParaString(ServicoNFe.RecepcaoEventoCartaCorrecao, _cFgServico.VersaoRecepcaoEventoCceCancelamento);
            var detEvento     = new detEvento {
                versao = versaoServico, xCorrecao = correcao, xJust = null
            };
            var infEvento = new infEventoEnv
            {
                cOrgao     = _cFgServico.cUF,
                tpAmb      = _cFgServico.tpAmb,
                chNFe      = chaveNFe,
                dhEvento   = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"),
                tpEvento   = 110110,
                nSeqEvento = sequenciaEvento,
                verEvento  = versaoServico,
                detEvento  = detEvento
            };

            if (cpfcnpj.Length == 11)
            {
                infEvento.CPF = cpfcnpj;
            }
            else
            {
                infEvento.CNPJ = cpfcnpj;
            }

            var evento = new evento {
                versao = versaoServico, infEvento = infEvento
            };

            var retorno = RecepcaoEvento(idlote, new List <evento> {
                evento
            }, ServicoNFe.RecepcaoEventoCartaCorrecao);

            return(retorno);
        }
Пример #5
0
        /// <summary>
        ///     Envia um evento do tipo "Cancelamento"
        /// </summary>
        /// <param name="idlote"></param>
        /// <param name="sequenciaEvento"></param>
        /// <param name="protocoloAutorizacao"></param>
        /// <param name="chaveNFe"></param>
        /// <param name="justificativa"></param>
        /// <param name="cpfcnpj"></param>
        /// <returns>Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento</returns>
        public RetornoRecepcaoEvento RecepcaoEventoCancelamento(int idlote, int sequenciaEvento, string protocoloAutorizacao, string chaveNFe, string justificativa, string cpfcnpj)
        {
            var versaoServico = Auxiliar.VersaoServicoParaString(ServicoNFe.RecepcaoEvento, _cFgServico.VersaoRecepcaoEvento);
            var detEvento     = new detEvento {
                nProt = protocoloAutorizacao, versao = versaoServico, xJust = justificativa
            };
            var infEvento = new infEventoEnv
            {
                cOrgao     = _cFgServico.cUF,
                tpAmb      = _cFgServico.tpAmb,
                chNFe      = chaveNFe,
                dhEvento   = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"),
                tpEvento   = 110111,
                nSeqEvento = sequenciaEvento,
                verEvento  = versaoServico,
                detEvento  = detEvento
            };

            if (cpfcnpj.Length == 11)
            {
                infEvento.CPF = cpfcnpj;
            }
            else
            {
                infEvento.CNPJ = cpfcnpj;
            }

            var evento = new evento {
                versao = versaoServico, infEvento = infEvento
            };

            var retorno = RecepcaoEvento(idlote, new List <evento> {
                evento
            }, TipoRecepcaoEvento.Cancelmento);

            return(retorno);
        }
Пример #6
0
        public async Task <retEnvEvento> Cancelar(IList <InfoNFeCancelar> 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 canceladas");
            }

            var modelos = infos.Select(x => x.ChaveAcesso.Modelo).Distinct().ToList();

            if (modelos.Count != 1)
            {
                throw new FalhaValidacaoException("Lista de cancelamento deve conter somente 1 modelo");
            }

            eModeloDocumento modeloDocumento = modelos.FirstOrDefault();

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

            foreach (var item in infos)
            {
                var protocolo = item.ProtocoloAutorizacao;
                var chave     = item.ChaveAcesso;
                var just      = item.Justificativa;

                if (string.IsNullOrEmpty(just) || just.Length < 15 || just.Length > 255)
                {
                    throw new Exception("Justificativa de conter entre 15 e 255 caracteres");
                }

                var detEvento = new detEvento
                {
                    nProt      = protocolo.Protocolo,
                    versao     = versao,
                    xJust      = just,
                    descEvento = "Cancelamento",
                };

                var infEvento = new infEventoEnv
                {
                    cOrgao     = cfgServico.UF,
                    tpAmb      = cfgServico.TipoAmbiente,
                    chNFe      = chave.Chave,
                    dhEvento   = DateTime.Now,
                    tpEvento   = eTipoEventoNFe.NFeCancelamento,
                    nSeqEvento = 1,
                    verEvento  = versao,
                    detEvento  = detEvento
                };

                if (!string.IsNullOrEmpty(cfgServico.Emitente.CNPJ))
                {
                    infEvento.CNPJ = cfgServico.Emitente.CNPJ;
                }
                else
                {
                    infEvento.CPF = cfgServico.Emitente.CPF;
                }

                var evento = new evento {
                    versao = versao, infEvento = infEvento
                };
                eventos.Add(evento);
            }
            return(await Cancelar(eventos, modeloDocumento));
        }
        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);
        }