Exemple #1
0
        private void CreateRandomTransactions(List <SampleTransaction> list, double inflation)
        {
            // Now pick randomly from the list to mix things up nicely and spread across 10 year range.
            Random   rand             = new Random();
            DateTime today            = DateTime.Today;
            DateTime first            = today.AddYears(-Years);
            DateTime start            = new DateTime(first.Year, 1, 1); // start in January
            TimeSpan span             = today - first;
            int      totalDays        = (int)span.TotalDays;
            double   monthlyInflation = (inflation / 12);

            money.BeginUpdate();
            Transactions transactions = money.Transactions;
            Accounts     accounts     = money.Accounts;
            Payees       payees       = money.Payees;
            Categories   categories   = money.Categories;

            while (list.Count > 0)
            {
                int i = rand.Next(0, list.Count);
                SampleTransaction st = list[i];
                list.RemoveAt(i);

                SampleAccount  sa = st.Account;
                Account        a  = accounts.FindAccount(sa.Name);
                Payee          p  = payees.FindPayee(st.Payee.Name, true);
                SampleCategory sc = st.Category;
                Category       c  = money.Categories.GetOrCreateCategory(sc.Name, sc.Type);
                if (c.Type == CategoryType.None)
                {
                    c.Type = sc.Type;
                }
                if (c.Root.Type == CategoryType.None)
                {
                    c.Root.Type = sc.Type;
                }

                int      daysFromStart = rand.Next(0, totalDays);
                DateTime date          = start + TimeSpan.FromDays(daysFromStart);

                // spread evenly around the average
                decimal amount = 0;
                if (rand.Next(2) == 1)
                {
                    // above average
                    amount = (decimal)rand.Next(sc.Average * 100, sc.Max * 100) / 100;
                }
                else
                {
                    // below average
                    amount = (decimal)rand.Next(sc.Min * 100, sc.Average * 100) / 100;
                }

                // add inflation
                amount = Inflate(amount, (int)(daysFromStart / 30), (decimal)monthlyInflation);

                Transaction t = transactions.NewTransaction(a);
                t.Payee    = p;
                t.Category = c;
                t.Date     = date;
                t.Amount   = amount;
                transactions.AddTransaction(t);
            }
            money.EndUpdate();

            // now trigger UI update
            foreach (Account a in money.Accounts.GetAccounts())
            {
                money.Rebalance(a);
            }

            // only have to do this because we hid all update events earlier by doing BeginUpdate/EndUpdate on money object.
            // trigger payee update
            money.Payees.BeginUpdate(false);
            money.Payees.EndUpdate();

            // trigger category update
            money.Categories.BeginUpdate(false);
            money.Categories.EndUpdate();
        }
Exemple #2
0
        private void CreateRandomTransactions(List <SampleTransaction> list, double inflation)
        {
            // Now pick randomly from the list to mix things up nicely and spread across 10 year range.
            Random   rand             = new Random();
            DateTime today            = DateTime.Today;
            DateTime first            = today.AddYears(-Years);
            DateTime start            = new DateTime(first.Year, 1, 1); // start in January
            TimeSpan span             = today - first;
            int      totalDays        = (int)span.TotalDays;
            double   monthlyInflation = (inflation / 12);

            money.BeginUpdate(this);
            Transactions transactions = money.Transactions;
            Accounts     accounts     = money.Accounts;
            Payees       payees       = money.Payees;
            Categories   categories   = money.Categories;
            int          nextCheck    = 2800;

            while (list.Count > 0)
            {
                int i = rand.Next(0, list.Count);
                SampleTransaction st = list[i];
                list.RemoveAt(i);

                SampleAccount  sa = st.Account;
                Account        a  = accounts.FindAccount(sa.Name);
                Payee          p  = payees.FindPayee(st.Payee.Name, true);
                SampleCategory sc = st.Category;
                Category       c  = money.Categories.GetOrCreateCategory(sc.Name, sc.Type);
                if (c.Type == CategoryType.None)
                {
                    c.Type = sc.Type;
                }
                if (c.Root.Type == CategoryType.None)
                {
                    c.Root.Type = sc.Type;
                }

                int      daysFromStart = rand.Next(0, totalDays);
                DateTime date          = start + TimeSpan.FromDays(daysFromStart);

                // spread evenly around the average
                decimal amount = 0;
                if (rand.Next(2) == 1)
                {
                    // above average
                    amount = (decimal)rand.Next(sc.Average * 100, sc.Max * 100) / 100;
                }
                else
                {
                    // below average
                    amount = (decimal)rand.Next(sc.Min * 100, sc.Average * 100) / 100;
                }

                // add inflation
                amount = Inflate(amount, (int)(daysFromStart / 30), (decimal)monthlyInflation);

                Transaction t = transactions.NewTransaction(a);
                t.Payee    = p;
                t.Category = c;
                t.Date     = date;
                t.Amount   = RoundCents(amount);
                if (st.Payee.Type == PaymentType.Check)
                {
                    t.Number = nextCheck.ToString();
                    nextCheck++;
                }
                transactions.AddTransaction(t);
            }

            // now pay the credit cards once a month from a checking account.
            Account checking = this.checking;

            if (checking != null)
            {
                foreach (var acct in accounts.GetAccounts())
                {
                    if (acct.Type == AccountType.Credit)
                    {
                        // here we know transactions are sorted by date.
                        DateTime endOfMonth = start.AddMonths(1);
                        decimal  balance    = 0;
                        foreach (var t in money.Transactions.GetTransactionsFrom(acct))
                        {
                            balance += t.Amount;
                            if (t.Date >= endOfMonth)
                            {
                                if (balance != 0)
                                {
                                    Transaction payment = transactions.NewTransaction(checking);
                                    payment.Date   = endOfMonth;
                                    payment.Amount = RoundCents(balance);
                                    transactions.AddTransaction(payment);
                                    money.Transfer(payment, acct);
                                    balance    = 0;
                                    endOfMonth = endOfMonth.AddMonths(1);
                                }
                            }
                        }
                    }
                }
            }

            money.EndUpdate();
        }