public ActionResult Delete(int id, Users collection)
        {
            if (!Request.IsAuthenticated || !repository.canAccessData(User.Identity.Name, "QuanTriNguoiDung"))
            {
                TempData["message"]     = "Bạn không có quyền truy cập vào trang xóa người dùng";
                TempData["messageType"] = "error";
                return(RedirectToAction("Index", "AdminHome"));
            }

            Users user = null;

            user = repository.Users.Where(u => u.username.Trim() == collection.username.Trim() && u.id == id).FirstOrDefault();
            if (user == null)
            {
                TempData["message"]     = "Mã ID và tên đăng nhập không khớp. Hệ thống không cho phép thực hiện lệnh này.";
                TempData["messageType"] = "error";
                return(View(collection));
            }


            userInfor userEdit    = repository.getInfor(user.username);
            userInfor userCanEdit = repository.getInfor(User.Identity.Name);

            if (userEdit.GroupID != null && userCanEdit.groupParent == userEdit.GroupID)
            {
                string message = "Rất lấy làm tiếc " + userCanEdit.NameDisplay + " ! <br/> ";
                message                += "Tài khoản : " + userEdit.username + " là một " + userEdit.groupName + " <br/>";
                message                += "Tài khoản này có quyền cao hơn bạn trong hệ thống . Bạn không có quyền xóa tài khoản này";
                TempData["message"]     = message;
                TempData["messageType"] = "error";
                return(RedirectToAction("Index"));
            }

            if (userEdit.GroupID != null && userCanEdit.GroupID == userEdit.GroupID && userCanEdit.username != userEdit.username && userCanEdit.id != userEdit.id)
            {
                string message = "Rất lấy làm tiếc " + userCanEdit.NameDisplay + " ! <br/> ";
                message += "Tài khoản : " + userEdit.username + " là một " + userEdit.groupName + " <br/>";
                message += "Tài khoản này có quyền ngang hàng với bạn trong hệ thống . Bạn không có quyền xóa tài khoản này";

                TempData["message"]     = message;
                TempData["messageType"] = "error";
                return(RedirectToAction("Index"));
            }

            string result = repository.deleteUser(id);

            if (result.Trim().Length == 0)
            {
                result = "Đã xóa thành công ";
            }

            TempData["message"]     = result;
            TempData["messageType"] = "inf";
            return(RedirectToAction("Index"));
        }
        //
        // GET: /Admin/AdminUsers/Delete/5

        public ActionResult Delete(int id)
        {
            if (!Request.IsAuthenticated || !repository.canAccessData(User.Identity.Name, "QuanTriNguoiDung"))
            {
                TempData["message"]     = "Bạn không có quyền truy cập vào trang xóa người dùng";
                TempData["messageType"] = "error";
                return(RedirectToAction("Index", "AdminHome"));
            }


            Users user = null;

            user = repository.Users.Where(u => u.id == id).FirstOrDefault();
            if (user == null)
            {
                TempData["message"]     = "Không có người dùng này trong hệ thống";
                TempData["messageType"] = "error";
                return(RedirectToAction("Index"));
            }


            userInfor userEdit    = repository.getInfor(user.username);
            userInfor userCanEdit = repository.getInfor(User.Identity.Name);

            if (userEdit.GroupID != null && userCanEdit.groupParent == userEdit.GroupID)
            {
                string message = "Rất lấy làm tiếc " + userCanEdit.NameDisplay + " ! <br/> ";
                message                += "Tài khoản : " + userEdit.username + " là một " + userEdit.groupName + " <br/>";
                message                += "Tài khoản này có quyền cao hơn bạn trong hệ thống . Bạn không có quyền xóa tài khoản này";
                TempData["message"]     = message;
                TempData["messageType"] = "error";
                return(RedirectToAction("Index"));
            }

            if (userEdit.GroupID != null && userCanEdit.GroupID == userEdit.GroupID && userCanEdit.username != userEdit.username && userCanEdit.id != userEdit.id)
            {
                string message = "Rất lấy làm tiếc " + userCanEdit.NameDisplay + " ! <br/> ";
                message += "Tài khoản : " + userEdit.username + " là một " + userEdit.groupName + " <br/>";
                message += "Tài khoản này có quyền ngang hàng với bạn trong hệ thống . Bạn không có quyền xóa tài khoản này";

                TempData["message"]     = message;
                TempData["messageType"] = "error";
                return(RedirectToAction("Index"));
            }

            return(View(user));
        }
        public ActionResult ChangePass(int id, Users collection)
        {
            Users user = null;

            user = repository.Users.Where(u => u.id == id && u.username.Trim() == collection.username.Trim()).FirstOrDefault();
            if (user == null)
            {
                TempData["message"]     = "Mã ID và tên đăng nhập không khớp. Hệ thống không cho phép thực hiện lệnh này.";
                TempData["messageType"] = "error";
                return(View(collection));
            }

            userInfor userEdit    = repository.getInfor(user.username);
            userInfor userCanEdit = repository.getInfor(User.Identity.Name);

            if (userCanEdit.groupParent == userEdit.GroupID)
            {
                string message = "Rất lấy làm tiếc " + userCanEdit.NameDisplay + " ! <br/> ";
                message                += "Tài khoản : " + userEdit.username + " là một " + userEdit.groupName + " <br/>";
                message                += "Tài khoản này có quyền cao hơn bạn trong hệ thống . Bạn không có quyền đổi mật khẩu tài khoản này";
                TempData["message"]     = message;
                TempData["messageType"] = "error";
                return(RedirectToAction("Index"));
            }

            if (userCanEdit.GroupID == userEdit.GroupID && userCanEdit.username != userEdit.username && userCanEdit.id != userEdit.id)
            {
                string message = "Rất lấy làm tiếc " + userCanEdit.NameDisplay + " ! <br/> ";
                message += "Tài khoản : " + userEdit.username + " là một " + userEdit.groupName + " <br/>";
                message += "Tài khoản này có quyền ngang hàng với bạn trong hệ thống . Bạn không có quyền đổi mật khẩu tài khoản này";

                TempData["message"]     = message;
                TempData["messageType"] = "error";
                return(RedirectToAction("Index"));
            }

            user.pass = help.mahoa(collection.pass); // mã hóa md5 chp password
            repository.changePass(user);
            TempData["message"]     = "Đã đổi mật khẩu người dùng ";
            TempData["messageType"] = "inf";
            return(RedirectToAction("Index"));
        }
        public ActionResult ChangePass(int id)
        {
            Users user = null;

            user = repository.Users.Where(u => u.id == id).FirstOrDefault();
            if (user == null)
            {
                TempData["message"]     = "Không có người dùng này trong hệ thống.";
                TempData["messageType"] = "error";
                return(RedirectToAction("Index"));
            }

            userInfor userEdit    = repository.getInfor(user.username);
            userInfor userCanEdit = repository.getInfor(User.Identity.Name);

            if (userCanEdit.groupParent == userEdit.GroupID)
            {
                string message = "Rất lấy làm tiếc " + userCanEdit.NameDisplay + " ! <br/> ";
                message                += "Tài khoản : " + userEdit.username + " là một " + userEdit.groupName + " <br/>";
                message                += "Tài khoản này có quyền cao hơn bạn trong hệ thống . Bạn không có quyền đổi mật khẩu tài khoản này";
                TempData["message"]     = message;
                TempData["messageType"] = "error";
                return(RedirectToAction("Index"));
            }

            if (userCanEdit.GroupID == userEdit.GroupID && userCanEdit.username != userEdit.username && userCanEdit.id != userEdit.id)
            {
                string message = "Rất lấy làm tiếc " + userCanEdit.NameDisplay + " ! <br/> ";
                message += "Tài khoản : " + userEdit.username + " là một " + userEdit.groupName + " <br/>";
                message += "Tài khoản này có quyền ngang hàng với bạn trong hệ thống . Bạn không có quyền đổi mật khẩu tài khoản này";

                TempData["message"]     = message;
                TempData["messageType"] = "error";
                return(RedirectToAction("Index"));
            }
            return(View(user));
        }
        //
        // GET: /Admin/AdminUserInGroup/Create

        public ActionResult Create(int UserID)
        {
            if (!Request.IsAuthenticated || !userRepository.canAccessData(User.Identity.Name, "QuanTriNguoiDung"))
            {
                TempData["message"]     = "Bạn không có quyền truy cập vào trang gán nhóm cho người dùng";
                TempData["messageType"] = "error";
                return(RedirectToAction("Index", "AdminHome"));
            }

            Users user = null;

            user = userRepository.Users.Where(u => u.id == UserID).FirstOrDefault();
            if (user == null)
            {
                TempData["message"]     = "Người dùng này không tồn tại";
                TempData["messageType"] = "error";
                return(RedirectToAction("Index", "AdminUsers"));
            }

            userInfor userEdit    = userRepository.getInfor(user.username);
            userInfor userCanEdit = userRepository.getInfor(User.Identity.Name);

            if (userEdit.GroupID != null && userCanEdit.groupParent == userEdit.GroupID)
            {
                string message = "Rất lấy làm tiếc " + userCanEdit.NameDisplay + " ! <br/> ";
                message                += "Tài khoản : " + userEdit.username + " là một " + userEdit.groupName + " <br/>";
                message                += "Tài khoản này có quyền cao hơn bạn trong hệ thống . Bạn không có quyền chỉnh sửa tài khoản này";
                TempData["message"]     = message;
                TempData["messageType"] = "error";
                return(RedirectToAction("Index", "AdminUsers"));
            }

            if (userEdit.GroupID != null && userCanEdit.GroupID == userEdit.GroupID && userCanEdit.username != userEdit.username && userCanEdit.id != userEdit.id)
            {
                string message = "Rất lấy làm tiếc " + userCanEdit.NameDisplay + " ! <br/> ";
                message += "Tài khoản : " + userEdit.username + " là một " + userEdit.groupName + " <br/>";
                message += "Tài khoản này có quyền ngang hàng với bạn trong hệ thống . Bạn không có quyền chỉnh sửa tài khoản này";

                TempData["message"]     = message;
                TempData["messageType"] = "error";
                return(RedirectToAction("Index", "AdminUsers"));
            }



            UserInGroup userGroup = repository.UserInGroups.Where(ug => ug.UserID == UserID).FirstOrDefault();

            if (userGroup != null)
            {
                return(RedirectToAction("Edit", "AdminUserInGroup", new { UserID = UserID }));
            }
            else
            {
                ViewBag.UserID = new SelectList(userRepository.Users.Where(u => u.id == UserID), "id", "username", UserID);
                if (userCanEdit.groupParent == null)
                {
                    ViewBag.GroupID = new SelectList(groupUserRepository.GroupUsers.Where(g => g.status == true), "id", "name");
                }
                else
                {
                    ViewBag.GroupID = new SelectList(groupUserRepository.GroupUsers.Where(g => g.status == true && g.id != userCanEdit.GroupID && g.id != userCanEdit.groupParent), "id", "name");
                }
                return(View());
            }
        }
        public ActionResult Edit(int id, UserInGroup collection)
        {
            if (!Request.IsAuthenticated || !userRepository.canAccessData(User.Identity.Name, "QuanTriNguoiDung"))
            {
                TempData["message"]     = "Bạn không có quyền truy cập vào trang gán nhóm cho người dùng";
                TempData["messageType"] = "error";
                return(RedirectToAction("Index", "AdminHome"));
            }


            Users user = null;

            user = userRepository.Users.Where(u => u.id == collection.UserID).FirstOrDefault();
            if (user == null)
            {
                TempData["message"]     = "Người dùng này không tồn tại";
                TempData["messageType"] = "error";
                return(RedirectToAction("Index", "AdminUsers"));
            }

            userInfor userEdit    = userRepository.getInfor(user.username);
            userInfor userCanEdit = userRepository.getInfor(User.Identity.Name);

            if (userEdit.GroupID != null && userCanEdit.groupParent == userEdit.GroupID)
            {
                string message = "Rất lấy làm tiếc " + userCanEdit.NameDisplay + " ! <br/> ";
                message                += "Tài khoản : " + userEdit.username + " là một " + userEdit.groupName + " <br/>";
                message                += "Tài khoản này có quyền cao hơn bạn trong hệ thống . Bạn không có quyền chỉnh sửa tài khoản này";
                TempData["message"]     = message;
                TempData["messageType"] = "error";
                return(RedirectToAction("Index", "AdminUsers"));
            }

            if (userEdit.GroupID != null && userCanEdit.GroupID == userEdit.GroupID && userCanEdit.username != userEdit.username && userCanEdit.id != userEdit.id)
            {
                string message = "Rất lấy làm tiếc " + userCanEdit.NameDisplay + " ! <br/> ";
                message += "Tài khoản : " + userEdit.username + " là một " + userEdit.groupName + " <br/>";
                message += "Tài khoản này có quyền ngang hàng với bạn trong hệ thống . Bạn không có quyền chỉnh sửa tài khoản này";

                TempData["message"]     = message;
                TempData["messageType"] = "error";
                return(RedirectToAction("Index", "AdminUsers"));
            }


            try
            {
                // TODO: Add update logic here
                if (ModelState.IsValid)
                {
                    repository.saveUserInGroup(collection);
                    TempData["message"]     = "Đã gán quyền cho người dùng trong hệ thống";
                    TempData["messageType"] = "inf";
                    return(RedirectToAction("Index", "AdminUsers"));
                }
                else
                {
                    ViewBag.UserID = new SelectList(userRepository.Users.Where(u => u.id == collection.UserID), "id", "username", collection.UserID);


                    if (userCanEdit.groupParent == null)
                    {
                        ViewBag.GroupID = new SelectList(groupUserRepository.GroupUsers.Where(g => g.status == true), "id", "name", collection.GroupID);
                    }
                    else
                    {
                        ViewBag.GroupID = new SelectList(groupUserRepository.GroupUsers.Where(g => g.status == true && g.id != userCanEdit.GroupID && g.id != userCanEdit.groupParent), "id", "name");
                    }
                    TempData["message"]     = "Dữ liệu bạn nhập vào không hợp lệ.";
                    TempData["messageType"] = "error";
                    return(View(collection));
                }
            }
            catch (Exception ex)
            {
                ViewBag.UserID = new SelectList(userRepository.Users.Where(u => u.id == collection.UserID), "id", "username", collection.UserID);


                if (userCanEdit.groupParent == null)
                {
                    ViewBag.GroupID = new SelectList(groupUserRepository.GroupUsers.Where(g => g.status == true), "id", "name", collection.GroupID);
                }
                else
                {
                    ViewBag.GroupID = new SelectList(groupUserRepository.GroupUsers.Where(g => g.status == true && g.id != userCanEdit.GroupID && g.id != userCanEdit.groupParent), "id", "name");
                }

                TempData["message"]     = "Có lỗi hệ thống " + ex.Message;
                TempData["messageType"] = "error";
                return(View(collection));
            }
        }
        public ActionResult Edit(int id, Users collection)
        {
            if (!Request.IsAuthenticated || !repository.canAccessData(User.Identity.Name, "QuanTriNguoiDung"))
            {
                TempData["message"]     = "Bạn không có quyền truy cập vào trang cập nhật người dùng";
                TempData["messageType"] = "error";
                return(RedirectToAction("Index", "AdminHome"));
            }

            try
            {
                if (ModelState.IsValid)
                {
                    Users user = null;
                    user = repository.Users.Where(u => u.username.Trim() == collection.username.Trim() && u.id == id).FirstOrDefault();
                    if (user == null)
                    {
                        TempData["message"]     = "Mã ID và tên đăng nhập không khớp. Hệ thống không cho phép thực hiện lệnh này.";
                        TempData["messageType"] = "error";
                        return(View(collection));
                    }

                    if (user.email != collection.email)
                    {
                        user = repository.Users.Where(u => u.email.Trim() == collection.email.Trim()).FirstOrDefault();
                        if (user != null)
                        {
                            TempData["message"]     = "Địa chỉ email này đã được sử dụng. Vui lòng nhập địa chỉ email khác.";
                            TempData["messageType"] = "error";
                            return(View(collection));
                        }
                    }

                    userInfor userEdit    = repository.getInfor(collection.username);
                    userInfor userCanEdit = repository.getInfor(User.Identity.Name);

                    if (userEdit.GroupID != null && userCanEdit.groupParent == userEdit.GroupID)
                    {
                        string message = "Rất lấy làm tiếc " + userCanEdit.NameDisplay + " ! <br/> ";
                        message                += "Tài khoản : " + userEdit.username + " là một " + userEdit.groupName + " <br/>";
                        message                += "Tài khoản này có quyền cao hơn bạn trong hệ thống . Bạn không có quyền chỉnh sửa tài khoản này";
                        TempData["message"]     = message;
                        TempData["messageType"] = "error";
                        return(RedirectToAction("Index"));
                    }

                    if (userEdit.GroupID != null && userCanEdit.GroupID == userEdit.GroupID && userCanEdit.username != userEdit.username && userCanEdit.id != userEdit.id)
                    {
                        string message = "Rất lấy làm tiếc " + userCanEdit.NameDisplay + " ! <br/> ";
                        message += "Tài khoản : " + userEdit.username + " là một " + userEdit.groupName + " <br/>";
                        message += "Tài khoản này có quyền ngang hàng với bạn trong hệ thống . Bạn không có quyền chỉnh sửa tài khoản này";

                        TempData["message"]     = message;
                        TempData["messageType"] = "error";
                        return(RedirectToAction("Index"));
                    }

                    string result = repository.saveUser(collection);
                    if (result.Trim().Length == 0)
                    {
                        TempData["message"]     = "Cập nhật người dùng thành công";
                        TempData["messageType"] = "inf";
                        return(RedirectToAction("Index"));
                    }
                    else
                    {
                        TempData["message"]     = result;
                        TempData["messageType"] = "error";
                        return(View(collection));
                    }
                }
                else
                {
                    TempData["message"]     = "Dữ liệu bạn nhập không hợp lệ";
                    TempData["messageType"] = "error";
                    return(View(collection));
                }
            }
            catch (Exception ex)
            {
                TempData["message"]     = "Có lỗi hệ thống : " + ex.Message;
                TempData["messageType"] = "error";
                return(View(collection));
            }
        }