public IActionResult Statistics() { IEnumerable <Expense> expenses = _expenseDbContext.Expenses.ToList(); if (expenses.Count() > 0) { ExpenseStatisticsViewModel newStatistics = new ExpenseStatisticsViewModel(); newStatistics.HoogsteBedrag = Highest(expenses); newStatistics.LaagsteBedrag = Lowest(expenses); newStatistics.DuursteDag = HighestDay(expenses); newStatistics.ExpensesPerMonth = OverViewPerMonth(expenses); newStatistics.DuursteCategorie = HighestCategory(expenses); newStatistics.GoedkoopsteCategorie = CheapestCategory(expenses); return(View(newStatistics)); } else { return(View()); } }
public IActionResult Index() { var vm = new ExpenseStatisticsViewModel(); // Most & least expensive expense var leastExpensive = _expenses.OrderBy(x => x.Amount).First(); var mostExpensive = _expenses.OrderBy(x => x.Amount).Last(); vm.LeastExpensive = new ExpenseDetailViewModel() { Amount = leastExpensive.Amount, Date = leastExpensive.Date, Description = leastExpensive.Description }; vm.MostExpensive = new ExpenseDetailViewModel() { Amount = mostExpensive.Amount, Description = mostExpensive.Description, Date = mostExpensive.Date }; // Most expensive DAY var groupedExpensesPerDay = _expenses.GroupBy(x => x.Date.Date); var sumPerDay = new Dictionary <DateTime, decimal>(); foreach (var group in groupedExpensesPerDay) { var sumFromGroup = group.ToList().Sum(expense => expense.Amount); sumPerDay.Add(group.Key, sumFromGroup); } var mostExpensiveDay = sumPerDay.OrderByDescending(x => x.Value).First(); vm.MostExpensiveDay = (mostExpensiveDay.Key, mostExpensiveDay.Value); // Expenses per month var groupedExpensesPerMonth = _expenses.GroupBy(expense => new { expense.Date.Month, expense.Date.Year }); var sumPerMonth = new Dictionary <string, decimal>(); foreach (var group in groupedExpensesPerMonth) { var sumFromMonth = group.ToList().Sum(x => x.Amount); sumPerMonth.Add($"{group.Key.Month}/{group.Key.Year}", sumFromMonth); } vm.SumPerMonth = sumPerMonth; // Most & least expensive category var groupedCategories = _expenses.GroupBy(expense => expense.Category); var sumPerCategory = new Dictionary <string, decimal>(); foreach (var group in groupedCategories) { var sumPerGroupedCategory = group.ToList().Sum(x => x.Amount); sumPerCategory.Add(group.Key, sumPerGroupedCategory); } var mostExpensiveCat = sumPerCategory.OrderBy(x => x.Value).Last(); var leastExpensiveCat = sumPerCategory.OrderBy(x => x.Value).First(); vm.LeastExpensiveCategory = (leastExpensiveCat.Key, leastExpensiveCat.Value); vm.MostExpensiveCategory = (mostExpensiveCat.Key, mostExpensiveCat.Value); return(View()); }