public List <ConcursoDTO> GetConcursosPorProvas(int matricula, int idaplicacao, List <int> provas)
        {
            try
            {
                using (MiniProfiler.Current.Step("Obtendo concursos por provas"))
                {
                    new Util.Log().SetLog(new LogMsPro
                    {
                        Matricula = matricula,
                        IdApp     = (Aplicacoes)idaplicacao,
                        Tela      = Util.Log.MsProLog_Tela.CIBusca,
                        Acao      = Util.Log.MsProLog_Acao.Abriu
                    });

                    PerfilAlunoEntity Aluno = new PerfilAlunoEntity();
                    bool IsR3             = Aluno.IsAlunoR3(matricula);
                    bool alunoInteresseR3 = IsR3 == false?Aluno.AlunoTemInteresseRMais(matricula) : false;


                    using (var ctx = new DesenvContext())
                    {
                        var concursos = (from c in ctx.tblConcurso
                                         join cp in ctx.tblConcurso_Provas on c.ID_CONCURSO equals cp.ID_CONCURSO
                                         join cpt in ctx.tblConcurso_Provas_Tipos on cp.intProvaTipoID equals cpt.intProvaTipoID
                                         where
                                         c.VL_ANO_CONCURSO >= 2008 &&
                                         (cp.bitVendaLiberada.HasValue && cp.bitVendaLiberada.Value) &&
                                         (alunoInteresseR3 || IsR3 || !cpt.txtDescription.ToUpper().Contains("R3")) &&
                                         (provas.Contains(cp.intProvaID))
                                         select new ConcursoDTO
                        {
                            Descricao = c.NM_CONCURSO,
                            Sigla = c.SG_CONCURSO,
                            SiglaEstado = c.CD_UF
                        })
                                        .Distinct()
                                        .OrderBy(x => x.Descricao)
                                        .ToList();

                        return(concursos);
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        public List <Exercicio> GetProvas(string siglaConcurso, int matricula)
        {
            try
            {
                using (MiniProfiler.Current.Step("Obtendo provas"))
                {
                    var siglaRegularizada = Criptografia.ToRegularString(siglaConcurso);

                    PerfilAlunoEntity Aluno = new PerfilAlunoEntity();
                    bool IsR3             = Aluno.IsAlunoR3(matricula);
                    bool alunoInteresseR3 = IsR3 == false?Aluno.AlunoTemInteresseRMais(matricula) : false;

                    using (var ctx = new DesenvContext())
                    {
                        var concursos = (from c in ctx.tblConcurso
                                         join cp in ctx.tblConcurso_Provas on c.ID_CONCURSO equals cp.ID_CONCURSO
                                         join cpt in ctx.tblConcurso_Provas_Tipos on cp.intProvaTipoID equals cpt.intProvaTipoID
                                         where c.SG_CONCURSO == siglaRegularizada &&
                                         c.VL_ANO_CONCURSO >= 2008 &&
                                         (cp.bitVendaLiberada.HasValue && cp.bitVendaLiberada.Value) &&
                                         (alunoInteresseR3 || IsR3 || !cpt.txtDescription.ToUpper().Contains("R3"))
                                         select new Exercicio
                        {
                            ExercicioName = c.SG_CONCURSO,
                            Ano = (int)c.VL_ANO_CONCURSO,
                            ID = cp.intProvaID,
                            IdConcurso = c.ID_CONCURSO,
                            TipoConcursoProva = cpt.txtDescription
                        })
                                        .ToList();
                        return(concursos);
                    }
                }
            }
            catch
            {
                throw;
            }
        }
        public List <Exercicio> GetAll(int matricula, int idaplicacao)
        {
            try
            {
                // ======================== LOG
                using (MiniProfiler.Current.Step("Obtendo estastisticas de uma questão"))
                {
                    new Util.Log().SetLog(new LogMsPro
                    {
                        Matricula = matricula,
                        IdApp     = (Aplicacoes)idaplicacao,
                        Tela      = Util.Log.MsProLog_Tela.CIBusca,
                        Acao      = Util.Log.MsProLog_Acao.Abriu
                    });
                    // ========================
                    // Alunos que não são R3 não podem ver concursos R3
                    PerfilAlunoEntity Aluno = new PerfilAlunoEntity();
                    bool IsR3             = Aluno.IsAlunoR3(matricula);
                    bool alunoInteresseR3 = IsR3 == false?Aluno.AlunoTemInteresseRMais(matricula) : false;


                    using (var ctx = new DesenvContext())
                    {
                        var concursos = (from c in ctx.tblConcurso
                                         join cp in ctx.tblConcurso_Provas on c.ID_CONCURSO equals cp.ID_CONCURSO
                                         join cpt in ctx.tblConcurso_Provas_Tipos on cp.intProvaTipoID equals cpt.intProvaTipoID
                                         where
                                         c.VL_ANO_CONCURSO >= 2008 &&
                                         (cp.bitVendaLiberada.HasValue && cp.bitVendaLiberada.Value) &&
                                         (alunoInteresseR3 || IsR3 || !cpt.txtDescription.ToUpper().Contains("R3")) // OU o aluno é R3, ou ele não vê concursos cuja descrição contém R3.
                                         select new Exercicio
                        {
                            ExercicioName = c.SG_CONCURSO.Trim(),
                            Descricao = c.NM_CONCURSO,
                            Ano = (int)c.VL_ANO_CONCURSO,
                            SiglaEstado = c.CD_UF,
                            TipoConcursoProva = cpt.txtDescription,
                            IdConcurso = c.ID_CONCURSO
                        }).ToList();


                        var concursosProvas = concursos.Select(c => new Exercicio
                        {
                            ExercicioName     = c.ExercicioName,
                            Descricao         = c.Descricao,
                            Ano               = c.Ano,
                            SiglaEstado       = c.SiglaEstado,
                            TipoConcursoProva = c.TipoConcursoProva.IndexOf("ACESSO DIRETO") > -1 ? "ACESSO DIRETO" : c.TipoConcursoProva,
                            Tipo              = GetTipoConcurso(c.TipoConcursoProva),
                            IdConcurso        = c.IdConcurso
                        }).Distinct()
                                              .OrderBy(x => x.ExercicioName)
                                              .ToList();
                        return(concursosProvas);
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }