public ActionResult JogosLocados()
 {
     var banco = new JogoRepositorio();
     var clienteRepositorio = new ClienteRepositorio();
     var jogosLocados = banco.BuscarTodos().Where(j => j.IdCliente != null).ToList();
     List<JogoLocadoModel> jogos = new List<JogoLocadoModel>();
     foreach (var j in jogosLocados)
     {
         jogos.Add(new JogoLocadoModel()
         {
             Id = j.Id,
             Nome = j.Nome,
             Categoria = j.Categoria.ToString(),
             NomeCliente = clienteRepositorio.BuscarPorId((int)j.IdCliente).Nome
         });
     }
     if (jogos.Count > 0)
     {
         var model = new RelatorioModel()
         {
             JogosLocados = jogos,
             QuantidadeDeJogos = jogos.Count()
         };
         return View(model);
     }
     return View(new RelatorioModel());
 }
        public ActionResult JogosDisponiveis(string nome)
        {
            var banco = new JogoRepositorio();

            var lista = string.IsNullOrWhiteSpace(nome) ? banco.BuscarTodos().ToList() : banco.BuscarPorNome(nome).ToList();
            lista = lista.Where(j => j.IdCliente == null).ToList();
            List<JogoModel> jogos = new List<JogoModel>();

            foreach (var j in lista)
            {
                jogos.Add(new JogoModel()
                {
                    Id = j.Id,
                    Nome = j.Nome,
                    Categoria = j.Categoria.ToString()
                });
            }
            if (jogos.Count > 0)
            {
                var model = new RelatorioModel()
                {
                    JogosDisponiveis = jogos,
                    QuantidadeDeJogos = jogos.Count()
                };
                return View(model);
            }
            return View(new RelatorioModel());
        }
 public ActionResult Devolver(int id)
 {
     JogoRepositorio repositorio = new JogoRepositorio();
     var jogo = repositorio.BuscarPorID(id);
     DevolverModel model = new DevolverModel(jogo);
     return View(model);
 }
 public ActionResult Salvar(string clienteNome, int id)
 {
     if (String.IsNullOrWhiteSpace(clienteNome))
     {
         TempData["Mensagem"] = "Erro na busca do cliente";
         return RedirectToAction("JogosDisponiveis","Relatorio");
     }
     var repositorio = new ClienteRepositorio();
     var jogoRepositorio = new JogoRepositorio();
     var servicoLocacao = new ServicoLocacao() { JogoRepositorio=jogoRepositorio};
     var jogo = jogoRepositorio.BuscarPorId(id);
     var cliente = repositorio.BuscarPorNome(clienteNome).FirstOrDefault();
     if (servicoLocacao.PodeLocar(cliente))
     {
         var data = servicoLocacao.GerarDataDevolucao(jogo);
         if (cliente != null)
         {
             jogo.IdCliente = cliente.Id;
             jogo.LocarPara(cliente);
             jogo.DataDevolucao = data;
             jogoRepositorio.Atualizar(jogo);
             TempData["Mensagem"] = "Jogo Locado com Sucesso";
         }
     }
     else
     {
         TempData["Mensagem"] = "Cliente não pode locar mais jogos";
     }
     return RedirectToAction("JogosDisponiveis", "Relatorio");
 }
        public ActionResult Salvar(JogoDetalhesModel model)
        {
            var database = new JogoRepositorio();
            if (ModelState.IsValid)
            {
                var jogo = database.BuscarPorNome(model.Nome).ToList();
                if (jogo.Count > 0)
                {
                    try
                    {
                        database.Atualizar(new Dominio.Jogo(jogo[0].Id)
                        {
                            Nome = model.Nome,
                            Categoria = model.Categoria,
                            Imagem = model.Imagem,
                            Video = model.Video,
                            Selo = model.Selo,
                            Descricao = model.Descricao
                        });
                        TempData["Mensagem"] = "Jogo Atualizado com Sucesso!!";

                    }
                    catch (SqlException)
                    {
                        TempData["Mensagem"] = "Problema na atualização dos dados no banco,"
                            + " por favor digite os dados corretamente";
                    }
                    return View("ManterJogo", model);

                }
                else
                {
                    try
                    {
                        database.Criar(new Dominio.Jogo()
                        {
                            Nome = model.Nome,
                            Categoria = model.Categoria,
                            Imagem = model.Imagem,
                            Video = model.Video,
                            Selo = model.Selo,
                            Descricao = model.Descricao
                        });
                        TempData["Mensagem"] = "Jogo Salvo com Sucesso!!";
                        model.Id = database.BuscarPorNome(model.Nome)[0].Id;
                    }
                    catch (Exception)
                    {
                        TempData["Mensagem"] = "Problema na inserção dos dados no banco,"
                            + " por favor digite os dados corretamente";
                    }
                    return View("ManterJogo", model);
                }
            }
            else
            {
                return View("ManterJogo", model);
            }
        }
        public ActionResult LocarPartial(int id)
        {
            JogoRepositorio repositorio = new JogoRepositorio();
            var jogo = repositorio.BuscarPorID(id);
            LocarModel model = new LocarModel(jogo);

            return View(model);
        }
        public JsonResult JogosAutocomplete(string term)
        {
            var banco = new JogoRepositorio();
            IList<Jogo> jogosEncontrados = string.IsNullOrEmpty(term) ? banco.BuscarTodos() : banco.BuscarPorNome(term);

            var json = jogosEncontrados.Select(x => new { label = x.Nome });

            return Json(json, JsonRequestBehavior.AllowGet);
        }
        public ActionResult Salvar(LocacaoModel model)
        {
            LocacaoRepositorio repLocacao = new LocacaoRepositorio();
            Jogo jogo = new JogoRepositorio().BuscarPorId(model.IdJogo);
            Cliente cliente = new ClienteRepositorio().BuscarPorId(model.IdClient);
            Locacao Locacao = new Locacao(jogo, cliente, model.DataLocacao);

            repLocacao.Criar(Locacao);

            return RedirectToAction("JogosDisponiveis", "Relatorio");
        }
        public ActionResult Locacao(int id)
        {
            var jogo = new JogoRepositorio().BuscarPorId(id);

            var model = new LocacaoModel();
            model.Jogo = jogo;
            model.IdJogo = jogo.Id;
            model.DataLocacao = DateTime.Now;
            model.DataPrevistaEntrega = model.DataLocacao.AddDays(jogo.Selo.Prazo);
            model.ValorInicial = jogo.Selo.Preco;

            return View(model);
        }
 public ActionResult Locar(int id)
 {
     var jogoRepositorio = new JogoRepositorio();
     Jogo jogo = jogoRepositorio.BuscarPorId(id);
     var servicoLocacao = new ServicoLocacao() { JogoRepositorio= jogoRepositorio };
     var dataPrevista = servicoLocacao.GerarDataDevolucao(jogo);
     var telaLocacao = new TelaLocacaoModel()
     {
         Id = jogo.Id,
         NomeJogo = jogo.Nome,
         Selo = jogo.Selo,
         Imagem = string.IsNullOrEmpty(jogo.Imagem) ? "http://imobiliariaprimos.com.br/imagens/imoveis/sem_imagem.jpg" : jogo.Imagem,
         DataPrevista = string.Format("{0:dd/MM/yyyy}", dataPrevista),
         ValorDaLocacao = jogo.GerarValorDaLocacao().ToString("C")
     };
     return View(telaLocacao);
 }
 public ActionResult DevolverJogo(int id)
 {
     var jogoRepositorio = new JogoRepositorio();
     var clienteRepositorio = new ClienteRepositorio();
     var servicoLocacao = new ServicoLocacao() { JogoRepositorio = jogoRepositorio };
     Jogo jogo = jogoRepositorio.BuscarPorId(id);
     TempData["Cliente"] = clienteRepositorio.BuscarPorId((int)jogo.IdCliente).Nome;
     TempData["Valor"] = jogo.GerarValorDaLocacao().ToString("C");
     bool devolver =servicoLocacao.DevolverJogo(jogo);
     if (devolver)
     {
         TempData["Mensagem"] = "Jogo Devolvido!";
         TempData["DataEntrega"] = String.Format("{0:dd/MM/yyyy}",DateTime.Now.Date);
         return RedirectToAction("JogosLocados", "Relatorio");
     }
     TempData["Mensagem"] = "Falha na devolução";
     return RedirectToAction("JogosLocados", "Relatorio");
 }
        public ActionResult JogoDetalhado(int id)
        {
            IJogoRepositorio repo = new JogoRepositorio();
            var jogo = repo.BuscarPorId(id);

            JogoDetalhadoModel jogoDetalhadoModel = new JogoDetalhadoModel()
            {
                Nome = jogo.Nome,
                Categoria = jogo.Categoria.ToString(),
                Id = jogo.Id,
                Imagem = jogo.Imagem,
                Video = jogo.Video,
                Descricao = jogo.Descricao,
                Selo = jogo.Selo
            };

            return View(jogoDetalhadoModel);
        }
        public ActionResult Detalhes(int id)
        {
            var banco = new JogoRepositorio();
            var j = banco.BuscarPorId(id);
            JogoDetalhesModel jogo = new JogoDetalhesModel()
            {
                Id = j.Id,
                Nome = j.Nome,
                Categoria = j.Categoria,
                Descricao = j.Descricao,
                Selo = j.Selo,
                Imagem = String.IsNullOrEmpty(j.Imagem) ? "http://imobiliariaprimos.com.br/imagens/imoveis/sem_imagem.jpg" : j.Imagem,
                Video = j.Video
            };

            var model = jogo;
            return View(jogo);
        }
 public ActionResult Editar(int? id)
 {
     if (id.HasValue)
     {
         var jogo = new JogoRepositorio().BuscarPorId(id.Value);
         EditarJogoModel model = new EditarJogoModel()
         {
             Id = jogo.Id,
             Nome = jogo.Nome,
             Descricao = jogo.Descricao,
             Categoria = jogo.Categoria,
             Selo = (SeloModel)Enum.Parse(typeof(SeloModel), jogo.Selo.Nome.ToUpper()),
             Video = jogo.Video,
             Imagem = jogo.Imagem
         };
         return View(model);
     }
     else
     {
         return View(new EditarJogoModel());
     }
 }
        public ActionResult DetalhesJogo(int id)
        {
            var jogo = new JogoRepositorio().BuscarPorId(id);

            if (jogo == null)
            {
                return null;
            }
            else
            {
                DetalhesJogoModel jogoModelo = new DetalhesJogoModel()
                {
                    Nome = jogo.Nome,
                    Categoria = jogo.Categoria.ToString(),
                    Selo = jogo.Selo,
                    Descricao = jogo.Descricao,
                    Imagem = jogo.Imagem,
                    Video = jogo.Video
                };

                return View(jogoModelo);
            }
        }
        public ActionResult ManterJogo(int? id)
        {
            var banco = new JogoRepositorio();
            if (id.HasValue)
            {
                var jogo = banco.BuscarPorId((int)id);
                var model = new JogoDetalhesModel()
                {
                    Id = jogo.Id,
                    Nome = jogo.Nome,
                    Categoria = jogo.Categoria,
                    Descricao = jogo.Descricao,
                    Selo = jogo.Selo,
                    Imagem = jogo.Imagem,
                    Video = jogo.Video

                };
                return View(model);
            }
            else
            {
                return View();
            }
        }
        private IList<Dominio.Jogo> ObterJogosPorFiltro(string nome)
        {
            IJogoRepositorio jogoRepositorio = new JogoRepositorio();

            if (string.IsNullOrEmpty(nome))
                return jogoRepositorio.BuscarTodos();
            else
            {
                return jogoRepositorio.BuscarPorNome(nome);
            }
        }