public ActionResult Edit(int id, ClassificacaoViewModel classificacaoViewModel)
        {
            classificacaoViewModel.ClassificacaoId = id;
            var classificacaoEntidade = Mapper.Map <ClassificacaoViewModel, Classificacao>(classificacaoViewModel);

            _classificacaoAppServico.Atualizar(classificacaoEntidade);
            return(RedirectToAction("Index"));
        }
        public ActionResult Create(ClassificacaoViewModel classificacaoViewModel)
        {
            if (ModelState.IsValid)
            {
                var classificacaoEntidade = Mapper.Map <ClassificacaoViewModel, Classificacao>(classificacaoViewModel);
                _classificacaoAppServico.Adicionar(classificacaoEntidade);

                return(RedirectToAction("Index"));
            }

            return(View(classificacaoViewModel));
        }
        public async Task <IActionResult> Votar(int id)
        {
            var projeto = await _context.Projetos.Include(p => p.AcademicDegree)
                          .SingleOrDefaultAsync(m => m.ProjetoId == id);

            var vm = new ClassificacaoViewModel
            {
                ProjetoId = id,
                Nome      = projeto.ProjectName
            };

            return(View(vm));
        }
        public async Task <IActionResult> Votar(ClassificacaoViewModel rvm)
        {
            var projeto = await _context.Projetos.Include(p => p.AcademicDegree)
                          .SingleOrDefaultAsync(m => m.ProjetoId == rvm.ProjetoId);

            if (projeto == null)
            {
                return(NotFound());
            }

            var classificacaoActual = projeto.Classificacao;
            var nrDeVotos           = projeto.NrDeVotos + 1;

            double novaClassificacao  = (classificacaoActual + rvm.Voto) / nrDeVotos;
            var    classificacaoRound = Math.Ceiling(novaClassificacao);

            projeto.Classificacao = classificacaoRound;
            projeto.NrDeVotos     = nrDeVotos;
            await _context.SaveChangesAsync();

            return(RedirectToAction("Index", "Projetos", new { area = "" }));
        }
        public ActionResult TabelaDeClassificacao(int id = 0)
        {
            //tenta pegar o id passado
            Chave minhaChave = null;

            if (id != 0)
            {
                minhaChave = db.Chaves.
                             Include(_chave => _chave.Times).
                             FirstOrDefault(_chave => _chave.Id == id);
            }

            else if (SessionManager.GetUsuario() != null)
            {
                int idJogador = SessionManager.GetUsuario().Id;
                id         = db.Times.Where(_time => _time.UsuarioID == idJogador).Select(_time => _time.ChaveID).First();
                minhaChave = db.Chaves.
                             Include(_chave => _chave.Times).
                             FirstOrDefault(_chave => _chave.Id == id);
            }

            if (minhaChave == null)
            {
                return(HttpNotFound());
            }

            List <ClassificacaoViewModel> classificacao = new List <ClassificacaoViewModel>();

            foreach (var time in minhaChave.Times)
            {
                var partidas  = db.Partidas.Where(_partida => _partida.TimeDeForaID == time.Id || _partida.TimeDaCasaID == time.Id);
                var viewModel = new ClassificacaoViewModel();
                viewModel.CaminhoBrasao = time.pathBrasao;
                viewModel.NomeJogador   = time.Usuario.Nome;
                viewModel.NomeTime      = time.Nome;
                viewModel.Vitorias      = partidas.Count(_partida =>
                                                         ((_partida.TimeDaCasaID == time.Id && _partida.PlacarTimeDaCasa > _partida.PlacarTimeDeFora) ||
                                                          (_partida.TimeDeForaID == time.Id && _partida.PlacarTimeDeFora > _partida.PlacarTimeDaCasa)) &&
                                                         _partida.JahOcorreu);

                viewModel.Empates = partidas.Count(_partida => (_partida.PlacarTimeDaCasa == _partida.PlacarTimeDeFora) &&
                                                   _partida.JahOcorreu);

                viewModel.Derrotas = partidas.Count(_partida => _partida.JahOcorreu) - (viewModel.Vitorias + viewModel.Empates);
                classificacao.Add(viewModel);

                //somando gols que fiz em casa
                viewModel.Gols += partidas.
                                  Where(_partida => _partida.TimeDaCasaID == time.Id)
                                  .Sum(_x => _x.PlacarTimeDaCasa);

                //somando gols que fiz fora de casa
                viewModel.Gols += partidas.
                                  Where(_partida => _partida.TimeDeForaID == time.Id)
                                  .Sum(_x => _x.PlacarTimeDaCasa);
            }

            return(View(classificacao.
                        OrderByDescending(_classificacao => _classificacao.Pontos).
                        ThenByDescending(_classificacao => _classificacao.Gols)));
        }