public ActionResult UpdateCoupon(int personId, int seminarId, decimal couponAmount) { var person = _personRepository.GetNullableById(personId); if (person == null) { Message = string.Format(Messages.NotFound, "Person", personId); return(this.RedirectToAction(a => a.SiteList())); } var reg = person.GetLatestRegistration(Site); var seminar = SiteService.GetLatestSeminar(Site); // check if user is registered for the current seminar if (reg.Seminar == null || seminar == null || reg.Seminar.Id != seminar.Id) { Message = "User is not a part of the current seminar. Coupon cannot be created."; return(this.RedirectToAction(a => a.AdminEdit(person.User.Id, seminarId, null))); } // check for a current coupon if (!string.IsNullOrWhiteSpace(reg.CouponCode)) { _registrationService.CancelCoupon(seminar.RegistrationId.Value, reg.CouponCode); reg.CouponCode = null; reg.CouponAmount = null; } // create new coupon var coupon = _registrationService.GenerateCoupon(seminar.RegistrationId.Value, person.User.Email, couponAmount); if (!string.IsNullOrWhiteSpace(coupon)) { reg.CouponCode = coupon; reg.CouponAmount = couponAmount; } _seminarPersonRepository.EnsurePersistent(reg); Message = string.Format(Messages.Saved, "coupon"); var url = Url.Action("AdminEdit", new { id = person.User.Id, seminarId = seminarId }); return(Redirect(string.Format("{0}#registration", url))); }