Feature #37: Stale Jobs
Stale Jobs replaces Long-Running Jobs on the homepage. Last Activity is added to the job table.
This commit is contained in:
@@ -26,6 +26,7 @@ namespace Disco.Services
|
||||
ShowTechnician = Model.ShowTechnician,
|
||||
ShowLocation = Model.ShowLocation,
|
||||
ShowStatus = Model.ShowStatus,
|
||||
ShowLastActivityDate = Model.ShowLastActivityDate,
|
||||
IsSmallTable = Model.IsSmallTable,
|
||||
HideClosedJobs = Model.HideClosedJobs,
|
||||
EnablePaging = Model.EnablePaging,
|
||||
@@ -115,7 +116,7 @@ namespace Disco.Services
|
||||
if (FilterAuthorization)
|
||||
Jobs = model.FilterPermissions(Jobs, UserService.CurrentAuthorization);
|
||||
|
||||
if (model.ShowStatus)
|
||||
if (model.ShowStatus || model.ShowLastActivityDate)
|
||||
{
|
||||
|
||||
var jobItems = Jobs.Select(j => new JobTableStatusItemModel()
|
||||
@@ -147,6 +148,12 @@ namespace Disco.Services
|
||||
JobMetaNonWarranty_AccountingChargeRequiredDate = j.JobMetaNonWarranty.AccountingChargeRequiredDate,
|
||||
JobMetaNonWarranty_IsInsuranceClaim = j.JobMetaNonWarranty.IsInsuranceClaim,
|
||||
JobMetaInsurance_ClaimFormSentDate = j.JobMetaInsurance.ClaimFormSentDate,
|
||||
JobMetaNonWarranty_InvoiceReceivedDate = j.JobMetaNonWarranty.InvoiceReceivedDate,
|
||||
JobMetaNonWarranty_PurchaseOrderRaisedDate = j.JobMetaNonWarranty.PurchaseOrderRaisedDate,
|
||||
JobMetaNonWarranty_PurchaseOrderSentDate = j.JobMetaNonWarranty.PurchaseOrderSentDate,
|
||||
|
||||
RecentAttachmentDate = j.JobAttachments.Max(ja => ja.Timestamp),
|
||||
RecentLogDate = j.JobLogs.Max(jl => jl.Timestamp),
|
||||
|
||||
WaitingForUserAction = j.WaitingForUserAction,
|
||||
DeviceReadyForReturn = j.DeviceReadyForReturn,
|
||||
@@ -170,6 +177,31 @@ namespace Disco.Services
|
||||
j.StatusId = j.CalculateStatusId();
|
||||
j.StatusDescription = JobExtensions.JobStatusDescription(j.StatusId, j);
|
||||
|
||||
var activityDates = new DateTime?[] {
|
||||
j.ActiveJobQueues.Max<JobTableStatusQueueItemModel, DateTime?>(jq => jq.AddedDate),
|
||||
j.ClosedDate,
|
||||
j.DeviceHeld,
|
||||
j.DeviceReadyForReturn,
|
||||
j.DeviceReturnedDate,
|
||||
j.JobMetaInsurance_ClaimFormSentDate,
|
||||
j.JobMetaNonWarranty_AccountingChargeAddedDate,
|
||||
j.JobMetaNonWarranty_AccountingChargePaidDate,
|
||||
j.JobMetaNonWarranty_AccountingChargeRequiredDate,
|
||||
j.JobMetaNonWarranty_InvoiceReceivedDate,
|
||||
j.JobMetaNonWarranty_PurchaseOrderRaisedDate,
|
||||
j.JobMetaNonWarranty_PurchaseOrderSentDate,
|
||||
j.JobMetaNonWarranty_RepairerCompletedDate,
|
||||
j.JobMetaNonWarranty_RepairerLoggedDate,
|
||||
j.JobMetaWarranty_ExternalCompletedDate,
|
||||
j.JobMetaWarranty_ExternalLoggedDate,
|
||||
j.OpenedDate,
|
||||
j.RecentAttachmentDate,
|
||||
j.RecentLogDate,
|
||||
j.WaitingForUserAction
|
||||
};
|
||||
|
||||
j.LastActivityDate = activityDates.Max().Value;
|
||||
|
||||
items.Add(j);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,6 +132,8 @@ using Disco.Services.Authorization;
|
||||
// - Device's Profile or Model Changes
|
||||
unsubscribeToken = RepositoryMonitor.StreamAfterCommit
|
||||
.Where(n => n.EntityType == typeof(Job) ||
|
||||
n.EntityType == typeof(JobLog) ||
|
||||
n.EntityType == typeof(JobAttachment) ||
|
||||
n.EntityType == typeof(JobQueueJob) ||
|
||||
n.EntityType == typeof(JobMetaWarranty) ||
|
||||
n.EntityType == typeof(JobMetaNonWarranty) ||
|
||||
@@ -186,6 +188,32 @@ using Disco.Services.Authorization;
|
||||
|
||||
if (e.EntityType == typeof(Job))
|
||||
jobIds = new List<int>() { ((Job)e.Entity).Id };
|
||||
else if (e.EntityType == typeof(JobLog))
|
||||
{
|
||||
if (e.EventType == RepositoryMonitorEventType.Added)
|
||||
{
|
||||
var jobLog = ((JobLog)e.Entity);
|
||||
var job = base.Items.FirstOrDefault(i => i.JobId == jobLog.JobId);
|
||||
if (job != null && job.LastActivityDate < jobLog.Timestamp)
|
||||
job.LastActivityDate = jobLog.Timestamp;
|
||||
return;
|
||||
}
|
||||
else
|
||||
jobIds = new List<int>() { ((JobLog)e.Entity).JobId };
|
||||
}
|
||||
else if (e.EntityType == typeof(JobAttachment))
|
||||
{
|
||||
if (e.EventType == RepositoryMonitorEventType.Added)
|
||||
{
|
||||
var jobAttachment = ((JobAttachment)e.Entity);
|
||||
var job = base.Items.FirstOrDefault(i => i.JobId == jobAttachment.JobId);
|
||||
if (job != null && job.LastActivityDate < jobAttachment.Timestamp)
|
||||
job.LastActivityDate = jobAttachment.Timestamp;
|
||||
return;
|
||||
}
|
||||
else
|
||||
jobIds = new List<int>() { ((JobAttachment)e.Entity).JobId };
|
||||
}
|
||||
else if (e.EntityType == typeof(JobQueueJob))
|
||||
jobIds = new List<int>() { ((JobQueueJob)e.Entity).JobId };
|
||||
else if (e.EntityType == typeof(JobMetaWarranty))
|
||||
|
||||
Reference in New Issue
Block a user