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:
Gary Sharp
2014-02-13 22:17:49 +11:00
parent 2ac3a9bdd3
commit 68256d7abd
30 changed files with 881 additions and 330 deletions
@@ -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))