private void VerificaGeneratorLote()
 {
     try
     {
         daoGenerator objdaoGenerator = new daoGenerator();
         if (objdaoGenerator.VerificaExistenciaGenerator("GEN_LOTE_CTE"))
         {
             lblNumLote.Text = "Último Lote: " + objdaoGenerator.RetornaUltimoValorGenerator("GEN_LOTE_CTE");
         }
         else
         {
             objdaoGenerator.CreateGenerator("GEN_LOTE_CTE", 0);
             lblNumLote.Text = "Último Lote: " + objdaoGenerator.RetornaUltimoValorGenerator("GEN_LOTE_CTE");
         }
     }
     catch (Exception ex)
     {
         KryptonMessageBox.Show(null, _sMessageException + (ex.InnerException != null ? ex.InnerException.Message : ex.Message).ToString(), "CT-e - AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information); ;
     }
 }
        private void btnEnvio_Click(object sender, EventArgs e)
        {
            try
            {
                objCriaXml = new belCriaXml();
                bool bContingencia = false;


                if (!belStatic.bModoContingencia)
                {
                    if (Operacao)
                    {
                        #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(belStatic.CodEmpresaCte, 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

                        lblStatus.Text = "Carregando Informações...";

                        #region Pega Notas Selecionadas na Grid

                        string sCanceladas = "";
                        slistaConhec = new List<string>();
                        for (int i = 0; i < dgvArquivos.RowCount; i++)
                        {
                            try
                            {
                                if (dgvArquivos["cl_assina", i].Value != null)
                                {
                                    if (((dgvArquivos["cl_assina", i].Value != null) && (dgvArquivos["cl_assina", i].Value.ToString().Equals("True")))
                                                && ((dgvArquivos["ds_cancelamento", i].Value.ToString() == ""))
                                                && (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.ToString() != "")
                                    {
                                        if (Convert.ToBoolean(dgvArquivos["cl_assina", i].Value.ToString()) == true)
                                        {
                                            sCanceladas += "Conhecimento de Transp. " + dgvArquivos["cd_conheci", i].Value.ToString() + " - Esta Cancelado e não é Permitido o Reenvio do mesmo!" + Environment.NewLine + Environment.NewLine;
                                        }
                                    }
                                }
                            }
                            catch (Exception)
                            {
                                throw;
                            }
                        }
                        #endregion
                        if (slistaConhec.Count == 0)
                        {
                            KryptonMessageBox.Show("Nenhuma nota Válida foi Selecionada!", "A T E N Ç Ã O", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            if (sCanceladas != "")
                            {
                                throw new Exception(sCanceladas);
                            }
                            lblStatus.Text = "";
                        }
                        else
                        {
                            if (!bContingencia)
                            {
                                #region Envio Normal

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

                                cert = new X509Certificate2();
                                cert = belCertificadoDigital.BuscaNome("");
                                if (!belCertificadoDigital.ValidaCertificado(cert))
                                {
                                    lblStatus.Text = "";
                                    throw new Exception("Certificado não Selecionado.");
                                }

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

                                belPopulaObjetos objObjetos = new belPopulaObjetos(belStatic.CodEmpresaCte, slistaConhec, objbelUfEmp.CUF, cert);

                                daoInfCte objdaoInfCte = new daoInfCte();
                                objdaoInfCte.ImportaConhecInfCte(objObjetos, belStatic.CodEmpresaCte);


                                lblStatus.Text = "Aguardando Envio";
                                frmVisualizaCte objFrm = new frmVisualizaCte(objObjetos);
                                objFrm.ShowDialog();

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

                                    lblStatus.Text = "Enviando Lote para 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 != "") // sicupira
                                    {
                                        objGravaDadosRetorno.GravarRecibo(objFrm.objObjetosAlter, sRecibo);
                                    }
                                    foreach (belStatusCte cte in ListaStatus.Where(C => C.Enviado == true))
                                    {
                                        if (cte.CodRetorno != "218"
                                         && cte.CodRetorno != "101"
                                         && cte.CodRetorno != "103"
                                         && cte.CodRetorno != "104"
                                         && cte.CodRetorno != "105"
                                         && cte.CodRetorno != "100"
                                         && cte.CodRetorno != "204")
                                        {
                                            objGravaDadosRetorno.ApagarRecibo(sRecibo);
                                        }
                                        else
                                        {
                                            objGravaDadosRetorno.GravarProtocoloEnvio(cte);
                                        }
                                    }
                                    KryptonMessageBox.Show(belTrataMensagem.RetornaMensagem(ListaStatus, belTrataMensagem.Tipo.Envio), "CT-e - Retorno WebService", MessageBoxButtons.OK, MessageBoxIcon.Information);

                                    objGerais = new daoBuscaDadosGerais();
                                    foreach (belStatusCte cte in ListaStatus.Where(C => C.Enviado == true))
                                    {
                                        lblStatus.Text = "Salvando Arquivos";
                                        objGravaDadosRetorno.AlterarStatusCte(cte);
                                        string sChave = objGravaDadosRetorno.BuscaChave(cte.NumeroSeq);
                                        objCriaXml.SalvaArquivoPastaEnviado(objGerais.BuscaNumeroConhecimento(cte.NumeroSeq), sChave);
                                        if (cte.CodRetorno == "218" || cte.CodRetorno == "101")
                                        {
                                            objCriaXml.SalvaArquivoPastaCancelado(sChave);
                                        }
                                    }
                                    lblStatus.Text = "";

                                    Pendencias = objGerais.VerificaPendenciasdeEnvio();
                                    if (Pendencias.Count > 0)
                                    {
                                        txtPendencias.Text = "";
                                        txtPendencias.Visible = true;
                                        btnPendencias.Visible = true;
                                        foreach (string item in Pendencias)
                                        {
                                            txtPendencias.Text += "Seq. " + item + Environment.NewLine;
                                        }
                                    }
                                    else
                                    {
                                        txtPendencias.Visible = false;
                                        btnPendencias.Visible = false;
                                    }
                                    btnPesquisa_Click(sender, e);
                                    #endregion
                                }

                                #endregion
                            }
                            else
                            {
                                #region Envio Contingencia

                                cert = new X509Certificate2();
                                cert = belCertificadoDigital.BuscaNome("");
                                if (!belCertificadoDigital.ValidaCertificado(cert))
                                {
                                    lblStatus.Text = "";
                                    throw new Exception("Certificado não Selecionado.");
                                }
                                objCriaXml.cert = cert;

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

                                DirectoryInfo dPastaContingencia = new DirectoryInfo(belStaticPastas.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 = belStaticPastas.ENVIO + "\\" + arq.Name;
                                            string sPathOrigem = belStaticPastas.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 = HLP.Util.Util.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 = belStaticPastas.ENVIO + sData.Substring(3, 2) + "-" + sData.Substring(8, 2) + @"\\" + arq.Name;
                                            string sPathOrigem = belStaticPastas.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)
                                    {
                                        lblStatus.Text = "Enviando Lote para WebService...";
                                        doc.Load(sCaminho);
                                        string sRetorno = objCriaXml.TransmitirLote(doc);
                                        string sRecibo = objCriaXml.BuscaReciboRetornoEnvio(sRetorno);


                                        List<belStatusCte> ListaStatus = objCriaXml.ConsultaLoteEnviado(sRecibo);
                                        if (sRecibo != "")
                                        {
                                            objGravaDadosRetorno.GravarRecibo(slistaConhec[0], sRecibo);
                                        }
                                        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);
                                            }
                                        }
                                        KryptonMessageBox.Show(belTrataMensagem.RetornaMensagem(ListaStatus, belTrataMensagem.Tipo.Envio), "CT-e - Retorno WebService", MessageBoxButtons.OK, MessageBoxIcon.Information);

                                        objGerais = new daoBuscaDadosGerais();
                                        foreach (belStatusCte cte in ListaStatus.Where(C => C.Enviado == true))
                                        {
                                            lblStatus.Text = "Salvando Arquivos";
                                            objGravaDadosRetorno.AlterarStatusCte(cte);
                                            string sprot = objGerais.BuscaNumProtocolo(cte.NumeroSeq);
                                            objCriaXml.SalvaArquivoPastaEnviado(objGerais.BuscaNumeroConhecimento(cte.NumeroSeq), cte.Chave);
                                        }
                                        lblStatus.Text = "";
                                        btnPendencias_Click(sender, e);
                                        break;
                                    }
                                }
                                if (!ArquivoPastaEnvioMesAtual && !ArquivoPastaEnvio)
                                {
                                    lblStatus.Text = "";
                                    KryptonMessageBox.Show("Arquivo para Envio não Encontrado", "CONHECIMENTO DE TRANSP. ELETRÔNICO", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }
                                #endregion
                            }
                        }
                    }
                    else
                    {
                        KryptonMessageBox.Show("Sistema está Indisponível!", "CT-e - AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    KryptonMessageBox.Show("Sistema se encontra em Modo de Contingência", "CT-e - AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

            }
            catch (Exception ex)
            {
                lblStatus.Text = "";
                KryptonMessageBox.Show(null, _sMessageException + (ex.InnerException != null ? ex.InnerException.Message : ex.Message).ToString(), "CT-e - AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information); ;
            }
        }
        private void btnContingencia_Click(object sender, EventArgs e)
        {
            try
            {
                if (belStatic.bModoContingencia)
                {
                    #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(belStatic.CodEmpresaCte, 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

                    lblStatus.Text = "Carregando Informações...";

                    #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.ToString() == ""))
                                    && (dgvArquivos["st_cte", i].Value.ToString().Equals("0")))
                        {

                            slistaConhec.Add((string)dgvArquivos["nr_lanc", i].Value);
                        }
                        if ((dgvArquivos["ds_cancelamento", i].Value.ToString() != ""))
                        {
                            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;
                            }
                        }
                    }

                    if (slistaConhec.Count == 0)
                    {
                        KryptonMessageBox.Show("Nenhuma nota Válida foi Selecionada!", "A T E N Ç Ã O", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        if (sCanceladas != "")
                        {
                            throw new Exception(sCanceladas);
                        }
                        lblStatus.Text = "";
                    }
                    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(belStatic.CodEmpresaCte, slistaConhec);
                        if (objLGerarSeq.Count > 0)
                        {
                            frmGerarNumeroCte objfrmGerarNum = new frmGerarNumeroCte(belStatic.CodEmpresaCte, objLGerarSeq);
                            objfrmGerarNum.ShowDialog();
                        }
                    #endregion

                        cert = new X509Certificate2();
                        cert = belCertificadoDigital.BuscaNome("");
                        if (!belCertificadoDigital.ValidaCertificado(cert))
                        {
                            lblStatus.Text = "";
                            throw new Exception("Certificado não Selecionado.");
                        }

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

                        belPopulaObjetos objObjetos = new belPopulaObjetos(belStatic.CodEmpresaCte, slistaConhec, objbelUfEmp.CUF, cert);

                        daoInfCte objdaoInfCte = new daoInfCte();
                        objdaoInfCte.ImportaConhecInfCte(objObjetos, belStatic.CodEmpresaCte);


                        lblStatus.Text = "Aguardando";
                        frmVisualizaCte objFrm = new frmVisualizaCte(objObjetos);
                        objFrm.ShowDialog();

                        #endregion
                        if (objFrm.bCancela)
                        {
                            lblStatus.Text = "";
                            throw new Exception("Geração do XML Cancelada");
                        }
                        else
                        {
                            #region Gera XML Contingencia

                            lblStatus.Text = "Gerando XML de Contingência...";
                            daoGenerator objGerator = new daoGenerator();
                            int iNumLote = Convert.ToInt32(objGerator.RetornaProximoValorGenerator("GEN_LOTE_CTE"));

                            objGravaDadosRetorno.GravarChave(objFrm.objObjetosAlter);

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

                            objGravaDadosRetorno.AlterarStatusCteContingencia(objFrm.objObjetosAlter.objLinfCte[0].ide.nCT);
                            KryptonMessageBox.Show("Arquivo gravado na pasta Contingência com Sucesso!", "CONHECIMENTO DE TRANSP. ELETRÔNICO", MessageBoxButtons.OK, MessageBoxIcon.Information);

                            lblStatus.Text = "";
                            btnPesquisa_Click(sender, e);
                            #endregion
                        }
                    }
                }
                else
                {
                    KryptonMessageBox.Show("Sistema não se encontra em Modo de Contingência!", "CT-e - AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                lblStatus.Text = "";
                KryptonMessageBox.Show(null, _sMessageException + (ex.InnerException != null ? ex.InnerException.Message : ex.Message).ToString(), "CT-e - AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information); ;
            }
        }