Beispiel #1
0
        public async Task <ViewResult> Index()
        {
            ViewBag.Subscriptions = await SubscriptionsFacade.UserActiveSubscriptionsAsync(User.Identity.GetUserId());

            ViewBag.PaymentDetails = await SubscriptionsFacade.DefaultCreditCard(User.Identity.GetUserId());

            ViewBag.Invoices = await InvoiceDataService.UserInvoicesAsync(User.Identity.GetUserId());

            return(View());
        }
Beispiel #2
0
        private async Task UpdateSubscriptionTax(string userId, decimal tax)
        {
            var user = await UserManager.FindByIdAsync(userId);

            var subscription = (await SubscriptionsFacade.UserActiveSubscriptionsAsync(userId)).FirstOrDefault();

            if (subscription != null && subscription.TaxPercent != tax)
            {
                await SubscriptionsFacade.UpdateSubscriptionTax(user, subscription.StripeId, tax);
            }
        }
Beispiel #3
0
        public async Task <ViewResult> ChangeSubscription()
        {
            var currentSubscription = (await SubscriptionsFacade.UserActiveSubscriptionsAsync(User.Identity.GetUserId())).FirstOrDefault();

            var model = new ChangeSubscriptionViewModel
            {
                SubscriptionPlans   = await SubscriptionPlansFacade.GetAllAsync(),
                CurrentSubscription = currentSubscription != null ? currentSubscription.SubscriptionPlan.Id : string.Empty
            };

            return(View(model));
        }
Beispiel #4
0
        public async Task <ViewResult> Index()
        {
            var userId = User.Identity.GetUserId();

            ViewBag.Subscriptions = await SubscriptionsFacade.UserActiveSubscriptionsAsync(User.Identity.GetUserId());

            ViewBag.PaymentDetails = await SubscriptionsFacade.DefaultCreditCard(User.Identity.GetUserId());

            ViewBag.Invoices = await InvoiceDataService.UserInvoicesAsync(User.Identity.GetUserId());

            ViewBag.BillingAddress = (await UserManager.FindByIdAsync(userId)).BillingAddress;

            return(View());
        }
Beispiel #5
0
        public async Task <ActionResult> ReActivateSubscription()
        {
            var currentSubscription = (await SubscriptionsFacade.UserActiveSubscriptionsAsync(User.Identity.GetUserId())).FirstOrDefault();
            var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

            if (currentSubscription != null &&
                await SubscriptionsFacade.UpdateSubscriptionAsync(user.Id, user.StripeCustomerId, currentSubscription.SubscriptionPlanId))
            {
                // TempData.Add("flash", new FlashSuccessViewModel("Your subscription plan has been re-activated."));
            }
            else
            {
                // TempData.Add("flash", new FlashDangerViewModel("Ooops! There was a problem re-activating your subscription. Please, try again."));
            }

            return(RedirectToAction("Index"));
        }
Beispiel #6
0
        public async Task <ActionResult> ChangeSubscription(ChangeSubscriptionViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

                await SubscriptionsFacade.UpdateSubscriptionAsync(user.Id, user.StripeCustomerId, model.NewPlan);

                // TempData.Add("flash", new FlashSuccessViewModel("Your subscription plan has been updated."));
            }
            else
            {
                // TempData.Add("flash", new FlashSuccessViewModel("Sorry, there was an error updating your plan, try again or contact support."));
            }

            return(RedirectToAction("Index"));
        }
Beispiel #7
0
        public async Task <ActionResult> CancelSubscription(CancelSubscriptionViewModel model)
        {
            if (ModelState.IsValid)
            {
                var currentSubscription = (await SubscriptionsFacade.UserActiveSubscriptionsAsync(User.Identity.GetUserId())).FirstOrDefault();
                var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

                DateTime?endDate;  // Because we are passing CancelAtTheEndOfPeriod to EndSubscription, we get the date when the subscription will be cancelled
                if (currentSubscription != null &&
                    (endDate = await SubscriptionsFacade.EndSubscriptionAsync(currentSubscription.Id, user, true, model.Reason)) != null)
                {
                    // TempData.Add("flash", new FlashSuccessViewModel("Your subscription has been cancelled."));
                }
                else
                {
                    // TempData.Add("flash", new FlashDangerViewModel("Sorry, there was a problem cancelling your subscription."));
                }

                return(RedirectToAction("Index", "Billing"));
            }

            return(View(model));
        }
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser {
                    UserName = model.Email, Email = model.Email, RegistrationDate = DateTime.UtcNow, LastLoginTime = DateTime.UtcNow
                };
                var result = await UserManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    if (string.IsNullOrWhiteSpace(model.SubscriptionPlan))
                    {
                        model.SubscriptionPlan = "basic_monthly";
                    }

                    await SubscriptionsFacade.SubscribeUserAsync(user, model.SubscriptionPlan, 0, model.CreditCard);

                    await CardService.AddAsync(user, model.CreditCard);

                    await UserManager.UpdateAsync(user);

                    await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                    string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);

                    var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                    await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

                    return(RedirectToAction("Index", "Home"));
                }
                AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }