diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index b0f5d7f3dab..4e310354699 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -9,7 +9,7 @@ import { SettingsService as SettingsServiceAbstraction } from "@bitwarden/common import { TotpService as TotpServiceAbstraction } from "@bitwarden/common/abstractions/totp.service"; import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service"; import { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service"; -import { InternalOrganizationService as InternalOrganizationServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; +import { InternalOrganizationServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { InternalPolicyService as InternalPolicyServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { ProviderService as ProviderServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/provider.service"; diff --git a/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.html b/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.html index 78841dc74fe..4508b6cd070 100644 --- a/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.html +++ b/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.html @@ -87,13 +87,32 @@ {{ "passwordManager" | i18n }} - {{ "freeOrganization" | i18n }} {{ "free" | i18n }} - + {{ "secretsManager" | i18n }} - {{ "freeOrganization" | i18n }} {{ "free" | i18n }} + + + {{ "secretsManager" | i18n }} - + {{ "beta" | i18n }} + ({{ "annually" | i18n }}) @ + {{ 0 | currency : "$" }} + {{ + "betaEnding" | i18n | uppercase + }} + + {{ 0 | currency : "$" }} /{{ "year" | i18n }} + + + {{ smBetaEndedDesc }} + diff --git a/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.ts b/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.ts index df58f31bcd1..f03fb72faf2 100644 --- a/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.ts +++ b/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.ts @@ -1,3 +1,4 @@ +import { DatePipe } from "@angular/common"; import { Component, OnDestroy, OnInit } from "@angular/core"; import { ActivatedRoute } from "@angular/router"; import { concatMap, Subject, takeUntil } from "rxjs"; @@ -17,6 +18,7 @@ import { ConfigServiceAbstraction } from "@bitwarden/common/platform/abstraction import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { Utils } from "@bitwarden/common/platform/misc/utils"; import { BillingSyncApiKeyComponent, @@ -45,6 +47,9 @@ export class OrganizationSubscriptionCloudComponent implements OnInit, OnDestroy firstLoaded = false; loading: boolean; + private readonly _smBetaEndingDate = new Date(2023, 7, 25); + private readonly _smGracePeriodEndingDate = new Date(2023, 9, 24); + private destroy$ = new Subject(); constructor( @@ -57,7 +62,8 @@ export class OrganizationSubscriptionCloudComponent implements OnInit, OnDestroy private organizationApiService: OrganizationApiServiceAbstraction, private route: ActivatedRoute, private dialogService: DialogServiceAbstraction, - private configService: ConfigServiceAbstraction + private configService: ConfigServiceAbstraction, + private datePipe: DatePipe ) {} async ngOnInit() { @@ -122,6 +128,7 @@ export class OrganizationSubscriptionCloudComponent implements OnInit, OnDestroy this.userOrg.useSecretsManager && this.subscription != null && this.sub.secretsManagerPlan?.hasAdditionalSeatsOption && + !this.sub.secretsManagerBeta && !this.subscription.cancelled && !this.subscriptionMarkedForCancel; @@ -256,6 +263,14 @@ export class OrganizationSubscriptionCloudComponent implements OnInit, OnDestroy ); } + get smBetaEndedDesc() { + return this.i18nService.translate( + "smBetaEndedDesc", + this.datePipe.transform(this._smBetaEndingDate), + Utils.daysRemaining(this._smGracePeriodEndingDate).toString() + ); + } + cancel = async () => { if (this.loading) { return; diff --git a/apps/web/src/app/billing/organizations/secrets-manager/sm-adjust-subscription.component.html b/apps/web/src/app/billing/organizations/secrets-manager/sm-adjust-subscription.component.html index be882cf66b9..6aece8fe897 100644 --- a/apps/web/src/app/billing/organizations/secrets-manager/sm-adjust-subscription.component.html +++ b/apps/web/src/app/billing/organizations/secrets-manager/sm-adjust-subscription.component.html @@ -5,7 +5,7 @@ {{ "total" | i18n }}: {{ formGroup.value.seatCount || 0 }} × {{ options.seatPrice | currency : "$" }} = - {{ seatTotal | currency : "$" }} / {{ options.interval | i18n }} + {{ seatTotalCost | currency : "$" }} / {{ options.interval | i18n }} @@ -28,7 +28,7 @@ {{ "maxSeatCost" | i18n }}: {{ formGroup.value.maxAutoscaleSeats || 0 }} × - {{ options.seatPrice | currency : "$" }} = {{ maxSeatTotal | currency : "$" }} / + {{ options.seatPrice | currency : "$" }} = {{ maxSeatTotalCost | currency : "$" }} / {{ options.interval | i18n }} @@ -44,16 +44,14 @@ />
- {{ - "additionalServiceAccountsDesc" - | i18n : options.baseServiceAccountCount : (monthlyServiceAccountPrice | currency : "$") - }} + {{ "includedServiceAccounts" | i18n : options.baseServiceAccountCount }} + {{ "addAdditionalServiceAccounts" | i18n : (monthlyServiceAccountPrice | currency : "$") }}
{{ "total" | i18n }}: {{ formGroup.value.additionalServiceAccounts || 0 }} × {{ options.additionalServiceAccountPrice | currency : "$" }} = - {{ serviceAccountTotal | currency : "$" }} / {{ options.interval | i18n }} + {{ serviceAccountTotalCost | currency : "$" }} / {{ options.interval | i18n }}
@@ -80,10 +78,13 @@ [min]="formGroup.value.additionalServiceAccounts" /> +
+ {{ "includedServiceAccounts" | i18n : options.baseServiceAccountCount }} +
{{ "maxServiceAccountCost" | i18n }}: - {{ formGroup.value.maxAutoscaleServiceAccounts || 0 }} × + {{ maxAdditionalServiceAccounts }} × {{ options.additionalServiceAccountPrice | currency : "$" }} = - {{ maxServiceAccountTotal | currency : "$" }} / {{ options.interval | i18n }} + {{ maxServiceAccountTotalCost | currency : "$" }} / {{ options.interval | i18n }}