public IQueryable <Oferta> ListaOferta(DTOFiltroRelatorioQuestionario filtro)
        {
            if (filtro.IdSolucaoEducacional == null)
            {
                return(null);
            }

            if (filtro.IsRelatorioTutor)
            {
                if (filtro.IdProfessor == null)
                {
                    return(null);
                }

                // Obtém os ids das Ofertas da SE informada que possuem o professor informado e que possuam turmas com questionários pós de pesquisa.
                var ofertas =
                    new ManterTurmaProfessor().ObterTurmaProfessorPorProfessor(filtro.IdProfessor.Value).Where(x =>

                                                                                                               x.Turma.Oferta.SolucaoEducacional.ID == filtro.IdSolucaoEducacional.Value &&

                                                                                                               x.Turma.ListaQuestionarioAssociacao.Any(
                                                                                                                   qa =>
                                                                                                                   qa.TipoQuestionarioAssociacao.ID ==
                                                                                                                   (int)enumTipoQuestionarioAssociacao.Pos &&
                                                                                                                   qa.Questionario.TipoQuestionario.ID ==
                                                                                                                   (int)enumTipoQuestionario.Pesquisa))
                    .Select(x => x.Turma.Oferta.ID)
                    .Distinct()
                    .ToList();

                // Tem que consultar novamente porque o Distinct não funciona acima porque a tabela possui campo text, que não pode ser distinguível.
                return(new ManterOferta().ObterTodasOfertas().Where(x => ofertas.Contains(x.ID)));
            }

            var retorno =
                new ManterOferta().ObterOfertaPorSolucaoEducacional(new SolucaoEducacional
            {
                ID = filtro.IdSolucaoEducacional.Value
            });

            if (filtro.IdQuestionario > 0)
            {
                retorno = retorno.Where(x => x.ListaTurma.Any(t => t.ListaQuestionarioAssociacao.Any(q => q.Questionario.ID == filtro.IdQuestionario)));
            }


            return(retorno.Where(x => x.ListaTurma.Any(t => t.ListaQuestionarioAssociacao.Any())).OrderBy(x => x.Nome).AsQueryable());
        }
        public IQueryable <Usuario> ListaProfessor()
        {
            //Obter professores de turmas que possuam questionários pós de pesquisa.

            var profs = new ManterTurmaProfessor().ObterTodos().Where(x =>

                                                                      x.Turma.ListaQuestionarioAssociacao.Any(
                                                                          qa =>
                                                                          qa.TipoQuestionarioAssociacao.ID ==
                                                                          (int)enumTipoQuestionarioAssociacao.Pos &&
                                                                          qa.Questionario.TipoQuestionario.ID ==
                                                                          (int)enumTipoQuestionario.Pesquisa))
                        .Select(x => x.Professor.ID)
                        .Distinct();

            return(new ManterUsuario().ObterTodos().OrderBy(x => x.Nome).Where(x => profs.Contains(x.ID)));
        }
        public IQueryable <Turma> ListaTurma(DTOFiltroRelatorioQuestionario filtro)
        {
            if (filtro.IdOferta == null)
            {
                return(null);
            }

            if (filtro.IsRelatorioTutor)
            {
                if (filtro.IdProfessor == null)
                {
                    return(null);
                }

                // Obtém os ids das Turmas da Oferta informada que possuem o professor informado e que possuam turmas com questionários pós de pesquisa.
                var turmas =
                    new ManterTurmaProfessor().ObterTurmaProfessorPorProfessor(filtro.IdProfessor.Value).Where(x =>

                                                                                                               x.Turma.Oferta.ID == filtro.IdOferta.Value &&

                                                                                                               x.Turma.ListaQuestionarioAssociacao.Any(
                                                                                                                   qa =>
                                                                                                                   qa.TipoQuestionarioAssociacao.ID ==
                                                                                                                   (int)enumTipoQuestionarioAssociacao.Pos &&
                                                                                                                   qa.Questionario.TipoQuestionario.ID ==
                                                                                                                   (int)enumTipoQuestionario.Pesquisa))
                    .Select(x => x.Turma.ID)
                    .Distinct()
                    .ToList();

                // Tem que consultar novamente porque o Distinct não funciona acima porque a tabela possui campo text, que não pode ser distinguível.
                return(new ManterTurma().ObterTodasTurma().Where(x => turmas.Contains(x.ID)).OrderBy(x => x.Nome).AsQueryable());
            }

            return(new ManterTurma().ObterTurmasPorOferta(filtro.IdOferta.Value, false));
        }
        public IQueryable <SolucaoEducacional> ListaSolucaoEducacionalPorProfessor(DTOFiltroRelatorioQuestionario filtro)
        {
            if (filtro.IdProfessor == null)
            {
                return(null);
            }

            // Obtém os ids das SEs que possuem o professor informado e que possuam turmas com questionários pós de pesquisa.
            var ses = new ManterTurmaProfessor().ObterTurmaProfessorPorProfessor(filtro.IdProfessor.Value).Where(x =>
                                                                                                                 x.Turma.ListaQuestionarioAssociacao.Any(
                                                                                                                     qa =>
                                                                                                                     qa.TipoQuestionarioAssociacao.ID ==
                                                                                                                     (int)enumTipoQuestionarioAssociacao.Pos &&
                                                                                                                     qa.Questionario.TipoQuestionario.ID ==
                                                                                                                     (int)enumTipoQuestionario.Pesquisa))
                      .Select(x => x.Turma.Oferta.SolucaoEducacional.ID)
                      .Distinct()
                      .ToList();

            // Tem que consultar novamente porque o Distinct não funciona acima porque a tabela possui campo text, que não pode ser distinguível.
            return(new ManterSolucaoEducacional().ObterTodosSolucaoEducacional().Where(x => ses.Contains(x.ID)));
        }