コード例 #1
0
        /// <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;
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
                }
            }
        }
コード例 #4
0
        /// <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);
                }
            }
        }