public static StatusCriacaoSolicitacao PodeCriarSolicitacao(User user)
        {
            //return StatusCriacaoSolicitacao.Permitido;

            if (!AvaliacaoBL.PossuiAvaliacaoPendente(user))
                return StatusCriacaoSolicitacao.Permitido;
            else
                return StatusCriacaoSolicitacao.AvaliacaoPendente;
        }
 public ActionResult Edit(User user)
 {
     if (ModelState.IsValid)
     {
         db.Entry(user).State = EntityState.Modified;
         db.SaveChanges();
         return RedirectToAction("Index");
     }
     return View(user);
 }
        /// <summary>
        /// Determina se <paramref name="user"/> possui alguma avaliação pendente
        /// </summary>
        /// <param name="user">usuário a ser analisado</param>
        /// <returns>true se alguma das Avaliações de <paramref name="user"/> não tiver sido avaliada</returns>
        public static bool PossuiAvaliacaoPendente(User user)
        {
            if (user == null)
                throw new ArgumentNullException("user", "user is null.");
            var solicitacoes = from s in db.Solicitacoes
                               where s.User.UserName == user.UserName
                               select s;

            return solicitacoes.FiltrarPendentes().Any(); // Regra para dias corridos para avaliar
        }
        public static Models.Solicitacao CriarSolicitacao(User user, int ano = 0)
        {
            var podeCriarSolicitacao = PodeCriarSolicitacao(user);
            if (podeCriarSolicitacao != StatusCriacaoSolicitacao.Permitido)
                throw new BusinessLogicException("Usuário não está autorizado a criar solicitações", podeCriarSolicitacao);
            var solicitacao = CriarSolicitacao(new Models.Solicitacao(), ano);
            //solicitacao.User = user;

            return solicitacao;
        }
        public ActionResult Create(User user)
        {
            if (ModelState.IsValid)
            {
                user.UserName = user.UserName.ToLower();
                db.Users.Add(user);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(user);
        }
        /// <summary>
        /// Determina se <paramref name="user"/> possui alguma avaliação pendente
        /// </summary>
        /// <param name="user">usuário a ser analisado</param>
        /// <returns>true se alguma das Avaliações de <paramref name="user"/> não tiver sido avaliada</returns>
        public static bool PossuiAvaliacaoPendente(User user)
        {
            if (user == null)
                throw new ArgumentNullException("user", "user is null.");
            var solicitacoes = from s in db.Solicitacoes
                               where s.User.UserName == user.UserName
                               select s;

            DateTime agora = DateTime.Now;

            //Verificar se avaliações estão pendentes
            return solicitacoes.Any(s => !s.Avaliacao.Avaliado &&
                s.Avaliacao.DataLimite < agora); // Regra para dias corridos para avaliar
        }