Merge pull request #3503 from overleaf/cmg-downgrade-group-subscription

Downgrade group subscription properly

GitOrigin-RevId: 6d028b79f8d5cc1ae9257e72b12d06190fed4121
This commit is contained in:
Thomas
2021-05-18 02:08:24 +00:00
committed by Copybot
parent 682abe9ca5
commit f7fd2dec65
2 changed files with 105 additions and 5 deletions
@@ -258,6 +258,34 @@ const SubscriptionUpdater = {
subscription.save(err => callback(err, subscription))
},
_deleteAndReplaceSubscriptionFromRecurly(
recurlySubscription,
subscription,
requesterData,
callback
) {
const adminUserId = subscription.admin_id
SubscriptionUpdater.deleteSubscription(subscription, requesterData, err => {
if (err) {
return callback(err)
}
SubscriptionUpdater._createNewSubscription(
adminUserId,
(err, newSubscription) => {
if (err) {
return callback(err)
}
SubscriptionUpdater._updateSubscriptionFromRecurly(
recurlySubscription,
newSubscription,
requesterData,
callback
)
}
)
})
},
_updateSubscriptionFromRecurly(
recurlySubscription,
subscription,
@@ -271,19 +299,31 @@ const SubscriptionUpdater = {
callback
)
}
subscription.recurlySubscription_id = recurlySubscription.uuid
subscription.planCode = recurlySubscription.plan.plan_code
const plan = PlansLocator.findLocalPlanInSettings(subscription.planCode)
const updatedPlanCode = recurlySubscription.plan.plan_code
const plan = PlansLocator.findLocalPlanInSettings(updatedPlanCode)
if (plan == null) {
return callback(
new Error(`plan code not found: ${subscription.planCode}`)
return callback(new Error(`plan code not found: ${updatedPlanCode}`))
}
if (!plan.groupPlan && subscription.groupPlan) {
// If downgrading from group to individual plan, delete group sub and create a new one
return SubscriptionUpdater._deleteAndReplaceSubscriptionFromRecurly(
recurlySubscription,
subscription,
requesterData,
callback
)
}
subscription.recurlySubscription_id = recurlySubscription.uuid
subscription.planCode = updatedPlanCode
if (plan.groupPlan) {
if (!subscription.groupPlan) {
subscription.member_ids = subscription.member_ids || []
subscription.member_ids.push(subscription.admin_id)
}
subscription.groupPlan = true
subscription.membersLimit = plan.membersLimit