private void GenerateChartData(DataIndicator indicator, RawAgileSprint sprint, IEnumerable <JiraIssue> issues)
        {
            IdealLineSeries.Clear();
            IssuesCountSeries.Clear();

            IdealLineSeries.Add(new DataPoint
            {
                Date  = sprint.StartDate.Date,
                Value = issues.Where(i => i.Created.Date <= sprint.StartDate && (i.Resolved == null || i.Resolved >= sprint.StartDate))
                        .Select(indicator.CalculateIssueWeight).Sum(),
                ResolvedIssues = issues.Where(i => i.Resolved.HasValue && i.Resolved.Value.Date == sprint.StartDate.Date).Count(),
                CreatedIssues  = issues.Where(i => i.Created.Date == sprint.StartDate.Date).Count()
            });
            IdealLineSeries.Add(new DataPoint
            {
                Date  = sprint.EndDate.Date,
                Value = 0
            });
            var endDate  = sprint.EndDate > DateTime.Now ? DateTime.Today : sprint.EndDate.Date;
            var iterator = sprint.StartDate.Date;

            while (iterator <= endDate)
            {
                IssuesCountSeries.Add(new DataPoint
                {
                    Date  = iterator,
                    Value = issues.Where(i => i.Created.Date <= iterator && (i.Resolved == null || i.Resolved.Value.Date > iterator))
                            .Select(indicator.CalculateIssueWeight).Sum(),
                    ResolvedIssues = issues.Where(i => i.Resolved.HasValue && i.Resolved.Value.Date == iterator).Count(),
                    CreatedIssues  = issues.Where(i => i.Created.Date == iterator).Count()
                });
                iterator = iterator.AddDays(1);
            }

            if (sprint.State != "closed")
            {
                BurndownSeriesBrush = new SolidColorBrush(Color.FromRgb(121, 117, 235));
            }
            else if (IssuesCountSeries.Last().Value > 0)
            {
                BurndownSeriesBrush = new SolidColorBrush(Color.FromRgb(212, 0, 0));
            }
            else
            {
                BurndownSeriesBrush = new SolidColorBrush(Color.FromRgb(0, 181, 27));
            }
        }
        public BurnDownChartViewModel(RawAgileSprint sprint, IEnumerable <JiraIssue> issues)
        {
            _sprint = sprint;
            _issues = issues;

            IdealLineSeries     = new ObservableCollection <DataPoint>();
            IssuesCountSeries   = new ObservableCollection <DataPoint>();
            AvailableIndicators = new ObservableCollection <DataIndicator>
            {
                new DataIndicator {
                    Name = "Issues count", CalculateIssueWeight = i => 1
                },
                new DataIndicator {
                    Name = "Story points", CalculateIssueWeight = i => i.StoryPoints
                }
            };
            SelectedIndicator = AvailableIndicators[0];
        }
        public SprintDetailsViewModel(RawAgileSprint sprint,
                                      IList <JiraIssue> issues,
                                      IMessenger messenger,
                                      IssuesStatisticsCalculator statisticsCalculator)
        {
            Sprint = sprint;
            Issues = issues;

            _messenger            = messenger;
            _statisticsCalculator = statisticsCalculator;

            ScrumCardsCommand   = new RelayCommand(() => _messenger.Send(new OpenScrumCardsMessage(Issues)));
            BurnDownCommand     = new RelayCommand(() => _messenger.Send(new OpenBurnDownMessage(Sprint, Issues)));
            EngagementCommand   = new RelayCommand(() => _messenger.Send(new OpenEngagementChartMessage(Issues)));
            BrowseIssuesCommand = new RelayCommand(() => _messenger.Send(new OpenIssuesBrowserMessage(Issues)));

            GatherStatistics();
        }
 private void PickUpSprint(RawAgileSprint sprint)
 {
     _messenger.Send(new OpenPageMessage(_followUp(sprint)));
 }
 public OpenBurnDownMessage(RawAgileSprint sprint, IList <JiraIssue> issues)
 {
     Issues = issues;
     Sprint = sprint;
 }
 public GetAgileSprintDetailsResponse(RawAgileSprint sprint)
 {
     Sprint = sprint;
 }