This commit is contained in:
2020-06-21 23:28:20 +00:00
parent 1e6ce7b348
commit 6ae7a51210
2 changed files with 28 additions and 10 deletions

View File

@@ -1,5 +1,4 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
@@ -7,7 +6,8 @@ using Microsoft.Extensions.Logging;
using AyaNova.Models; using AyaNova.Models;
using AyaNova.Api.ControllerHelpers; using AyaNova.Api.ControllerHelpers;
using AyaNova.Biz; using AyaNova.Biz;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace AyaNova.Api.Controllers namespace AyaNova.Api.Controllers
{ {

View File

@@ -47,21 +47,39 @@ namespace AyaNova.Biz
var TotalActiveTechs = await ActiveCountAsync(); var TotalActiveTechs = await ActiveCountAsync();
int CountOfTechsToSetInactive = (int)(TotalActiveTechs - KeepThisManyActiveTechs); int CountOfTechsToSetInactive = (int)(TotalActiveTechs - KeepThisManyActiveTechs);
if (CountOfTechsToSetInactive < 1) return; if (CountOfTechsToSetInactive < 1) return;
_log.LogInformation($"New license is a downgrade with fewer scheduleable resources, deactivating {CountOfTechsToSetInactive} scheduleable users with the oldest last login dates to make room for the new license"); _log.LogInformation($"New license is a downgrade with fewer scheduleable resources, deactivating {CountOfTechsToSetInactive} scheduleable users automatically so the license can be installed");
//bugbug: exactly wrong, deactivating the most recently logged in over some who never logged in, could be that null login is causing it?
using (AyContext ct = ServiceProviderProvider.DBContext) using (AyContext ct = ServiceProviderProvider.DBContext)
{ {
var ActiveTechList = await ct.User.Where(z => z.Active == true && (
z.UserType == UserType.Service || //Algorithm: For deactivation favor subcontractors first over servicetechs, favor ones that have no login records and finally favor by oldest last login
z.UserType == UserType.ServiceContractor)).OrderBy(z => z.LastLogin).Take(CountOfTechsToSetInactive).ToListAsync(); //theory is to catch the least likely to be currently active techs
foreach (User u in ActiveTechList)
//TODO: notify OPSNOTIFY Notify about each and every tech that is set inactive to bizadmin users
var NoLoginTechList = await ct.User.Where(z => z.Active == true && z.LastLogin == null && (
z.UserType == UserType.Service ||
z.UserType == UserType.ServiceContractor)).OrderByDescending(z => z.UserType).Take(CountOfTechsToSetInactive).ToListAsync();
CountOfTechsToSetInactive -= NoLoginTechList.Count();
foreach (User u in NoLoginTechList)
{ {
u.Active = false; u.Active = false;
_log.LogInformation($"User {u.Name} set to inactive"); _log.LogInformation($"User {u.Name} with no prior login automatically set to inactive to free up license");
}
await ct.SaveChangesAsync();
var HasLoginTechList = await ct.User.Where(z => z.Active == true && z.LastLogin != null && (
z.UserType == UserType.Service ||
z.UserType == UserType.ServiceContractor)).OrderByDescending(z => z.UserType).ThenBy(z => z.LastLogin).Take(CountOfTechsToSetInactive).ToListAsync();
foreach (User u in HasLoginTechList)
{
u.Active = false;
_log.LogInformation($"User {u.Name} who last logged in {u.LastLogin} automatically set to inactive to free up license");
} }
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
} }
} }
internal static void ResetSuperUserPassword() internal static void ResetSuperUserPassword()