Beispiel #1
0
        public IActionResult Structure(ExpenseTimeSpan timeSpan)
        {
            var items = _expenseReader.GetStructure(timeSpan);

            return(View(new ExpenseStructureChartViewModel
            {
                TimeSpan = timeSpan,
                Items = items
            }));
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 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")
     });