public IActionResult Structure(ExpenseTimeSpan timeSpan) { var items = _expenseReader.GetStructure(timeSpan); return(View(new ExpenseStructureChartViewModel { TimeSpan = timeSpan, Items = items })); }
public List <ExpenseStructureItemViewModel> GetStructure(ExpenseTimeSpan timeSpan) { var query = _db.Expenses .Where(e => e.UserId == _currentUser.Id); query = ApplyTimeSpanCriterion(query, timeSpan); var chartItems = query.GroupBy(e => e.Category.Name) .Select(g => new ExpenseStructureItemViewModel { CategoryName = g.Key, TotalValue = (int)g.Sum(e => (float)e.Value) }) .OrderByDescending(i => i.TotalValue) .ToList(); return(chartItems); }
private IQueryable <Expense> ApplyTimeSpanCriterion(IQueryable <Expense> query, ExpenseTimeSpan timeSpan) { return(timeSpan switch { ExpenseTimeSpan.All => query, ExpenseTimeSpan.ThisWeek => query.Where(c => c.DateTime > DateTime.Now.AddDays(-7)), ExpenseTimeSpan.ThisMonth => query.Where(c => c.DateTime > DateTime.Now.AddDays(-30)), ExpenseTimeSpan.ThisYear => query.Where(c => c.DateTime > DateTime.Now.AddDays(-365)), _ => throw new Exception("Nieznany okres wydatków") });