Esempio n. 1
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 = ServicoNFe.RecepcaoEventoCartaCorrecao.VersaoServicoParaString(_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);
        }
Esempio n. 2
0
        public RetornoRecepcaoEvento RecepcaoEventoManifestacaoDestinatario(int idlote, int sequenciaEvento, string chaveNFe, TipoEventoManifestacaoDestinatario tipoEventoManifestacaoDestinatario, string cpfcnpj, string justificativa = null)
        {
            var versaoServico = ServicoNFe.RecepcaoEventoManifestacaoDestinatario.VersaoServicoParaString(_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);
        }
        /// <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);
        }
Esempio n. 4
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));
        }