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();
 }