public ActionResult Statements(int accountId) { var statementViewModels = new List <StatementOverviewViewModel>(); var transactions = GetTransactions(accountId); var transfers = GetTransfers(accountId); var allStatements = transactions.Concat(transfers) .OrderByDescending(x => x.Date) .GroupBy(x => x.Year & x.Month); foreach (var statementCollection in allStatements) { var @in = statementCollection.Where(x => x.Amount > 0).Sum(x => x.Amount); var @out = statementCollection.Where(x => x.Amount < 0).Sum(x => x.Amount); var sum = @in + @out; var year = statementCollection.First().Year; var month = statementCollection.First().Month; var date = statementCollection.First().Date; var statementOverviewViewModel = new StatementOverviewViewModel() { In = @in, Out = @out, Amount = sum, StatementDate = DateService.GetMonthYearDate(year, month), Date = date, AccountId = accountId }; statementViewModels.Add(statementOverviewViewModel); } var account = accountRepository.Find(accountId); var viewModel = new StatementsViewModel { AccountName = account.Name, Statements = statementViewModels, MoneyIn = transactions.Concat(transfers).Sum(x => x.Amount > 0 ? x.Amount : 0), MoneyOut = transactions.Concat(transfers).Sum(x => x.Amount < 0 ? x.Amount : 0) }; return(View(viewModel)); }
public async Task <IActionResult> Index(StatementsViewModel model, int?page = 1) { ViewBag.Accounts = await this.GetAccountsForViewBag(); const int pageSize = 4; if (model.id != 0) { HttpContext.Session.SetInt32("id", model.id); } if (model.id == 0 && HttpContext.Session.GetInt32("id").HasValue) { model.id = HttpContext.Session.GetInt32("id").Value; } if (HttpContext.Session.GetInt32("id").HasValue) { var id = HttpContext.Session.GetInt32("id").Value; var pagedList = await _transRepo.GetTransactionPage(id, page, pageSize); model.Transactions = (IPagedList <Transaction>)pagedList; } else if (ViewBag.Accounts[0] != null) { var pagedList = await _transRepo.GetTransactionPage(ViewBag.Accounts[0].AccountNumber, page, pageSize); model.Transactions = (IPagedList <Transaction>)pagedList; } else { var pagedList = await _transRepo.GetTransactionPage(0, page, pageSize); model.Transactions = (IPagedList <Transaction>)pagedList; } return(View(model)); }