Exemple #1
0
        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));
        }
Exemple #2
0
        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));
        }