public async Task <ActionResult> CreateAsync(string houseName, string greeting, string bankName, int accountType, decimal startingBalance, decimal warningBalance, string category, decimal target, string description, string categoryItem)
        {
            var newHouse = new Household
            {
                Name     = houseName,
                Greeting = greeting
            };

            db.Households.Add(newHouse);
            newHouse.Created = DateTime.Now;
            var user = db.Users.Find(User.Identity.GetUserId());

            user.HouseholdId = newHouse.Id;
            db.SaveChanges();

            // Assign this user the role of Owner
            roleHelper.AddUserToRole(user.Id, "Owner");

            var newBank = new BankAccount
            {
                HouseholdId       = newHouse.Id,
                OwnerId           = User.Identity.GetUserId(),
                Created           = DateTime.Now,
                Name              = bankName,
                BankAccountTypeId = accountType,
                StartingBalance   = startingBalance,
                CurrentBalance    = startingBalance,
                LowBalanceLevel   = warningBalance
            };

            db.BankAccounts.Add(newBank);
            db.SaveChanges();

            var newCategory = new Category
            {
                HouseholdId  = newHouse.Id,
                Name         = category,
                Description  = description,
                TargetAmount = target
            };

            db.Categories.Add(newCategory);
            db.SaveChanges();

            var newItem = new CategoryItem
            {
                CategoryId  = newCategory.Id,
                Description = description,
                Name        = categoryItem
            };

            db.CategoryItems.Add(newItem);
            db.SaveChanges();

            // call the programmatic reauthorize extention method
            await HttpContextBaseExtension.RefreshAuthentication(HttpContext, user);


            return(RedirectToAction("Dashboard"));
        }
        // Leave Household
        public async Task <ActionResult> LeaveAsync()
        {
            var userId = User.Identity.GetUserId();

            var myRole = roleHelper.ListUserRoles(userId).FirstOrDefault();
            var user   = db.Users.Find(userId);

            switch (myRole)
            {
            case "Owner":

                var members = db.Users.Where(u => u.HouseholdId == user.HouseholdId).Count() - 1;
                if (members >= 1)
                {
                    TempData["Message"] = $"You are unable to leave the Household! There are still <b>{members}</b> other members in the house, you must select one of them to assume your role.";
                    return(RedirectToAction("ExitDenied"));
                }
                user.Household.IsDeleted = true;
                user.HouseholdId         = null;
                db.Users.Remove(user);
                db.SaveChanges();

                roleHelper.RemoveUserFromRole(userId, "Owner");
                roleHelper.AddUserToRole(userId, "NewUser");
                await HttpContextBaseExtension.RefreshAuthentication(HttpContext, user);

                return(RedirectToAction("Dashboard", "Households"));

            case "Member":
            default:
                // Removing all user's data from the database
                // This method doesn't allow for the user to maintain their data
                //db.Users.Remove(user);
                //db.SaveChanges();

                roleHelper.RemoveUserFromRole(userId, "Member");
                roleHelper.AddUserToRole(userId, "NewUser");


                await HttpContextBaseExtension.RefreshAuthentication(HttpContext, user);

                return(RedirectToAction("Login", "Account"));
            }
        }
        public async Task <ActionResult> Create([Bind(Include = "Id,HouseName,Greeting,Created")] Household household)
        {
            if (ModelState.IsValid)
            {
                household.Created = DateTime.Now;
                db.Households.Add(household);
                db.SaveChanges();

                var user = db.Users.Find(User.Identity.GetUserId());
                user.HouseholdId = household.Id;
                rolesHelper.AddUserToRole(user.Id, "Head");
                db.SaveChanges();

                await HttpContextBaseExtension.RefreshAuthentication(HttpContext, user);

                return(RedirectToAction("Index", "Home"));
            }
            return(RedirectToAction("Dashboard"));
        }
        public async Task <ActionResult> UpdateAvatar(HttpPostedFileBase Avatar)
        {
            var userId = User.Identity.GetUserId();
            var user   = db.Users.Find(userId);

            var justFileName = Path.GetFileNameWithoutExtension(Avatar.FileName);

            justFileName = StringUtilities.URLFriendly(justFileName);
            justFileName = $"{justFileName}-{DateTime.Now.Ticks}";
            justFileName = $"{justFileName}{Path.GetExtension(Avatar.FileName)}";

            var fileName = Path.GetFileName(Avatar.FileName);

            Avatar.SaveAs(Path.Combine(Server.MapPath("~/Avatars/"), justFileName));
            user.AvatarPath = $"/Avatars/{justFileName}";

            db.SaveChanges();
            //AddErrors(result);
            await HttpContextBaseExtension.RefreshAuthentication(HttpContext, user);

            return(RedirectToAction("Index", "Home"));
        }
        public async Task <ActionResult> Create(string houseName, string greeting, string bankName, int accountType, string startingBalance, string warningBalance, string categoryName, string itemName)
        {
            //var newHouse = new Household
            //{
            //    Created = DateTime.Now,
            //};
            //if (ModelState.IsValid)
            //{
            //    db.Households.Add(household);
            //    db.SaveChanges();



            //}

            var newHouse = new Household
            {
                Created  = DateTime.Now,
                Name     = houseName,
                Greeting = greeting
            };

            db.Households.Add(newHouse);
            db.SaveChanges();
            //After creating a new House we need to do the following actions
            //Update the Users record to include the new household Id
            var user = db.Users.Find(User.Identity.GetUserId());

            user.HouseholdId = newHouse.Id;

            //Assign this user to the role of owner
            roleHelper.AddUserToRole(user.Id, "Owner");

            //Call the programmatic rauthorize extension method
            await HttpContextBaseExtension.RefreshAuthentication(HttpContext, user);

            var newBank = new BankAccount
            {
                HouseholdId       = newHouse.Id,
                BankAccountTypeId = accountType,
                Created           = DateTime.Now,
                StartingBalance   = Convert.ToDecimal(startingBalance),
                CurrentBalance    = Convert.ToDecimal(startingBalance),
                LowBalanceLevel   = Convert.ToDecimal(warningBalance),
                Name    = bankName,
                OwnerId = User.Identity.GetUserId()
            };

            db.BankAccounts.Add(newBank);
            db.SaveChanges();

            var newCategory = new Category
            {
                HouseholdId  = newHouse.Id,
                Name         = categoryName,
                Description  = "Should have entered description in wizard",
                TargetAmount = 600
            };

            db.Categories.Add(newCategory);
            db.SaveChanges();

            var newItem = new CategoryItem
            {
                CategoryId  = newCategory.Id,
                Name        = itemName,
                Description = "",
            };

            db.CategoryItems.Add(newItem);
            db.SaveChanges();

            //Redirect to Dashboard
            return(RedirectToAction("Dashboard"));
        }
 public void GetRequestTelemetryReturnsNullForNullContextBase()
 {
     Assert.IsNull(HttpContextBaseExtension.GetRequestTelemetry(null));
 }