Example #1
0
 private void ViewWorkItemDetails()
 {
     if (this.workItemList.SelectedItems.Count == 1)
     {
         WorkItemTimeRecord wi = this.workItemList.SelectedItems[0] as WorkItemTimeRecord;
         if (wi != null)
         {
             this.ParentSection.ViewWorkItemDetails(wi.Item.Id);
         }
     }
 }
Example #2
0
        internal void Munge(List <WorkItemTimeRecord> records)
        {
            if (!records.All(x => records.First().Item == x.Item))
            {
                throw new InvalidOperationException("Records are not all from the same work item & cannot be munged");
            }
            var earliest  = records.OrderBy(x => x.StartTime).First();
            var latest    = records.OrderBy(x => x.EndTime).Last();
            var newRecord = new WorkItemTimeRecord()
            {
                StartTime     = earliest.StartTime,
                StartRevision = earliest.StartRevision,
                EndTime       = latest.EndTime,
                EndRevision   = earliest.EndRevision,
                Item          = earliest.Item
            };

            records.ForEach(x => TimeRecords.Remove(x));
            TimeRecords.Add(newRecord);
            TimeRecords = new ObservableCollection <TimeRecordBase>(TimeRecords.OrderBy(x => x.StartTime));
        }
Example #3
0
        private async System.Threading.Tasks.Task RefreshAsync()
        {
            try
            {
                // Set our busy flag and clear the previous data
                this.IsBusy = true;
                this.TimeRecords.Clear();
                var timeRecords = new List <TimeRecordBase>();

                // Make the server call asynchronously to avoid blocking the UI
                await System.Threading.Tasks.Task.Run(() =>
                {
                    ITeamFoundationContext context = this.CurrentContext;
                    TeamFoundationIdentity user;
                    context.TeamProjectCollection.GetAuthenticatedIdentity(out user);
                    var userName = user.DisplayName;

                    if (context != null && context.HasCollection && context.HasTeamProject)
                    {
                        WorkItemStore wis = context.TeamProjectCollection.GetService <WorkItemStore>();
                        if (wis != null)
                        {
                            WorkItemCollection wic = wis.Query("SELECT [System.Id], [System.Title], [System.State] FROM WorkItems WHERE [System.WorkItemType] <> ''  AND  [System.State] <> ''  AND  [System.ChangedDate] > @Today - " + Days + "  AND  [System.AssignedTo] EVER @Me ORDER BY [System.Id]");
                            foreach (WorkItem wi in wic)
                            {
                                if (!Properties.Settings.Default.SettingsCollection.IsIncluded(wi.Project.Name))
                                {
                                    continue;
                                }

                                var innerTimeRecords = new List <TimeRecordBase>();

                                var revs = wi.Revisions.Cast <Revision>()
                                           .Where(revision => revision.Fields["System.State"].IsChangedInRevision)
                                           .Where(revision => (string)revision.Fields["System.AssignedTo"].Value == userName)
                                           .Where(revision => Convert.ToDateTime(revision.Fields["Changed Date"].Value) > DateTime.Now.Subtract(TimeSpan.FromDays(Days)))
                                           .Select(revision => new StateEvent()
                                {
                                    Timestamp = Convert.ToDateTime(revision.Fields["Changed Date"].Value),
                                    State     = (string)revision.Fields["System.State"].Value,
                                    Item      = revision.WorkItem,
                                    Reason    = (string)revision.Fields["System.Reason"].Value,
                                    Revision  = wi.Revisions.IndexOf(revision)
                                })
                                           .OrderBy(revision => revision.Timestamp).ToList();

                                WorkItemTimeRecord current = null;
                                foreach (var rev in revs)
                                {
                                    if (rev.State == Properties.Settings.Default.SettingsCollection.GetActiveState(wi.Project.Name))
                                    {
                                        current = new WorkItemTimeRecord()
                                        {
                                            Item = rev.Item, StartTime = rev.Timestamp, StartRevision = rev.Revision
                                        };
                                    }
                                    else if (current != null && current.EndTime == DateTime.MaxValue)
                                    {
                                        current.EndTime     = rev.Timestamp;
                                        current.EndRevision = rev.Revision;
                                        innerTimeRecords.AddRange(current.SplitToRecordPerDay());
                                        current = null;
                                    }
                                }

                                if (current != null && current.EndTime == DateTime.MaxValue)
                                {
                                    current.EndTime     = DateTime.Now;
                                    current.EndRevision = -1;
                                    innerTimeRecords.AddRange(current.SplitToRecordPerDay());
                                }

                                timeRecords.AddRange(innerTimeRecords);
                            }
                            timeRecords = timeRecords
                                          .Where(x => x.Duration > TimeSpan.FromMinutes(MinimumTimeSpan))
                                          .Where(x => _showExported || !x.IsExported)
                                          .Where(x => _showIgnored || !x.IsIgnored)
                                          .OrderBy(x => x.StartTime)
                                          .ToList();
                        }
                    }
                });

                // Now back on the UI thread, update the bound collection and section title
                this.TimeRecords = new ObservableCollection <TimeRecordBase>(timeRecords);
            }
            catch (Exception ex)
            {
                this.ShowNotification(ex.Message, NotificationType.Error);
            }
            finally
            {
                // Always clear our busy flag when done
                this.IsBusy = false;
            }
        }