示例#1
0
        private void SalvarArquivoXML_Pasta(string caminho, string arquivoXML)
        {
            StreamWriter Grava;

            try
            {
                /*
                 * case 1:
                 *  caminhoXML = @"Impetus\Comercial\Retorno\Saidas\" + DateTime.Now.Year + @"\" + DateTime.Now.Month + @"\" + lstPedido[item].chave + "-procNfe.xml";
                 *  break;
                 * case 2:
                 *  caminhoXML = @"Concursar\Retorno\Gravados\" + DateTime.Now.Year + @"\" + DateTime.Now.Month + @"\" + lstPedido[item].chave + "-procNfe.xml";
                 *  break;
                 * case 3:
                 *  caminhoXML = @"Nahgash\Retorno\Gravados\" + lstPedido[item].chave + "-procNfe.xml";
                 *  break;
                 */


                // Gravando o arquivo xml na pasta de Saidas
                Grava = File.CreateText(caminho);
                Grava.Write(arquivoXML);
                Grava.Close();
            }
            catch (Exception)
            {
                throw;
            }
        }
        private void CmdCancela_Click(object sender, EventArgs e)
        {
            if ((DateTime.Now - p.datadigitacao).TotalHours > 24)
            {
                MessageBox.Show("Prazo de Cancelamento Superior ao Previsto na Legislação.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            if (p.conddoc == "C")
            {
                MessageBox.Show("NF-e já cancelada.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            if (cboMotivo.Text.Trim().Length < 15)
            {
                MessageBox.Show("Minimo de 15 caracteres!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            this.Cursor = Cursors.WaitCursor;

            StreamWriter  Grava;
            GerarXML      geraxml    = new GerarXML();
            AssinarXML    assinar    = new AssinarXML();
            ValidarXML    validar    = new ValidarXML();
            TransmitirXML transmitir = new TransmitirXML();
            XMLDao        xmldao     = new XMLDao();

            string retValidar    = string.Empty;
            string xMotivo       = cboMotivo.Text;
            string retTransmitir = string.Empty;

            txtResultado.Text = string.Empty;

            try
            {
                //Gerando xml
                xmlCanc = geraxml.CancelamentoNFe(p, xMotivo);

                //Assinando xml
                xmlCanc_Assinado = assinar.AssinaXML(xmlCanc.InnerXml, "infEvento", Certificado.getInstance.oCertificado);
            }
            catch (Exception ex)
            {
                Log_Exception.Monta_ArquivoLog(ex);

                MessageBox.Show("Erro ao assinar: " + ex.Message, "Mensagem", MessageBoxButtons.OK);
                this.Cursor = Cursors.Default;
                return;
            }

            try
            {
                //Validando o xml assinado
                retValidar = validar.Valida(xmlCanc_Assinado, "Canc");
            }
            catch (Exception ex)
            {
                Log_Exception.Monta_ArquivoLog(ex);

                MessageBox.Show("Erro ao Validar: " + ex.Message, "Mensagem", MessageBoxButtons.OK);
                this.Cursor = Cursors.Default;
                return;
            }


            if (retValidar == string.Empty)
            {
                try
                {
                    //Recebendo xml de retorno da transmissão
                    retTransmitir = transmitir.XML_CancelamentoNFCe4(xmlCanc_Assinado, p.nfiscal, Certificado.getInstance.oCertificado);

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

                        //Lote processado
                        if (xmlRetorno.GetElementsByTagName("cStat")[0].InnerText == "128")
                        {
                            //Evento registrado e vinculado a NFC-e
                            if (xmlRetorno.GetElementsByTagName("cStat")[1].InnerText == "135")
                            {
                                try
                                {
                                    p.xml.numdoc     = p.numdoc;
                                    p.xml.data       = DateTime.Now;
                                    p.xml.arquivoXML = xmlRetorno.InnerXml;
                                    p.xml.Modelo     = p.modelo;
                                    p.xml.statNFCe   = "135";


                                    if (!string.IsNullOrEmpty(Controle.getInstance.caminho_XMLCancelado))
                                    {
                                        //Salva o arquivo XML na pasta
                                        Grava = File.CreateText(Controle.getInstance.caminho_XMLCancelado + @"\110111-" + p.chave + "-1-procEventoNfe.xml");
                                        Grava.Write(p.xml.arquivoXML);
                                        Grava.Close();
                                    }

                                    //Salva arquivo XML no Banco SQL (NFe)
                                    if (xmldao.Grava_XML(p.xml))
                                    {
                                        //Atualizando o status do pedido para cancelada (135)
                                        (new PedidoDao()).Update_StatNFCe_CondDoc(p.numdoc, p.xml.statNFCe);


                                        var db = new Database("stringConexao");

                                        try
                                        {
                                            db.BeginTransaction();

                                            foreach (PedidoItem pItem in p.lstPedidoItem)
                                            {
                                                db.Update("UPDATE produto " +
                                                          "SET Estoque = Estoque + " + pItem.qtditens * 1 +
                                                          ",ValorVnd = ValorVnd + " + (pItem.valitens * -1).ToString().Replace(",", ".") +
                                                          " WHERE CodPro = " + pItem.codpro);
                                            }

                                            //Boleta cancelada
                                            db.Update("UPDATE Boleta set condicao = 2 where numdoc = " + p.numdoc);


                                            db.CompleteTransaction();
                                        }
                                        catch (Exception)
                                        {
                                            db.AbortTransaction();
                                            MessageBox.Show("Houve um erro inesperado ao atualizar o estoque e cancelar as boletas, informe imediatamente ao administrador do sistema!", "Mensagem de erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                            return;
                                        }


                                        txtResultado.AppendText("Pedido cancelado com sucesso!");
                                        txtResultado.ForeColor = Color.Green;
                                    }
                                    else
                                    {
                                        txtResultado.AppendText("Pedido cancelado com sucesso, porém houve um erro ao salvar o arquivo XML no banco de dados, informe ao administrador do sistema!");
                                        txtResultado.ForeColor = Color.Green;
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Log_Exception.Monta_ArquivoLog(ex);

                                    txtResultado.AppendText("Pedido cancelado com sucesso, porém houve um erro inesperado, informe ao administrador do sistema!");
                                    txtResultado.ForeColor = Color.Green;
                                }
                            }
                            else
                            {
                                txtResultado.AppendText("Erro ao cancelar (002): " + xmlRetorno.GetElementsByTagName("xMotivo")[1].InnerText + Environment.NewLine);
                                txtResultado.ForeColor = Color.Maroon;
                                this.Cursor            = Cursors.Default;
                                return;
                            }
                        }
                        else
                        {
                            txtResultado.AppendText("Erro ao cancelar (001): " + xmlRetorno.GetElementsByTagName("xMotivo")[0].InnerText + Environment.NewLine);
                            txtResultado.ForeColor = Color.Maroon;
                            this.Cursor            = Cursors.Default;
                            return;
                        }
                    }
                    else
                    {
                        txtResultado.AppendText("Erro ao transmitir (001): " + retTransmitir + Environment.NewLine);
                        txtResultado.ForeColor = Color.Maroon;
                        this.Cursor            = Cursors.Default;
                        return;
                    }
                }
                catch (Exception ex)
                {
                    Log_Exception.Monta_ArquivoLog(ex);

                    MessageBox.Show("Erro ao Transmitir XML: " + ex.Message, "Mensagem", MessageBoxButtons.OK);
                    this.Cursor = Cursors.Default;
                    return;
                }
            }
            else
            {
                txtResultado.AppendText("Erro na validação do XML: " + retValidar + Environment.NewLine);
                txtResultado.ForeColor = Color.Maroon;
                this.Cursor            = Cursors.Default;
                return;
            }

            this.Cursor = Cursors.Default;
        }
示例#3
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);
        }
示例#4
0
        private void cmdInutilizar_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.WaitCursor;

            string retValidar    = string.Empty;
            string retTransmitir = string.Empty;

            txtResultado.Text = string.Empty;

            GerarXML      geraxml    = new GerarXML();
            TransmitirXML transmitir = new TransmitirXML();
            ValidarXML    validarXml = new ValidarXML();
            AssinarXML    assinar    = new AssinarXML();
            StreamWriter  Grava;

            try
            {
                //Gerando xml
                xmlInut = geraxml.InutilizacaoNFe(Convert.ToInt32(txtNFInicial.Text), Convert.ToInt32(txtNFInicial.Text), p.serienfiscal, "Erro interno do sistema", p.modelo);

                //Assinando xml
                xmlInut_Assinado = assinar.AssinaXML(xmlInut.InnerXml, "infInut", Certificado.getInstance.oCertificado);
            }
            catch (Exception ex)
            {
                Log_Exception.Monta_ArquivoLog(ex);

                txtResultado.AppendText("Erro ao assinar XML: " + ex.Message + Environment.NewLine);
                txtResultado.ForeColor = Color.Maroon;
                this.Cursor            = Cursors.Default;
                return;
            }



            try
            {
                // Validando o XML
                retValidar = validarXml.Valida(xmlInut_Assinado, "Inut");
            }
            catch (Exception ex)
            {
                Log_Exception.Monta_ArquivoLog(ex);

                txtResultado.AppendText("Erro ao validar XML: " + ex.Message + Environment.NewLine);
                txtResultado.ForeColor = Color.Maroon;
                this.Cursor            = Cursors.Default;
                return;
            }


            if (retValidar == string.Empty)
            {
                try
                {
                    //Recebendo xml de retorno da transmissão
                    retTransmitir = transmitir.XML_InutilizacaoNFCe4(xmlInut_Assinado, Certificado.getInstance.oCertificado);


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

                        //Lote Processado
                        if (retxml.GetElementsByTagName("cStat")[0].InnerText == "102")
                        {
                            try
                            {
                                XMLDao xmlDao = new XMLDao();

                                p.xml.numdoc     = p.numdoc;
                                p.xml.data       = DateTime.Now;
                                p.xml.arquivoXML = retxml.InnerXml;
                                p.xml.Modelo     = p.modelo;
                                p.xml.statNFCe   = "102";

                                if (!string.IsNullOrEmpty(Controle.getInstance.caminho_XMLInutilizado))
                                {
                                    //Salvando o arquivo XML na pasta selecionada no FORM Parametros > aba Arquivos
                                    Grava = File.CreateText(Controle.getInstance.caminho_XMLInutilizado + @"\NOTA " + p.nfiscal + " - INUTILIZADA.xml");
                                    Grava.Write(p.xml.arquivoXML);
                                    Grava.Close();
                                }


                                //Atualizando o status do pedido para inutilizada
                                (new PedidoDao()).Update_StatNFCe_CondDoc(p.numdoc, "102");



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

                                        foreach (PedidoItem pItem in p.lstPedidoItem)
                                        {
                                            db.Update("UPDATE produto " +
                                                      "SET Estoque = Estoque + " + pItem.qtditens * 1 +
                                                      ",ValorVnd = ValorVnd + " + (pItem.valitens * -1).ToString().Replace(",", ".") +
                                                      " WHERE CodPro = " + pItem.codpro);
                                        }

                                        //Boleta cancelada
                                        db.Update("UPDATE Boleta set condicao = 2 where numdoc = " + p.numdoc);


                                        db.CompleteTransaction();
                                    }
                                    catch (Exception)
                                    {
                                        db.AbortTransaction();
                                        MessageBox.Show("Houve um erro inesperado ao atualizar o estoque e cancelar as boletas, informe imediatamente ao administrador do sistema!", "Mensagem de erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        return;
                                    }
                                }


                                txtResultado.AppendText("Nota Fiscal inutilizada com sucesso!");
                                txtResultado.ForeColor = Color.Green;
                            }
                            catch (Exception ex)
                            {
                                Log_Exception.Monta_ArquivoLog(ex);

                                txtResultado.AppendText("Nota Fiscal inutilizada com sucesso, porém houve um erro inesperado, informe ao administrador do sistema!");
                                txtResultado.ForeColor = Color.Maroon;
                            }
                        }
                        else
                        {
                            txtResultado.AppendText("Erro ao transmitir XML (002): " + retxml.GetElementsByTagName("xMotivo")[0].InnerText + Environment.NewLine);
                            txtResultado.ForeColor = Color.Maroon;
                        }
                    }
                    else
                    {
                        txtResultado.AppendText("Erro ao transmitir XML (001): " + retTransmitir + Environment.NewLine);
                        txtResultado.ForeColor = Color.Maroon;
                    }
                }
                catch (Exception ex)
                {
                    Log_Exception.Monta_ArquivoLog(ex);

                    txtResultado.AppendText("Erro ao finalizar XML: " + ex.Message + Environment.NewLine);
                    txtResultado.ForeColor = Color.Maroon;
                }
            }

            this.Cursor = Cursors.Default;
        }
示例#5
0
        private void Gerando_NFCe()
        {
            PedidoDao    pdDao  = new PedidoDao();
            XMLDao       xmlDao = new XMLDao();
            StreamWriter Grava;

            string retValidar;
            string strProc;
            string strXmlProcNfe;
            int    nPosI;
            int    nPosF;

            string cStatus_LoteProcessado;
            string cStatus_Autorizado;

            //TxtResultado.Text = string.Empty;
            //txtDadosXML.Text = string.Empty;


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

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

                try
                {
                    // Gerando o XML
                    xmlNFe = (gerarXml.NFe(pedido));

                    MensagemSistema("Arquivo Gerado", Color.Green);


                    txtChave.Text = gerarXml.strChave;

                    // Assinando o XML
                    xmlNFe_Assinado = assinarXml.AssinaXML(xmlNFe.InnerXml, "infNFe", Certificado.getInstance.oCertificado);
                }
                catch (Exception ex)
                {
                    Log_Exception.Monta_ArquivoLog(ex);
                    MensagemSistema("** Erro ao ASSINAR **" + Environment.NewLine + "Erro: " + ex.Message, Color.Maroon);
                    return;
                }

                MensagemSistema("Arquivo Assinado", Color.Green);

                try
                {
                    // Validando o XML
                    retValidar = validarXml.Valida(xmlNFe_Assinado, "NFe");
                }
                catch (Exception ex)
                {
                    Log_Exception.Monta_ArquivoLog(ex);

                    MensagemSistema("** Erro ao VALIDAR **" + Environment.NewLine + "Erro: " + ex.Message, Color.Maroon);
                    return;
                }


                //Inserindo a URL QRCode no xml já assinado
                xmlNFe_Assinado.LoadXml(xmlNFe_Assinado.InnerXml.Replace("</infNFe>", "</infNFe><infNFeSupl><qrCode><![CDATA[" +
                                                                         gerarXml.Gera_Url_QRCode(xmlNFe_Assinado, pedido) + "]]></qrCode></infNFeSupl>"));



                //==========================================================================
                string caminho = @"C:\Documents and Settings\Renan\Desktop\XmlAssinado.xml";
                Grava = File.CreateText(caminho);
                Grava.Write(xmlNFe_Assinado.InnerXml);
                Grava.Close();
                //==========================================================================



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

                        // Recebendo o XML de retorno da transmissão
                        retTransmitir = transmitirXml.XML_NFCe(xmlNFe_Assinado, pedido.nfiscal, Certificado.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.Green);

                                        pedido.chave     = xmlRetorno.GetElementsByTagName("chNFe")[0].InnerText;
                                        pedido.protocolo = xmlRetorno.GetElementsByTagName("nProt")[0].InnerText;

                                        txtProtocolo.Text = pedido.protocolo;
                                        txtData.Text      = DateTime.Now.ToString();

                                        // 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=""3.10"">" + xmlNFe_Assinado.InnerXml + strProc + "</nfeProc>";

                                        pedido.xml            = new XML();
                                        pedido.xml.numdoc     = pedido.numdoc;
                                        pedido.xml.arquivoXML = strXmlProcNfe;
                                        pedido.xml.data       = DateTime.Now;
                                        pedido.xml.Modelo     = pedido.modelo;


                                        if (GerarXML.str_Ambiente == "1")
                                        {
                                            //SalvarArquivoXML_Pasta(i);
                                        }

                                        //SalvarArquivoXML_Pasta(@"C:\Documents and Settings\Renan\Desktop\NFCE EMITIDA.xml", pedido.xml.arquivoXML);



                                        //==========================================================================
                                        caminho = @"C:\Documents and Settings\Renan\Desktop\NFCE EMITIDA.xml";
                                        Grava   = File.CreateText(caminho);
                                        Grava.Write(strXmlProcNfe);
                                        Grava.Close();
                                        //==========================================================================



                                        // Salvando o xml no Banco de Dados
                                        if (xmlDao.Grava_XML(pedido.xml))
                                        {
                                            // Atualizando o pedido com Chave e Protocolo
                                            if (pdDao.Update_ChaveProtocolo(pedido.numdoc, pedido.chave, pedido.protocolo))
                                            {
                                                //Atualizando a data do pedido
                                                pdDao.Update_DataNFiscal(pedido.numdoc, DateTime.Now);
                                            }
                                        }
                                        else
                                        {
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        Log_Exception.Monta_ArquivoLog(ex);
                                        MensagemSistema("** NOTA EMITIDA **, mas houve um erro inesperado ao salvar (005)" + Environment.NewLine + "Erro: " + ex.Message, Color.Maroon);
                                        return;
                                    }
                                }
                                else
                                {
                                    MensagemSistema("Erro ao Transmitir (004)" + Environment.NewLine + "Erro: " + xmlRetorno.GetElementsByTagName("xMotivo")[1].InnerText, Color.Maroon);
                                    return;
                                }
                            }
                            else
                            {
                                MensagemSistema("Erro ao Transmitir (003)" + Environment.NewLine + "Erro: " + xmlRetorno.GetElementsByTagName("xMotivo")[0].InnerText, Color.Maroon);
                                return;
                            }
                        }
                        else
                        {
                            MensagemSistema("Erro ao Transmitir (002)" + Environment.NewLine + "Erro: " + retTransmitir, Color.Maroon);
                            return;
                        }
                    }
                    catch (Exception ex)
                    {
                        Log_Exception.Monta_ArquivoLog(ex);

                        MensagemSistema("Erro ao Transmitir (001)" + Environment.NewLine + "Erro: " + ex.Message, Color.Maroon);
                        return;
                    }
                }
                else
                {
                    MensagemSistema("Erro no XML" + Environment.NewLine + "XML Shema: " + retValidar, Color.Maroon);
                    return;
                }
            }
            catch (Exception ex)
            {
                Log_Exception.Monta_ArquivoLog(ex);
                MensagemSistema("Ocorreu um erro inesperado, informe ao administrador do sistema!" + Environment.NewLine + ex.Message, Color.Maroon);
                return;
            }
        }
示例#6
0
        // ========================================================================
        private bool Gera_NFCe(Pedido pedido)
        {
            var msg = new StringBuilder();

            XmlDocument xmlNFe          = new XmlDocument();
            XmlDocument xmlNFe_Assinado = new XmlDocument();

            GerarXML      gerarXml      = new GerarXML();
            AssinarXML    assinarXml    = new AssinarXML();
            ValidarXML    validarXml    = new ValidarXML();
            TransmitirXML transmitirXml = new TransmitirXML();
            Email         email         = new Email();
            XMLDao        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;

                try
                {
                    // Gerando o XML
                    xmlNFe = (gerarXml.NFe(pedido));

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

                    // Assinando o XML
                    xmlNFe_Assinado = assinarXml.AssinaXML(xmlNFe.InnerXml, "infNFe", Certificado.getInstance.oCertificado);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("** Erro ao ASSINAR XML NFC-e, tente novamente **" + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(false);
                }


                try
                {
                    // Validando o XML
                    retValidar = validarXml.Valida(xmlNFe_Assinado, "NFe");

                    //Inserindo a URL QRCode no xml já assinado
                    xmlNFe_Assinado.LoadXml(xmlNFe_Assinado.InnerXml.Replace("</infNFe>", "</infNFe><infNFeSupl><qrCode><![CDATA[" +
                                                                             gerarXml.Gera_Url_QRCode(xmlNFe_Assinado, pedido) + "]]></qrCode><urlChave>http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode</urlChave></infNFeSupl>"));
                }
                catch (Exception ex)
                {
                    //Log_Exception.Monta_ArquivoLog(ex);
                    MessageBox.Show("** Erro ao VALIDAR XML NFC-e **" + Environment.NewLine + ex.Message, "Mensagem", 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(xmlNFe_Assinado, pedido.nfiscal, Certificado.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.0"">" + xmlNFe_Assinado.InnerXml + strProc + "</nfeProc>";

                                        pedido.xml = new XML
                                        {
                                            numdoc     = pedido.numdoc,
                                            arquivoXML = strXmlProcNfe,
                                            data       = DateTime.Now,
                                            Modelo     = pedido.modelo,
                                            statNFCe   = "100"
                                        };


                                        //Salva arquivo XML no Banco SQL (NFe)
                                        if (xmlDao.Grava_XML(pedido.xml))
                                        {
                                            // Atualizando o pedido com a Chave, Protocolo, e statNFCe
                                            if ((new PedidoDao()).Update_ChaveProtocolo_condDoc_StatNFCe(pedido.numdoc, pedido.chave, pedido.protocolo, pedido.xml.statNFCe))
                                            {
                                                if (GerarXML.str_Ambiente == "1")
                                                {
                                                    if (!string.IsNullOrEmpty(Controle.getInstance.caminho_XMLAutorizado))
                                                    {
                                                        //Salvando o arquivo XML na pasta
                                                        Grava = File.CreateText(Controle.getInstance.caminho_XMLAutorizado.Remove(Controle.getInstance.caminho_XMLAutorizado.Length - 1) + DateTime.Now.Month + @"\" + pedido.chave + "-procNfe.xml");
                                                        Grava.Write(pedido.xml.arquivoXML);
                                                        Grava.Close();
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        MessageBox.Show("** NOTA EMITIDA **, mas houve um erro inesperado" + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        return(false);
                                    }
                                }
                                else
                                {
                                    //MessageBox.Show("Erro ao Transmitir(004) XML NFC-e" + Environment.NewLine + xmlRetorno.GetElementsByTagName("xMotivo")[1].InnerText, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);


                                    msg.Append("** NOTA EMITIDA **, mas houve um erro inesperado");
                                    msg.Append(Environment.NewLine);
                                    msg.Append(xmlRetorno.GetElementsByTagName("xMotivo")[1].InnerText);

                                    txtErro.Visible   = true;
                                    btnEmitir.Visible = true;

                                    txtErro.Text = msg.ToString();

                                    msg.Clear();

                                    return(false);
                                }
                            }
                            else
                            {
                                //MessageBox.Show("Erro ao Transmitir(003) XML NFC-e" + Environment.NewLine + xmlRetorno.GetElementsByTagName("xMotivo")[0].InnerText, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);

                                msg.Append("** Erro ao Transmitir(003) XML NFC-e**");
                                msg.Append(Environment.NewLine);
                                msg.Append(xmlRetorno.GetElementsByTagName("xMotivo")[0].InnerText);

                                txtErro.Visible   = true;
                                btnEmitir.Visible = true;

                                txtErro.Text = msg.ToString();

                                msg.Clear();


                                return(false);
                            }
                        }
                        else
                        {
                            //MessageBox.Show("Erro ao Transmitir(002) XML NFC-e" + Environment.NewLine + retTransmitir, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);

                            msg.Append("** Erro ao Transmitir(002) XML NFC-e **");
                            msg.Append(Environment.NewLine);
                            msg.Append(retTransmitir);

                            txtErro.Visible   = true;
                            btnEmitir.Visible = true;

                            txtErro.Text = msg.ToString();

                            msg.Clear();


                            return(false);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Erro ao Transmitir(001) XML NFC-e" + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return(false);
                    }
                }
                else
                {
                    MessageBox.Show("Erro ao validar XML NFC-e" + Environment.NewLine + retValidar, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(false);
                }
            }
            catch (Exception ex)
            {
                Log_Exception.Monta_ArquivoLog(ex);
                MessageBox.Show("Ocorreu um erro inesperado, informe ao administrador do sistema!" + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(false);
            }

            return(true);
        }