private void btnContingencia_Click(object sender, EventArgs e)
        {
            try
            {
                #region Verifica se Item Selecionado já  foi enviado

                for (int i = 0; i < dgvArquivos.RowCount; i++)
                {
                    if (dgvArquivos["cl_assina", i].Value != null)
                    {
                        if (dgvArquivos["cl_assina", i].Value.ToString().Equals("True"))
                        {
                            if (objGerais.VerificaCampoReciboPreenchido(dgvArquivos["nr_lanc", i].Value.ToString()) != "")
                            {
                                throw new Exception("O Conhecimento de Sequência " + dgvArquivos["nr_lanc", i].Value.ToString() + " Já tem um recibo Salvo no Banco de Dados, tente Buscar Retorno.");
                            }
                            else if (Convert.ToBoolean(dgvArquivos["st_cte", i].Value) == false && Convert.ToBoolean(dgvArquivos["st_contingencia", i].Value) == true)
                            {
                                throw new Exception("O Conhecimento de Sequência " + dgvArquivos["nr_lanc", i].Value.ToString() + " Já foi Gerado em Modo de Contingência.");
                            }
                        }
                    }
                }
                #endregion


                #region Pega Notas Selecionadas na Grid

                string sCanceladas = "";
                slistaConhec = new List<string>();
                for (int i = 0; i < dgvArquivos.RowCount; i++)
                {
                    if (((dgvArquivos["cl_assina", i].Value != null) && (dgvArquivos["cl_assina", i].Value.ToString().Equals("True")))
                                && ((dgvArquivos["ds_cancelamento", i].Value == null) || (dgvArquivos["ds_cancelamento", i].Value.ToString() == "0"))
                                && (dgvArquivos["st_cte", i].Value.ToString().Equals("0")))
                    {

                        slistaConhec.Add((string)dgvArquivos["nr_lanc", i].Value);
                    }
                    if ((dgvArquivos["ds_cancelamento", i].Value != null) && (dgvArquivos["ds_cancelamento", i].Value.ToString() == "1"))
                    {
                        if (dgvArquivos["cl_assina", i].Value == "1")
                        {
                            sCanceladas += "Conhecimento de Transp. " + dgvArquivos["cd_conheci", i].Value.ToString() + " - Esta Cancelado e não é Permitido o Reenvio do mesmo!" + Environment.NewLine + Environment.NewLine;
                        }
                    }
                }
                #endregion

                if (slistaConhec.Count == 0)
                {
                    KryptonMessageBox.Show("Nenhum CT-e válido foi Selecionado para Gerar Xml.", Mensagens.CHeader, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    if (sCanceladas != "")
                    {
                        throw new Exception(sCanceladas);
                    }
                }
                else if (slistaConhec.Count > 1)
                {
                    throw new Exception("Só é Possível Gerar uma Xml de Cada vez em Modo de Contingência.");
                }
                else
                {
                    //verifica no banco se as sequencias são existentes.
                    List<string> objLGerarSeq = objGerais.ValidaSeqNoBanco(slistaConhec);
                    if (objLGerarSeq.Count > 0)
                    {
                        frmGerarNumeroCte objfrmGerarNum = new frmGerarNumeroCte(objLGerarSeq);
                        objfrmGerarNum.ShowDialog();
                    }


                    #region Popula as Classes e abre form Visualização

                    belPopulaObjetos objObjetos = new belPopulaObjetos(slistaConhec);

                    belPopulaCte objdaoInfCte = new belPopulaCte();
                    objdaoInfCte.PopulaConhecimentos(objObjetos);

                    frmVisualizaCte objFrm = new frmVisualizaCte(objObjetos);
                    objFrm.ShowDialog();

                    #endregion

                    if (objFrm.Cancelado)
                    {
                        throw new Exception("Geração do XML Cancelada");
                    }
                    else
                    {
                        #region Gera XML Contingencia

                        daoGenerator objGerator = new daoGenerator();
                        int iNumLote = Convert.ToInt32(objGerator.RetornaProximoValorGenerator("GEN_LOTE_CTE"));

                        objGravaDadosRetorno.GravarChave(objFrm.objObjetosAlter);

                        string sRecibo = objCriaXml.GerarXml(objFrm.objObjetosAlter, iNumLote);

                        objGravaDadosRetorno.AlterarStatusCteContingencia(objFrm.objObjetosAlter.objListaConhecimentos[0].ide.nCT);
                        KryptonMessageBox.Show("Arquivo gravado na pasta Contingência com Sucesso!", Mensagens.CHeader, MessageBoxButtons.OK, MessageBoxIcon.Information);

                        PesquisaConhecimentos();
                        #endregion
                    }
                }
            }
            catch (Exception ex)
            {
                new HLPexception(ex);
            }
        }
        private void btnEnvio_Click(object sender, EventArgs e)
        {
            try
            {
                bool bContingencia = false;

                #region Verifica se Item Selecionado já  foi enviado

                for (int i = 0; i < dgvArquivos.RowCount; i++)
                {
                    if (dgvArquivos["cl_assina", i].Value != null)
                    {
                        if (dgvArquivos["cl_assina", i].Value.ToString().Equals("True"))
                        {
                            if (objGerais.VerificaCampoReciboPreenchido(dgvArquivos["nr_lanc", i].Value.ToString()) != "")
                            {
                                throw new Exception("O Conhecimento de Sequência " + dgvArquivos["nr_lanc", i].Value.ToString() + " Já tem um recibo Salvo no Banco de Dados, tente Buscar Retorno.");
                            }
                        }
                    }
                }
                #endregion

                #region Pega Notas Selecionadas na Grid

                string sCanceladas = "";
                slistaConhec = new List<string>();
                for (int i = 0; i < dgvArquivos.RowCount; i++)
                {
                    if (((dgvArquivos["cl_assina", i].Value != null) && (dgvArquivos["cl_assina", i].Value.ToString().Equals("True")))
                                && ((dgvArquivos["ds_cancelamento", i].Value == null) || (dgvArquivos["ds_cancelamento", i].Value.ToString() == "0"))
                                && (dgvArquivos["st_cte", i].Value.ToString().Equals("0")))
                    {
                        if (Convert.ToBoolean(dgvArquivos["st_cte", i].Value) == false && Convert.ToBoolean(dgvArquivos["st_contingencia", i].Value) == true)
                        {
                            bContingencia = true;
                            if (slistaConhec.Count() > 0)
                            {
                                throw new Exception("Os Conhecimentos Pendentes devem ser Enviados um por vez.");
                            }
                        }

                        slistaConhec.Add((string)dgvArquivos["nr_lanc", i].Value);
                    }
                    if ((dgvArquivos["ds_cancelamento", i].Value != null) && (dgvArquivos["ds_cancelamento", i].Value.ToString() == "1"))
                    {
                        if (dgvArquivos["cl_assina", i].Value == "1")
                        {
                            sCanceladas += "Conhecimento de Transp. " + dgvArquivos["cd_conheci", i].Value.ToString() + " - Esta Cancelado e não é Permitido o Reenvio do mesmo!" + Environment.NewLine + Environment.NewLine;
                        }
                    }
                }
                #endregion

                if (slistaConhec.Count == 0)
                {
                    KryptonMessageBox.Show("Nenhum CT-e válido foi Selecionado para Envio.", Mensagens.CHeader, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    if (sCanceladas != "")
                    {
                        throw new Exception(sCanceladas);
                    }
                }
                else
                {

                    if (!bContingencia)
                    {
                        #region Envio Normal

                        //verifica no banco se as sequencias são existentes.
                        List<string> objListaSeq = objGerais.ValidaSeqNoBanco(slistaConhec);
                        if (objListaSeq.Count > 0)
                        {
                            frmGerarNumeroCte objfrmGerarNum = new frmGerarNumeroCte(objListaSeq);
                            objfrmGerarNum.ShowDialog();
                        }

                        #region Popula as Classes e abre form Visualização

                        belPopulaObjetos objObjetos = new belPopulaObjetos(slistaConhec);

                        belPopulaCte objdaoInfCte = new belPopulaCte();
                        objdaoInfCte.PopulaConhecimentos(objObjetos);

                        frmVisualizaCte objFrm = new frmVisualizaCte(objObjetos);
                        objFrm.ShowDialog();


                        #endregion

                        if (objFrm.Cancelado)
                        {
                            throw new Exception("Envio do(s) Conhecimento(s) Cancelado");
                        }
                        else
                        {
                            #region Envia Lote WebService

                            daoGenerator objGerator = new daoGenerator();
                            int iNumLote = Convert.ToInt32(objGerator.RetornaProximoValorGenerator("GEN_LOTE_CTE"));

                            objGravaDadosRetorno.GravarChave(objFrm.objObjetosAlter);

                            string sRecibo = objCriaXml.GerarXml(objFrm.objObjetosAlter, iNumLote);

                            List<belStatusCte> ListaStatus = objCriaXml.ConsultaLoteEnviado(sRecibo);
                            // if (sRecibo != "")
                            {
                                objGravaDadosRetorno.GravarRecibo(objFrm.objObjetosAlter, sRecibo);
                            }
                            List<string> lstatusValid = new List<string>();
                            lstatusValid.Add("218");
                            lstatusValid.Add("101");
                            lstatusValid.Add("103");
                            lstatusValid.Add("104");
                            lstatusValid.Add("105");
                            lstatusValid.Add("100");
                            lstatusValid.Add("204");


                            foreach (belStatusCte cte in ListaStatus)
                            {
                                if (!lstatusValid.Contains(cte.CodRetorno))
                                {
                                    objGravaDadosRetorno.ApagarRecibo(sRecibo);
                                }
                                else
                                {
                                    //objGravaDadosRetorno.GravarProtocoloEnvio(cte.Protocolo, cte.NumeroSeq);                                    
                                    if (cte.CodRetorno == "204" || cte.CodRetorno == "100")
                                    {
                                        cte.Enviado = true;
                                    }
                                    objGravaDadosRetorno.GravarProtocoloEnvio(cte.Protocolo, cte.NumeroSeq);
                                }
                            }
                            KryptonMessageBox.Show(belTrataMensagem.RetornaMensagem(ListaStatus, belTrataMensagem.Tipo.Envio), Mensagens.CHeader, MessageBoxButtons.OK, MessageBoxIcon.Information);

                            foreach (belStatusCte cte in ListaStatus.Where(C => C.Enviado == true))
                            {
                                objGravaDadosRetorno.AlterarStatusCte(cte.NumeroSeq);
                                objCriaXml.SalvaArquivoPastaEnviado(objGerais.BuscaNumeroConhecimento(cte.NumeroSeq), cte.Chave);
                            }

                            Pendencias = objGerais.VerificaPendenciasdeEnvio();
                            if (Pendencias.Count > 0)
                            {
                                btnPendencias.Visible = true;
                            }
                            else
                            {
                                btnPendencias.Visible = false;
                            }
                            PesquisaConhecimentos();
                            #endregion
                        }

                        #endregion
                    }
                    else
                    {
                        #region Envio Contingencia

                        XmlDocument doc = new XmlDocument();
                        string sChave = objGerais.BuscaChaveRetornoCteSeq(slistaConhec[0]);

                        DirectoryInfo dPastaContingencia = new DirectoryInfo(Pastas.CONTINGENCIA);
                        FileInfo[] finfo = dPastaContingencia.GetFiles("*.xml", SearchOption.AllDirectories);

                        bool ArquivoPastaEnvio = false;
                        bool ArquivoPastaEnvioMesAtual = false;
                        string sCaminho = "";

                        foreach (FileInfo arq in finfo)
                        {
                            if (arq.Name.Contains("Lote") && ArquivoPastaEnvio == false)
                            {
                                doc.Load(@arq.FullName);
                                if (doc.GetElementsByTagName("infCte")[0].Attributes["Id"].Value.ToString().Replace("CTe", "").Equals(sChave))
                                {
                                    sCaminho = @arq.FullName;
                                    string sPathDest = Pastas.ENVIO + "\\" + arq.Name;
                                    string sPathOrigem = Pastas.CONTINGENCIA + "\\" + arq.Name;

                                    if (File.Exists(sPathDest))
                                    {
                                        File.Delete(sPathDest);
                                    }
                                    File.Copy(sPathOrigem, sPathDest);
                                    ArquivoPastaEnvio = true;
                                }
                            }
                            else if (!arq.Name.Contains("Lote") && ArquivoPastaEnvioMesAtual == false)
                            {
                                string sData = daoUtil.GetDateServidor().Date.ToString("dd-MM-yyyy");
                                doc.Load(@arq.FullName);

                                if (doc.GetElementsByTagName("infCte")[0].Attributes["Id"].Value.ToString().Replace("CTe", "").Equals(sChave))
                                {
                                    string sPathDest = Pastas.ENVIO + sData.Substring(3, 2) + "-" + sData.Substring(8, 2) + @"\\" + arq.Name;
                                    string sPathOrigem = Pastas.CONTINGENCIA + sData.Substring(3, 2) + "-" + sData.Substring(8, 2) + @"\\" + arq.Name;

                                    if (File.Exists(sPathDest))
                                    {
                                        File.Delete(sPathDest);
                                    }
                                    File.Copy(sPathOrigem, sPathDest);
                                    ArquivoPastaEnvioMesAtual = true;
                                }
                            }

                            if (ArquivoPastaEnvioMesAtual && ArquivoPastaEnvio)
                            {
                                doc.Load(sCaminho);
                                string sRetorno = objCriaXml.TransmitirLote(doc);
                                string sRecibo = objCriaXml.BuscaReciboRetornoEnvio(sRetorno);


                                List<belStatusCte> ListaStatus = objCriaXml.ConsultaLoteEnviado(sRecibo);
                                if (sRecibo != "")
                                {
                                    objGravaDadosRetorno.SalvarRecibo(sRecibo, slistaConhec[0].ToString());
                                }
                                foreach (belStatusCte cte in ListaStatus)
                                {
                                    if (cte.CodRetorno != "103" && cte.CodRetorno != "104" && cte.CodRetorno != "105" && cte.CodRetorno != "100")
                                    {
                                        objGravaDadosRetorno.ApagarRecibo(sRecibo);
                                    }
                                    else
                                    {
                                        objGravaDadosRetorno.GravarProtocoloEnvio(cte.Protocolo, cte.NumeroSeq);
                                    }
                                }
                                KryptonMessageBox.Show(belTrataMensagem.RetornaMensagem(ListaStatus, belTrataMensagem.Tipo.Envio), Mensagens.CHeader, MessageBoxButtons.OK, MessageBoxIcon.Information);

                                foreach (belStatusCte cte in ListaStatus.Where(C => C.Enviado == true))
                                {
                                    objGravaDadosRetorno.AlterarStatusCte(cte.NumeroSeq);
                                    objCriaXml.SalvaArquivoPastaEnviado(objGerais.BuscaNumeroConhecimento(cte.NumeroSeq), cte.Chave);
                                }
                                btnPendencias_Click(sender, e);
                                break;
                            }
                        }
                        if (!ArquivoPastaEnvioMesAtual && !ArquivoPastaEnvio)
                        {
                            KryptonMessageBox.Show("Arquivo para Envio não Encontrado", Mensagens.CHeader, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        #endregion
                    }
                }

            }
            catch (Exception ex)
            {
                new HLPexception(ex);
            }
        }