public IList <QuestaoParaAvaliarDTO> ListarQuestoesParaAvaliar(FiltrarQuestoesRequest filtro)
        {
            var queryRespostas = _respostaRepository.Queryable().Where(r => r.IdQuestao == filtro.IdQuestao);

            if (filtro.RemoverQuestoesJaAvaliadas)
            {
                queryRespostas = queryRespostas.Where(r => r.PontosGanhos == null);
            }

            var questoes = (from r in queryRespostas
                            join e in _entregaDeLicaoRepository.Queryable() on r.IdEntregaDeLicao equals e.Id
                            where e.Status == EntregaDeLicaoStatusEnum.Entregue
                            orderby e.DataHoraEntrega ascending
                            select new QuestaoParaAvaliarDTO
            {
                IdEntregaDeLicao = e.Id,
                IdResposta = r.Id,
                Resposta = r.Conteudo,
                IdQuestao = r.IdQuestao,
                DataHoraEntrega = e.DataHoraEntrega,
                IdGrupo = e.IdGrupo,
                PontosRecebidos = r.PontosGanhos
            }).ToList();

            return(questoes);
        }
        private void AplicarTrofeusRecebidos(LicaoDTO response)
        {
            var entregaDeTrofeus = (from et in _entregaDeTrofeuRepository.Queryable()
                                    join t in _trofeuRepository.Queryable() on et.IdTrofeu equals t.Id
                                    join r in _respostaRepository.Queryable() on et.IdResposta equals r.Id
                                    select new KeyValuePair <int, EntregaDeTrofeuDTO>(r.IdQuestao, new EntregaDeTrofeuDTO
            {
                IdEntrega = et.Id,
                IdTrofeu = t.Id,
                NomeTrofeu = t.Nome,
                PontosMovimentados = t.Pontos
            })).ToList();

            foreach (var questao in response.Questoes)
            {
                questao.Trofeus = entregaDeTrofeus.Where(t => t.Key == questao.Id).Select(t => t.Value).ToList();
            }
        }
        private void AplicarPontosGanhosComRespostas(List <AlunoDoCaseDTO> alunos, IQueryable <AlunoDoCase> queryAlunos)
        {
            var pontosDasRespostas = (from a in queryAlunos
                                      join rl in _responsavelPelaLicaoRepository.Queryable() on a.Id equals rl.IdAluno
                                      join re in _respostaRepository.Queryable() on rl.IdEntregaDeLicao equals re.IdEntregaDeLicao
                                      where re.PontosGanhos != null
                                      group re by a.IdUsuario into g
                                      select new
            {
                IdUsuario = g.Key,
                Pontos = g.Sum(p => p.PontosGanhos.Value)
            }).ToList();

            foreach (var aluno in alunos)
            {
                var totalDasRespostas = pontosDasRespostas.FirstOrDefault(p => p.IdUsuario == aluno.IdUsuario);
                if (totalDasRespostas != null)
                {
                    aluno.Pontos += totalDasRespostas.Pontos;
                }
            }
        }
Esempio n. 4
0
        private void AplicarPontosGanhosComRespostas(List <GrupoDTO> grupos, IQueryable <Grupo> queryGrupos)
        {
            var pontosDasRespostas = (from g in queryGrupos
                                      join e in _entregaDeLicaoRepository.Queryable() on g.Id equals e.IdGrupo
                                      join re in _respostaRepository.Queryable() on e.Id equals re.IdEntregaDeLicao
                                      where re.PontosGanhos != null
                                      group re by g.Id into g
                                      select new
            {
                IdGrupo = g.Key,
                Pontos = g.Sum(p => p.PontosGanhos.Value)
            }).ToList();

            foreach (var grupo in grupos)
            {
                var totalDasRespostas = pontosDasRespostas.FirstOrDefault(p => p.IdGrupo == grupo.Id);
                if (totalDasRespostas != null)
                {
                    grupo.Pontos += totalDasRespostas.Pontos;
                }
            }
        }