2025-02-14 12:03:09 -05:00
|
|
|
|
using Bit.Admin.Billing.Models;
|
|
|
|
|
|
using Bit.Core.AdminConsole.Entities.Provider;
|
2023-10-27 03:38:29 +10:00
|
|
|
|
using Bit.Core.AdminConsole.Enums.Provider;
|
|
|
|
|
|
using Bit.Core.AdminConsole.Models.Data.Provider;
|
2025-02-14 12:03:09 -05:00
|
|
|
|
using Bit.Core.Billing.Entities;
|
|
|
|
|
|
using Bit.Core.Billing.Enums;
|
2021-06-03 18:58:29 +02:00
|
|
|
|
|
2024-02-21 09:18:09 +10:00
|
|
|
|
namespace Bit.Admin.AdminConsole.Models;
|
2021-06-03 18:58:29 +02:00
|
|
|
|
|
2021-08-10 12:28:00 -04:00
|
|
|
|
public class ProviderViewModel
|
2022-08-29 16:06:55 -04:00
|
|
|
|
{
|
2021-08-10 12:28:00 -04:00
|
|
|
|
public ProviderViewModel() { }
|
2022-08-29 14:53:16 -04:00
|
|
|
|
|
2025-02-14 12:03:09 -05:00
|
|
|
|
public ProviderViewModel(
|
|
|
|
|
|
Provider provider,
|
|
|
|
|
|
IEnumerable<ProviderUserUserDetails> providerUsers,
|
|
|
|
|
|
IEnumerable<ProviderOrganizationOrganizationDetails> organizations,
|
|
|
|
|
|
IReadOnlyCollection<ProviderPlan> providerPlans)
|
2022-08-29 16:06:55 -04:00
|
|
|
|
{
|
2021-08-10 12:28:00 -04:00
|
|
|
|
Provider = provider;
|
2021-06-03 18:58:29 +02:00
|
|
|
|
UserCount = providerUsers.Count();
|
2021-08-10 12:28:00 -04:00
|
|
|
|
ProviderAdmins = providerUsers.Where(u => u.Type == ProviderUserType.ProviderAdmin);
|
|
|
|
|
|
ProviderOrganizations = organizations.Where(o => o.ProviderId == provider.Id);
|
2025-02-14 12:03:09 -05:00
|
|
|
|
|
|
|
|
|
|
if (Provider.Type == ProviderType.Msp)
|
|
|
|
|
|
{
|
|
|
|
|
|
var usedTeamsSeats = ProviderOrganizations.Where(po => po.PlanType == PlanType.TeamsMonthly)
|
|
|
|
|
|
.Sum(po => po.OccupiedSeats) ?? 0;
|
|
|
|
|
|
var teamsProviderPlan = providerPlans.FirstOrDefault(plan => plan.PlanType == PlanType.TeamsMonthly);
|
|
|
|
|
|
if (teamsProviderPlan != null && teamsProviderPlan.IsConfigured())
|
|
|
|
|
|
{
|
|
|
|
|
|
ProviderPlanViewModels.Add(new ProviderPlanViewModel("Teams (Monthly) Subscription", teamsProviderPlan, usedTeamsSeats));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var usedEnterpriseSeats = ProviderOrganizations.Where(po => po.PlanType == PlanType.EnterpriseMonthly)
|
|
|
|
|
|
.Sum(po => po.OccupiedSeats) ?? 0;
|
|
|
|
|
|
var enterpriseProviderPlan = providerPlans.FirstOrDefault(plan => plan.PlanType == PlanType.EnterpriseMonthly);
|
|
|
|
|
|
if (enterpriseProviderPlan != null && enterpriseProviderPlan.IsConfigured())
|
|
|
|
|
|
{
|
|
|
|
|
|
ProviderPlanViewModels.Add(new ProviderPlanViewModel("Enterprise (Monthly) Subscription", enterpriseProviderPlan, usedEnterpriseSeats));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (Provider.Type == ProviderType.MultiOrganizationEnterprise)
|
|
|
|
|
|
{
|
|
|
|
|
|
var usedEnterpriseSeats = ProviderOrganizations.Where(po => po.PlanType == PlanType.EnterpriseMonthly)
|
|
|
|
|
|
.Sum(po => po.OccupiedSeats).GetValueOrDefault(0);
|
|
|
|
|
|
var enterpriseProviderPlan = providerPlans.FirstOrDefault();
|
|
|
|
|
|
if (enterpriseProviderPlan != null && enterpriseProviderPlan.IsConfigured())
|
|
|
|
|
|
{
|
|
|
|
|
|
var planLabel = enterpriseProviderPlan.PlanType switch
|
|
|
|
|
|
{
|
|
|
|
|
|
PlanType.EnterpriseMonthly => "Enterprise (Monthly) Subscription",
|
|
|
|
|
|
PlanType.EnterpriseAnnually => "Enterprise (Annually) Subscription",
|
|
|
|
|
|
_ => string.Empty
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
ProviderPlanViewModels.Add(new ProviderPlanViewModel(planLabel, enterpriseProviderPlan, usedEnterpriseSeats));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2022-08-29 15:53:48 -04:00
|
|
|
|
}
|
2022-08-29 16:06:55 -04:00
|
|
|
|
|
2021-06-03 18:58:29 +02:00
|
|
|
|
public int UserCount { get; set; }
|
|
|
|
|
|
public Provider Provider { get; set; }
|
2021-08-05 10:39:05 -04:00
|
|
|
|
public IEnumerable<ProviderUserUserDetails> ProviderAdmins { get; set; }
|
2021-08-10 12:28:00 -04:00
|
|
|
|
public IEnumerable<ProviderOrganizationOrganizationDetails> ProviderOrganizations { get; set; }
|
2025-02-14 12:03:09 -05:00
|
|
|
|
public List<ProviderPlanViewModel> ProviderPlanViewModels { get; set; } = [];
|
2021-06-03 18:58:29 +02:00
|
|
|
|
}
|