예제 #1
0
        public IList <EntregaDeTrofeuDTO> Listar(FiltroTrofeusRequest filtro)
        {
            if (!filtro.IdEntregaDeLicao.HasValue && !filtro.IdGrupo.HasValue && !filtro.IdUsuario.HasValue)
            {
                throw new Exception("Solicitação inválida.");
            }

            IQueryable <EntregaDeTrofeu> queryTrofeusEntregues = _repository.Queryable();

            if (filtro.IdEntregaDeLicao.HasValue)
            {
                queryTrofeusEntregues = from et in queryTrofeusEntregues
                                        join el in _entregaDeLicaoRepository.Queryable() on et.IdEntregaDeLicao equals el.Id
                                        where el.Id == filtro.IdEntregaDeLicao.Value
                                        select et;
            }
            else if (filtro.IdGrupo.HasValue)
            {
                queryTrofeusEntregues = from et in queryTrofeusEntregues
                                        join el in _entregaDeLicaoRepository.Queryable() on et.IdEntregaDeLicao equals el.Id
                                        where el.IdGrupo == filtro.IdGrupo.Value
                                        select et;
            }
            else if (filtro.IdUsuario.HasValue)
            {
                queryTrofeusEntregues = from et in queryTrofeusEntregues
                                        join r in _responsavelPelaLicaoRepository.Queryable() on et.IdEntregaDeLicao equals r.IdEntregaDeLicao
                                        join a in _alunoDoCaseRepository.Queryable() on r.IdAluno equals a.Id
                                        where a.IdUsuario == filtro.IdUsuario.Value
                                        select et;
            }

            var trofeus = (from et in queryTrofeusEntregues
                           join t in _trofeuRepository.Queryable() on et.IdTrofeu equals t.Id
                           select new EntregaDeTrofeuDTO
            {
                IdEntrega = et.Id,
                IdTrofeu = et.IdTrofeu,
                NomeTrofeu = t.Nome,
                PontosMovimentados = t.Pontos
            }).ToList();

            return(trofeus);
        }
예제 #2
0
        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 AplicarPontosGanhosComTrofeus(List <AlunoDoCaseDTO> alunos, IQueryable <AlunoDoCase> queryAlunos)
        {
            var pontosDosTrofeus = (from a in queryAlunos
                                    join rl in _responsavelPelaLicaoRepository.Queryable() on a.Id equals rl.IdAluno
                                    join et in _entregaDeTrofeuRepository.Queryable() on rl.IdEntregaDeLicao equals et.IdEntregaDeLicao
                                    join t in _trofeuRepository.Queryable() on et.IdTrofeu equals t.Id
                                    group t by a.IdUsuario into g
                                    select new
            {
                IdUsuario = g.Key,
                Pontos = g.Sum(trofeu => trofeu.Pontos)
            }).ToList();

            foreach (var aluno in alunos)
            {
                var totalDosTrofeus = pontosDosTrofeus.FirstOrDefault(p => p.IdUsuario == aluno.IdUsuario);
                if (totalDosTrofeus != null)
                {
                    aluno.Pontos += totalDosTrofeus.Pontos;
                }
            }
        }
예제 #4
0
        private void AplicarPontosGanhosComTrofeus(List <GrupoDTO> grupos, IQueryable <Grupo> queryGrupos)
        {
            var pontosDosTrofeus = (from g in queryGrupos
                                    join el in _entregaDeLicaoRepository.Queryable() on g.Id equals el.IdGrupo
                                    join et in _entregaDeTrofeuRepository.Queryable() on el.Id equals et.IdEntregaDeLicao
                                    join t in _trofeuRepository.Queryable() on et.IdTrofeu equals t.Id
                                    group t by g.Id into g
                                    select new
            {
                IdGrupo = g.Key,
                Pontos = g.Sum(trofeu => trofeu.Pontos)
            }).ToList();

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