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>(); } }
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); } }
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); } }