public ActionResult AddAutoTrading(AddonRegistration registrationInformation) { if (ModelState.IsValid) { SubscriptionType autoTradingAddOn = _database.SubscriptionTypes.Include(st => st.SubscriptionFrequency).Where(st => st.IsAvailableToUsers && st.IsAddOn).FirstOrDefault(); if (autoTradingAddOn != null) { ISubscriptionGateway gateway = GetSubscriptionGateway(); ISubscriptionRequest subscriptionRequest = MembersController.CreateAuthorizeDotNetSubscriptionRequest(registrationInformation.CreditCard, autoTradingAddOn); ISubscriptionRequest subscriptionResponse = null; try { subscriptionResponse = gateway.CreateSubscription(subscriptionRequest); } catch (InvalidOperationException exception) { ModelState.AddModelError(string.Empty, exception.Message); return(View(registrationInformation)); } // If the code reaches here then the payment went through WebSite.Models.User currentUser = Authentication.GetCurrentUser(); // 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 = autoTradingAddOn.SubscriptionTypeId, CreditCard = registrationInformation.CreditCard }; // Associate the subscription with the user currentUser.AddAddOnSubscription(userSubscription); _database.SaveChanges(); return(this.RedirectToAction("Index")); } else { this.ModelState.AddModelError(string.Empty, "Can't locate auto-trading add-on in server"); } } return(View(registrationInformation)); }
public ActionResult AddAutoTrading() { ActionResult result = this.TryAddingAutoTradingFromExistingCreditCard(); if (result != null) { return(result); } AddonRegistration addOnRegistration = new AddonRegistration() { Countries = _database.Countries.AsEnumerable() }; return(View(addOnRegistration)); }