mirror of
https://github.com/overleaf/overleaf.git
synced 2025-03-22 02:04:31 +00:00
Fetch subscription details from v1 and display to user
This commit is contained in:
parent
ea8f2fc7a3
commit
9d84263463
5 changed files with 70 additions and 29 deletions
|
@ -5,6 +5,7 @@ SubscriptionLocator = require("./SubscriptionLocator")
|
|||
Settings = require("settings-sharelatex")
|
||||
CollaboratorsHandler = require("../Collaborators/CollaboratorsHandler")
|
||||
CollaboratorsInvitesHandler = require("../Collaborators/CollaboratorsInviteHandler")
|
||||
V1SubscriptionManager = require("./V1SubscriptionManager")
|
||||
|
||||
module.exports = LimitationsManager =
|
||||
allowedNumberOfCollaboratorsInProject: (project_id, callback) ->
|
||||
|
@ -37,8 +38,10 @@ module.exports = LimitationsManager =
|
|||
return callback(err) if err?
|
||||
@userIsMemberOfGroupSubscription user, (err, isMember)=>
|
||||
return callback(err) if err?
|
||||
logger.log user_id:user._id, isMember:isMember, hasSubscription:hasSubscription, "checking if user has subscription or is group member"
|
||||
callback err, isMember or hasSubscription, subscription
|
||||
@userHasV1SubscriptionOrTeam user, (err, hasV1Subscription)=>
|
||||
return callback(err) if err?
|
||||
logger.log {user_id:user._id, isMember, hasSubscription, hasV1Subscription}, "checking if user has subscription or is group member"
|
||||
callback err, isMember or hasSubscription or hasV1Subscription, subscription
|
||||
|
||||
userHasSubscription: (user, callback = (err, hasSubscription, subscription)->) ->
|
||||
logger.log user_id:user._id, "checking if user has subscription"
|
||||
|
@ -55,6 +58,16 @@ module.exports = LimitationsManager =
|
|||
return callback(err) if err?
|
||||
callback err, subscriptions.length > 0, subscriptions
|
||||
|
||||
userHasV1SubscriptionOrTeam: (user, callback = (error, hasV1Subscription) ->) ->
|
||||
V1SubscriptionManager.getSubscriptionsFromV1 user._id, (err, v1Subscription = {}) ->
|
||||
return callback(err) if err?
|
||||
hasV1Subscription = false
|
||||
if v1Subscription.has_subscription
|
||||
hasV1Subscription = true
|
||||
if (v1Subscription.teams or []).length > 0
|
||||
hasV1Subscription = true
|
||||
return callback null, hasV1Subscription
|
||||
|
||||
teamHasReachedMemberLimit: (subscription) ->
|
||||
currentTotal = (subscription.member_ids or []).length +
|
||||
(subscription.teamInvites or []).length +
|
||||
|
|
|
@ -101,9 +101,9 @@ module.exports = SubscriptionController =
|
|||
logger.log user: user, "redirecting to plans"
|
||||
res.redirect "/user/subscription/plans"
|
||||
else
|
||||
SubscriptionViewModelBuilder.buildUsersSubscriptionViewModel user, (error, subscription, groupSubscriptions, billingDetailsLink) ->
|
||||
SubscriptionViewModelBuilder.buildUsersSubscriptionViewModel user, (error, subscription, groupSubscriptions, billingDetailsLink, v1Subscription) ->
|
||||
return next(error) if error?
|
||||
logger.log {user, subscription, hasSubOrIsGroupMember, groupSubscriptions, billingDetailsLink}, "showing subscription dashboard"
|
||||
logger.log {user, subscription, hasSubOrIsGroupMember, groupSubscriptions, billingDetailsLink, v1Subscription}, "showing subscription dashboard"
|
||||
plans = SubscriptionViewModelBuilder.buildViewModel()
|
||||
res.render "subscriptions/dashboard",
|
||||
title: "your_subscription"
|
||||
|
@ -116,6 +116,7 @@ module.exports = SubscriptionController =
|
|||
user:user
|
||||
saved_billing_details: req.query.saved_billing_details?
|
||||
billingDetailsLink: billingDetailsLink
|
||||
v1Subscription: v1Subscription
|
||||
|
||||
userCustomSubscriptionPage: (req, res, next)->
|
||||
user = AuthenticationController.getSessionUser(req)
|
||||
|
|
|
@ -4,6 +4,7 @@ PlansLocator = require("./PlansLocator")
|
|||
SubscriptionFormatters = require("./SubscriptionFormatters")
|
||||
LimitationsManager = require("./LimitationsManager")
|
||||
SubscriptionLocator = require("./SubscriptionLocator")
|
||||
V1SubscriptionManager = require("./V1SubscriptionManager")
|
||||
logger = require('logger-sharelatex')
|
||||
_ = require("underscore")
|
||||
|
||||
|
@ -27,34 +28,37 @@ module.exports =
|
|||
SubscriptionLocator.getMemberSubscriptions user, (err, memberSubscriptions = []) ->
|
||||
return callback(err) if err?
|
||||
|
||||
if subscription?
|
||||
return callback(error) if error?
|
||||
V1SubscriptionManager.getSubscriptionsFromV1 user._id, (err, v1Subscriptions) ->
|
||||
return callback(err) if err?
|
||||
|
||||
plan = PlansLocator.findLocalPlanInSettings(subscription.planCode)
|
||||
if subscription?
|
||||
return callback(error) if error?
|
||||
|
||||
if !plan?
|
||||
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)
|
||||
plan = PlansLocator.findLocalPlanInSettings(subscription.planCode)
|
||||
|
||||
RecurlyWrapper.getSubscription subscription.recurlySubscription_id, includeAccount: true, (err, recurlySubscription)->
|
||||
tax = recurlySubscription?.tax_in_cents || 0
|
||||
if !plan?
|
||||
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)
|
||||
|
||||
callback null, {
|
||||
admin_id:subscription.admin_id
|
||||
name: plan.name
|
||||
nextPaymentDueAt: SubscriptionFormatters.formatDate(recurlySubscription?.current_period_ends_at)
|
||||
state: recurlySubscription?.state
|
||||
price: SubscriptionFormatters.formatPrice (recurlySubscription?.unit_amount_in_cents + tax), recurlySubscription?.currency
|
||||
planCode: subscription.planCode
|
||||
currency:recurlySubscription?.currency
|
||||
taxRate:parseFloat(recurlySubscription?.tax_rate?._)
|
||||
groupPlan: subscription.groupPlan
|
||||
trial_ends_at:recurlySubscription?.trial_ends_at
|
||||
}, memberSubscriptions, buildBillingDetails(recurlySubscription)
|
||||
RecurlyWrapper.getSubscription subscription.recurlySubscription_id, includeAccount: true, (err, recurlySubscription)->
|
||||
tax = recurlySubscription?.tax_in_cents || 0
|
||||
|
||||
else
|
||||
callback null, null, memberSubscriptions, null
|
||||
callback null, {
|
||||
admin_id:subscription.admin_id
|
||||
name: plan.name
|
||||
nextPaymentDueAt: SubscriptionFormatters.formatDate(recurlySubscription?.current_period_ends_at)
|
||||
state: recurlySubscription?.state
|
||||
price: SubscriptionFormatters.formatPrice (recurlySubscription?.unit_amount_in_cents + tax), recurlySubscription?.currency
|
||||
planCode: subscription.planCode
|
||||
currency:recurlySubscription?.currency
|
||||
taxRate:parseFloat(recurlySubscription?.tax_rate?._)
|
||||
groupPlan: subscription.groupPlan
|
||||
trial_ends_at:recurlySubscription?.trial_ends_at
|
||||
}, memberSubscriptions, buildBillingDetails(recurlySubscription), v1Subscriptions
|
||||
|
||||
else
|
||||
callback null, null, memberSubscriptions, null, v1Subscriptions
|
||||
|
||||
buildViewModel : ->
|
||||
plans = Settings.plans
|
||||
|
|
|
@ -32,6 +32,12 @@ module.exports = V1SubscriptionManager =
|
|||
url: (v1Id) -> "/api/v1/sharelatex/users/#{v1Id}/sync"
|
||||
}, callback
|
||||
|
||||
getSubscriptionsFromV1: (userId, callback=(err, subscriptions) ->) ->
|
||||
V1SubscriptionManager._v1Request userId, {
|
||||
method: 'GET',
|
||||
url: (v1Id) -> "/api/v1/sharelatex/users/#{v1Id}/subscriptions"
|
||||
}, callback
|
||||
|
||||
_v1Request: (userId, options, callback=(err, body)->) ->
|
||||
if !settings?.apis?.v1
|
||||
return callback null, null
|
||||
|
|
|
@ -103,18 +103,35 @@ block content
|
|||
+printPlans(plans.studentAccounts)
|
||||
+printPlans(plans.individualMonthlyPlans)
|
||||
+printPlans(plans.individualAnnualPlans)
|
||||
|
||||
hr
|
||||
|
||||
each groupSubscription in groupSubscriptions
|
||||
- if (user._id+'' != groupSubscription.admin_id._id+'')
|
||||
div
|
||||
p !{translate("member_of_group_subscription", {admin_email: "<strong>" + groupSubscription.admin_id.email + "</strong>"})}
|
||||
span
|
||||
button.btn.btn-danger(ng-click="removeSelfFromGroup('"+groupSubscription.admin_id._id+"')") #{translate("leave_group")}
|
||||
button.btn.btn-danger.text-capitalise(ng-click="removeSelfFromGroup('"+groupSubscription.admin_id._id+"')") #{translate("leave_group")}
|
||||
hr
|
||||
|
||||
-if(subscription.groupPlan && user._id+'' == subscription.admin_id+'')
|
||||
div
|
||||
a(href="/subscription/group").btn.btn-primary !{translate("manage_group")}
|
||||
hr
|
||||
|
||||
if v1Subscription.has_subscription
|
||||
p
|
||||
| You are subscribed to Overleaf through Overleaf v1
|
||||
p
|
||||
a.btn.btn-primary(href=settings.overleaf.host+"/users/edit#status") Manage v1 Subscription
|
||||
hr
|
||||
|
||||
if v1Subscription.teams && v1Subscription.teams.length > 0
|
||||
for team in v1Subscription.teams
|
||||
p
|
||||
| You are a member of the Overleaf v1 team: <strong>#{team.name}</strong>
|
||||
p
|
||||
a.btn.btn-primary(href=settings.overleaf.host+"/teams") Manage v1 Team Membership
|
||||
hr
|
||||
|
||||
.card(ng-if="view == 'cancelation'")
|
||||
.page-header
|
||||
|
|
Loading…
Reference in a new issue