public ActionResult Decide(int id, bool isApproved, string reason) { var application = _applicationRepository.GetNullableById(id); if (application == null) { Message = string.Format(Messages.NotFound, "application", id); return(this.RedirectToAction(a => a.Index())); } // make the changes to the object application.IsPending = false; application.IsApproved = isApproved; application.DateDecision = DateTime.Now; application.DecisionReason = reason; application.TransferValidationMessagesTo(ModelState); Person person = null; if (ModelState.IsValid) { person = _personService.CreateSeminarPerson(application, ModelState); } if (person == null) { ModelState.AddModelError("Person", "Unsuccessful in adding person to the current seminar."); } // check if model state is still valid, might have changed on create if (ModelState.IsValid) { // save the application _applicationRepository.EnsurePersistent(application); Message = string.Format("Application for {0} has been {1}", application.FullName, isApproved ? "Approved" : "Denied"); if (isApproved) { _eventService.Accepted(person, Site); } else { _eventService.Denied(person, Site); } return(this.RedirectToAction <SeminarApplicationController>(a => a.Index())); } return(View(application)); }