public async Task <ActionResult> Points(int?page) { await SetNotificationsAsync(); string currentUserId = User.Identity.GetUserId(); // get transactions (expenses) var transactions = await UserService.GetStoreTransactionsAsync(currentUserId); UserPointsViewModel viewModel = new UserPointsViewModel(); viewModel.IsCurrentUserEmailConfirmed = String.IsNullOrEmpty(currentUserId) ? false : await UserManager.IsEmailConfirmedAsync(currentUserId); viewModel.PointsCount = ViewBag.PointsCount; var storeTransactions = Mapper.Map <IReadOnlyCollection <StoreTransactionLog>, List <StoreTransactionViewModel> >(transactions); //await AddTitlesToStoreTransactions(storeTransactions, currentUserId); CalculateTotalPointsSpent(viewModel, storeTransactions); viewModel.StoreTransactions = storeTransactions .OrderByDescending(t => t.TransactionDate) .ToPagedList(page ?? 1, 20); return(View(viewModel)); }
private static void CalculateTotalPointsSpent(UserPointsViewModel viewModel, List <StoreTransactionViewModel> storeTransactions) { int totalSpent = 0; foreach (var transaction in storeTransactions) { totalSpent += transaction.ItemCost; } viewModel.TotalSpent = totalSpent; }
public async Task <IActionResult> UserPoints(string id) { UserPointsViewModel vm = new UserPointsViewModel(); var user = await _userService.GetUserAsync(id); vm.User = new ApplicationUser() { DisplayName = user.DisplayName, Id = user.Id }; if (vm.User != null) { if (HttpContext.Session.Get <List <TokTypeList> >(SessionTokGroupsKey) == null) { var g = await _tokService.GetTokGroupsAsync(); HttpContext.Session.Set <List <TokTypeList> >(SessionTokGroupsKey, g); vm.TokGroups = g; } else { vm.TokGroups = HttpContext.Session.Get <List <TokTypeList> >(SessionTokGroupsKey); } #region Groups // List <TokTypeList> groups = new List <TokTypeList>(); foreach (var group in vm.TokGroups) { groups.Add(group); } groups = groups.OrderBy(x => x.TokTypes.Count()).ToList(); vm.TokGroups = groups; #endregion //Counters vm.Counters = (await _tokService.GetTokGroupUserCountersAsync(id)).ToArray(); if (vm.Counters.Length == 0) { vm.Counters = null; } else { //Put all counters to type order var c = vm.Counters.ToList(); var userCounters = new TokTypeListUserCounter[vm.TokGroups.Count]; for (int i = 0; i < vm.TokGroups.Count; ++i) { if (c.Select(x => x.TokGroup).ToArray().Contains(vm.TokGroups[i].TokGroup)) { var index = Array.IndexOf(c.Select(x => x.TokGroup).ToArray(), vm.TokGroups[i].TokGroup); userCounters[i] = c.FirstOrDefault(x => x.TokGroup == vm.TokGroups[i].TokGroup); c.Remove(userCounters[i]); } else { userCounters[i] = null; } if (c.Count <= 0) { break; } } vm.Counters = userCounters; //.OrderBy(x => x.TokTypes.Count()).ToList().ToArray() //Each type must be Alphabetical order and have attached points List <(List <(string, int)>, TokTypeList)> listOfLists = new List <(List <(string, int)>, TokTypeList)>(); for (int i = 0; i < vm.Counters.Length; ++i) { List <(string, int)> listTuple = new List <(string, int)>(); if (vm.Counters[i] != null) { for (int j = 0; j < vm.Counters[i].TokTypes.Length; ++j) { listTuple.Add((vm.Counters[i].TokTypes[j], vm.Counters[i].TokTypeCounts[j])); } } listTuple = listTuple.OrderBy(x => x.Item1).ToList(); //Alpha listOfLists.Add((listTuple, vm.TokGroups[i])); } //Put ordered items back in for (int i = 0; i < vm.Counters.Length; ++i) { if (vm.Counters[i] != null) { vm.Counters[i].TokTypes = listOfLists[i].Item2.TokTypes; vm.Counters[i].TokTypeCounts = listOfLists[i].Item1.Select(x => x.Item2).ToArray(); } } } } return(View(vm)); }