public ActionResult Emprestar(int livroId, int usuarioId) { DateTime hoje = DateTime.Now; string msg = (""); bool reservado = false; try { // Se ocorrer qualquer erro, exibe a mensagem ao usuário, na tela de empréstimos. using (var bd = new BibliotecaDatabase()) { var livro = bd.Livros.Find(livroId); if (livro == null) { msg = ("Não foi possível encontrar o livro: " + livroId); throw new Exception(msg); } // Verifica se o livro está emprestado if (ObterEmprestimoDoLivro(livroId) != null) { msg = ("O livro " + livro.Titulo + ", com código " + livroId + ", já está emprestado"); throw new Exception(msg); } // Verifica se o livro está reservado //Márcio Koch: Ajustada a verificação da reserva do livro. ReservaLivro reserva = ReservaController.getReserva(livroId); reservado = reserva != null && reserva.ReservaLivroId > 0; if (reservado && !reserva.UsuarioDeb.UsuarioId.Equals(usuarioId)) { msg = ("O livro " + livro.Titulo + " está reservado para outro usuário."); throw new Exception(msg); } // Verifica se o usuário existe var usuario = bd.Usuarios.Find(usuarioId); if (usuario == null) { msg = ("Não foi possível encontrar o usuário: " + usuarioId); throw new Exception(msg); } // Verifica a quantidade de livros emprestados para o Usuário e o tipo do usuário. IEnumerable<Emprestimo> emprestimosAtivos = ObterEmprestimosDoUsuario(usuarioId); int quantidadeEmprestada = emprestimosAtivos.Count(); if (PodeEmprestar(usuario, quantidadeEmprestada)) { DateTime prazo = GetPrazo(usuario.TipoUsuario); Emprestimo emprestimo = new Emprestimo { LivroEmprestimo = livro, UsuarioEmprestimo = usuario, RetiradoEm = hoje, DevolverAte = prazo }; bd.Emprestimos.Add(emprestimo); //Márcio Koch - Libera a reserva do livro, caso ele esteja reservado. if (reservado) { reserva = bd.Reservas.Find(reserva.ReservaLivroId); reserva.Situacao = false;//Libera a reserva } bd.SaveChanges(); msg = ("Livro emprestado com sucesso, com prazo até " + prazo + " " + msg); } else { // Exibe mensagem de erro ao usuário. msg = ("O empréstimo não foi efetuado, foi excedido o número de livros emprestados ao usuário. " + msg); throw new Exception(msg); } } } catch { ViewBag.Mensagem = msg; return View("Index", new EmprestimoViewModel()); } ViewBag.Mensagem = msg; return View("Index", new EmprestimoViewModel() ); }
public EmprestimoViewModel() { this.emprestimo = new Emprestimo(); }