This commit is contained in:
2020-06-05 19:25:00 +00:00
parent 3111f7fdb7
commit ac3bfb50bf
3 changed files with 135 additions and 227 deletions

View File

@@ -22,59 +22,60 @@ namespace AyaNova.Biz
//Used by SEARCH and objects with JOBS //Used by SEARCH and objects with JOBS
internal static BizObject GetBizObject(AyaType ayaType, long userId = 1, AuthorizationRoles roles = AuthorizationRoles.All) internal static BizObject GetBizObject(AyaType ayaType, long userId = 1, AuthorizationRoles roles = AuthorizationRoles.All)
{ {
var dbcontext = ServiceProviderProvider.DBContext; using (AyContext ct = ServiceProviderProvider.DBContext)
{
switch (ayaType) switch (ayaType)
{ {
//CoreBizObject add here //CoreBizObject add here
case AyaType.ServerJob: case AyaType.ServerJob:
return new JobOperationsBiz(dbcontext, userId, roles); return new JobOperationsBiz(ct, userId, roles);
case AyaType.TrialSeeder: case AyaType.TrialSeeder:
return new TrialBiz(dbcontext, userId, roles); return new TrialBiz(ct, userId, roles);
case AyaType.Translation: case AyaType.Translation:
return new TranslationBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new TranslationBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.DataListView: case AyaType.DataListView:
return new DataListViewBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new DataListViewBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.FormCustom: case AyaType.FormCustom:
return new FormCustomBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new FormCustomBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.Widget: case AyaType.Widget:
return new WidgetBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new WidgetBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.Customer: case AyaType.Customer:
return new CustomerBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new CustomerBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.User: case AyaType.User:
return new UserBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new UserBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.Contract: case AyaType.Contract:
return new ContractBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new ContractBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.HeadOffice: case AyaType.HeadOffice:
return new HeadOfficeBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new HeadOfficeBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.LoanUnit: case AyaType.LoanUnit:
return new LoanUnitBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new LoanUnitBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.Part: case AyaType.Part:
return new PartBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new PartBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.PM: case AyaType.PM:
return new PMBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new PMBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.PMTemplate: case AyaType.PMTemplate:
return new PMTemplateBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new PMTemplateBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.Project: case AyaType.Project:
return new ProjectBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new ProjectBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.PurchaseOrder: case AyaType.PurchaseOrder:
return new PurchaseOrderBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new PurchaseOrderBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.Quote: case AyaType.Quote:
return new QuoteBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new QuoteBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.QuoteTemplate: case AyaType.QuoteTemplate:
return new QuoteTemplateBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new QuoteTemplateBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.Unit: case AyaType.Unit:
return new UnitBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new UnitBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.UnitModel: case AyaType.UnitModel:
return new UnitModelBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new UnitModelBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
case AyaType.Vendor: case AyaType.Vendor:
return new VendorBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new VendorBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
//--- WorkOrder //--- WorkOrder
case AyaType.WorkOrder: case AyaType.WorkOrder:
case AyaType.WorkOrderItem: case AyaType.WorkOrderItem:
@@ -87,14 +88,15 @@ namespace AyaNova.Biz
case AyaType.WorkOrderItemTask: case AyaType.WorkOrderItemTask:
case AyaType.WorkOrderItemTravel: case AyaType.WorkOrderItemTravel:
case AyaType.WorkOrderItemUnit: case AyaType.WorkOrderItemUnit:
return new WorkOrderBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new WorkOrderBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
//--- //---
case AyaType.WorkOrderTemplate: case AyaType.WorkOrderTemplate:
return new WorkOrderTemplateBiz(dbcontext, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles); return new WorkOrderTemplateBiz(ct, userId, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, roles);
default: default:
throw new System.NotSupportedException($"AyaNova.BLL.BizObjectFactory::GetBizObject type {ayaType.ToString()} is not supported"); throw new System.NotSupportedException($"AyaNova.BLL.BizObjectFactory::GetBizObject type {ayaType.ToString()} is not supported");
} }
}
} }

View File

@@ -19,23 +19,6 @@ namespace AyaNova.Biz
#region JOB OPS #region JOB OPS
/// <summary>
/// Get a non tracked list of jobs for an object
/// </summary>
/// <param name="ayObj"></param>
///
/// <returns></returns>
internal static async Task<List<OpsJob>> GetJobsForObjectAsync(AyaTypeId ayObj)
{
var ct = ServiceProviderProvider.DBContext;
return await ct.OpsJob
.AsNoTracking()
.Where(z => z.ObjectId == ayObj.ObjectId && z.ObjectType == ayObj.ObjectType)
.OrderBy(z => z.Created)
.ToListAsync();
}
/// <summary> /// <summary>
/// Get a non tracked list of jobs that are ready to process and exclusive only /// Get a non tracked list of jobs that are ready to process and exclusive only
@@ -63,122 +46,39 @@ namespace AyaNova.Biz
/// <returns></returns> /// <returns></returns>
private static async Task<List<OpsJob>> GetReadyJobsAsync(bool exclusiveOnly) private static async Task<List<OpsJob>> GetReadyJobsAsync(bool exclusiveOnly)
{ {
var ct = ServiceProviderProvider.DBContext; using (AyContext ct = ServiceProviderProvider.DBContext)
{
var ret = await ct.OpsJob var ret = await ct.OpsJob
.AsNoTracking() .AsNoTracking()
.Where(z => z.StartAfter < System.DateTime.UtcNow && z.Exclusive == exclusiveOnly && z.JobStatus == JobStatus.Sleeping) .Where(z => z.StartAfter < System.DateTime.UtcNow && z.Exclusive == exclusiveOnly && z.JobStatus == JobStatus.Sleeping)
.OrderBy(z => z.Created) .OrderBy(z => z.Created)
.ToListAsync(); .ToListAsync();
return ret; return ret;
} }
/// <summary>
/// Get a non tracked list of all jobs that are not completed
/// could be running or sleeping
/// </summary>
/// <returns></returns>
internal static async Task<List<OpsJob>> GetAllSleepingOrRunningJobsAsync()
{
var ct = ServiceProviderProvider.DBContext;
var ret = await ct.OpsJob
.AsNoTracking()
.Where(z => z.JobStatus == JobStatus.Sleeping || z.JobStatus == JobStatus.Running)
.OrderBy(z => z.Created)
.ToListAsync();
return ret;
} }
/// <summary>
/// Get a non tracked list of all jobs for a JobType
/// </summary>
/// <returns></returns>
internal static async Task<List<OpsJob>> GetAllJobsForJobTypeAsync(JobType jobType)
{
var ct = ServiceProviderProvider.DBContext;
var ret = await ct.OpsJob
.AsNoTracking()
.Where(z => z.JobType == jobType)
.OrderBy(z => z.Created)
.ToListAsync();
return ret;
}
/// <summary>
/// Get a non tracked list of all jobs that are status running but have no last activity for XX HOURS
/// </summary>
/// <returns></returns>
internal static async Task<List<OpsJob>> GetPotentiallyDeadRunningJobsAsync()
{
var ct = ServiceProviderProvider.DBContext;
var ret = await ct.OpsJob
.AsNoTracking()
.Where(z => z.JobStatus == JobStatus.Sleeping || z.JobStatus == JobStatus.Running)
.OrderBy(z => z.Created)
.ToListAsync();
return ret;
}
/// <summary>
/// Get a count of all jobs for a JobStatus
/// </summary>
/// <returns></returns>
internal static async Task<long> GetCountForJobStatusAsync(JobStatus jobStatus)
{
var ct = ServiceProviderProvider.DBContext;
var ret = await ct.OpsJob
.Where(z => z.JobStatus == jobStatus)
.LongCountAsync();
return ret;
}
/// <summary> /// <summary>
/// Add a new job to the database /// Add a new job to the database
/// </summary> /// </summary>
/// <param name="newJob"></param> /// <param name="newJob"></param>
internal static async Task AddJobAsync(OpsJob newJob)
/// <returns></returns> {
internal static async Task<OpsJob> AddJobAsync(OpsJob newJob) using (AyContext ct = ServiceProviderProvider.DBContext)
{ {
var ct = ServiceProviderProvider.DBContext;
await ct.OpsJob.AddAsync(newJob); await ct.OpsJob.AddAsync(newJob);
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
return newJob;
}
/// <summary>
/// Remove any jobs or logs for the object in question
/// </summary>
/// <param name="ayObj"></param>
internal static async Task DeleteJobsForObjectAsync(AyaTypeId ayObj)
{
//Get a list of all jobid's for the object passed in
List<OpsJob> jobsForObject = await GetJobsForObjectAsync(ayObj);
if (jobsForObject.Count == 0)
return;
foreach (OpsJob jobToBeDeleted in jobsForObject)
{
await RemoveJobAndLogsAsync(jobToBeDeleted.GId);
} }
} }
/// <summary> /// <summary>
/// REmove the job and it's logs /// Remove the job and it's logs
/// </summary> /// </summary>
/// <param name="jobIdToBeDeleted"></param> /// <param name="jobIdToBeDeleted"></param>
internal static async Task RemoveJobAndLogsAsync(Guid jobIdToBeDeleted) internal static async Task RemoveJobAndLogsAsync(Guid jobIdToBeDeleted)
{ {
var ct = ServiceProviderProvider.DBContext; using (AyContext ct = ServiceProviderProvider.DBContext)
using (var transaction = await ct.Database.BeginTransactionAsync()) using (var transaction = await ct.Database.BeginTransactionAsync())
{ {
try try
@@ -205,10 +105,10 @@ namespace AyaNova.Biz
/// </summary> /// </summary>
/// <param name="jobId">(NOTE: Guid.empty indicates internal job)</param> /// <param name="jobId">(NOTE: Guid.empty indicates internal job)</param>
/// <param name="statusText"></param> /// <param name="statusText"></param>
/// internal static async Task LogJobAsync(Guid jobId, string statusText)
internal static async Task<OpsJobLog> LogJobAsync(Guid jobId, string statusText) {
using (AyContext ct = ServiceProviderProvider.DBContext)
{ {
var ct = ServiceProviderProvider.DBContext;
if (string.IsNullOrWhiteSpace(statusText)) if (string.IsNullOrWhiteSpace(statusText))
statusText = "No status provided"; statusText = "No status provided";
OpsJobLog newObj = new OpsJobLog(); OpsJobLog newObj = new OpsJobLog();
@@ -216,7 +116,7 @@ namespace AyaNova.Biz
newObj.StatusText = statusText; newObj.StatusText = statusText;
await ct.OpsJobLog.AddAsync(newObj); await ct.OpsJobLog.AddAsync(newObj);
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
return newObj; }
} }
@@ -225,14 +125,15 @@ namespace AyaNova.Biz
/// </summary> /// </summary>
/// <param name="jobId"></param> /// <param name="jobId"></param>
/// <param name="newStatus"></param> /// <param name="newStatus"></param>
internal static async Task<OpsJob> UpdateJobStatusAsync(Guid jobId, JobStatus newStatus) internal static async Task UpdateJobStatusAsync(Guid jobId, JobStatus newStatus)
{
using (AyContext ct = ServiceProviderProvider.DBContext)
{ {
var ct = ServiceProviderProvider.DBContext;
var oFromDb = await ct.OpsJob.SingleOrDefaultAsync(z => z.GId == jobId); var oFromDb = await ct.OpsJob.SingleOrDefaultAsync(z => z.GId == jobId);
if (oFromDb == null) return null; if (oFromDb == null) return;
oFromDb.JobStatus = newStatus; oFromDb.JobStatus = newStatus;
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
return oFromDb; }
} }
#endregion Job ops #endregion Job ops

View File

@@ -60,14 +60,18 @@ namespace AyaNova.Biz
await ImportTranslation(ResourceFolderPath, "de"); await ImportTranslation(ResourceFolderPath, "de");
//Ensure Translations are present, not missing any keys and that there is a server default translation that exists //Ensure Translations are present, not missing any keys and that there is a server default translation that exists
TranslationBiz lb = TranslationBiz.GetBiz(ServiceProviderProvider.DBContext); using (AyContext ct = ServiceProviderProvider.DBContext)
{
TranslationBiz lb = TranslationBiz.GetBiz(ct);
await lb.ValidateTranslationsAsync(); await lb.ValidateTranslationsAsync();
}
} }
private static async Task ImportTranslation(string resourceFolderPath, string translationCode) private static async Task ImportTranslation(string resourceFolderPath, string translationCode)
{ {
AyContext ct = ServiceProviderProvider.DBContext; using (AyContext ct = ServiceProviderProvider.DBContext)
{
var TranslationPath = Path.Combine(resourceFolderPath, $"{translationCode}.json"); var TranslationPath = Path.Combine(resourceFolderPath, $"{translationCode}.json");
if (!File.Exists(TranslationPath)) if (!File.Exists(TranslationPath))
{ {
@@ -92,6 +96,7 @@ namespace AyaNova.Biz
await ct.Translation.AddAsync(l); await ct.Translation.AddAsync(l);
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
} }
}