public ActionResult RetrieveUsers(ManageMessageId? message)
        {
            if (User.IsInRole("Admin"))
            {
                var records = db.Users.ToList();

                var userAccountList = new List<UserRoleViewModel>();
                foreach (var item in records)
                {
                    var userAccount = new UserRoleViewModel()
                    {
                        UserId = item.Id,
                        Email = item.Email,
                        Status = item.Status
                    };
                    userAccountList.Add(userAccount);
                }

                ViewBag.StatusMessage =
                    message == ManageMessageId.AddCustomerSuccess ? "You have successfully added a new Customer."
          : message == ManageMessageId.ArchiveCustomerSuccess ? "You have just desactivated a Customer account."
          : message == ManageMessageId.UpdateCustomerSuccess ? "You have successfully activated a Customer account."
          : message == ManageMessageId.Error ? "An error has occurred."
          : message == ManageMessageId.AddSupplierSuccess ? "You have successfully added a new Supplier."
           : message == ManageMessageId.ArchiveSupplierSuccess ? "You have just desactivated a Supplier account."
           : message == ManageMessageId.UpdateSupplierSuccess ? "You have successfully activated a Supplier account."
           : message == ManageMessageId.Error ? "An error has occurred."
           : "";

                GetNewSupplierActivation();
                GetNewModelsActivation();
                return View(userAccountList);
            }
            return RedirectToAction("Login", "Account");
        }
        public async Task<ActionResult> EditUser(string id)
        {
            if (id == null)
            {
                return RedirectToAction("RetrieveUsers");
            }
            if (User.IsInRole("Admin"))
            {
                string userId = id;
                var user = (from u in db.Users
                            where u.Id == userId
                            select u).FirstOrDefault();
                var userRole = new UserRoleViewModel();
                userRole.UserId = userId;
                userRole.Email = user.Email;
                userRole.Status = user.Status;
                userRole.UserRoles = db.Roles.OrderBy(x => x.Name).ToList();
                var roles = await UserManager.GetRolesAsync(user.Id);
                userRole.CurrentRoles = new List<string>(roles);
                userRole.CurrentRoles.Sort();

                //ViewBag.UserRoles = userRole.UserRoles
                //    .Select(r => new SelectListItem { Value = r.Name, Text = r.Name });
                ViewBag.StatusId = new SelectList(db.Statuses, "StatusId", "Name");

                GetNewSupplierActivation();
                GetNewModelsActivation();
                return View(userRole);
            }
            return RedirectToAction("RetrieveUsers");
        }
        public async Task<ActionResult> EditUser(UserRoleViewModel item, string roleName)
        {
            if (User.IsInRole("Admin"))
            {
                //int statusId = 1;

                //ViewBag.StatusId = new SelectList(db.Statuses, "StatusId", "Name", statusId);
                //string status = (from s in db.Statuses
                //                 where s.StatusId == statusId
                //                 select s.Name).FirstOrDefault();

                var user = (from u in db.Users
                            where u.Id == item.UserId
                            select u).FirstOrDefault();

                if (user.Status == "Active")
                {
                    user.Status = "Inactive";
                }
                else if (user.Status == "Inactive")
                {
                    user.Status = "Active";
                }
                else if (user.Status == "Pending")
                {
                    user.Status = "Active";
                }

                db.SaveChanges();

                if (user.Status == "Active" && user.ActivationCode != null)
                {
                    var body = "<p>Dear Valued Customer,</p><p>This is the activation code that has been sent to you in order to validate your registration on BontoBuy</p><p>Your activation code: {0}</p>";
                    var message = new MailMessage();
                    message.To.Add(new MailAddress(user.Email));
                    message.From = new MailAddress("*****@*****.**");
                    message.Subject = "Register on BontoBuy";
                    message.Body = string.Format(body, user.ActivationCode);
                    message.IsBodyHtml = true;

                    var smtp = new SmtpClient();

                    var credential = new NetworkCredential()
                    {
                        UserName = "******",
                        Password = "******"
                    };
                    smtp.Credentials = credential;
                    smtp.Host = "smtp.gmail.com";
                    smtp.Port = 587;
                    smtp.EnableSsl = true;
                    await smtp.SendMailAsync(message);
                }

                //  await UserManager.AddToRoleAsync(item.UserId, roleName);
                var roles = await UserManager.GetRolesAsync(user.Id);
                var userRole = new List<string>(roles);

                var matchingValueSupplier = userRole.FirstOrDefault(stringToCompare => stringToCompare.Contains("Supplier"));
                if (matchingValueSupplier == "Supplier")
                    return RedirectToAction("RetrieveSuppliers");

                var matchingValueCustomer = userRole.FirstOrDefault(stringToCompare => stringToCompare.Contains("Customer"));
                if (matchingValueCustomer == "Customer")
                    return RedirectToAction("RetrieveCustomers");

                GetNewSupplierActivation();
                GetNewModelsActivation();
                return RedirectToAction("RetrieveUsers");
            }
            return RedirectToAction("Login", "Account");
        }
        public ActionResult NewSuppliers()
        {
            var records = db.Users.Where(u =>
         u.Roles.Join(db.Roles, usrRole => usrRole.RoleId,
         role => role.Id, (usrRole, role) => role).Any(r => r.Name.Equals("Supplier")) && u.Status == "Pending").ToList();

            var userAccountList = new List<UserRoleViewModel>();
            foreach (var item in records)
            {
                var userAccount = new UserRoleViewModel()
                {
                    UserId = item.Id,
                    Email = item.Email,
                    Status = item.Status
                };
                userAccountList.Add(userAccount);
            }

            return View("../Role/RetrieveSuppliers", userAccountList);
        }