Ejemplo n.º 1
0
        public void Setup()
        {
            this.eval = new Evaluation
            {
                EvaluationID = 1
            };
            this.raters = new List <Rater>
            {
                new Rater
                {
                    RaterID      = 1,
                    Name         = "Michael Scarn",
                    Role         = "Spy",
                    Email        = "*****@*****.**",
                    Answers      = "5,1,5",
                    EvaluationID = this.eval.EvaluationID,
                    Evaluation   = this.eval
                },
                new Rater
                {
                    RaterID      = 2,
                    Name         = "John Adams",
                    Role         = "Spy",
                    Email        = "*****@*****.**",
                    Answers      = "2,1,3",
                    EvaluationID = this.eval.EvaluationID,
                    Evaluation   = this.eval
                },
                new Rater
                {
                    RaterID      = 3,
                    Name         = "Alex Jefferson",
                    Role         = "Spy",
                    Email        = "*****@*****.**",
                    Answers      = "4,1,5",
                    EvaluationID = this.eval.EvaluationID,
                    Evaluation   = this.eval
                }
            };
            this.mockUnitOfWork        = new Mock <IUnitOfWork>();
            this.controller            = new RatersController();
            this.controller.UnitOfWork = mockUnitOfWork.Object;
            this.mockUnitOfWork.Setup(
                m => m.RaterRepository.Get(null, null, "")).Returns(
                raters);
            foreach (var rater in this.raters)
            {
                this.mockUnitOfWork.Object.RaterRepository.Insert(rater);
            }

            this.ratersVm = new AssignRatersViewModel
            {
                EvalId = this.eval.EvaluationID,
                Raters = this.raters
            };
        }
        public ActionResult ConfirmRaters(int?id)  //evalId
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var eval = UnitOfWork.EvaluationRepository.GetByID(id);

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

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

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

            // If the employee has a previously completed eval (with raters), pull as much rater info from it as possible.
            if (employee.Evaluations.Any(e => e.IsComplete() && e.Raters.Count != 0))
            {
                var completedEval  = employee.Evaluations.Last(e => e.IsComplete() && e.Raters.Count != 0);
                var previousRaters = completedEval.Raters.ToList();
                foreach (var rater in eval.Raters)
                {
                    foreach (var prevRater in previousRaters)
                    {
                        if (rater.Role.Equals(prevRater.Role) &&                    // Roles are the same
                            !prevRater.Disabled &&                                  // Previous rater isn't disabled.
                            !eval.Raters.Any(r => r.Email.Equals(prevRater.Email))) // model didn't already use this rater.
                        {
                            rater.Name  = prevRater.Name;
                            rater.Email = prevRater.Email;
                            UnitOfWork.Save();
                        }
                    }
                }
            }

            var model = new AssignRatersViewModel()
            {
                EvalId = eval.EvaluationID,
                Raters = eval.Raters.ToList()
            };

            return(View("ConfirmRaters", model));
        }
        public ActionResult AssignRaters(AssignRatersViewModel model)
        {
            if (model == null || model.Raters.Count == 0)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

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

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

            if (eval.Raters.Count != model.Raters.Count)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError));
            }

            // Check for duplicate emails (Not using Unique tags because they don't need to be unique in the db).
            if (model.Raters.DistinctBy(r => r.Email).Count() != model.Raters.Count)
            {
                TempData["DuplicateError"] = "Please enter a unique email address for each rater.";
                return(RedirectToAction("AssignRaters", new { id = model.EvalId }));
            }

            if (model.Raters.Any(r => r.Email.Equals(eval.Employee.Email)))
            {
                TempData["DuplicateError"] = "Nice try. You can't rate yourself.";
                return(RedirectToAction("AssignRaters", new { id = eval.EvaluationID }));
            }

            var i = 0;

            foreach (var rater in eval.Raters)
            {
                rater.Name  = model.Raters[i].Name;
                rater.Email = model.Raters[i].Email;
                UnitOfWork.Save();
                i++;
            }

            return(RedirectToAction("NotifyRatersNow", "Raters", new { id = eval.EvaluationID }));
        }
        public ActionResult EditRaters(AssignRatersViewModel model)
        {
            if (model == null || model.Raters.Count == 0)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

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

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

            if (model.Raters.DistinctBy(r => r.Email).Count() != model.Raters.Count)
            {
                TempData["DuplicateError"] = "Please enter a unique email address for each rater.";
                return(RedirectToAction("EditRaters", new { id = model.EvalId }));
            }

            if (model.Raters.Any(r => r.Email.Equals(eval.Employee.Email)))
            {
                TempData["DuplicateError"] = "Nice try. You can't rate yourself.";
                return(RedirectToAction("EditRaters", new { id = model.EvalId }));
            }

            var i = 0;

            foreach (var rater in eval.Raters)
            {
                rater.Name  = model.Raters[i].Name;
                rater.Email = model.Raters[i].Email;
                UnitOfWork.Save();
                i++;
            }

            TempData["EditRaterSuccess"] = "Successfully updated raters.";
            return(RedirectToAction("EmployeeEvalsIndex", "Evaluations", new { id = eval.EmployeeID }));
        }
 public ActionResult ConfirmRaters(AssignRatersViewModel model)
 {
     return(RedirectToAction("NotifyRatersNow", new { id = model.EvalId }));
 }