/// <summary> /// Updates the display of a queue detail if anything has changed. /// </summary> /// <param name="queue"></param> /// <param name="queueDetail"></param> /// <param name="forceRefresh"></param> private void UpdateQueueDisplay(IQueue queue, QueueDetail queueDetail, bool forceRefresh) { var item = queueDetail.ListViewItem; var countQueuedItems = queue.CountQueuedItems; var peakQueuedItems = queue.PeakQueuedItems; var droppedItems = queue.CountDroppedItems; if (forceRefresh || queue.Name != queueDetail.Name) { item.SubItems[0].Text = queue.Name; queueDetail.Name = queue.Name; } if (forceRefresh || countQueuedItems != queueDetail.Count) { item.SubItems[1].Text = countQueuedItems.ToString("N0"); queueDetail.Count = countQueuedItems; } if (forceRefresh || peakQueuedItems != queueDetail.Peak) { item.SubItems[2].Text = peakQueuedItems.ToString("N0"); queueDetail.Peak = peakQueuedItems; } if (forceRefresh || droppedItems != queueDetail.Dropped) { item.SubItems[3].Text = droppedItems.ToString("N0"); queueDetail.Dropped = droppedItems; } }
protected override void Execute(CodeActivityContext context) { // Get the connection string DBConnection ext = context.GetExtension <DBConnection>(); if (ext == null) { throw new InvalidProgramException("No connection string available"); } UserTasksDataContext dc = new UserTasksDataContext(ext.ConnectionString); var q = dc.QueueInstances .Where(x => x.CurrentSubQueueID != null && (QueueName.Get(context) == "" || x.SubQueue.Queue.QueueName == QueueName.Get(context))) .GroupBy(x => x.SubQueue.Queue.QueueName + "|" + x.SubQueue.SubQueueName + "|" + x.QC.ToString()); // Build the result array if (q.Count() > 0) { QueueDetail[] queueStats = new QueueDetail[q.Count()]; int i = 0; foreach (var group in q) { // Split the key into the queue name and QC value string s = group.Key; char[] delimiter = { '|' }; string[] values = s.Split(delimiter, 3); // Add a new queue to the stats array QueueDetail det = new QueueDetail(); det.Key = group.Key; det.QueueName = values[0]; det.SubQueueName = values[1]; det.QC = bool.Parse(values[2]); det.Count = group.Count(); det.Oldest = group.Min(x => x.CreateDate); queueStats[i++] = det; } // Store the results in the output arguments QueueStats.Set(context, queueStats); } }
public async Task <QueueDetail> AddUpdate(QueueDetail queueDetail) { using (var ctx = new MyTurnDb()) { var thisQueueDetail = await ctx.QueueDetail.FindAsync(queueDetail.Id); if (thisQueueDetail == null) { var inLine = ctx.QueueDetail.Where(x => x.PersonId == queueDetail.PersonId && ( x.QueueStatusId == (int)EnumQueueStatus.InLine || x.QueueStatusId == (int)EnumQueueStatus.Bumped)).Any(); if (inLine) { return(new QueueDetail { Id = -1 }); } var maxSort = ctx.QueueDetail .Where(x => x.QueueHeaderId == queueDetail.QueueHeaderId) .Select(x => (decimal?)x.Sort) .Max(); queueDetail.CreateDate = DateTime.Now; queueDetail.Sort = (maxSort ?? 0) + 1; ctx.QueueDetail.Add(queueDetail); var task = await ctx.SaveChangesAsync(); return(queueDetail); } else { thisQueueDetail = queueDetail; var task = await ctx.SaveChangesAsync(); return(thisQueueDetail); } } }
/// <summary> /// Updates all existing queues in the list or adds new ones, removing existing ones from <paramref name="queueDetails"/>. /// </summary> /// <param name="queues"></param> /// <param name="queueDetails"></param> private void AddOrUpdateExistingQueues(IQueue[] queues, List <QueueDetail> queueDetails) { foreach (var queue in queues) { var queueDetail = queueDetails.FirstOrDefault(r => Object.ReferenceEquals(r.Queue, queue)); if (queueDetail != null) { queueDetails.Remove(queueDetail); UpdateQueueDisplay(queue, queueDetail, forceRefresh: false); } else { queueDetail = new QueueDetail() { Queue = queue, ListViewItem = new ListViewItem(new string[] { "", "", "", "", }), }; queueDetail.ListViewItem.Tag = queueDetail; UpdateQueueDisplay(queue, queueDetail, forceRefresh: true); listView.Items.Add(queueDetail.ListViewItem); } } }