public ActionResult ReplaceRater(ReplaceRaterViewModel model)
        {
            if (model == null ||
                model.EvalId == null ||
                model.RaterToReplace == null ||
                model.NewRater == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError));
            }

            var eval = UnitOfWork.EvaluationRepository.GetByID(model.EvalId);

            if (eval == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError));
            }

            if (eval.Raters.Any(r => r.Email.Equals(model.NewRater.Email)))
            {
                TempData["DuplicateError"] = "This evaluation already has a rater with that email.";
                return(RedirectToAction("ReplaceRater", new { id = model.RaterToReplace.RaterID }));
            }

            if (model.NewRater.Email.Equals(eval.Employee.Email))
            {
                TempData["DuplicateError"] = "Nice try. You can't rate yourself.";
                return(RedirectToAction("ReplaceRater", new { id = model.RaterToReplace.RaterID }));
            }

            var raterToDisable = UnitOfWork.RaterRepository.GetByID(model.RaterToReplace.RaterID);

            if (raterToDisable == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError));
            }

            raterToDisable.Disabled = true;
            UnitOfWork.Save();

            eval.Raters.Add(model.NewRater);
            UnitOfWork.Save();

            TempData["ReplaceRaterSuccess"] = "Successfully replaced rater.";
            return(RedirectToAction("EditRaters", "Raters", new { id = eval.EvaluationID }));
        }
        // GET: ReplaceRater
        public ActionResult ReplaceRater(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var raterToReplace = UnitOfWork.RaterRepository.GetByID(id);

            if (raterToReplace == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var eval = UnitOfWork.EvaluationRepository.GetByID(raterToReplace.EvaluationID);

            if (eval == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var employee = UnitOfWork.EmployeeRepository.GetByID(eval.EmployeeID);

            if (employee == null || !employee.Email.Equals(User.Identity.GetUserName()))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Unauthorized));
            }

            var model = new ReplaceRaterViewModel()
            {
                EvalId         = eval.EvaluationID,
                RaterToReplace = raterToReplace,
                NewRater       = new Rater {
                    Role = raterToReplace.Role
                }
            };

            return(View("ReplaceRater", model));
        }