Example #1
0
        async Task Update()
        {
            message.Text = "Updating from Jazz";
            var dataTask = Task.Run(() => LoadData());
            var sprint   = (await Get(new UriBuilder("https://clm1.waters.com/ccm/rpt/repository/foundation")
            {
                Query = $"fields=foundation/developmentLine[name=%27{Uri.EscapeDataString("Acquisition")}%27]/currentIteration/(itemId|startDate|endDate|name)"
            }.Uri)).Elements("foundation").Elements("developmentLine").Elements("currentIteration").FirstOrDefault();

            if (sprint == null)
            {
                throw new ApplicationException("No current sprint not found");
            }
            var sprintId   = (string)sprint.Element("itemId");
            var startDate  = ParseDateTimeOffset(sprint.Element("startDate"));
            var endDate    = ParseDateTimeOffset(sprint.Element("endDate"));
            var sprintName = (string)sprint.Element("name");

            var workItems = (await Get(new UriBuilder("https://clm1.waters.com/ccm/rpt/repository/workitem")
            {
                Query = $"fields=workitem/workItem[target/itemId=%27{Uri.EscapeDataString(sprintId)}%27]/(integerComplexity|state/group)"
            }.Uri)).Elements("workitem").Elements("workItem");

            var data = await dataTask;

            data.Name = sprintName;
            // +1 for the last day
            var rawDuration = (endDate.Date - startDate.Date).Days + 1;

            data.Duration = Enumerable.Range(0, rawDuration).Select(i => startDate.AddDays(i))
                            .Count(d => d.DayOfWeek != DayOfWeek.Saturday && d.DayOfWeek != DayOfWeek.Sunday);

            var checkpoint = new SprintCheckpoint {
                Time = DateTimeOffset.Now
            };

            foreach (var item in workItems)
            {
                var points    = (int)item.Element("integerComplexity");
                var completed = (string)item.Elements("state").Elements("group").Single() == "closed";
                checkpoint.Total += points;
                if (completed)
                {
                    checkpoint.Done += points;
                }
            }
            data.Checkpoints.RemoveAll(c => c.Time.Date == checkpoint.Time.Date);
            data.Checkpoints.Add(checkpoint);
            var saveTask = Task.Run(() => SaveData(data));

            Render(data);

            await saveTask;
        }
Example #2
0
        void Render(SprintData data)
        {
            var model = new PlotModel
            {
                Title = data.Name,
                Axes  =
                {
                    new CategoryAxis {
                        Title = "Day", Position = AxisPosition.Bottom
                    },
                    new LinearAxis
                    {
                        Title              = "Points",
                        Position           = AxisPosition.Left,
                        MinorGridlineStyle = LineStyle.Solid,
                        MajorGridlineStyle = LineStyle.Solid,
                        MinimumPadding     = 0.0,
                        MaximumPadding     = 0.1
                    }
                },
                IsLegendVisible = true,
                LegendPlacement = LegendPlacement.Outside
            };
            var sustain = new SprintCheckpoint
            {
                Done  = 0,
                Total = data.Checkpoints.Select(c => c.Total).LastOrDefault()
            };
            var days            = data.Checkpoints.Concat(Enumerable.Repeat(sustain, data.Duration - data.Checkpoints.Count));
            var completedSeries = new ColumnSeries {
                Title = "Done"
            };

            foreach (var day in days)
            {
                completedSeries.Items.Add(new ColumnItem(day.Done));
            }
            model.Series.Add(completedSeries);
            var totalSeries = new LineSeries {
                Title = "Scope"
            };
            var i = 0;

            foreach (var day in days)
            {
                totalSeries.Points.Add(new DataPoint(i++, day.Total));
            }
            model.Series.Add(totalSeries);
            this.plot.Model = model;
        }