diff --git a/src/lib/components/billing/planSelection.svelte b/src/lib/components/billing/planSelection.svelte index 2fb005922..0d484a9b4 100644 --- a/src/lib/components/billing/planSelection.svelte +++ b/src/lib/components/billing/planSelection.svelte @@ -8,6 +8,7 @@ export let billingPlan: Tier; export let anyOrgFree = false; export let isNewOrg = false; + export let selfService = true; let classes: string = ''; export { classes as class }; @@ -22,7 +23,7 @@
  • - - -
    + + +

    {tierPro.name} {#if $organization?.billingPlan === BillingPlan.PRO && !isNewOrg} diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 02d7a2768..e73ba5854 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -467,7 +467,8 @@ export const eventServices: Array = [ export enum BillingPlan { FREE = 'tier-0', PRO = 'tier-1', - SCALE = 'tier-2' + SCALE = 'tier-2', + CUSTOM = 'cont-1' } export const feedbackDowngradeOptions = [ diff --git a/src/lib/sdk/billing.ts b/src/lib/sdk/billing.ts index c9e8a6c4d..d2b407c8b 100644 --- a/src/lib/sdk/billing.ts +++ b/src/lib/sdk/billing.ts @@ -277,6 +277,8 @@ export type Plan = { users: AdditionalResource; }; trialDays: number; + isAvailable: boolean; + selfService: boolean; }; export type PlansInfo = { diff --git a/src/lib/stores/billing.ts b/src/lib/stores/billing.ts index 21611761f..d5d66a4c3 100644 --- a/src/lib/stores/billing.ts +++ b/src/lib/stores/billing.ts @@ -34,7 +34,7 @@ import { user } from './user'; import { browser } from '$app/environment'; import { canSeeBilling } from './roles'; -export type Tier = 'tier-0' | 'tier-1' | 'tier-2'; +export type Tier = 'tier-0' | 'tier-1' | 'tier-2' | 'cont-1'; export const roles = [ { @@ -77,6 +77,8 @@ export function tierToPlan(tier: Tier) { return tierPro; case BillingPlan.SCALE: return tierScale; + case BillingPlan.CUSTOM: + return tierCustom; default: return tierFree; } @@ -182,6 +184,11 @@ export const tierScale: TierData = { description: 'For scaling teams and agencies that need dedicated support.' }; +export const tierCustom: TierData = { + name: 'Custom', + description: 'Team on a custom contract' +}; + export const showUsageRatesModal = writable(false); export function checkForUsageFees(plan: Tier, id: PlanServices) { diff --git a/src/routes/(console)/organization-[organization]/billing/planSummary.svelte b/src/routes/(console)/organization-[organization]/billing/planSummary.svelte index fd2024f1b..252a1ef3c 100644 --- a/src/routes/(console)/organization-[organization]/billing/planSummary.svelte +++ b/src/routes/(console)/organization-[organization]/billing/planSummary.svelte @@ -17,6 +17,8 @@ let currentInvoice: Invoice; let extraMembers = 0; + let currentPlan; + const today = new Date(); onMount(async () => { const invoices = await sdk.forConsole.billing.listInvoices($organization.$id, [ @@ -26,9 +28,10 @@ currentInvoice = invoices.invoices[0]; const members = await sdk.forConsole.teams.listMemberships($organization.$id, []); extraMembers = members.total > 1 ? members.total - 1 : 0; + + currentPlan = await sdk.forConsole.billing.getPlan($organization?.$id); }); - $: currentPlan = $plansInfo?.get($organization?.billingPlan); $: extraUsage = (currentInvoice?.amount ?? 0) - (currentPlan?.price ?? 0); $: extraAddons = currentInvoice?.usage?.length ?? 0; $: isTrial = diff --git a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte index dbfb4fbc7..6b7085516 100644 --- a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte +++ b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte @@ -73,6 +73,7 @@ let feedbackDowngradeReason: string; let feedbackMessage: string; + let selfService: boolean; onMount(async () => { if ($page.url.searchParams.has('code')) { @@ -99,6 +100,9 @@ } else { billingPlan = BillingPlan.PRO; } + + const currentPlan = await sdk.forConsole.billing.getPlan($organization?.$id); + selfService = currentPlan.selfService; }); async function loadPaymentMethods() { @@ -252,8 +256,14 @@ For more details on our plans, visit our .

    + {#if !selfService} + Your contract is not eligible for manual changes. Please reach out to schedule + a call or setup a dialog. + {/if} - {#if billingPlan !== BillingPlan.FREE && $organization.billingPlan !== billingPlan} + {#if billingPlan !== BillingPlan.FREE && $organization.billingPlan !== billingPlan && $organization.billingPlan !== BillingPlan.CUSTOM} - {:else} + {:else if $organization.billingPlan !== BillingPlan.CUSTOM} {/if} @@ -341,7 +351,7 @@