public bool CanDownGrade(Organization organization, BillingPlan plan, User user, out string message) { if (organization == null || String.IsNullOrWhiteSpace(organization.Id)) { message = "Invalid Organization"; return false; } int currentNumberOfUsers = _userRepository.GetByOrganizationId(organization.Id).Count() + organization.Invites.Count; int maxUsers = plan.MaxUsers != -1 ? plan.MaxUsers : int.MaxValue; if (currentNumberOfUsers > maxUsers) { message = String.Format("Please remove {0} user{1} and try again.", currentNumberOfUsers - maxUsers, (currentNumberOfUsers - maxUsers) > 0 ? "s" : String.Empty); return false; } int maxProjects = plan.MaxProjects != -1 ? plan.MaxProjects : int.MaxValue; long projectCount = _projectRepository.GetCountByOrganizationId(organization.Id); if (projectCount > maxProjects) { message = String.Format("Please remove {0} project{1} and try again.", projectCount - maxProjects, (projectCount - maxProjects) > 0 ? "s" : String.Empty); return false; } // Ensure the user can't be apart of more than one free plan. if (String.Equals(plan.Id, FreePlan.Id) && user != null && _organizationRepository.GetByIds(user.OrganizationIds).Any(o => String.Equals(o.PlanId, FreePlan.Id))) { message = "You already have one free account. You are not allowed to create more than one free account."; return false; } message = String.Empty; return true; }
public bool CanDownGrade(Organization organization, BillingPlan plan, User user, out string message) { if (organization == null || String.IsNullOrWhiteSpace(organization.Id)) { message = "Invalid Organization"; return false; } int currentNumberOfUsers = _userRepository.GetByOrganizationId(organization.Id).Count() + organization.Invites.Count; int maxUsers = plan.MaxUsers != -1 ? plan.MaxUsers : int.MaxValue; if (currentNumberOfUsers > maxUsers) { message = String.Format("Please remove {0} user{1} and try again.", currentNumberOfUsers - maxUsers, (currentNumberOfUsers - maxUsers) > 0 ? "s" : String.Empty); return false; } int maxProjects = plan.MaxProjects != -1 ? plan.MaxProjects : int.MaxValue; if (organization.ProjectCount > maxProjects) { message = String.Format("Please remove {0} project{1} and try again.", organization.ProjectCount - maxProjects, (organization.ProjectCount - maxProjects) > 0 ? "s" : String.Empty); return false; } // TODO: We need to make this smarter. if (organization.OverageDays != null && organization.OverageDays.Count(d => d.Day > DateTime.Now.AddDays(-30)) > 0 && plan.MaxErrorsPerDay < GetBillingPlan(organization.PlanId).MaxErrorsPerDay) { message = "You would exceed the maximum errors per day plan limit."; return false; } // Ensure the user can't be apart of more than one free plan. if (String.Equals(plan.Id, FreePlan.Id) && user != null && _organizationRepository.GetByIds(user.OrganizationIds).Any(o => String.Equals(o.PlanId, FreePlan.Id))) { message = "You already have one free account. You are not allowed to create more than one free account."; return false; } message = String.Empty; return true; }
public static void ApplyBillingPlan(Organization organization, BillingPlan plan, User user = null, bool updateBillingPrice = true) { organization.PlanId = plan.Id; organization.PlanName = plan.Name; organization.PlanDescription = plan.Description; organization.BillingChangeDate = DateTime.Now; if (updateBillingPrice) organization.BillingPrice = plan.Price; organization.BillingChangedByUserId = user?.Id; organization.MaxUsers = plan.MaxUsers; organization.MaxProjects = plan.MaxProjects; organization.RetentionDays = plan.RetentionDays; organization.MaxEventsPerMonth = plan.MaxEventsPerMonth; organization.HasPremiumFeatures = plan.HasPremiumFeatures; }
public static void ApplyBillingPlan(Organization organization, BillingPlan plan, User user = null, bool updateBillingPrice = true) { organization.PlanId = plan.Id; organization.PlanName = plan.Name; organization.PlanDescription = plan.Description; organization.BillingChangeDate = DateTime.Now; if (updateBillingPrice) organization.BillingPrice = plan.Price; if (user != null) organization.BillingChangedByUserId = user.Id; organization.MaxUsers = plan.MaxUsers; organization.MaxProjects = plan.MaxProjects; organization.RetentionDays = plan.RetentionDays; organization.MaxEventsPerMonth = plan.MaxEventsPerMonth; organization.HasPremiumFeatures = plan.HasPremiumFeatures; organization.SetMonthlyUsage(organization.GetCurrentMonthlyTotal(), organization.GetCurrentMonthlyBlocked(), organization.GetCurrentMonthlyTooBig()); }
public async Task<ChangePlanResult> CanDownGradeAsync(Organization organization, BillingPlan plan, User user) { if (String.IsNullOrWhiteSpace(organization?.Id)) return ChangePlanResult.FailWithMessage("Invalid Organization"); long currentNumberOfUsers = (await _userRepository.GetByOrganizationIdAsync(organization.Id).AnyContext()).Total + organization.Invites.Count; int maxUsers = plan.MaxUsers != -1 ? plan.MaxUsers : int.MaxValue; if (currentNumberOfUsers > maxUsers) return ChangePlanResult.FailWithMessage($"Please remove {currentNumberOfUsers - maxUsers} user{((currentNumberOfUsers - maxUsers) > 0 ? "s" : String.Empty)} and try again."); int maxProjects = plan.MaxProjects != -1 ? plan.MaxProjects : int.MaxValue; long projectCount = await _projectRepository.GetCountByOrganizationIdAsync(organization.Id).AnyContext(); if (projectCount > maxProjects) return ChangePlanResult.FailWithMessage($"Please remove {projectCount - maxProjects} project{((projectCount - maxProjects) > 0 ? "s" : String.Empty)} and try again."); // Ensure the user can't be apart of more than one free plan. if (String.Equals(plan.Id, FreePlan.Id) && user != null && (await _organizationRepository.GetByIdsAsync(user.OrganizationIds)).Documents.Any(o => String.Equals(o.PlanId, FreePlan.Id))) return ChangePlanResult.FailWithMessage("You already have one free account. You are not allowed to create more than one free account."); return new ChangePlanResult { Success = true }; }
public void ApplyBillingPlan(Organization organization, BillingPlan plan, User user, bool updateBillingPrice = true) { organization.PlanId = plan.Id; organization.BillingChangeDate = DateTime.Now; if (updateBillingPrice) organization.BillingPrice = plan.Price; organization.BillingChangedByUserId = user.Id; organization.MaxUsers = plan.MaxUsers; organization.MaxProjects = plan.MaxProjects; organization.RetentionDays = plan.RetentionDays; organization.MaxErrorsPerDay = plan.MaxErrorsPerDay; organization.HasPremiumFeatures = plan.HasPremiumFeatures; }