public ActionResult Subscribe(SubscriptionRegistration registrationInformation) { registrationInformation.AvailableSubscriptionTypes = _database.SubscriptionTypes.Include(st => st.SubscriptionFrequency).Where(st => st.IsAvailableToUsers && !st.IsAddOn); registrationInformation.Countries = _database.Countries.AsEnumerable(); if (registrationInformation.SelectedSubscriptionTypeId == 0) { ModelState.AddModelError(string.Empty, "Please choose a subscription to continue."); } // If all credit card information has been supplied, then try to validate the request with Authorize.NET if (ModelState.IsValid) { ISubscriptionGateway gateway = GetSubscriptionGateway(); ISubscriptionRequest subscriptionRequest = MembersController.CreateAuthorizeDotNetSubscriptionRequest(registrationInformation); ISubscriptionRequest subscriptionResponse = null; try { subscriptionResponse = gateway.CreateSubscription(subscriptionRequest); } catch (InvalidOperationException exception) { ModelState.AddModelError(string.Empty, exception.Message); return(View(registrationInformation)); } // If we reach this part of the code, we have successfully scheduled a subscription, make a note of it in our system WebSite.Models.User currentUser = Authentication.GetCurrentUser(); DatabaseContext db = _database; // Encrypt the credit card information of the user registrationInformation.CreditCard.Encrypt(); // Construct a subscription for the user Subscription userSubscription = new Subscription() { ActivationDate = DateTime.UtcNow, AuthorizeNETSubscriptionId = subscriptionResponse.SubscriptionID, CancellationDate = null, SubscriptionTypeId = registrationInformation.SelectedSubscriptionTypeId, CreditCard = registrationInformation.CreditCard }; // Associate the subscription with the user currentUser.AddSubscription(userSubscription); db.SaveChanges(); return(this.RedirectToAction("Index")); } return(View(registrationInformation)); }
public ActionResult Subscribe(SubscriptionRegistration registrationInformation, int userId, int day, int month, int year) { ViewBag.UserId = userId; registrationInformation.AvailableSubscriptionTypes = _db.SubscriptionTypes.Include(o => o.SubscriptionFrequency); registrationInformation.Countries = _db.Countries.AsEnumerable(); if (registrationInformation.SelectedSubscriptionTypeId == 0) { ModelState.AddModelError(string.Empty, "Please choose a subscription to continue."); } // If all credit card information has been supplied, then try to validate the request with Authorize.NET if (ModelState.IsValid) { WebSite.Models.User user = _db.Users.Find(userId); ISubscriptionGateway gateway = this.GetSubscriptionGateway(); ISubscriptionRequest subscriptionRequest = this.CreateAuthorizeDotNetSubscriptionRequest(registrationInformation, user, new DateTime(year, month, day)); ISubscriptionRequest subscriptionResponse = null; try { subscriptionResponse = gateway.CreateSubscription(subscriptionRequest); } catch (InvalidOperationException exception) { ModelState.AddModelError(string.Empty, exception.Message); return(View(registrationInformation)); } // Encrypt the credit card information of the user registrationInformation.CreditCard.Encrypt(); // Construct a subscription for the user Subscription userSubscription = new Subscription() { ActivationDate = DateTime.UtcNow, AuthorizeNETSubscriptionId = subscriptionResponse.SubscriptionID, CancellationDate = null, SubscriptionTypeId = registrationInformation.SelectedSubscriptionTypeId, CreditCard = registrationInformation.CreditCard }; // Associate the subscription with the user user.AddSubscription(userSubscription); _db.SaveChanges(); return(this.RedirectToAction("Index")); } return(View(registrationInformation)); }