private void GerarListaDeQuestoes()
        {
            parametersGA.Avaliacoes = DBControl.Table <Avaliacao> .Pesquisar();

            parametersGA.QuestoesAvaliacao = DBControl.Table <AvaliacaoQuestao> .Pesquisar();

            parametersGA.AvaliacoesAnteriores = AvaliacoesAnteriores(parametersGA.QuestoesAvaliacao);

            parametersGA.QuestoesAvaliacao.Sort((x, y) => x.DtGeracao.CompareTo(y.DtGeracao));

            List <Questao> listQuestao = DBControl.Table <Questao> .Pesquisar(x => x.IdDisciplina == parametersGA.IdDisciplina && x.Ativo);

            foreach (var questao in listQuestao)
            {
                DateTime dtUtilizacao = new DateTime(1, 1, 1);

                AvaliacaoQuestao aq = parametersGA.QuestoesAvaliacao.FindLast(x => x.IdQuestao == questao.Id);

                if (aq != null)
                {
                    Avaliacao av = parametersGA.Avaliacoes.FindLast(x => x.Id == aq.IdAvaliacao);

                    if (av != null)
                    {
                        dtUtilizacao = av.DtGeracao;
                    }
                }

                if (parametersGA.IgnorarTempoMinReutilizacao || (DateTime.Today - dtUtilizacao).TotalDays > questao.TempoMinimoReutilizacao)
                {
                    parametersGA.Questoes.Add(questao);
                }
            }
        }
        private bool GravarAvaliacao()
        {
            bool ret = false;

            DBControl.BeginTrans();

            try
            {
                avaliacao = new Avaliacao();

                string codigo = GetCodigoAvaliacao();

                string strSeq = "";

                List <Avaliacao> avaliacoes = DBControl.Table <Avaliacao> .Pesquisar(x => x.Codigo.StartsWith(codigo));

                if (avaliacoes != null && avaliacoes.Count > 0)
                {
                    strSeq = avaliacoes[avaliacoes.Count - 1].Codigo.Substring(codigo.Length);
                }

                int seq = 1;

                if (!strSeq.Equals(""))
                {
                    seq = int.Parse(strSeq);
                    seq++;
                }

                codigo = codigo + seq.ToString("000");

                StringBuilder sb = new StringBuilder();

                sb.Append("Avaliação ");
                sb.Append(tipoAvaliacao);
                sb.Append(" ");
                sb.Append(disciplina.Nome);
                sb.Append(" sequência ");
                sb.Append(seq.ToString("000"));

                avaliacao.Codigo       = codigo;
                avaliacao.Descricao    = sb.ToString();
                avaliacao.DtGeracao    = dtGeracao;
                avaliacao.IdDisciplina = parametersGA.IdDisciplina;
                avaliacao.QtdQuestoes  = parametersGA.QtdQuestoes;

                int idAvaliacao = DBControl.Table <Avaliacao> .Incluir(avaliacao);

                ret = idAvaliacao > 0;

                if (ret)
                {
                    AvaliacaoQuestao aq;
                    int id;

                    foreach (int idQuestao in questoes)
                    {
                        aq = new AvaliacaoQuestao();

                        aq.IdAvaliacao = idAvaliacao;
                        aq.DtGeracao   = dtGeracao;
                        aq.IdQuestao   = idQuestao;

                        id = DBControl.Table <AvaliacaoQuestao> .Incluir(aq);

                        ret = id > 0;

                        if (!ret)
                        {
                            break;
                        }
                    }
                }

                if (ret)
                {
                    DBControl.Commit();
                }
                else
                {
                    DBControl.Rollback();
                }
            }
            catch (Exception ex)
            {
                Mensagem.ShowErro("Erro na inclusão da Avaliação!", ex);
                DBControl.Rollback();
            }

            return(ret);
        }