Beispiel #1
0
        private void AddColumn(DateTime start, HistoryRange range, decimal total, List <HistoryDataValue> bucket, Brush brush)
        {
            int century = start.Year / 100;
            int year    = start.Year;

            string label = null;

            switch (range)
            {
            case HistoryRange.All:
            case HistoryRange.Year:
                label = start.Year.ToString();
                break;

            case HistoryRange.Month:
                year  = year - (100 * century);
                label = string.Format("{0:00}/{1:00}", start.Month, year);
                break;

            case HistoryRange.Day:
                label = string.Format("{0:00}", start.Day);
                break;
            }
            ColumnLabel clabel = new Charts.ColumnLabel(label);

            HistoryChartColumn column = new HistoryChartColumn()
            {
                Amount = total, Label = clabel, Values = bucket, Brush = brush
            };

            clabel.Data = column;
            collection.Add(column);
        }
Beispiel #2
0
        private void AddColumn(DateTime start, HistoryRange range, decimal total, List <Transaction> transactions, Brush brush)
        {
            int century = start.Year / 100;
            int year    = start.Year;

            string label = null;

            switch (range)
            {
            case HistoryRange.All:
            case HistoryRange.Year:
                label = start.Year.ToString();
                break;

            case HistoryRange.Month:
                year  = year - (100 * century);
                label = string.Format("{0:00}/{1:00}", start.Month, year);
                break;

            case HistoryRange.Day:
                label = string.Format("{0:00}", start.Day);
                break;
            }
            collection.Add(new HistoryChartColumn()
            {
                Amount = total, Label = label, Transactions = transactions, Brush = brush
            });
        }
        private void ShowActual()
        {
            textBoxBudgetActual.Text = string.Empty;
            if (this.category != null)
            {
                HistoryRange            history = PastRange.SelectedItem as HistoryRange;
                Predicate <Transaction> filter  = null;
                if (history != null)
                {
                    filter = history.Filter;
                }

                CalendarRange       range = CalendarRange.Monthly;
                IList <Transaction> data  = this.money.Transactions.GetTransactionsByCategory(this.category, filter);
                DateTime            start = DateTime.Now;
                DateTime            end   = DateTime.Now;
                bool    first             = true;
                decimal balance           = 0;
                foreach (Transaction t in data)
                {
                    if (!t.IsDeleted && t.Status != TransactionStatus.Void)
                    {
                        balance += t.CurrencyNormalizedAmount(t.AmountMinusTax);

                        if (first)
                        {
                            start = t.Date;
                            first = false;
                        }
                        end = t.Date;
                    }
                }

                TimeSpan span = end - start;

                decimal d = (decimal)span.Days;

                decimal actual = 0;
                if (d != 0)
                {
                    actual = Category.DailyToRange(balance / d, range, 1);
                    actual = Math.Abs(actual);
                }
                textBoxBudgetActual.Text = actual.ToString("n", this.nfi);
            }
        }
        private void ShowHistoricalRange(Category c)
        {
            ignorePastRangeChange = true;
            HistoryRange previous = PastRange.SelectedItem as HistoryRange;

            DateTime first = DateTime.MaxValue;
            DateTime last  = DateTime.MinValue;

            IList <Transaction> data = this.money.Transactions.GetTransactionsByCategory(this.category, null);
            int count = 0;

            foreach (Transaction t in data)
            {
                count++;
                DateTime d = t.Date;
                if (d < first)
                {
                    first = d;
                }
                if (d > last)
                {
                    last = d;
                }
            }

            PastRange.Items.Clear();
            PastRange.Items.Add(new HistoryRange("All history", null));
            PastRange.SelectedIndex = 0;

            if (count > 0)
            {
                TimeSpan span = last - first;
                foreach (int year in new int[] { 5, 3, 2, 1 })
                {
                    if (span.TotalDays > (365 * year))
                    {
                        DateTime start = last.AddYears(-year);
                        string   label = year + " year";
                        if (year > 1)
                        {
                            label += "s";
                        }
                        PastRange.Items.Add(new HistoryRange(label, new Predicate <Transaction>((t) => { return(t.Date >= start); })));
                    }
                }
                foreach (int m in new int[] { 6, 4, 3, 2, 1 })
                {
                    double months = (span.TotalDays * 12) / 365;
                    if (months > m)
                    {
                        DateTime start = last.AddMonths(-m);
                        string   label = m + " month";
                        if (m > 1)
                        {
                            label += "s";
                        }
                        PastRange.Items.Add(new HistoryRange(label, new Predicate <Transaction>((t) => { return(t.Date >= start); })));
                    }
                }
            }

            if (previous != null)
            {
                foreach (HistoryRange r in PastRange.Items)
                {
                    if (previous.ToString() == r.ToString())
                    {
                        PastRange.SelectedItem = r; // keep this one selected.
                        break;
                    }
                }
            }

            ignorePastRangeChange = false;
        }
Beispiel #5
0
        public void UpdateChart(bool rangeFixed)
        {
            if (updating)
            {
                return;
            }
            updating = true;

            try
            {
                SeriesAmount.ItemsSource = null;
                collection.Clear();

                if (this.Selection == null)
                {
                    return;
                }

                IEnumerable <HistoryDataValue> rows = this.Selection.Values;

                if (rows == null || !this.IsVisible)
                {
                    return;
                }

                HistoryRange range = HistoryRange.Year;
                if (this.RangeCombo.SelectedItem != null)
                {
                    string value = this.RangeCombo.SelectedItem.ToString();
                    Enum.TryParse <HistoryRange>(value, out range);
                }

                Brush brush = this.Selection.Brush;
                if (brush == null)
                {
                    brush = Brushes.DarkSlateBlue;
                }

                TimeSpan dateRange = ComputeChartParameters(rows);
                if (!rangeFixed)
                {
                    if (dateRange <= TimeSpan.FromDays(31))
                    {
                        range = HistoryRange.Day;
                        this.RangeCombo.SelectedItem = range;
                    }
                    else if (dateRange <= TimeSpan.FromDays(365))
                    {
                        range = HistoryRange.Month;
                        this.RangeCombo.SelectedItem = range;
                    }
                    else
                    {
                        range = HistoryRange.Year;
                        this.RangeCombo.SelectedItem = range;
                    }
                }

                DateTime startDate  = DateTime.Now;
                int      maxColumns = 20;
                if (range == HistoryRange.Month)
                {
                    maxColumns = 24;
                    startDate  = this.selection.EndDate.AddMonths(-maxColumns);
                }
                else if (range == HistoryRange.Day)
                {
                    maxColumns = 31;
                    startDate  = this.selection.EndDate.AddDays(-maxColumns);
                }
                else
                {
                    maxColumns = 20;
                    startDate  = this.selection.EndDate.AddYears(-maxColumns);
                }

                decimal  total = 0;
                DateTime start = DateTime.MinValue;
                // the current column fills this bucket until the next column date boundary is reached
                List <HistoryDataValue> bucket = new List <HistoryDataValue>();

                foreach (HistoryDataValue t in rows)
                {
                    decimal amount = t.Value;
                    if (invert)
                    {
                        amount = -amount;
                    }
                    DateTime td = t.Date;
                    while (start == DateTime.MinValue || start.Year < td.Year ||
                           (range == HistoryRange.Month && start.Month < td.Month) ||
                           (range == HistoryRange.Day && start.Day < td.Day))
                    {
                        if (start != DateTime.MinValue)
                        {
                            AddColumn(start, range, total, bucket, brush);
                        }
                        if (start == DateTime.MinValue)
                        {
                            start = new DateTime(td.Year, (range == HistoryRange.Month || range == HistoryRange.Day) ? td.Month : 1,
                                                 range == HistoryRange.Day ? td.Day : 1);
                        }
                        else
                        {
                            switch (range)
                            {
                            case HistoryRange.All:
                            case HistoryRange.Year:
                                start = start.AddYears(1);
                                break;

                            case HistoryRange.Month:
                                start = start.AddMonths(1);
                                break;

                            case HistoryRange.Day:
                                start = start.AddDays(1);
                                break;
                            }
                        }
                        total  = 0;
                        bucket = new List <HistoryDataValue>();
                    }
                    if (t.Date < start)
                    {
                        continue;
                    }
                    total += amount;
                    bucket.Add(t);
                }
                if (total != 0)
                {
                    AddColumn(start, range, total, bucket, brush);
                }
                while (collection.Count > maxColumns)
                {
                    collection.RemoveAt(0);
                }

                ComputeLinearRegression();

                ObservableCollection <HistoryChartColumn> copy = new ObservableCollection <HistoryChartColumn>(this.collection);

                SeriesAmount.ItemsSource  = copy;
                AverageSeries.ItemsSource = copy;
                BarChart.InvalidateArrange();
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.ToString());
            }
            finally
            {
                updating = false;
            }
        }