diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee index 81e2dcab63..9da6fc688d 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee @@ -97,39 +97,21 @@ module.exports = SubscriptionController = logger.log user: user, "redirecting to plans" res.redirect "/user/subscription/plans" else - RecurlyWrapper.getSubscription subscription?.recurlySubscription_id, - includeAccount: true, - (err, usersSubscription)-> - # always render the page, but skip the recurly link if - # we can't get it for some reason - if err? - logger.err {err, userId: user._id}, "error getting billing details link from recurly, proceeding" - hostedLoginToken = usersSubscription?.account?.hosted_login_token - recurlySubdomain = Settings?.apis?.recurly?.subdomain - if err? || !hostedLoginToken || !recurlySubdomain - billingDetailsLink = null - else - billingDetailsLink = [ - "https://", - recurlySubdomain, - ".recurly.com/account/billing_info/edit?ht=", - hostedLoginToken - ].join("") - SubscriptionViewModelBuilder.buildUsersSubscriptionViewModel user, (error, subscription, groupSubscriptions) -> - return next(error) if error? - logger.log {user, subscription, hasSubOrIsGroupMember, groupSubscriptions, billingDetailsLink}, "showing subscription dashboard" - plans = SubscriptionViewModelBuilder.buildViewModel() - res.render "subscriptions/dashboard", - title: "your_subscription" - recomendedCurrency: subscription?.currency - taxRate:subscription?.taxRate - plans: plans - subscription: subscription || {} - groupSubscriptions: groupSubscriptions - subscriptionTabActive: true - user:user - saved_billing_details: req.query.saved_billing_details? - billingDetailsLink: billingDetailsLink + SubscriptionViewModelBuilder.buildUsersSubscriptionViewModel user, (error, subscription, groupSubscriptions, billingDetailsLink) -> + return next(error) if error? + logger.log {user, subscription, hasSubOrIsGroupMember, groupSubscriptions, billingDetailsLink}, "showing subscription dashboard" + plans = SubscriptionViewModelBuilder.buildViewModel() + res.render "subscriptions/dashboard", + title: "your_subscription" + recomendedCurrency: subscription?.currency + taxRate:subscription?.taxRate + plans: plans + subscription: subscription || {} + groupSubscriptions: groupSubscriptions + subscriptionTabActive: true + user:user + saved_billing_details: req.query.saved_billing_details? + billingDetailsLink: billingDetailsLink userCustomSubscriptionPage: (req, res, next)-> user = AuthenticationController.getSessionUser(req) diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee index 8e2fc2032e..bf7746b5e0 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee @@ -7,8 +7,20 @@ SubscriptionLocator = require("./SubscriptionLocator") logger = require('logger-sharelatex') _ = require("underscore") -module.exports = +buildBillingDetails = (recurlySubscription) -> + hostedLoginToken = recurlySubscription?.account?.hosted_login_token + recurlySubdomain = Settings?.apis?.recurly?.subdomain + + if hostedLoginToken? && recurlySubdomain? + return [ + "https://", + recurlySubdomain, + ".recurly.com/account/billing_info/edit?ht=", + hostedLoginToken + ].join("") + +module.exports = buildUsersSubscriptionViewModel: (user, callback = (error, subscription, memberSubscriptions) ->) -> SubscriptionLocator.getUsersSubscription user, (err, subscription) -> return callback(err) if err? @@ -21,7 +33,7 @@ module.exports = err = new Error("No plan found for planCode '#{subscription.planCode}'") logger.error {user_id: user._id, err}, "error getting subscription plan for user" return callback(err) - RecurlyWrapper.getSubscription subscription.recurlySubscription_id, (err, recurlySubscription)-> + RecurlyWrapper.getSubscription subscription.recurlySubscription_id, includeAccount: true, (err, recurlySubscription)-> tax = recurlySubscription?.tax_in_cents || 0 callback null, { admin_id:subscription.admin_id @@ -34,9 +46,9 @@ module.exports = taxRate:parseFloat(recurlySubscription?.tax_rate?._) groupPlan: subscription.groupPlan trial_ends_at:recurlySubscription?.trial_ends_at - }, memberSubscriptions + }, memberSubscriptions, buildBillingDetails(recurlySubscription) else - callback null, null, memberSubscriptions + callback null, null, memberSubscriptions, null buildViewModel : -> plans = Settings.plans