コード例 #1
0
 private void CopyOutputFromAnalyser(BurnDownChartAnalyserResult analysisResult)
 {
     ActualSpendingAxesMinimum = analysisResult.GraphLines.GraphMinimumValue;
     BalanceLine = analysisResult.GraphLines.Series.Single(s => s.SeriesName == BurnDownChartAnalyserResult.BalanceSeriesName);
     BudgetLine = analysisResult.GraphLines.Series.Single(s => s.SeriesName == BurnDownChartAnalyserResult.BudgetSeriesName);
     ZeroLine = analysisResult.GraphLines.Series.Single(s => s.SeriesName == BurnDownChartAnalyserResult.ZeroSeriesName);
     ChartTitle = analysisResult.ChartTitle;
 }
コード例 #2
0
        private static void CreateZeroLine(IEnumerable <DateTime> datesOfTheMonth, BurnDownChartAnalyserResult result)
        {
            var series = new SeriesData
            {
                SeriesName  = BurnDownChartAnalyserResult.ZeroSeriesName,
                Description = "Zero line"
            };

            result.GraphLines.SeriesList.Add(series);
            foreach (var day in datesOfTheMonth)
            {
                series.PlotsList.Add(new DatedGraphPlot {
                    Amount = 0, Date = day
                });
            }
        }
コード例 #3
0
        private static void CalculateBudgetLineValues(decimal budgetTotal, List <DateTime> datesOfTheMonth,
                                                      BurnDownChartAnalyserResult result)
        {
            var average = budgetTotal / datesOfTheMonth.Count();

            var seriesData = new SeriesData
            {
                Description = "The budget line shows ideal linear spending over the month to keep within your budget.",
                SeriesName  = BurnDownChartAnalyserResult.BudgetSeriesName
            };

            result.GraphLines.SeriesList.Add(seriesData);

            var iteration = 0;

            foreach (var day in datesOfTheMonth)
            {
                seriesData.PlotsList.Add(new DatedGraphPlot {
                    Amount = budgetTotal - average * iteration++, Date = day
                });
            }
        }
コード例 #4
0
        public BurnDownChartAnalyserResult Analyse(StatementModel statementModel, BudgetModel budgetModel,
                                                   IEnumerable<BudgetBucket> bucketsSubset, LedgerBook ledgerBook, DateTime beginDate)
        {
            if (statementModel == null)
            {
                throw new ArgumentNullException(nameof(statementModel));
            }

            if (budgetModel == null)
            {
                throw new ArgumentNullException(nameof(budgetModel));
            }

            List<BudgetBucket> bucketsCopy = bucketsSubset.ToList();
            this.logger.LogInfo(
                l => "BurnDownChartAnalyser.Analyse: " + string.Join(" ", bucketsCopy.Select(b => b.Code)));

            var result = new BurnDownChartAnalyserResult();

            List<DateTime> datesOfTheMonth = YieldAllDaysInDateRange(beginDate);
            var lastDate = datesOfTheMonth.Last();

            CreateZeroLine(datesOfTheMonth, result);

            var openingBalance = GetBudgetedTotal(budgetModel, ledgerBook, bucketsCopy, beginDate);
            CalculateBudgetLineValues(openingBalance, datesOfTheMonth, result);

            List<ReportTransactionWithRunningBalance> spendingTransactions = CollateStatementTransactions(statementModel, bucketsCopy, beginDate, lastDate,
                openingBalance);

            // Only relevant when calculating surplus burndown - ovespent ledgers are supplemented from surplus so affect its burndown.
            if (ledgerBook != null && bucketsCopy.OfType<SurplusBucket>().Any())
            {
                List<ReportTransaction> overSpentLedgers =
                    this.ledgerCalculator.CalculateOverspentLedgers(statementModel, ledgerBook, beginDate).ToList();
                if (overSpentLedgers.Any())
                {
                    spendingTransactions.AddRange(
                        overSpentLedgers.Select(t => new ReportTransactionWithRunningBalance(t)));
                    spendingTransactions = spendingTransactions.OrderBy(t => t.Date).ToList();
                    UpdateReportTransactionRunningBalances(spendingTransactions);
                }
            }

            // Copy running balance from transaction list into burndown chart data
            var actualSpending = new SeriesData
            {
                SeriesName = BurnDownChartAnalyserResult.BalanceSeriesName,
                Description = "Running balance over time as transactions spend, the balance decreases."
            };
            result.GraphLines.SeriesList.Add(actualSpending);
            foreach (var day in datesOfTheMonth)
            {
                if (day > DateTime.Today)
                {
                    break;
                }

                var dayClosingBalance = GetDayClosingBalance(spendingTransactions, day);
                actualSpending.PlotsList.Add(new DatedGraphPlot { Date = day, Amount = dayClosingBalance });
                var copyOfDay = day;
                this.logger.LogInfo(l => l.Format("    {0} Close Bal:{1:N}", copyOfDay, dayClosingBalance));
            }

            result.ReportTransactions = spendingTransactions;
            return result;
        }
コード例 #5
0
 private static void CreateZeroLine(IEnumerable<DateTime> datesOfTheMonth, BurnDownChartAnalyserResult result)
 {
     var series = new SeriesData
     {
         SeriesName = BurnDownChartAnalyserResult.ZeroSeriesName,
         Description = "Zero line"
     };
     result.GraphLines.SeriesList.Add(series);
     foreach (var day in datesOfTheMonth)
     {
         series.PlotsList.Add(new DatedGraphPlot { Amount = 0, Date = day });
     }
 }
コード例 #6
0
        private static void CalculateBudgetLineValues(decimal budgetTotal, List<DateTime> datesOfTheMonth,
                                                      BurnDownChartAnalyserResult result)
        {
            var average = budgetTotal / datesOfTheMonth.Count();

            var seriesData = new SeriesData
            {
                Description = "The budget line shows ideal linear spending over the month to keep within your budget.",
                SeriesName = BurnDownChartAnalyserResult.BudgetSeriesName
            };
            result.GraphLines.SeriesList.Add(seriesData);

            var iteration = 0;
            foreach (var day in datesOfTheMonth)
            {
                seriesData.PlotsList.Add(new DatedGraphPlot { Amount = budgetTotal - average * iteration++, Date = day });
            }
        }
コード例 #7
0
 private void LoadCustomChart(BurnDownChartAnalyserResult analysisResult)
 {
     IsCustomChart = true;
     Background = ConverterHelper.SecondaryBackgroundBrush;
     CopyOutputFromAnalyser(analysisResult);
 }
コード例 #8
0
 private void LoadBucketChart(BurnDownChartAnalyserResult analysisResult)
 {
     Background = ConverterHelper.TileBackgroundBrush;
     CopyOutputFromAnalyser(analysisResult);
 }
コード例 #9
0
        public BurnDownChartAnalyserResult Analyse(StatementModel statementModel, BudgetModel budgetModel,
                                                   IEnumerable <BudgetBucket> bucketsSubset, LedgerBook ledgerBook, DateTime beginDate)
        {
            if (statementModel == null)
            {
                throw new ArgumentNullException(nameof(statementModel));
            }

            if (budgetModel == null)
            {
                throw new ArgumentNullException(nameof(budgetModel));
            }

            List <BudgetBucket> bucketsCopy = bucketsSubset.ToList();

            this.logger.LogInfo(
                l => "BurnDownChartAnalyser.Analyse: " + string.Join(" ", bucketsCopy.Select(b => b.Code)));

            var result = new BurnDownChartAnalyserResult();

            List <DateTime> datesOfTheMonth = YieldAllDaysInDateRange(beginDate);
            var             lastDate        = datesOfTheMonth.Last();

            CreateZeroLine(datesOfTheMonth, result);

            var openingBalance = GetBudgetedTotal(budgetModel, ledgerBook, bucketsCopy, beginDate);

            CalculateBudgetLineValues(openingBalance, datesOfTheMonth, result);

            List <ReportTransactionWithRunningBalance> spendingTransactions = CollateStatementTransactions(statementModel, bucketsCopy, beginDate, lastDate,
                                                                                                           openingBalance);

            // Only relevant when calculating surplus burndown - ovespent ledgers are supplemented from surplus so affect its burndown.
            if (ledgerBook != null && bucketsCopy.OfType <SurplusBucket>().Any())
            {
                List <ReportTransaction> overSpentLedgers =
                    this.ledgerCalculator.CalculateOverspentLedgers(statementModel, ledgerBook, beginDate).ToList();
                if (overSpentLedgers.Any())
                {
                    spendingTransactions.AddRange(
                        overSpentLedgers.Select(t => new ReportTransactionWithRunningBalance(t)));
                    spendingTransactions = spendingTransactions.OrderBy(t => t.Date).ToList();
                    UpdateReportTransactionRunningBalances(spendingTransactions);
                }
            }

            // Copy running balance from transaction list into burndown chart data
            var actualSpending = new SeriesData
            {
                SeriesName  = BurnDownChartAnalyserResult.BalanceSeriesName,
                Description = "Running balance over time as transactions spend, the balance decreases."
            };

            result.GraphLines.SeriesList.Add(actualSpending);
            foreach (var day in datesOfTheMonth)
            {
                if (day > DateTime.Today)
                {
                    break;
                }

                var dayClosingBalance = GetDayClosingBalance(spendingTransactions, day);
                actualSpending.PlotsList.Add(new DatedGraphPlot {
                    Date = day, Amount = dayClosingBalance
                });
                var copyOfDay = day;
                this.logger.LogInfo(l => l.Format("    {0} Close Bal:{1:N}", copyOfDay, dayClosingBalance));
            }

            result.ReportTransactions = spendingTransactions;
            return(result);
        }
コード例 #10
0
 protected virtual BucketBurnDownController BuildBucketBurnDownController(BurnDownChartAnalyserResult analysis)
 {
     var controller = new BucketBurnDownController();
     controller.Load(analysis);
     return controller;
 }