Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            try
            {
                GeraXml.AmbienteNFCe = "1";

                CertificadoDigital.getInstance.Seleciona_Certificado();
                (new EmitenteDao()).SelecionaEmitente();

                var control = (new ControleFiscalDao()).getControle();
                if (control != null)
                {
                    ControleFiscal.GetInstance.TokenHomologacao      = control.TokenHomologacao;
                    ControleFiscal.GetInstance.TokenProducao         = control.TokenProducao;
                    ControleFiscal.GetInstance.CaminhoXmlAutorizado  = control.CaminhoXmlAutorizado;
                    ControleFiscal.GetInstance.CaminhoXmlCancelado   = control.CaminhoXmlCancelado;
                    ControleFiscal.GetInstance.CaminhoXmlInutilizado = control.CaminhoXmlInutilizado;

                    control = null;
                }

                var dataInicial = new DateTime(2018, 10, 03);
                var dataFinal   = new DateTime(2018, 10, 03);

                var pedidos = (new PedidoDao()).GetPedidosDoCaixa(dataInicial, dataFinal);

                foreach (var pedido in pedidos)
                {
                    pedido.DataDigitacao = DateTime.Now;


                    pedido.NFiscal = (new ControleFiscalDao()).GetUltimoNumeroNFiscalGerado() + 1;

                    pedido.Cliente    = (new ClienteDao()).GetClienteConsumidorNaoIdentificado();
                    pedido.Operacao   = (new OperacaoDao()).GetOperacaoPorPedido(pedido.NumDoc);
                    pedido.Pagamentos = (new TipoPagamentoDao()).GetPagametosDoPedido(pedido.NumDoc);

                    pedido.ItensDoPedido = (new PedidoItemDao()).GetItensDoPedido(pedido.NumDoc);
                    pedido.ItensDoPedido.ForEach(pedidoItem =>
                    {
                        pedidoItem.Produto             = (new ProdutoDao().GetProduto(pedidoItem.ProdutoId));
                        pedidoItem.Produto.GrupoFiscal = (new ProdutoGrupoFiscalDao()).GetGrupoFiscalPorProduto(pedidoItem.ProdutoId);
                    });

                    var geraXml = new GeraXml();

                    //Gerando XML
                    var xml      = geraXml.GeraXmlNFCe(pedido);
                    var GravaXml = File.CreateText(@"C:\Users\Succo\Desktop\xmlGerado.xml");
                    GravaXml.Write(xml.InnerXml);
                    GravaXml.Close();

                    //Assinando XML
                    var xmlAssinado      = (new AssinaXml()).AssinaXML(xml.InnerXml, "infNFe", CertificadoDigital.getInstance.oCertificado);
                    var GravaXmlAssinado = File.CreateText(@"C:\Users\Succo\Desktop\xmlAssinado.xml");
                    GravaXmlAssinado.Write(xmlAssinado.InnerXml);
                    GravaXmlAssinado.Close();


                    //Validando XML
                    try
                    {
                        // Validando o XML
                        var retValidar = (new ValidaXml()).Valida(xmlAssinado, "NFe");

                        //Inserindo a URL QRCode no xml já assinado
                        xmlAssinado.LoadXml(xmlAssinado.InnerXml.Replace("</infNFe>", "</infNFe><infNFeSupl><qrCode><![CDATA[" +
                                                                         geraXml.GetUrlQRCode(xmlAssinado, pedido) + "]]></qrCode><urlChave>http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode</urlChave></infNFeSupl>"));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("** Erro ao validar **");
                        Console.WriteLine(ex.Message);
                    }

                    var GravaXmlAssinadoComQrCode = File.CreateText(@"C:\Users\Succo\Desktop\xmlAssinadoComQrCode.xml");
                    GravaXmlAssinadoComQrCode.Write(xmlAssinado.InnerXml);
                    GravaXmlAssinadoComQrCode.Close();



                    var retornoDaTransmicao = (new TransmiteXml()).XML_NFCe4(xmlAssinado, pedido.NFiscal.ToString(), CertificadoDigital.getInstance.oCertificado);

                    if (retornoDaTransmicao.Substring(0, 4) != "Erro")
                    {
                        var xmlRetorno = new XmlDocument();
                        xmlRetorno.LoadXml(retornoDaTransmicao);

                        var GravaXmlTransmitido = File.CreateText(@"C:\Users\Succo\Desktop\xmlTransmitido.xml");
                        GravaXmlTransmitido.Write(xmlRetorno.InnerXml);
                        GravaXmlTransmitido.Close();

                        // Lote processado
                        if (xmlRetorno.GetElementsByTagName("cStat")[0].InnerText == "104")
                        {
                            // Autorizado
                            if (xmlRetorno.GetElementsByTagName("cStat")[1].InnerText == "100")
                            {
                                pedido.Chave     = xmlRetorno.GetElementsByTagName("chNFe")[0].InnerText;
                                pedido.Protocolo = xmlRetorno.GetElementsByTagName("nProt")[0].InnerText;

                                // Separar somente o conteúdo a partir da tag <protNFe> até </protNFe>
                                var nPosI   = retornoDaTransmicao.IndexOf("<protNFe");
                                var nPosF   = retornoDaTransmicao.Length - (nPosI + 13);
                                var strProc = retornoDaTransmicao.Substring(nPosI, nPosF);


                                // XML pronto para salvar
                                var strXmlProcNfe = @"<?xml version=""1.0"" encoding=""utf-8"" ?><nfeProc xmlns=""http://www.portalfiscal.inf.br/nfe"" versao=""4.00"">" + xmlAssinado.InnerXml + strProc + "</nfeProc>";

                                pedido.Xml = new Xml()
                                {
                                    NumDoc     = pedido.NumDoc,
                                    ArquivoXml = strXmlProcNfe,
                                    Data       = DateTime.Now,
                                    Modelo     = pedido.ModeloNFiscal,
                                    StatNFCe   = "100"
                                };



                                using (var db = new Database("stringConexao"))
                                {
                                    db.BeginTransaction();

                                    try
                                    {
                                        db.Update("Update Controle Set NFiscal=" + pedido.NFiscal + " Where ChvControle = 1");
                                        db.Update("Update Movdb Set data_nfiscal = '" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "', NFiscal= " + pedido.NFiscal + ", Chave='" + pedido.Chave + "' ,Protocolo='" + pedido.Protocolo + "', status_nfce = '" + pedido.Xml.StatNFCe + "' Where NumDoc = " + pedido.NumDoc);

                                        db.CompleteTransaction();
                                    }
                                    catch (Exception)
                                    {
                                        db.AbortTransaction();
                                    }

                                    if (!string.IsNullOrEmpty(ControleFiscal.GetInstance.CaminhoXmlAutorizado))
                                    {
                                        //Salvando o arquivo XML na pasta
                                        var Grava = File.CreateText(ControleFiscal.GetInstance.CaminhoXmlAutorizado.Remove(ControleFiscal.GetInstance.CaminhoXmlAutorizado.Length - 1) + DateTime.Now.Month + @"\" + pedido.Chave + "-procNfe.xml");
                                        Grava.Write(pedido.Xml.ArquivoXml);
                                        Grava.Close();
                                    }
                                }
                            }
                        }
                        else
                        {
                            Console.WriteLine("Erro no lote");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadKey();
            }
        }
Ejemplo n.º 2
0
        // ========================================================================
        private bool Gera_NFCe()
        {
            var xmlNFCe         = new XmlDocument();
            var xmlNFCeAssinado = new XmlDocument();

            var gerarXml      = new GeraXml();
            var assinarXml    = new AssinaXml();
            var validarXml    = new ValidaXml();
            var transmitirXml = new TransmiteXml();
            //Email email = new Email();
            var xmlDao = new XmlDao();

            StreamWriter Grava;

            string retValidar;
            string strProc;
            string strXmlProcNfe;
            string retTransmitir;
            string cStatus_LoteProcessado;
            string cStatus_Autorizado;

            int nPosI;
            int nPosF;

            try
            {
                retTransmitir = string.Empty;
                retValidar    = string.Empty;

                cStatus_LoteProcessado = string.Empty;
                cStatus_Autorizado     = string.Empty;


                _pedido.NFiscal = ((new ControleFiscalDao()).GetUltimoNumeroNFiscalGerado() + 1);

                try
                {
                    // Gerando o XML
                    xmlNFCe = (gerarXml.GeraXmlNFCe(_pedido));

                    //MensagemSistema("Arquivo Gerado ...", Color.OliveDrab);

                    // Assinando o XML
                    xmlNFCeAssinado = assinarXml.AssinaXML(xmlNFCe.InnerXml, "infNFe", CertificadoDigital.getInstance.oCertificado);
                }
                catch (Exception ex)
                {
                    //Log_Exception.Monta_ArquivoLog(ex);
                    //MensagemSistema("** Erro ao ASSINAR XML NFC-e, tente novamente **", Color.Brown);
                    MessageBox.Show("Erro ao tentar gerar e assinar o xml  da NFC-e" + Environment.NewLine + "Erro: " + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(false);
                }

                //MensagemSistema("Arquivo Assinado ...", Color.OliveDrab);



                if (GeraXml.AmbienteNFCe == "2")
                {
                    //Salvando o arquivo XML na pasta
                    Grava = File.CreateText(@"C:\Users\Comercial\Desktop\ASSINADO.xml");
                    Grava.Write(xmlNFCeAssinado.InnerXml);
                    Grava.Close();
                }


                try
                {
                    // Validando o XML
                    retValidar = validarXml.Valida(xmlNFCeAssinado, "NFe");
                    urlQRCode  = gerarXml.GetUrlQRCode(xmlNFCeAssinado, _pedido);

                    //Inserindo a URL QRCode no xml já assinado
                    xmlNFCeAssinado.LoadXml(xmlNFCeAssinado.InnerXml.Replace("</infNFe>", "</infNFe><infNFeSupl><qrCode><![CDATA[" + urlQRCode + "]]></qrCode><urlChave>http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode</urlChave></infNFeSupl>"));
                }
                catch (Exception ex)
                {
                    //Log_Exception.Monta_ArquivoLog(ex);

                    //MensagemSistema("** Erro ao VALIDAR XML NFC-e **", Color.Brown);
                    MessageBox.Show("Erro ao tentar validar o xml da NFC-e " + Environment.NewLine + "Erro: " + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(false);
                }

                if (retValidar == string.Empty)
                {
                    try
                    {
                        //MensagemSistema("Enviando a NFC-e", Color.OliveDrab);

                        // Recebendo o XML de retorno da transmissão
                        retTransmitir = transmitirXml.XML_NFCe4(xmlNFCeAssinado, _pedido.NFiscal.ToString(), CertificadoDigital.getInstance.oCertificado);

                        if (retTransmitir.Substring(0, 4) != "Erro")
                        {
                            XmlDocument xmlRetorno = new XmlDocument();
                            xmlRetorno.LoadXml(retTransmitir);

                            // Lote processado
                            if (xmlRetorno.GetElementsByTagName("cStat")[0].InnerText == "104")
                            {
                                // Autorizado
                                if (xmlRetorno.GetElementsByTagName("cStat")[1].InnerText == "100")
                                {
                                    try
                                    {
                                        //MensagemSistema("Autorizado o uso da NFC-e", Color.OliveDrab);

                                        _pedido.Chave     = xmlRetorno.GetElementsByTagName("chNFe")[0].InnerText;
                                        _pedido.Protocolo = xmlRetorno.GetElementsByTagName("nProt")[0].InnerText;

                                        // Separar somente o conteúdo a partir da tag <protNFe> até </protNFe>
                                        nPosI   = retTransmitir.IndexOf("<protNFe");
                                        nPosF   = retTransmitir.Length - (nPosI + 13);
                                        strProc = retTransmitir.Substring(nPosI, nPosF);


                                        // XML pronto para salvar
                                        strXmlProcNfe = @"<?xml version=""1.0"" encoding=""utf-8"" ?><nfeProc xmlns=""http://www.portalfiscal.inf.br/nfe"" versao=""4.00"">" + xmlNFCeAssinado.InnerXml + strProc + "</nfeProc>";

                                        _pedido.Xml = new Xml()
                                        {
                                            NumDoc     = _pedido.NumDoc,
                                            ArquivoXml = strXmlProcNfe,
                                            Data       = DateTime.Now,
                                            Modelo     = _pedido.ModeloNFiscal,
                                            StatNFCe   = "100"
                                        };



                                        using (var db = new Database("stringConexao"))
                                        {
                                            db.BeginTransaction();

                                            try
                                            {
                                                db.Update("Update Controle Set NFiscal=" + _pedido.NFiscal + " Where ChvControle = 1");
                                                db.Update("Update Movdb Set data_nfiscal = '" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "', NFiscal= " + _pedido.NFiscal + ", Chave='" + _pedido.Chave + "' ,Protocolo='" + _pedido.Protocolo + "', status_nfce = '" + _pedido.Xml.StatNFCe + "' Where NumDoc = " + _pedido.NumDoc);

                                                db.CompleteTransaction();
                                            }
                                            catch (Exception)
                                            {
                                                db.AbortTransaction();
                                            }
                                        }



                                        if (GeraXml.AmbienteNFCe == "2")
                                        {
                                            //Salvando o arquivo XML na pasta
                                            Grava = File.CreateText(@"C:\Users\Comercial\Desktop\EMITIDO.xml");
                                            Grava.Write(_pedido.Xml.ArquivoXml);
                                            Grava.Close();
                                        }

                                        if (GeraXml.AmbienteNFCe == "1")
                                        {
                                            if (!string.IsNullOrEmpty(ControleFiscal.GetInstance.CaminhoXmlAutorizado))
                                            {
                                                //Salvando o arquivo XML na pasta
                                                Grava = File.CreateText(ControleFiscal.GetInstance.CaminhoXmlAutorizado.Remove(ControleFiscal.GetInstance.CaminhoXmlAutorizado.Length - 1) + DateTime.Now.Month + @"\" + _pedido.Chave + "-procNfe.xml");
                                                Grava.Write(_pedido.Xml.ArquivoXml);
                                                Grava.Close();
                                            }
                                        }


                                        //Salva arquivo XML no Banco SQL (NFe)
                                        if (xmlDao.GravaXml(_pedido.Xml))
                                        {
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        MessageBox.Show("NOTA EMITIDA, porém houve um erro ao inesperado ao salvar as informações no banco de dados " + Environment.NewLine + "Erro: " + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        return(false);
                                    }
                                }
                                else
                                {
                                    MessageBox.Show("O xml não pôde ser Autorizado! " + Environment.NewLine + "Motivo: " + xmlRetorno.GetElementsByTagName("xMotivo")[1].InnerText, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    return(false);
                                }
                            }
                            else
                            {
                                //MensagemSistema("Erro ao Transmitir(003) XML NFC-e para SEFAZ", Color.Brown);
                                MessageBox.Show("Erro no arquivo xml: " + Environment.NewLine + "Erro: " + xmlRetorno.GetElementsByTagName("xMotivo")[0].InnerText, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                return(false);
                            }
                        }
                        else
                        {
                            //MensagemSistema("Erro ao Transmitir(002) XML NFC-e para SEFAZ", Color.Brown);
                            MessageBox.Show("Erro ao tentar transmitir o xml da NFC-e, tente novamente " + Environment.NewLine + "Erro: " + retTransmitir, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return(false);
                        }
                    }
                    catch (Exception ex)
                    {
                        //Log_Exception.Monta_ArquivoLog(ex);
                        //MensagemSistema("Erro ao Transmitir(001) XML NFC-e para SEFAZ", Color.Brown);
                        MessageBox.Show("Erro: " + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return(false);
                    }
                }
                else
                {
                    //MensagemSistema("Erro ao validar XML NFC-e", Color.Brown);
                    MessageBox.Show("Erro XML Shema: " + retValidar, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(false);
                }
            }
            catch (Exception ex)
            {
                //Log_Exception.Monta_ArquivoLog(ex);
                //MensagemSistema("Ocorreu um erro inesperado, informe ao administrador do sistema!", Color.Brown);
                MessageBox.Show("Erro : " + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(false);
            }
            return(true);
        }