From cc211647d72f06c8c73fbc2956d2adaccd95c1f2 Mon Sep 17 00:00:00 2001 From: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com> Date: Fri, 7 Feb 2025 15:43:14 +0100 Subject: [PATCH] [PM-17540]Do not grant re-subscriptions trial period (#5327) * Remove trial for restarted subscription Signed-off-by: Cy Okeke * Resolve the pr comment on initial change Signed-off-by: Cy Okeke * Resolve the issue of not saving payment method * Refactor the taxinfo mapping Signed-off-by: Cy Okeke --------- Signed-off-by: Cy Okeke --- .../Controllers/OrganizationBillingController.cs | 10 +++++++++- src/Core/Billing/Models/Sales/SubscriptionSetup.cs | 1 + .../Implementations/OrganizationBillingService.cs | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Api/Billing/Controllers/OrganizationBillingController.cs b/src/Api/Billing/Controllers/OrganizationBillingController.cs index b52241c30e2f..3ceeaf3c47d1 100644 --- a/src/Api/Billing/Controllers/OrganizationBillingController.cs +++ b/src/Api/Billing/Controllers/OrganizationBillingController.cs @@ -2,6 +2,7 @@ using Bit.Api.AdminConsole.Models.Request.Organizations; using Bit.Api.Billing.Models.Requests; using Bit.Api.Billing.Models.Responses; +using Bit.Core.Billing.Models; using Bit.Core.Billing.Models.Sales; using Bit.Core.Billing.Services; using Bit.Core.Context; @@ -17,7 +18,6 @@ namespace Bit.Api.Billing.Controllers; [Authorize("Application")] public class OrganizationBillingController( ICurrentContext currentContext, - IFeatureService featureService, IOrganizationBillingService organizationBillingService, IOrganizationRepository organizationRepository, IPaymentService paymentService, @@ -282,7 +282,15 @@ public async Task RestartSubscriptionAsync([FromRoute] Guid organizatio var plan = StaticStore.GetPlan(model.PlanType); sale.Organization.PlanType = plan.Type; sale.Organization.Plan = plan.Name; + sale.SubscriptionSetup.SkipTrial = true; await organizationBillingService.Finalize(sale); + var org = await organizationRepository.GetByIdAsync(organizationId); + if (organizationSignup.PaymentMethodType != null) + { + var paymentSource = new TokenizedPaymentSource(organizationSignup.PaymentMethodType.Value, organizationSignup.PaymentToken); + var taxInformation = TaxInformation.From(organizationSignup.TaxInfo); + await organizationBillingService.UpdatePaymentMethod(org, paymentSource, taxInformation); + } return TypedResults.Ok(); } diff --git a/src/Core/Billing/Models/Sales/SubscriptionSetup.cs b/src/Core/Billing/Models/Sales/SubscriptionSetup.cs index cd87b2bb1c8b..39a80a776a43 100644 --- a/src/Core/Billing/Models/Sales/SubscriptionSetup.cs +++ b/src/Core/Billing/Models/Sales/SubscriptionSetup.cs @@ -9,6 +9,7 @@ public class SubscriptionSetup public required Plan Plan { get; set; } public required PasswordManager PasswordManagerOptions { get; set; } public SecretsManager? SecretsManagerOptions { get; set; } + public bool SkipTrial = false; public class PasswordManager { diff --git a/src/Core/Billing/Services/Implementations/OrganizationBillingService.cs b/src/Core/Billing/Services/Implementations/OrganizationBillingService.cs index 1bc4f792d7d6..57a4b1781bd0 100644 --- a/src/Core/Billing/Services/Implementations/OrganizationBillingService.cs +++ b/src/Core/Billing/Services/Implementations/OrganizationBillingService.cs @@ -379,7 +379,7 @@ private async Task CreateSubscriptionAsync( ["organizationId"] = organizationId.ToString() }, OffSession = true, - TrialPeriodDays = plan.TrialPeriodDays + TrialPeriodDays = subscriptionSetup.SkipTrial ? 0 : plan.TrialPeriodDays }; return await stripeAdapter.SubscriptionCreateAsync(subscriptionCreateOptions);