From 44855f03178bdca4a41f60cfd9152e1970c55da0 Mon Sep 17 00:00:00 2001 From: martmull Date: Thu, 25 Apr 2024 18:33:49 +0200 Subject: [PATCH] Fix broken billing portal when subscription canceled (#5082) Fix billing portal link for canceled subscription --- .../src/pages/settings/SettingsBilling.tsx | 12 ++++++++++-- .../core-modules/billing/billing.service.ts | 16 +++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/packages/twenty-front/src/pages/settings/SettingsBilling.tsx b/packages/twenty-front/src/pages/settings/SettingsBilling.tsx index 7ab7ba755..343bc2e7b 100644 --- a/packages/twenty-front/src/pages/settings/SettingsBilling.tsx +++ b/packages/twenty-front/src/pages/settings/SettingsBilling.tsx @@ -86,6 +86,13 @@ export const SettingsBilling = () => { const billingPortalButtonDisabled = loading || !isDefined(data) || !isDefined(data.billingPortalSession.url); + const switchIntervalButtonDisabled = + onboardingStatus !== OnboardingStatus.Completed; + + const cancelPlanButtonDisabled = + billingPortalButtonDisabled || + onboardingStatus !== OnboardingStatus.Completed; + const displayPaymentFailInfo = onboardingStatus === OnboardingStatus.PastDue || onboardingStatus === OnboardingStatus.Unpaid; @@ -176,6 +183,7 @@ export const SettingsBilling = () => { title="View billing details" variant="secondary" onClick={openBillingPortal} + disabled={billingPortalButtonDisabled} />
@@ -188,7 +196,7 @@ export const SettingsBilling = () => { title={`Switch ${switchingInfo.to}`} variant="secondary" onClick={openSwitchingIntervalModal} - disabled={billingPortalButtonDisabled} + disabled={switchIntervalButtonDisabled} />
@@ -202,7 +210,7 @@ export const SettingsBilling = () => { variant="secondary" accent="danger" onClick={openBillingPortal} - disabled={billingPortalButtonDisabled} + disabled={cancelPlanButtonDisabled} />
diff --git a/packages/twenty-server/src/engine/core-modules/billing/billing.service.ts b/packages/twenty-server/src/engine/core-modules/billing/billing.service.ts index 0a5a19536..add42ae0b 100644 --- a/packages/twenty-server/src/engine/core-modules/billing/billing.service.ts +++ b/packages/twenty-server/src/engine/core-modules/billing/billing.service.ts @@ -96,6 +96,14 @@ export class BillingService { return notCanceledSubscriptions?.[0]; } + async getStripeCustomerId(workspaceId: string) { + const subscriptions = await this.billingSubscriptionRepository.find({ + where: { workspaceId }, + }); + + return subscriptions?.[0]?.stripeCustomerId; + } + async getBillingSubscriptionItem( workspaceId: string, stripeProductId = this.environmentService.get( @@ -131,11 +139,9 @@ export class BillingService { workspaceId: string, returnUrlPath?: string, ) { - const billingSubscription = await this.getCurrentBillingSubscription({ - workspaceId, - }); + const stripeCustomerId = await this.getStripeCustomerId(workspaceId); - if (!billingSubscription) { + if (!stripeCustomerId) { return; } @@ -145,7 +151,7 @@ export class BillingService { : frontBaseUrl; const session = await this.stripeService.createBillingPortalSession( - billingSubscription.stripeCustomerId, + stripeCustomerId, returnUrl, );