public MensagemRetornoEventoCancelamento CancelarNotaFiscal(string ufEmitente,
                                                                    CodigoUfIbge codigoUf, Ambiente ambiente, string cnpjEmitente, string chaveNFe,
                                                                    string protocoloAutorizacao, Modelo modeloNota, string justificativa)
        {
            var resultadoCancelamento = _nfeCancelamento.CancelarNotaFiscal(ufEmitente, codigoUf, ambiente,
                                                                            cnpjEmitente,
                                                                            chaveNFe,
                                                                            protocoloAutorizacao, modeloNota, justificativa);

            if (resultadoCancelamento.Status != StatusEvento.SUCESSO)
            {
                return(resultadoCancelamento);
            }

            var notaFiscalEntity = _notaFiscalRepository.GetNotaFiscalByChave(chaveNFe);

            _eventoService.Salvar(new EventoEntity
            {
                DataEvento = DateTime.ParseExact(resultadoCancelamento.DataEvento, "yyyy-MM-ddTHH:mm:sszzz",
                                                 CultureInfo.InvariantCulture),
                TipoEvento            = resultadoCancelamento.TipoEvento,
                Xml                   = resultadoCancelamento.Xml,
                NotaId                = notaFiscalEntity.Id,
                ChaveIdEvento         = resultadoCancelamento.IdEvento.Replace("ID", string.Empty),
                MotivoCancelamento    = resultadoCancelamento.MotivoCancelamento,
                ProtocoloCancelamento = resultadoCancelamento.ProtocoloCancelamento
            });

            notaFiscalEntity.Status = (int)Status.CANCELADA;
            _notaFiscalRepository.Salvar(notaFiscalEntity, null);

            return(resultadoCancelamento);
        }
Ejemplo n.º 2
0
        public IdentificacaoNFe(CodigoUfIbge uf, DateTime dataHoraEmissao, string cnpjEmissor, Modelo modelo, int serie,
                                string numeroNFe, TipoEmissao tipoEmissao, Ambiente ambiente, Emissor emitente,
                                string naturezaOperacao,
                                FinalidadeEmissao finalidade, bool isImpressaoBobina, PresencaComprador indicadorPresenca,
                                string documentoDanfe)
        {
            _cnpjEmissor    = cnpjEmissor;
            UF              = uf;
            DataHoraEmissao = dataHoraEmissao;
            Modelo          = modelo;
            Serie           = serie;
            Numero          = numeroNFe;
            TipoEmissao     = tipoEmissao;
            Ambiente        = ambiente;

            Chave             = CalcularChaveSemDV();
            DigitoVerificador = CalcularDV(Chave);
            Chave            += DigitoVerificador;

            CodigoMunicipio      = emitente.Endereco.CodigoMunicipio;
            NaturezaOperacao     = naturezaOperacao;
            FinalidadeEmissao    = finalidade;
            TipoOperacao         = TipoOperacao.Saida;
            OperacaoDestino      = OperacaoDestino.Interna; //não suporta interestadual ainda
            FormatoImpressao     = isImpressaoBobina ? FormatoImpressao.Nfce : FormatoImpressao.Retrato;
            FinalidadeConsumidor = documentoDanfe.Contains("CPF") || Modelo == Modelo.Modelo65
                ? FinalidadeConsumidor.ConsumidorFinal
                : FinalidadeConsumidor.Normal;
            PresencaComprador = indicadorPresenca;
            ProcessoEmissao   = ProcessoEmissao.AplicativoContribuinte;
            VersaoAplicativo  = "0.0.0.1";
        }
        public MensagemRetornoInutilizacao InutilizarNotaFiscal(string ufEmitente, CodigoUfIbge codigoUf,
                                                                Ambiente ambiente, string cnpjEmitente, Modelo modeloNota,
                                                                string serie, string numeroInicial, string numeroFinal)
        {
            var mensagemRetorno = _nfeInutilizacao.InutilizarNotaFiscal(ufEmitente, codigoUf, ambiente, cnpjEmitente,
                                                                        modeloNota,
                                                                        serie, numeroInicial, numeroFinal);

            if (mensagemRetorno.Status != Status.ERRO)
            {
                var notaInutilizada = new NotaInutilizadaTO
                {
                    DataInutilizacao = DateTime.Now,
                    IdInutilizacao   = mensagemRetorno.IdInutilizacao,
                    IsProducao       = ambiente == Ambiente.Producao,
                    Modelo           = modeloNota == Modelo.Modelo55 ? 55 : 65,
                    Motivo           = mensagemRetorno.MotivoInutilizacao,
                    Numero           = numeroInicial,
                    Protocolo        = mensagemRetorno.ProtocoloInutilizacao,
                    Serie            = serie
                };

                Salvar(notaInutilizada, mensagemRetorno.Xml);
            }

            return(mensagemRetorno);
        }
        private static IdentificacaoNFe GetIdentificacao(CodigoUfIbge codigoUF, DateTime now, Emissor emitente, Modelo modeloNota,
                                                         int serie, string numeroNFe, TipoEmissao tipoEmissao, Ambiente ambiente, string documentoDanfe)
        {
            var identificacao = new IdentificacaoNFe(codigoUF, now, emitente.CNPJ, modeloNota, serie, numeroNFe, tipoEmissao, ambiente, emitente,
                                                     "Venda", FinalidadeEmissao.Normal, true, PresencaComprador.Presencial, documentoDanfe);

            return(identificacao);
        }
Ejemplo n.º 5
0
        public static TCodUfIBGE ToTCodUfIBGE(CodigoUfIbge codigo)
        {
            switch (codigo)
            {
            case CodigoUfIbge.DF:
                return(TCodUfIBGE.Item53);

            default:
                throw new ArgumentException();
            }
        }
Ejemplo n.º 6
0
        private static Service GerarServicoCancelamento(CodigoUfIbge UF, X509Certificate2 certificado, string endpoint)
        {
            var soapClient = new Evento.NFeRecepcaoEvento4SoapClient(endpoint);

            soapClient.ClientCredentials.ClientCertificate.Certificate = certificado;

            return(new Service()
            {
                SoapClient = soapClient
            });
        }
Ejemplo n.º 7
0
        private static Service GerarServicoInutilizacao(CodigoUfIbge UF, X509Certificate2 certificado, string endpoint)
        {
            var soapClient = new NFeInutilizacao4.NFeInutilizacao4SoapClient(endpoint);

            soapClient.ClientCredentials.ClientCertificate.Certificate = certificado;

            return(new Service()
            {
                SoapClient = soapClient
            });
        }
Ejemplo n.º 8
0
        private static IdentificacaoNFe GetIdentificacao(NotaFiscalModel NotaFiscal, CodigoUfIbge codigoUF, DateTime now,
                                                         Emissor emitente, Modelo modeloNota,
                                                         int serie, string numeroNFe, TipoEmissao tipoEmissao, Ambiente ambiente, string documentoDanfe)
        {
            var finalidadeEmissao = (FinalidadeEmissao)Enum.Parse(typeof(FinalidadeEmissao), Acentuacao.RemoverAcentuacao(NotaFiscal.Finalidade));

            var identificacao = new IdentificacaoNFe(codigoUF, now, emitente.CNPJ, modeloNota, serie, numeroNFe,
                                                     tipoEmissao, ambiente, emitente,
                                                     NotaFiscal.NaturezaOperacao, finalidadeEmissao, NotaFiscal.IsImpressaoBobina,
                                                     NotaFiscal.IndicadorPresenca, documentoDanfe);

            return(identificacao);
        }
Ejemplo n.º 9
0
        public MensagemRetornoEventoCancelamento CancelarNotaFiscal(string ufEmitente, CodigoUfIbge codigoUf, Ambiente ambiente, string cnpjEmitente, string chaveNFe,
                                                                    string protocoloAutorizacao, Modelo modeloNota, string justificativa)
        {
            try
            {
                var infEvento = new TEventoInfEvento();
                infEvento.cOrgao          = UfToTCOrgaoIBGEConversor.GetTCOrgaoIBGE(ufEmitente);
                infEvento.tpAmb           = (XmlSchemas.NfeRecepcaoEvento.Cancelamento.Envio.TAmb)(int) ambiente;
                infEvento.Item            = cnpjEmitente;
                infEvento.ItemElementName = XmlSchemas.NfeRecepcaoEvento.Cancelamento.Envio.ItemChoiceType.CNPJ;
                infEvento.chNFe           = chaveNFe;
                infEvento.dhEvento        = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz");
                infEvento.tpEvento        = TEventoInfEventoTpEvento.Item110111;
                infEvento.nSeqEvento      = "1";
                infEvento.verEvento       = TEventoInfEventoVerEvento.Item100;

                infEvento.detEvento            = new TEventoInfEventoDetEvento();
                infEvento.detEvento.versao     = TEventoInfEventoDetEventoVersao.Item100;
                infEvento.detEvento.descEvento = TEventoInfEventoDetEventoDescEvento.Cancelamento;
                infEvento.detEvento.nProt      = protocoloAutorizacao;
                infEvento.detEvento.xJust      = justificativa;
                infEvento.Id = "ID110111" + chaveNFe + "01";

                var evento = new TEvento();
                evento.versao    = "1.00";
                evento.infEvento = infEvento;

                var envioEvento = new TEnvEvento();
                envioEvento.versao = "1.00";
                envioEvento.idLote = "1";
                envioEvento.evento = new TEvento[] { evento };

                var xml = XmlUtil.Serialize(envioEvento, "http://www.portalfiscal.inf.br/nfe");

                var certificado = _certificadoService.GetX509Certificate2();

                XmlNode node = AssinaturaDigital.AssinarEvento(xml, "#" + infEvento.Id, certificado);

                //var resultadoValidacao = ValidadorXml.ValidarXml(node.OuterXml, "envEventoCancNFe_v1.00.xsd");

                var servico = _serviceFactory.GetService(modeloNota, ambiente,
                                                         Servico.CANCELAMENTO, codigoUf, certificado);

                var client = (NFeRecepcaoEvento4SoapClient)servico.SoapClient;

                var result = client.nfeRecepcaoEvento(node);

                var retorno = (TRetEnvEvento)XmlUtil.Deserialize <TRetEnvEvento>(result.OuterXml);

                if (retorno.cStat.Equals("128"))
                {
                    var retEvento = retorno.retEvento;

                    if (retEvento.Count() > 0)
                    {
                        var retInfEvento = retEvento[0].infEvento;

                        if (retInfEvento.cStat.Equals("135"))
                        {
                            var procEvento = new Proc.TProcEvento();

                            TEnvEvento envEvento        = (TEnvEvento)XmlUtil.Deserialize <TEnvEvento>(node.OuterXml);
                            var        eventoSerialized = XmlUtil.Serialize(envEvento.evento[0], "");
                            procEvento.evento = (Proc.TEvento)XmlUtil.Deserialize <Proc.TEvento>(eventoSerialized);

                            var retEventoSerialized = XmlUtil.Serialize(retEvento[0], "");
                            procEvento.retEvento = (Proc.TRetEvento)XmlUtil.Deserialize <Proc.TRetEvento>(retEventoSerialized);

                            procEvento.versao = "1.00";
                            var procSerialized = XmlUtil.Serialize(procEvento, "http://www.portalfiscal.inf.br/nfe");

                            return(new MensagemRetornoEventoCancelamento()
                            {
                                Status = StatusEvento.SUCESSO,
                                DataEvento = retInfEvento.dhRegEvento,
                                TipoEvento = retInfEvento.tpEvento,
                                Mensagem = retInfEvento.xMotivo,
                                Xml = procSerialized,
                                IdEvento = infEvento.Id,
                                MotivoCancelamento = justificativa,
                                ProtocoloCancelamento = retInfEvento.nProt
                            });
                        }
                        else
                        {
                            return(new MensagemRetornoEventoCancelamento()
                            {
                                Status = StatusEvento.ERRO,
                                Mensagem = retInfEvento.xMotivo,
                            });
                        }
                    }
                }

                return(new MensagemRetornoEventoCancelamento()
                {
                    Status = StatusEvento.ERRO,
                    Mensagem = "Erro desconhecido. Foi gerado um registro com o erro. Contate o suporte.",
                    Xml = ""
                });
            }
            catch (Exception e)
            {
                log.Error(e);
                string sDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "EmissorNFeDir");

                if (!Directory.Exists(sDirectory))
                {
                    Directory.CreateDirectory(sDirectory);
                }

                using (FileStream stream = File.Create(Path.Combine(sDirectory, "cancelarNotaErro.txt")))
                {
                    using (StreamWriter writer = new StreamWriter(stream))
                    {
                        writer.WriteLine(e.ToString());
                    }
                }

                return(new MensagemRetornoEventoCancelamento()
                {
                    Status = StatusEvento.ERRO,
                    Mensagem = "Erro ao tentar contactar SEFAZ. Verifique sua conexão.",
                    Xml = ""
                });
            }
        }
Ejemplo n.º 10
0
        public Service GetService(Modelo modelo, Ambiente ambiente, Servico servico, CodigoUfIbge UF, X509Certificate2 certificado)
        {
            string endpoint = "";

            if (modelo == Modelo.Modelo55)
            {
                if (ambiente == Ambiente.Homologacao)
                {
                    switch (servico)
                    {
                    case Servico.CANCELAMENTO:
                        endpoint = "RecepcaoEventoSoapHomNfe";
                        return(GerarServicoCancelamento(UF, certificado, endpoint));

                    case Servico.INUTILIZACAO:
                        endpoint = "NfeInutilizacao2Homologacao";
                        return(GerarServicoInutilizacao(UF, certificado, endpoint));

                    case Servico.AUTORIZACAO:
                        endpoint = "NfeAutorizacaoSoapHom";
                        return(GerarServicoAutorizacao(UF, certificado, endpoint));

                    case Servico.RetAutorizacao:
                        endpoint = "NfeRetAutorizacaoSoapHom";
                        return(GerarServicoRetAutorizacao(UF, certificado, endpoint));
                    }
                }
                else
                {
                    switch (servico)
                    {
                    case Servico.CANCELAMENTO:
                        endpoint = "RecepcaoEventoSoapProdNfe";
                        return(GerarServicoCancelamento(UF, certificado, endpoint));

                    case Servico.INUTILIZACAO:
                        endpoint = "NfeInutilizacao2Producao";
                        return(GerarServicoInutilizacao(UF, certificado, endpoint));

                    case Servico.AUTORIZACAO:
                        endpoint = "NfeAutorizacaoSoapProd";
                        return(GerarServicoAutorizacao(UF, certificado, endpoint));

                    case Servico.RetAutorizacao:
                        endpoint = "NfeRetAutorizacaoSoapProd";
                        return(GerarServicoRetAutorizacao(UF, certificado, endpoint));
                    }
                }
            }

            if (modelo == Modelo.Modelo65)
            {
                if (ambiente == Ambiente.Homologacao)
                {
                    switch (servico)
                    {
                    case Servico.CANCELAMENTO:
                        endpoint = "RecepcaoEventoSoapHomNfce";
                        return(GerarServicoCancelamento(UF, certificado, endpoint));

                    case Servico.INUTILIZACAO:
                        endpoint = "NfceInutilizacao2Homologacao";
                        return(GerarServicoInutilizacao(UF, certificado, endpoint));

                    case Servico.AUTORIZACAO:
                        endpoint = "NfceAutorizacaoSoapHom";
                        return(GerarServicoAutorizacao(UF, certificado, endpoint));

                    case Servico.RetAutorizacao:
                        endpoint = "NfceRetAutorizacaoSoapHom";
                        return(GerarServicoRetAutorizacao(UF, certificado, endpoint));
                    }
                }
                else
                {
                    switch (servico)
                    {
                    case Servico.CANCELAMENTO:
                        endpoint = "RecepcaoEventoSoapProdNfce";
                        return(GerarServicoCancelamento(UF, certificado, endpoint));

                    case Servico.INUTILIZACAO:
                        endpoint = "NfceInutilizacao2Producao";
                        return(GerarServicoInutilizacao(UF, certificado, endpoint));

                    case Servico.AUTORIZACAO:
                        endpoint = "NfceAutorizacaoSoapProd";
                        return(GerarServicoAutorizacao(UF, certificado, endpoint));

                    case Servico.RetAutorizacao:
                        endpoint = "NfceRetAutorizacaoSoapProd";
                        return(GerarServicoRetAutorizacao(UF, certificado, endpoint));
                    }
                }
            }

            return(null);
        }
Ejemplo n.º 11
0
        internal MensagemRetornoInutilizacao InutilizarNotaFiscal(string ufEmitente, CodigoUfIbge codigoUf, Ambiente ambiente, string cnpjEmitente, Modelo modeloNota,
                                                                  string serie, string numeroInicial, string numeroFinal)
        {
            var inutNFe = new Envio.TInutNFe();

            inutNFe.versao = "4.00";

            var infInut = new Envio.TInutNFeInfInut();

            infInut.tpAmb  = (Envio.TAmb)(int) ambiente;
            infInut.xServ  = Envio.TInutNFeInfInutXServ.INUTILIZAR;
            infInut.cUF    = (Envio.TCodUfIBGE)(int) UfToTCOrgaoIBGEConversor.GetTCOrgaoIBGE(ufEmitente);
            infInut.ano    = DateTime.Now.ToString("yy");
            infInut.CNPJ   = cnpjEmitente;
            infInut.mod    = (Envio.TMod)(int) modeloNota;
            infInut.serie  = serie;
            infInut.nNFIni = numeroInicial;
            infInut.nNFFin = numeroFinal;
            infInut.xJust  = "Não usada, quebra de sequência.";

            var cUF    = infInut.cUF.ToString().Replace("Item", string.Empty);
            var modelo = modeloNota.ToString().Replace("Modelo", string.Empty);

            infInut.Id = "ID" + cUF + infInut.ano + cnpjEmitente + modelo + int.Parse(serie).ToString("D3") + int.Parse(numeroInicial).ToString("D9") + int.Parse(numeroFinal).ToString("D9");

            inutNFe.infInut = infInut;
            var xml         = XmlUtil.Serialize(inutNFe, "http://www.portalfiscal.inf.br/nfe");
            var certificado = _certificadoService.GetX509Certificate2();
            var node        = AssinaturaDigital.AssinarInutilizacao(xml, "#" + infInut.Id, certificado);

            var servico = _serviceFactory.GetService(modeloNota, ambiente, Servico.INUTILIZACAO, codigoUf, certificado);

            var client = (NFeInutilizacao4SoapClient)servico.SoapClient;

            var result = client.nfeInutilizacaoNF(node);

            var retorno = (Retorno.TRetInutNFe)XmlUtil.Deserialize <Retorno.TRetInutNFe>(result.OuterXml);

            if (retorno.infInut.cStat.Equals("102"))
            {
                var procInut = new Retorno.ProcInut.TProcInutNFe();

                var procSerialized = "<?xml version=\"1.0\" encoding=\"utf-8\"?><ProcInutNFe versao=\"4.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">"
                                     + node.OuterXml.Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", string.Empty)
                                     + result.OuterXml.Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", string.Empty)
                                     + "</ProcInutNFe>";

                return(new MensagemRetornoInutilizacao()
                {
                    IdInutilizacao = infInut.Id,
                    Status = Status.SUCESSO,
                    Mensagem = retorno.infInut.xMotivo,
                    DataInutilizacao = retorno.infInut.dhRecbto,
                    MotivoInutilizacao = infInut.xJust,
                    ProtocoloInutilizacao = retorno.infInut.nProt,
                    Xml = procSerialized
                });
            }
            else
            {
                return(new MensagemRetornoInutilizacao()
                {
                    Status = Status.ERRO,
                    Mensagem = retorno.infInut.xMotivo
                });
            }
        }
Ejemplo n.º 12
0
        public static bool ExecutarConsultaStatus(CodigoUfIbge codigoUF, Ambiente ambiente, X509Certificate2 certificado, Modelo modelo)
        {
            XmlNode node = null;

            try
            {
                var parametro = new TConsStatServ();
                parametro.cUF    = TCodUfIBGEConversor.ToTCodUfIBGE(codigoUF);
                parametro.tpAmb  = ambiente == Ambiente.Homologacao ? TAmb.Item2 : TAmb.Item1;
                parametro.versao = "4.00";
                parametro.xServ  = TConsStatServXServ.STATUS;

                string nFeNamespaceName = "http://www.portalfiscal.inf.br/nfe";
                string parametroXML     = XmlUtil.Serialize(parametro, nFeNamespaceName);

                XmlDocument doc    = new XmlDocument();
                XmlReader   reader = XmlReader.Create(new StringReader(parametroXML));
                reader.MoveToContent();

                node = doc.ReadNode(reader);

                string endpoint = "";

                if (ambiente == Ambiente.Homologacao)
                {
                    if (modelo == Modelo.Modelo55)
                    {
                        endpoint = "NfeStatusServico2Hom";
                    }
                    else
                    {
                        endpoint = "NfceStatusServico2Hom";
                    }
                }
                else
                {
                    if (modelo == Modelo.Modelo55)
                    {
                        endpoint = "NfeStatusServico2Prod";
                    }
                    else
                    {
                        endpoint = "NfceStatusServico2Prod";
                    }
                }

                var soapClient = new NfeStatusServico4SoapClient(endpoint);
                soapClient.ClientCredentials.ClientCertificate.Certificate = certificado;

                XmlNode result = soapClient.nfeStatusServicoNF(node);

                var retorno = (XmlSchemas.NfeStatusServico2.Retorno.TRetConsStatServ)XmlUtil.Deserialize <XmlSchemas.NfeStatusServico2.Retorno.TRetConsStatServ>(result.OuterXml);

                return(retorno.cStat == "107");
            }
            catch (Exception e)
            {
                log.Error(e);
                return(false);
            }
        }
Ejemplo n.º 13
0
        private NFeAutorizacao4Soap CriarClientWS(NotaFiscal notaFiscal, X509Certificate2 certificado, CodigoUfIbge codigoUf)
        {
            var servico = _serviceFactory.GetService(notaFiscal.Identificacao.Modelo,
                                                     notaFiscal.Identificacao.Ambiente, Servico.AUTORIZACAO, codigoUf, certificado);
            var client = (NFeAutorizacao4Soap)servico.SoapClient;

            return(client);
        }