From 9eec986c1c12ca2f1261577e386078d53ae58bf1 Mon Sep 17 00:00:00 2001 From: Alex Morask <144709477+amorask-bitwarden@users.noreply.github.com> Date: Mon, 3 Jun 2024 11:51:41 -0400 Subject: [PATCH] Added gateway links to Provider edit in Admin (#4145) --- .../Controllers/ProvidersController.cs | 43 ++++++++++++++++++- .../AdminConsole/Models/ProviderEditModel.cs | 8 +++- .../AdminConsole/Views/Providers/Edit.cshtml | 8 ++-- 3 files changed, 52 insertions(+), 7 deletions(-) diff --git a/src/Admin/AdminConsole/Controllers/ProvidersController.cs b/src/Admin/AdminConsole/Controllers/ProvidersController.cs index 160af7893e..621144e46a 100644 --- a/src/Admin/AdminConsole/Controllers/ProvidersController.cs +++ b/src/Admin/AdminConsole/Controllers/ProvidersController.cs @@ -39,6 +39,9 @@ public class ProvidersController : Controller private readonly ICreateProviderCommand _createProviderCommand; private readonly IFeatureService _featureService; private readonly IProviderPlanRepository _providerPlanRepository; + private readonly string _stripeUrl; + private readonly string _braintreeMerchantUrl; + private readonly string _braintreeMerchantId; public ProvidersController( IOrganizationRepository organizationRepository, @@ -52,7 +55,8 @@ public class ProvidersController : Controller IUserService userService, ICreateProviderCommand createProviderCommand, IFeatureService featureService, - IProviderPlanRepository providerPlanRepository) + IProviderPlanRepository providerPlanRepository, + IWebHostEnvironment webHostEnvironment) { _organizationRepository = organizationRepository; _organizationService = organizationService; @@ -66,6 +70,9 @@ public class ProvidersController : Controller _createProviderCommand = createProviderCommand; _featureService = featureService; _providerPlanRepository = providerPlanRepository; + _stripeUrl = webHostEnvironment.GetStripeUrl(); + _braintreeMerchantUrl = webHostEnvironment.GetBraintreeMerchantUrl(); + _braintreeMerchantId = globalSettings.Braintree.MerchantId; } [RequirePermission(Permission.Provider_List_View)] @@ -168,7 +175,9 @@ public class ProvidersController : Controller var providerPlans = await _providerPlanRepository.GetByProviderId(id); - return View(new ProviderEditModel(provider, users, providerOrganizations, providerPlans.ToList())); + return View(new ProviderEditModel( + provider, users, providerOrganizations, + providerPlans.ToList(), GetGatewayCustomerUrl(provider), GetGatewaySubscriptionUrl(provider))); } [HttpPost] @@ -372,4 +381,34 @@ public class ProvidersController : Controller return NoContent(); } + + private string GetGatewayCustomerUrl(Provider provider) + { + if (!provider.Gateway.HasValue || string.IsNullOrEmpty(provider.GatewayCustomerId)) + { + return null; + } + + return provider.Gateway switch + { + GatewayType.Stripe => $"{_stripeUrl}/customers/{provider.GatewayCustomerId}", + GatewayType.PayPal => $"{_braintreeMerchantUrl}/{_braintreeMerchantId}/${provider.GatewayCustomerId}", + _ => null + }; + } + + private string GetGatewaySubscriptionUrl(Provider provider) + { + if (!provider.Gateway.HasValue || string.IsNullOrEmpty(provider.GatewaySubscriptionId)) + { + return null; + } + + return provider.Gateway switch + { + GatewayType.Stripe => $"{_stripeUrl}/subscriptions/{provider.GatewaySubscriptionId}", + GatewayType.PayPal => $"{_braintreeMerchantUrl}/{_braintreeMerchantId}/subscriptions/${provider.GatewaySubscriptionId}", + _ => null + }; + } } diff --git a/src/Admin/AdminConsole/Models/ProviderEditModel.cs b/src/Admin/AdminConsole/Models/ProviderEditModel.cs index 078731aaa7..e0c08d7083 100644 --- a/src/Admin/AdminConsole/Models/ProviderEditModel.cs +++ b/src/Admin/AdminConsole/Models/ProviderEditModel.cs @@ -14,7 +14,9 @@ public class ProviderEditModel : ProviderViewModel Provider provider, IEnumerable providerUsers, IEnumerable organizations, - IReadOnlyCollection providerPlans) : base(provider, providerUsers, organizations) + IReadOnlyCollection providerPlans, + string gatewayCustomerUrl = null, + string gatewaySubscriptionUrl = null) : base(provider, providerUsers, organizations) { Name = provider.DisplayName(); BusinessName = provider.DisplayBusinessName(); @@ -25,6 +27,8 @@ public class ProviderEditModel : ProviderViewModel Gateway = provider.Gateway; GatewayCustomerId = provider.GatewayCustomerId; GatewaySubscriptionId = provider.GatewaySubscriptionId; + GatewayCustomerUrl = gatewayCustomerUrl; + GatewaySubscriptionUrl = gatewaySubscriptionUrl; } [Display(Name = "Billing Email")] @@ -45,6 +49,8 @@ public class ProviderEditModel : ProviderViewModel public string GatewayCustomerId { get; set; } [Display(Name = "Gateway Subscription Id")] public string GatewaySubscriptionId { get; set; } + public string GatewayCustomerUrl { get; } + public string GatewaySubscriptionUrl { get; } public virtual Provider ToProvider(Provider existingProvider) { diff --git a/src/Admin/AdminConsole/Views/Providers/Edit.cshtml b/src/Admin/AdminConsole/Views/Providers/Edit.cshtml index 1d58a16a29..90da796e2d 100644 --- a/src/Admin/AdminConsole/Views/Providers/Edit.cshtml +++ b/src/Admin/AdminConsole/Views/Providers/Edit.cshtml @@ -78,9 +78,9 @@ @@ -91,9 +91,9 @@