// GET: Badges public ActionResult Index() { if (Session["UserID"] == null) { return(RedirectToAction("Login", "Home")); } else { CLIENT_ID = int.Parse(Session["UserID"].ToString()); } //get badges the user has earned BadgesModelView badgeModel = new BadgesModelView(); badgeModel.badges = getUserBadges(); badgeModel.tweetMessage = "! Come budget with Commerce today at commercebank.com"; badgeTrigger(badgeModel); badgeModel.badgeCount = badgeModel.badges.Count(); badgeModel.totalBadgeCount = dbContext.Badges.Count(); //get most recent badge ClientBadge recent = dbContext.ClientBadges.Where(x => x.ClientID == CLIENT_ID).OrderByDescending(t => t.DateEarned).FirstOrDefault(); badgeModel.mostRecent = dbContext.Badges.Where(x => x.BadgeID == recent.BadgeID).FirstOrDefault(); return(View(badgeModel)); }
// GET: Home public ActionResult Index() { ActionResult result = checkUser(); if (result != null) { return(result); } BadgesModelView bmv = new BadgesModelView(); bmv.addNewBadge(74, CLIENT_ID); //Give user inital load of app badge if they havent earned it. indexModelView mv = new indexModelView(); mv.savingsGoals = getSavingGoals(); mv.budgetGoals = getBudgetInfo(); mv.transactions = getTransactionInfo(); mv.badges = getAllBadges(); mv.clientBadges = getClientBadges(); decimal[] totals = getTotalIncomeAndSpent(); mv.totalIncome = totals[0]; mv.totalSpent = totals[1]; badgeTriggers(); return(View(mv)); }
public void addBadge() { //count number of badges List <SavingsGoal> goalList = new List <SavingsGoal>(); goalList = dbContext.SavingsGoals.Where(x => x.ClientID == CLIENT_ID).ToList(); BadgesModelView bmv = new BadgesModelView(); //add badges based on goal count switch (goalList.Count()) { case (1): bmv.addNewBadge(75, CLIENT_ID); break; case (3): //add previous badges for testing bmv.addNewBadge(75, CLIENT_ID); bmv.addNewBadge(76, CLIENT_ID); break; case (5): bmv.addNewBadge(75, CLIENT_ID); bmv.addNewBadge(76, CLIENT_ID); bmv.addNewBadge(77, CLIENT_ID); break; } //determine if user is completed with goals List <SavingsGoal> activeGoalList = dbContext.SavingsGoals.Where(x => x.ClientID == CLIENT_ID).Where(x => x.Status == "Active").ToList(); List <SavingsGoal> successGoalList = dbContext.SavingsGoals.Where(x => x.ClientID == CLIENT_ID).Where(x => x.Status == "Success").ToList(); if (activeGoalList.Count() == 0 && successGoalList.Count() >= 1) { bmv.addNewBadge(96, CLIENT_ID); } //determine is user is halfway through goals else { double totalGoalAmount = activeGoalList.Sum(x => Convert.ToDouble(x.SavingsGoalAmount)); double totalSavingsAlloted = activeGoalList.Sum(x => Convert.ToDouble(x.CurrentGoalAmount)); double ratio = totalSavingsAlloted / totalGoalAmount; if (ratio >= .5) { bmv.addNewBadge(95, CLIENT_ID); } } }
private void badgeTrigger(BadgesModelView bmv) { //check if user does not have any badges tied to the badge page //bool array for achievement of each badge bool[] badgeObtained = new bool[9]; int holidayCount = 0; List <ClientBadge> ClientBadgeList = new List <ClientBadge>(); ClientBadgeList = dbContext.ClientBadges.Where(x => x.ClientID == CLIENT_ID).ToList(); for (int i = 0; i < ClientBadgeList.Count(); i++) { //count number of holiday badges if (ClientBadgeList[i].BadgeID >= 109 && ClientBadgeList[i].BadgeID <= 121) { holidayCount++; } //check if any badges related to the badge page are already acquired switch (ClientBadgeList[i].BadgeID) { case (99): badgeObtained[0] = true; break; case (100): badgeObtained[1] = true; break; case (102): badgeObtained[2] = true; break; case (103): badgeObtained[3] = true; break; case (104): badgeObtained[4] = true; break; case (107): badgeObtained[5] = true; break; case (122): badgeObtained[6] = true; break; case (123): badgeObtained[7] = true; break; case (108): badgeObtained[8] = true; break; } } for (int j = 0; j < badgeObtained.Count(); j++) { if (!badgeObtained[j]) { switch (j) { case (0): //check if user has shared one badge break; case (1): //... shared 5 badges break; case (2): //Achieved 5 badges if (ClientBadgeList.Count() == 5) { bmv.addNewBadge(102, CLIENT_ID); } break; case (3): //10 badges if (ClientBadgeList.Count() == 10) { bmv.addNewBadge(103, CLIENT_ID); } break; case (4): //20 badges if (ClientBadgeList.Count() == 20) { bmv.addNewBadge(104, CLIENT_ID); } break; case (5): //auto since user has to click on badge page bmv.addNewBadge(107, CLIENT_ID); break; case (6): //check if all holiday badges are cleared if (holidayCount.Equals(13)) { bmv.addNewBadge(122, CLIENT_ID); } break; case (7): //check if 44 badges have been obtained if (ClientBadgeList.Count() == 44) { bmv.addNewBadge(123, CLIENT_ID); } break; case (8): //check if 106, 107, and 75 have been obtained int count = 0; for (int k = 0; k < ClientBadgeList.Count(); k++) { switch (ClientBadgeList[k].BadgeID) { case (106): count++; break; case (107): count++; break; case (75): count++; break; } } if (count == 3) { bmv.addNewBadge(108, CLIENT_ID); } break; } } } }
/// <summary> /// This method will be used as a scheduled task to update the budget goals /// Badges will also be earned for each user, no matter who is currently logged in /// </summary> private void updateBudgetGoals() { List <BudgetGoal> budgetGoals = dbContext.BudgetGoals.Where(x => x.Month.Month < DateTime.Now.Month && x.Month.Year <= DateTime.Now.Year && x.GoalCategory != 1 && x.Status == "A").ToList(); DateTime lastMonth = DateTime.Now.AddMonths(-1); List <Transaction> transactions = dbContext.Transactions.Where(x => x.TransactionDate.Month == lastMonth.Month && x.TransactionDate.Year == lastMonth.Year && x.CategoryID != 1).ToList(); foreach (Client client in dbContext.Clients) { var account = dbContext.Accounts.Where(x => x.ClientID == client.ClientID).Select(x => x.AccountNo).ToList(); var total = transactions.Where(x => account.Contains(x.TransactionAccountNo)).Sum(x => x.TransactionAmount); var budgeted = budgetGoals.Where(x => x.ClientID == client.ClientID).Sum(x => x.BudgetGoalAmount); BadgesModelView bmv = new BadgesModelView(); if (total <= budgeted) { bmv.addNewBadge(84, client.ClientID); //Give user inital load of app badge if they havent earned it. //determine what month of the streak we're at, award badge accordingly //determine if any holidays apply switch (lastMonth.Month) { case (2): //February bmv.addNewBadge(111, client.ClientID); //washington's birthday break; case (3): //March bmv.addNewBadge(112, client.ClientID); //april fools break; case (4): //April bmv.addNewBadge(113, client.ClientID); // easter break; case (5): //May bmv.addNewBadge(114, client.ClientID); //memorial day break; case (6): //June bmv.addNewBadge(116, client.ClientID); //Independence Day break; case (10): //October bmv.addNewBadge(117, client.ClientID); //Halloween break; case (11): //November bmv.addNewBadge(118, client.ClientID); //Thanksgiving break; case (12): //December bmv.addNewBadge(120, client.ClientID); //xmas break; } } else if (total == budgeted) { //client is in the black for this month bmv.addNewBadge(97, client.ClientID); } else { //client went over budget, streak is broken, update DB } } }
//adds badge if user has started public void badgeTriggers() { BadgesModelView bmv = new BadgesModelView(); bmv.addNewBadge(74, CLIENT_ID); }