From 61493ae7e187f0dcf97fbfd42a1e0edb865ecaef Mon Sep 17 00:00:00 2001 From: Eric Mc Sween <5454374+emcsween@users.noreply.github.com> Date: Tue, 11 Feb 2025 09:35:01 -0500 Subject: [PATCH] Merge pull request #23540 from overleaf/revert-23483-ii-flexible-group-licensing-error-assist Revert "[web] Hide flexible licensing buttons for pending plans" GitOrigin-RevId: 6e19c2ae2663fc0cf3335e9517e80a1eee9e2659 --- .../web/app/src/Features/Subscription/Errors.js | 3 --- .../Subscription/SubscriptionGroupController.mjs | 3 --- .../Subscription/SubscriptionGroupHandler.js | 16 +--------------- .../UserMembership/UserMembershipController.mjs | 9 +-------- .../dashboard/states/active/active-new.tsx | 16 ++++++++++------ .../src/UserMembershipAuthorizationTests.mjs | 7 ------- .../SubscriptionGroupControllerTests.mjs | 16 ---------------- .../SubscriptionGroupHandlerTests.js | 16 ---------------- .../UserMembershipControllerTests.mjs | 7 ------- 9 files changed, 12 insertions(+), 81 deletions(-) diff --git a/services/web/app/src/Features/Subscription/Errors.js b/services/web/app/src/Features/Subscription/Errors.js index 6b032df319..4cc7d6ab7a 100644 --- a/services/web/app/src/Features/Subscription/Errors.js +++ b/services/web/app/src/Features/Subscription/Errors.js @@ -18,13 +18,10 @@ class MissingBillingInfoError extends OError {} class ManuallyCollectedError extends OError {} -class PendingChangeError extends OError {} - module.exports = { RecurlyTransactionError, DuplicateAddOnError, AddOnNotPresentError, MissingBillingInfoError, ManuallyCollectedError, - PendingChangeError, } diff --git a/services/web/app/src/Features/Subscription/SubscriptionGroupController.mjs b/services/web/app/src/Features/Subscription/SubscriptionGroupController.mjs index 470092b050..db2b8012a1 100644 --- a/services/web/app/src/Features/Subscription/SubscriptionGroupController.mjs +++ b/services/web/app/src/Features/Subscription/SubscriptionGroupController.mjs @@ -134,9 +134,6 @@ async function addSeatsToGroupSubscription(req, res) { await SubscriptionGroupHandler.promises.ensureSubscriptionCollectionMethodIsNotManual( recurlySubscription ) - await SubscriptionGroupHandler.promises.ensureSubscriptionHasNoPendingChanges( - recurlySubscription - ) // Check if the user has missing billing details await RecurlyClient.promises.getPaymentMethod(userId) await SubscriptionGroupHandler.promises.ensureSubscriptionIsActive( diff --git a/services/web/app/src/Features/Subscription/SubscriptionGroupHandler.js b/services/web/app/src/Features/Subscription/SubscriptionGroupHandler.js index b3ad0da9d5..63e23816b3 100644 --- a/services/web/app/src/Features/Subscription/SubscriptionGroupHandler.js +++ b/services/web/app/src/Features/Subscription/SubscriptionGroupHandler.js @@ -8,7 +8,7 @@ const PlansLocator = require('./PlansLocator') const SubscriptionHandler = require('./SubscriptionHandler') const GroupPlansData = require('./GroupPlansData') const { MEMBERS_LIMIT_ADD_ON_CODE } = require('./RecurlyEntities') -const { ManuallyCollectedError, PendingChangeError } = require('./Errors') +const { ManuallyCollectedError } = require('./Errors') async function removeUserFromGroup(subscriptionId, userIdToRemove) { await SubscriptionUpdater.promises.removeUserFromGroup( @@ -82,14 +82,6 @@ async function ensureSubscriptionCollectionMethodIsNotManual( } } -async function ensureSubscriptionHasNoPendingChanges(recurlySubscription) { - if (recurlySubscription.pendingChange) { - throw new PendingChangeError('This subscription has a pending change', { - recurlySubscription_id: recurlySubscription.id, - }) - } -} - async function getUsersGroupSubscriptionDetails(userId) { const subscription = await SubscriptionLocator.promises.getUsersSubscription(userId) @@ -122,7 +114,6 @@ async function _addSeatsSubscriptionChange(userId, adding) { await ensureFlexibleLicensingEnabled(plan) await ensureSubscriptionIsActive(subscription) await ensureSubscriptionCollectionMethodIsNotManual(recurlySubscription) - await ensureSubscriptionHasNoPendingChanges(recurlySubscription) const currentAddonQuantity = recurlySubscription.addOns.find( @@ -253,7 +244,6 @@ async function _getGroupPlanUpgradeChangeRequest(ownerId) { ) await ensureSubscriptionCollectionMethodIsNotManual(recurlySubscription) - await ensureSubscriptionHasNoPendingChanges(recurlySubscription) return recurlySubscription.getRequestForGroupPlanUpgrade(newPlanCode) } @@ -295,9 +285,6 @@ module.exports = { ensureSubscriptionCollectionMethodIsNotManual: callbackify( ensureSubscriptionCollectionMethodIsNotManual ), - ensureSubscriptionHasNoPendingChanges: callbackify( - ensureSubscriptionHasNoPendingChanges - ), getTotalConfirmedUsersInGroup: callbackify(getTotalConfirmedUsersInGroup), isUserPartOfGroup: callbackify(isUserPartOfGroup), getGroupPlanUpgradePreview: callbackify(getGroupPlanUpgradePreview), @@ -308,7 +295,6 @@ module.exports = { ensureFlexibleLicensingEnabled, ensureSubscriptionIsActive, ensureSubscriptionCollectionMethodIsNotManual, - ensureSubscriptionHasNoPendingChanges, getTotalConfirmedUsersInGroup, isUserPartOfGroup, getUsersGroupSubscriptionDetails, diff --git a/services/web/app/src/Features/UserMembership/UserMembershipController.mjs b/services/web/app/src/Features/UserMembership/UserMembershipController.mjs index 63d425f180..8b8ac86e51 100644 --- a/services/web/app/src/Features/UserMembership/UserMembershipController.mjs +++ b/services/web/app/src/Features/UserMembership/UserMembershipController.mjs @@ -13,7 +13,6 @@ import { Parser as CSVParser } from 'json2csv' import { expressify } from '@overleaf/promise-utils' import SplitTestHandler from '../SplitTests/SplitTestHandler.js' import PlansLocator from '../Subscription/PlansLocator.js' -import RecurlyClient from '../Subscription/RecurlyClient.js' async function manageGroupMembers(req, res, next) { const { entity: subscription, entityConfig } = req @@ -41,13 +40,7 @@ async function manageGroupMembers(req, res, next) { const plan = PlansLocator.findLocalPlanInSettings(subscription.planCode) const userId = SessionManager.getLoggedInUserId(req.session) const isAdmin = subscription.admin_id.toString() === userId - const recurlySubscription = await RecurlyClient.promises.getSubscription( - subscription.recurlySubscription_id - ) - const canUseAddSeatsFeature = - plan?.canUseFlexibleLicensing && - isAdmin && - !recurlySubscription.pendingChange + const canUseAddSeatsFeature = plan?.canUseFlexibleLicensing && isAdmin res.render('user_membership/group-members-react', { name: entityName, diff --git a/services/web/frontend/js/features/subscription/components/dashboard/states/active/active-new.tsx b/services/web/frontend/js/features/subscription/components/dashboard/states/active/active-new.tsx index 259afcf331..7f069ad298 100644 --- a/services/web/frontend/js/features/subscription/components/dashboard/states/active/active-new.tsx +++ b/services/web/frontend/js/features/subscription/components/dashboard/states/active/active-new.tsx @@ -4,6 +4,7 @@ import { useSubscriptionDashboardContext } from '../../../../context/subscriptio import { RecurlySubscription } from '../../../../../../../../types/subscription/dashboard/subscription' import { CancelSubscriptionButton } from './cancel-subscription-button' import { CancelSubscription } from './cancel-plan/cancel-subscription' +import { PendingPlanChange } from './pending-plan-change' import { TrialEnding } from './trial-ending' import { ChangePlanModal } from './change-plan/modals/change-plan-modal' import { ConfirmChangePlanModal } from './change-plan/modals/confirm-change-plan-modal' @@ -175,6 +176,14 @@ export function ActiveSubscriptionNew({
+ {subscription.pendingPlan && (
+ <>
+ {' '}
+
{t('want_change_to_apply_before_plan_end')}
@@ -186,7 +195,7 @@ export function ActiveSubscriptionNew({ className="mb-1" /> )} - {subscription.recurly.totalLicenses > 0 && ( + {!subscription.pendingPlan && subscription.recurly.totalLicenses > 0 && (
{isLegacyPlan && subscription.recurly.additionalLicenses > 0 ? (