Example #1
0
 public TransactionDTO()
 {
     Transaction  = new Transaction();
     Transactions = new List <Transaction>();
     Metrics      = new TransactionMetrics();
     try
     {
         Accounts         = new AccountManager().GetAllAccounts();
         CreditCards      = new CreditCardManager().Get(new CreditCardDTO()).CreditCards;
         BillsOutstanding = new BillManager().GetOutstandingBills();
         FilterOptions    = GetFilterOptions();
     }
     catch (Exception)
     {
         Accounts    = new List <Account>();
         CreditCards = new List <CreditCard>();
     }
 }
Example #2
0
        public TransactionViewModel()
        {
            Transaction  = new Transaction();
            Transactions = new List <Transaction>();
            Metrics      = new TransactionMetrics();
            AutoTransferPaycheckContributions = false;
            Date = DateTime.Today.ToString("d", CultureInfo.CurrentCulture);

            try
            {
                //  Accounts = new AccountService().GetAllAccountsForTransactions();
                // GetFilterOptions();
            }
            catch (Exception e)
            {
                //Accounts = new AccountManager().GetAllAccounts();
                Logger.Instance.Error(e);
            }
        }
Example #3
0
        public TransactionMetrics GetMetrics()
        {
            try
            {
                TransactionMetrics metrics = new TransactionMetrics();

                metrics.AccountMetrics    = new AccountMetrics();
                metrics.CreditCardMetrics = new CreditCardMetrics();


                var transactions         = _db.Transactions.Where(t => t.UserId == Global.Instance.User.Id).ToList();
                var incomeTransactions   = transactions.Where(t => t.Type == TransactionTypesEnum.Income).ToList();
                var expenseTransactions  = transactions.Where(t => t.Type == TransactionTypesEnum.Expense).ToList();
                var transferTransactions = transactions.Where(t => t.Type == TransactionTypesEnum.Transfer).ToList();

                var expenseTransactionsByMonth = expenseTransactions.Select(t => new { t.Date.Year, t.Date.Month, t.Amount })
                                                 .GroupBy(x => new { x.Year, x.Month }, (key, group) => new { year = key.Year, month = key.Month, expenses = group.Sum(k => k.Amount) }).ToList();

                var incomeTransactionsByMonth = incomeTransactions.Select(t => new { t.Date.Year, t.Date.Month, t.Amount })
                                                .GroupBy(x => new { x.Year, x.Month }, (key, group) => new { year = key.Year, month = key.Month, expenses = group.Sum(k => k.Amount) }).ToList();

                var transferTransactionsByMonth = transferTransactions.Select(t => new { t.Date.Year, t.Date.Month, t.Amount })
                                                  .GroupBy(x => new { x.Year, x.Month }, (key, group) => new { year = key.Year, month = key.Month, expenses = group.Sum(k => k.Amount) }).ToList();


                var expensesByMonth      = new Dictionary <DateTime, decimal>();
                var mandatoryByMonth     = new Dictionary <DateTime, decimal>();
                var discretionaryByMonth = new Dictionary <DateTime, decimal>();
                var incomeByMonth        = new Dictionary <DateTime, decimal>();
                var transfersByMonth     = new Dictionary <DateTime, decimal>();


                foreach (var transaction in expenseTransactionsByMonth)
                {
                    var date   = new DateTime(transaction.year, transaction.month, 1);
                    var amount = transaction.expenses;
                    expensesByMonth.Add(date, amount);
                }

                foreach (var transaction in incomeTransactionsByMonth)
                {
                    var date   = new DateTime(transaction.year, transaction.month, 1);
                    var amount = transaction.expenses;
                    incomeByMonth.Add(date, amount);
                }

                foreach (var transaction in transferTransactionsByMonth)
                {
                    var date   = new DateTime(transaction.year, transaction.month, 1);
                    var amount = transaction.expenses;
                    transfersByMonth.Add(date, amount);
                }


                foreach (KeyValuePair <DateTime, decimal> transaction in expensesByMonth)
                {
                    if (expensesByMonth.ContainsKey(transaction.Key) == false)
                    {
                        expensesByMonth.Add(transaction.Key, 0m);
                    }
                }

                foreach (KeyValuePair <DateTime, decimal> transaction in incomeByMonth)
                {
                    if (incomeByMonth.ContainsKey(transaction.Key) == false)
                    {
                        incomeByMonth.Add(transaction.Key, 0m);
                    }
                }

                foreach (KeyValuePair <DateTime, decimal> transaction in transfersByMonth)
                {
                    if (transfersByMonth.ContainsKey(transaction.Key) == false)
                    {
                        transfersByMonth.Add(transaction.Key, 0m);
                    }
                }


                var oneYearAgo = DateTime.Today.AddYears(-1);
                var index      = new DateTime(oneYearAgo.Year, oneYearAgo.Month, 1);

                for (DateTime i = index; i <= DateTime.Today; i = i.AddMonths(1))
                {
                    if (!mandatoryByMonth.ContainsKey(i))
                    {
                        mandatoryByMonth.Add(i, 0m);
                    }
                    if (!discretionaryByMonth.ContainsKey(i))
                    {
                        discretionaryByMonth.Add(i, 0m);
                    }
                    if (!expensesByMonth.ContainsKey(i))
                    {
                        expensesByMonth.Add(i, 0m);
                    }
                    if (!incomeByMonth.ContainsKey(i))
                    {
                        incomeByMonth.Add(i, 0m);
                    }
                    if (!transfersByMonth.ContainsKey(i))
                    {
                        transfersByMonth.Add(i, 0m);
                    }
                }

                metrics.MandatoryExpensesByMonth     = mandatoryByMonth.Take(12).OrderBy(expense => expense.Key.Year).ThenBy(expense => expense.Key.Month).ToDictionary(expense => $"{ConvertMonthIntToString(expense.Key.Month)}{expense.Key.Year}", expense => expense.Value);
                metrics.DiscretionaryExpensesByMonth = discretionaryByMonth.Take(12).OrderBy(expense => expense.Key).ToDictionary(mandatory => $"{ConvertMonthIntToString(mandatory.Key.Month)}{mandatory.Key.Year}", mandatory => mandatory.Value);
                metrics.ExpensesByMonth  = expensesByMonth.Take(12).OrderBy(expense => expense.Key).ToDictionary(disc => $"{ConvertMonthIntToString(disc.Key.Month)}{disc.Key.Year}", disc => disc.Value);
                metrics.IncomeByMonth    = incomeByMonth.Take(12).OrderBy(expense => expense.Key).ToDictionary(disc => $"{ConvertMonthIntToString(disc.Key.Month)}{disc.Key.Year}", disc => disc.Value);
                metrics.TransfersByMonth = transfersByMonth.Take(12).OrderBy(expense => expense.Key).ToDictionary(disc => $"{ConvertMonthIntToString(disc.Key.Month)}{disc.Key.Year}", disc => disc.Value);


                return(metrics);
            }
            catch (Exception e)
            {
                Logger.Instance.Error(e);
                return(null);
            }
        }
        private async Task <TransactionMetrics> GetMetricsAsync()
        {
            try
            {
                TransactionMetrics metrics = new TransactionMetrics();

                metrics.AccountMetrics = new AccountMetrics();

                var transactions = await _transactionRepository.GetAllTransactionsAsync();

                var enumerable = transactions.ToList();

                var incomeTransactions  = enumerable.Where(t => t.Type == TransactionTypesEnum.Income).ToList();
                var expenseTransactions = enumerable.Where(t => t.Type == TransactionTypesEnum.Expense).ToList();

                var expenseTransactionsByMonth = expenseTransactions.Select(t => new { t.Date.Year, t.Date.Month, t.Amount })
                                                 .GroupBy(x => new { x.Year, x.Month }, (key, group) => new { year = key.Year, month = key.Month, expenses = group.Sum(k => k.Amount) }).ToList();

                var incomeTransactionsByMonth = incomeTransactions.Select(t => new { t.Date.Year, t.Date.Month, t.Amount })
                                                .GroupBy(x => new { x.Year, x.Month }, (key, group) => new { year = key.Year, month = key.Month, expenses = group.Sum(k => k.Amount) }).ToList();


                var expensesByMonth      = new Dictionary <DateTime, decimal>();
                var mandatoryByMonth     = new Dictionary <DateTime, decimal>();
                var discretionaryByMonth = new Dictionary <DateTime, decimal>();
                var incomeByMonth        = new Dictionary <DateTime, decimal>();


                foreach (var transaction in expenseTransactionsByMonth)
                {
                    var date   = new DateTime(transaction.year, transaction.month, 1);
                    var amount = transaction.expenses;
                    expensesByMonth.Add(date, amount);
                }

                foreach (var transaction in incomeTransactionsByMonth)
                {
                    var date   = new DateTime(transaction.year, transaction.month, 1);
                    var amount = transaction.expenses;
                    incomeByMonth.Add(date, amount);
                }


                foreach (KeyValuePair <DateTime, decimal> transaction in expensesByMonth)
                {
                    if (expensesByMonth.ContainsKey(transaction.Key) == false)
                    {
                        expensesByMonth.Add(transaction.Key, 0m);
                    }
                }

                foreach (KeyValuePair <DateTime, decimal> transaction in incomeByMonth)
                {
                    if (incomeByMonth.ContainsKey(transaction.Key) == false)
                    {
                        incomeByMonth.Add(transaction.Key, 0m);
                    }
                }


                var oneYearAgo = DateTime.Today.AddYears(-1);
                var index      = new DateTime(oneYearAgo.Year, oneYearAgo.Month, 1);

                for (DateTime i = index; i <= DateTime.Today; i = i.AddMonths(1))
                {
                    if (!mandatoryByMonth.ContainsKey(i))
                    {
                        mandatoryByMonth.Add(i, 0m);
                    }
                    if (!discretionaryByMonth.ContainsKey(i))
                    {
                        discretionaryByMonth.Add(i, 0m);
                    }
                    if (!expensesByMonth.ContainsKey(i))
                    {
                        expensesByMonth.Add(i, 0m);
                    }
                    if (!incomeByMonth.ContainsKey(i))
                    {
                        incomeByMonth.Add(i, 0m);
                    }
                }

                var sortedExpenses = expensesByMonth.OrderByDescending(e => e.Key);
                var sortedIncome   = incomeByMonth.OrderByDescending(e => e.Key);

                metrics.MandatoryExpensesByMonth     = mandatoryByMonth.Take(12).OrderBy(expense => expense.Key.Year).ThenBy(expense => expense.Key.Month).ToDictionary(expense => $"{ConvertMonthIntToString(expense.Key.Month)} {expense.Key.Year}", expense => expense.Value);
                metrics.DiscretionaryExpensesByMonth = discretionaryByMonth.Take(12).OrderBy(expense => expense.Key).ToDictionary(mandatory => $"{ConvertMonthIntToString(mandatory.Key.Month)} {mandatory.Key.Year}", mandatory => mandatory.Value);
                metrics.ExpensesByMonth = sortedExpenses.Take(12).OrderBy(expense => expense.Key).ToDictionary(disc => $"{ConvertMonthIntToString(disc.Key.Month)} {disc.Key.Year}", disc => disc.Value);
                metrics.IncomeByMonth   = sortedIncome.Take(12).OrderBy(expense => expense.Key).ToDictionary(disc => $"{ConvertMonthIntToString(disc.Key.Month)} {disc.Key.Year}", disc => disc.Value);

                metrics.TransactionsByMonth = metrics.ExpensesByMonth.ToDictionary(pair => pair.Key,
                                                                                   pair => new {
                    Expenses = pair.Value,
                    Income   = metrics.IncomeByMonth[pair.Key]
                });

                return(metrics);
            }
            catch (SqlException e)
            {
                Logger.Instance.Error(e);
                return(null);
            }
            catch (Exception ex)
            {
                Logger.Instance.Error(ex);
                return(null);
            }
        }