private void btnGerarXml_Click(object sender, EventArgs e)
        {
            try
            {
                for (int i = 0; i < dgvNF.RowCount; i++)
                {
                    if (dgvNF["ASSINANF", i].Value != null)
                    {
                        if (dgvNF["ASSINANF", i].Value.ToString().Equals("True"))
                        {
                            string sRetorno = VerificaCampoReciboPreenchido(belStatic.codEmpresaNFe, dgvNF["CD_NFSEQ", i].Value.ToString());
                            if (sRetorno == "denegada")
                            {
                                throw new Exception("A Nota de Sequencia = " + dgvNF["CD_NFSEQ", i].Value.ToString() + " foi Denegada pelo Sefaz e não podera ser excluída, cancelada e nem alterada.");
                            }
                            else if (sRetorno != "")
                            {
                                throw new Exception("A Nota de Sequencia = " + dgvNF["CD_NFSEQ", i].Value.ToString() + " Já tem um retorno Salvo no Banco de Dados, tente Buscar Retorno");
                            }
                        }
                    }
                }

                #region Verificações
                sslStatusEnvio.Text = "Gerando e Assinando XML...";
                sFormaEmiNFe = "";

                if (belStatic.bModoSCAN && ((belStatic.iStatusAtualSistema == 3)))
                {
                    sFormaEmiNFe = "3";
                }
                else if (belStatic.bModoContingencia && (belStatic.iStatusAtualSistema == 2))
                {
                    sFormaEmiNFe = "2";
                }
                else
                {
                    sFormaEmiNFe = "1";
                }

                sFormDanfe = "";
                if (cbxFormDanfe.SelectedIndex == 0)
                {
                    sFormDanfe = "1";
                }
                else
                {
                    sFormDanfe = "2";
                }
                string sNfCancelada = "";
                #endregion

                #region Seleciona Notas Selecionadas na Grid
                bool bEnviaContingencia = false;
                GeraXMLExp Export = new GeraXMLExp(belStatic.iStatusAtualSistema);
                for (int i = 0; i < dgvNF.RowCount; i++)
                {
                    if (((dgvNF["ASSINANF", i].Value != null) && (dgvNF["ASSINANF", i].Value.ToString().Equals("True")))
                                && ((dgvNF["CANCELADA", i].Value == null) || (dgvNF["CANCELADA", i].Value.ToString() == "0"))
                                && (dgvNF["ST_NFE", i].Value.ToString().Equals("0")))
                    {
                        if ((dgvNF["st_contingencia", i].Value.ToString().Equals("S"))
                            && (dgvNF["ST_NFE", i].Value.ToString().Equals("0"))
                            && (dgvNF["CD_NOTAFIS", i].Value.ToString() != ""))
                        {
                            if (sNotas.Count > 0)
                            {
                                throw new Exception("Obs: As Notas Pendentes de Envio devem ser Enviadas Uma de cada vez." + Environment.NewLine + Environment.NewLine);
                            }
                            else
                            {
                                bEnviaContingencia = true;
                            }
                        }

                        sNotas.Add((string)dgvNF["CD_NFSEQ", i].Value);
                    }
                    if ((dgvNF["CANCELADA", i].Value != null) && (dgvNF["CANCELADA", i].Value.ToString() == "1"))
                    {
                        sNfCancelada += "Nota Fiscal " + dgvNF["CD_NOTAFIS", i].Value.ToString() + " - Esta Cancelada e não é Permitido o Reenvio da mesma Nota!" + Environment.NewLine + Environment.NewLine;
                    }
                }

                Export.sExecao = string.Empty;

                if (sNotas.Count == 0)
                {
                    KryptonMessageBox.Show("Nenhuma nota Valida foi Selecionada!", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    if (sNfCancelada != "")
                    {
                        KryptonMessageBox.Show(sNfCancelada, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    return;
                }

                #endregion
                //verifica no banco se as sequencias são existentes.
                belBusRetFazenda objbusretfazenda = new belBusRetFazenda();
                if (ValidaSeqNoBanco())
                {
                    if (bEnviaContingencia == false)
                    {

                        #region Visualiza Nota
                        Export.NFe(belStatic.codEmpresaNFe, sNotas, Export.NomeArqNFe(belStatic.codEmpresaNFe), sFormaEmiNFe, sFormDanfe, cd_ufnor, cert, belStatic.bModoSCAN, belStatic.iSerieSCAN, sFormaEmiNFe, version);
                        frmVisualizaNotasNfe objFrm = new frmVisualizaNotasNfe(Export.lTotNota, belStatic.codEmpresaNFe);
                        objFrm.ShowDialog();
                        if (objFrm.Cancel == true)
                        {
                            _msgIcon = MessageBoxIcon.Information;
                            throw new Exception("Envio da(s) Nota(s) Cancelado");
                        }

                        Export.lTotNota = objFrm.lObjTotNotasFinal;
                        #endregion

                        #region Envia Nfe Normal
                        // Gera a Estrutura do XML
                        Export.geraArquivoNFE(sNotas, cert, belStatic.codEmpresaNFe, Export.NomeArqNFe(belStatic.codEmpresaNFe));
                        sslStatusEnvio.Text = "Enviando o Lote a Ministério da Fazenda...";
                        belNfeRecepcao y = new belNfeRecepcao(Export.sXmlfull, "2.00", cert, Uf_Empresa, belStatic.bModoSCAN, belStatic.iSerieSCAN);
                        if (y.Recibo.ToUpper().Contains("VERSAO"))
                        {
                            throw new Exception("Ocorreu uma exceção com o webservice de Recepção. Favor verificar se os serviços estão estáveis.");
                        }


                        for (int i = 0; i < sNotas.Count; i++)
                        {
                            //Grava o número do recibo nas notas que foram enviadas a Fazenda
                            gravaRecibo(y.Recibo, belStatic.codEmpresaNFe, sNotas[i]);

                            sslStatusEnvio.Text = "Gravando recibo do Lote";
                        }
                        sslStatusEnvio.Text = "Buscando retorno do Ministério da Fazenda";

                        objbusretfazenda = new belBusRetFazenda(sNotas, Export.nfes, y.Recibo, cert, Uf_Empresa);
                        GeraXml.NFe.frmBuscaRetorno objfrmAvisoRet = new GeraXml.NFe.frmBuscaRetorno(objbusretfazenda, GeraXml.NFe.frmBuscaRetorno.tipoBusca.ENVIO);
                        objfrmAvisoRet.ShowDialog();

                        //Se nenhuma nota foi autorizada entao, ele nem continua para não dar erro nas proximas rotinas.
                        if (objbusretfazenda.Nfeautorizadas.Count == 0)
                        {
                            sslStatusEnvio.Text = "Nenhuma Nota Autorizada ...";
                            throw new Exception("Nenhuma nota do Lote enviado a Fazenda foi Autorizada" + Environment.NewLine + objbusretfazenda.Loteres);
                        }

                        sMesageErro = Export.sExecao;
                        StringBuilder sSql = new StringBuilder();
                        foreach (string sNota in objbusretfazenda.Nfeautorizadas)
                        {
                            if (sSql.ToString().Length > 0)
                            {
                                sSql.Append(string.Format(", '{0}'", sNota));
                            }
                            else
                            {
                                sSql.Append(string.Format("'{0}'", sNota));
                            }
                        }
                        /// Update para mudar o estado da nota dizendo que a nota foi autorizada ou não.
                        sSql.Insert(0, "update nf set st_nfe = 'S' Where cd_nfseq in (");
                        sSql.Append(")");
                        sSql.Append("and ");
                        sSql.Append("cd_empresa = '");
                        sSql.Append(belStatic.codEmpresaNFe);
                        sSql.Append("'");


                        using (FbCommand cmdUpdate = new FbCommand(sSql.ToString(), cx.get_Conexao()))
                        {
                            cx.Open_Conexao();
                            cmdUpdate.ExecuteNonQuery();
                            cx.Close_Conexao();
                        }
                        for (int i = 0; i < dgvNF.RowCount; i++)
                        {
                            if (dgvNF["ASSINANF", i].Value != null)
                            {
                                if (dgvNF["ASSINANF", i].Value.ToString().Equals("True"))
                                {
                                    dgvNF["ST_NFE", i].Value = true;
                                }
                            }
                        }
                        #endregion
                    }
                    else
                    {
                        #region Envio de Notas de Contingencia Pendentes !!

                        XmlDocument xml = new XmlDocument();
                        string sQuery = "SELECT NF.cd_chavenfe from nf " +
                                        "Where nf.cd_empresa = '" + belStatic.codEmpresaNFe +
                                        "' and nf.cd_nfseq = '" + sNotas[0].ToString() + "'";
                        string sID = string.Empty;

                        using (FbCommand cmd = new FbCommand(sQuery, cx.get_Conexao()))
                        {
                            cx.Open_Conexao();
                            sID = cmd.ExecuteScalar().ToString();
                            cx.Close_Conexao();
                        }
                        DirectoryInfo dinfo = new DirectoryInfo(belStaticPastas.CONTINGENCIA); ;
                        FileInfo[] finfo = dinfo.GetFiles();
                        foreach (FileInfo item in finfo)
                        {
                            if (Path.GetExtension(item.FullName).ToUpper().Equals(".XML"))
                            {
                                if (item.Name.ToString().Length == 26)
                                {
                                    xml.Load(@item.FullName);
                                    if (xml.GetElementsByTagName("infNFe")[0].Attributes["Id"].Value.ToString().Replace("NFe", "").Equals(sID))
                                    {
                                        Export.sXmlfull = xml.InnerXml.ToString();
                                        string sPathDest = belStaticPastas.ENVIO + "\\" + item.Name;
                                        string sPathOrigem = belStaticPastas.CONTINGENCIA + "\\" + item.Name;
                                        if (File.Exists(sPathDest))
                                        {
                                            File.Delete(sPathDest);
                                        }
                                        File.Copy(sPathOrigem, sPathDest);
                                    }
                                }
                                else if (item.Name.ToString().Length == 52)
                                {
                                    xml.Load(@item.FullName);
                                    if (xml.GetElementsByTagName("infNFe")[0].Attributes["Id"].Value.ToString().Replace("-nfe", "").Replace("NFe", "").Equals(sID))
                                    {
                                        Export.nfes.Add(xml.InnerXml.ToString());
                                        string sPathDest = belStaticPastas.ENVIO + "\\" + item.Name.Substring(2, 4) + "\\" + item.Name; //OS_25024
                                        string sPathOrigem = belStaticPastas.CONTINGENCIA + "\\" + item.Name;
                                        if (File.Exists(sPathDest))
                                        {
                                            File.Delete(sPathDest);
                                        }
                                        File.Copy(sPathOrigem, sPathDest);
                                    }
                                }
                                if ((Export.nfes.Count > 0) && (Export.sXmlfull != null))
                                {
                                    belNfeRecepcao y = new belNfeRecepcao(Export.sXmlfull, "2.00", cert, Uf_Empresa, belStatic.bModoSCAN, belStatic.iSerieSCAN);
                                    for (int i = 0; i < sNotas.Count; i++)
                                    {
                                        //Grava o número do recibo nas notas que foram enviadas a Fazenda
                                        gravaRecibo(y.Recibo, belStatic.codEmpresaNFe, sNotas[i]);
                                        sslStatusEnvio.Text = "Gravando recibo do Lote";
                                    }

                                    objbusretfazenda = new belBusRetFazenda(sNotas, Export.nfes, y.Recibo, cert, Uf_Empresa);
                                    GeraXml.NFe.frmBuscaRetorno objfrmAvisoRet = new GeraXml.NFe.frmBuscaRetorno(objbusretfazenda, GeraXml.NFe.frmBuscaRetorno.tipoBusca.ENVIO);
                                    objfrmAvisoRet.ShowDialog();

                                    //Se nenhuma nota foi autorizada entao, ele nem continua para não dar erro nas proximas rotinas.
                                    if (objbusretfazenda.Nfeautorizadas.Count == 0)
                                    {
                                        sslStatusEnvio.Text = "Nenhuma Nota Autorizada ...";
                                        throw new Exception("Nenhuma nota do Lote enviado a Fazenda foi Autorizada" + Environment.NewLine + objbusretfazenda.Loteres);
                                    }

                                    sMesageErro = Export.sExecao;
                                    StringBuilder sSql = new StringBuilder();
                                    foreach (string sNota in objbusretfazenda.Nfeautorizadas)
                                    {
                                        if (sSql.ToString().Length > 0)
                                        {
                                            sSql.Append(string.Format(", '{0}'", sNota));
                                        }
                                        else
                                        {
                                            sSql.Append(string.Format("'{0}'", sNota));
                                        }
                                    }
                                    /// Update para mudar o estado da nota dizendo que a nota foi autorizada ou não.
                                    sSql.Insert(0, "update nf set st_nfe = 'S' Where cd_nfseq in (");
                                    sSql.Append(")");
                                    sSql.Append("and ");
                                    sSql.Append("cd_empresa = '");
                                    sSql.Append(belStatic.codEmpresaNFe);
                                    sSql.Append("'");

                                    using (FbCommand cmdUpdate = new FbCommand(sSql.ToString(), cx.get_Conexao()))
                                    {
                                        cx.Open_Conexao();
                                        cmdUpdate.ExecuteNonQuery();
                                        cx.Close_Conexao();
                                    }
                                    for (int i = 0; i < dgvNF.RowCount; i++)
                                    {
                                        if (dgvNF["ASSINANF", i].Value != null)
                                        {
                                            if (dgvNF["ASSINANF", i].Value.ToString().Equals("True"))
                                            {
                                                dgvNF.Rows[i].DefaultCellStyle.BackColor = Color.Aquamarine;
                                                dgvNF["ST_NFE", i].Value = true;
                                            }
                                        }
                                    }
                                    VerificaNotasPendentesEnvio();
                                    break;
                                }
                            }
                        }

                        #endregion
                    }
                    sslStatusEnvio.Text = "Arquivos Gerados...";
                    KryptonMessageBox.Show("Arquivo Gerado" + Environment.NewLine + objbusretfazenda.Loteres);
                    sslStatusEnvio.Text = "";
                    for (int i = 0; i < dgvNF.RowCount; i++)
                    {
                        foreach (var item in objbusretfazenda.Nfeautorizadas) //Danner  - o.s. 23851 - 21/11/2009
                        {
                            if (dgvNF["cd_nfseq", i].Value.ToString() == item) //Danner - o.s. 23851 - 19/11/2009
                            {
                                if (dgvNF["ASSINANF", i].Value != null)
                                {
                                    dgvNF["ST_NFE", i].Value = true;
                                }
                            }
                        }
                    }
                }
                else
                {
                    PopulaDataGridView();
                }
            }

            catch (Exception ex)
            {
                KryptonMessageBox.Show(ex.Message + Environment.NewLine + "XML não Foi gerado com Sucesso!!!", "A V I S O", MessageBoxButtons.OK, MessageBoxIcon.Information);
                _msgIcon = MessageBoxIcon.Error;
                PopulaDataGridView();
            }
            finally
            {
                cx.Close_Conexao();
                sNotas.Clear();
            }
        }
        private void btnGerarContingencia_Click(object sender, EventArgs e)
        {
            try
            {
                for (int i = 0; i < dgvNF.RowCount; i++)
                {
                    if (dgvNF["ASSINANF", i].Value != null)
                    {
                        if (dgvNF["ASSINANF", i].Value.ToString().Equals("True"))
                        {
                            string sRetorno = VerificaCampoReciboPreenchido(belStatic.codEmpresaNFe, dgvNF["CD_NFSEQ", i].Value.ToString());
                            if (sRetorno == "denegada")
                            {
                                throw new Exception("A Nota de Sequencia = " + dgvNF["CD_NFSEQ", i].Value.ToString() + " foi Denegada pelo Sefaz e não podera ser excluída, cancelada e nem alterada.");
                            }
                            else
                            {
                                throw new Exception("A Nota de Sequencia = " + dgvNF["CD_NFSEQ", i].Value.ToString() + " Já tem um retorno Salvo no Banco de Dados, tente Buscar Retorno");
                            }
                        }
                    }
                }

                sslStatusEnvio.Text = "Acessando Banco de Dados ...";


                sFormaEmiNFe = "";

                if (belStatic.bModoSCAN && ((belStatic.iStatusAtualSistema == 3)))
                {
                    sFormaEmiNFe = "3";
                }
                else if (belStatic.bModoContingencia && (belStatic.iStatusAtualSistema == 2))
                {
                    sFormaEmiNFe = "2";
                }
                else
                {
                    sFormaEmiNFe = "1";
                }

                sFormDanfe = "";
                if (cbxFormDanfe.SelectedIndex == 0)
                {
                    sFormDanfe = "1";
                }
                else
                {
                    sFormDanfe = "2";
                }
                string sNfCancelada = "";
                GeraXMLExp Export = new GeraXMLExp(belStatic.iStatusAtualSistema);

                for (int i = 0; i < dgvNF.RowCount; i++)
                {
                    if (((dgvNF["ASSINANF", i].Value != null) && (dgvNF["ASSINANF", i].Value.ToString().Equals("True"))) && ((dgvNF["CANCELADA", i].Value == null) || (dgvNF["CANCELADA", i].Value.ToString() == "0"))) //Danner - o.s. SEM - 17/12/2009
                    {
                        //Verifico se a Nota Já foi Enviada em Modo de Contingencia
                        if ((dgvNF["st_contingencia", i].Value.ToString().Equals("S"))
                                   && (dgvNF["ST_NFE", i].Value.ToString().Equals("0"))
                                   && (dgvNF["CD_NOTAFIS", i].Value.ToString() != ""))
                        {
                            KryptonMessageBox.Show(null, "Nfe já Gerada em Modo de Contingência - Seq: " + dgvNF["CD_NOTAFIS", i].Value.ToString(), "A V I S O", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            break;
                        }
                        else
                        {
                            sNotas.Add((string)dgvNF["CD_NFSEQ", i].Value);
                        }
                    }
                    if ((dgvNF["CANCELADA", i].Value != null) && (dgvNF["CANCELADA", i].Value.ToString() == "1"))
                    {
                        sNfCancelada += "Nota Fiscal " + dgvNF["CD_NOTAFIS", i].Value.ToString() + " - Esta Cancelada e não é Permitido o Reenvio da mesma Nota!" + Environment.NewLine + Environment.NewLine;
                    }
                }
                Export.sExecao = string.Empty;

                if (sNotas.Count == 0)
                {
                    KryptonMessageBox.Show("Nenhuma nota Valida foi Selecionada!", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    if (sNfCancelada != "")
                    {
                        KryptonMessageBox.Show(sNfCancelada, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    return;
                }
                else if (sNotas.Count > 1)
                {
                    throw new Exception("Só é Possível Enviar uma Nota de Cada vez em Modo de Contingência");
                }
                //verifica no banco se as sequencias são existentes.
                if (ValidaSeqNoBanco())
                {
                    Export.NFe(belStatic.codEmpresaNFe, sNotas, Export.NomeArqNFe(belStatic.codEmpresaNFe), sFormaEmiNFe, sFormDanfe, cd_ufnor, cert, belStatic.bModoSCAN, belStatic.iSerieSCAN, sFormaEmiNFe, version);

                    frmVisualizaNotasNfe objFrm = new frmVisualizaNotasNfe(Export.lTotNota, belStatic.codEmpresaNFe);
                    objFrm.ShowDialog();
                    if (objFrm.Cancel == true)
                    {
                        sNotas.Clear();
                        _msgIcon = MessageBoxIcon.Information;
                        PopulaDataGridView();
                        throw new Exception("Envio da(s) Nota(s) Cancelado");
                    }
                    sslStatusEnvio.Text = "Gerando XML de Contingência ...";

                    Export.lTotNota = objFrm.lObjTotNotasFinal;

                    // Gera a Estrutura do XML
                    Export.geraArquivoNFE(sNotas, cert, belStatic.codEmpresaNFe, Export.NomeArqNFe(belStatic.codEmpresaNFe));
                    sslStatusEnvio.Text = "Arquivos Gerados...";
                    string sNotasGeradas = "Sequencia(as) de Nota(as) Gerada(as)  ";
                    foreach (string item in sNotas)
                    {
                        sNotasGeradas += "- " + item.ToString();
                    }
                    for (int i = 0; i < objFrm.lObjTotNotasFinal.Count; i++)
                    {
                        belIde objbelIde = objFrm.lObjTotNotasFinal[i][0] as belIde;

                        string sSqlAtualizaNF = "update NF set st_contingencia = '" + "S" +
                                         "' where cd_empresa = '" + belStatic.codEmpresaNFe +
                                         "' and cd_nfseq = '" + objbelIde.Cnf.Substring(2, 6) + "'";

                        using (FbCommand fbc = new FbCommand(sSqlAtualizaNF, cx.get_Conexao()))
                        {
                            cx.Open_Conexao();
                            fbc.ExecuteNonQuery();
                            cx.Close_Conexao();
                        }
                    }
                    KryptonMessageBox.Show(null, Environment.NewLine + sNotasGeradas, "I M P O R T A N T E", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    sslStatusEnvio.Text = "";
                    PopulaDataGridView();
                    sNotas.Clear();
                }
                else
                {
                    PopulaDataGridViewPendenciaContingencia();
                }
            }
            catch (Exception ex)
            {
                sNotas.Clear();
                new HLPexception(ex.Message, ex);
            }
            finally
            {
                cx.Close_Conexao();
            }
        }