public ActionResult WithdrawMoney(WithdrawMoney model)
        {
            ViewBag.message = "";

            if (!ModelState.IsValid)
            {
                return View(model);
            }

            string updateBy = AccountInfo.GetUserName(Request);
            string username = model.Username;
            int withDrawMoney = model.AmountOfMoney;
            int transactionType = 3;
            string transactionContent = "Rút tiền";

            UserinfoModel userinfo = new UserinfoModel();
            DataTable userInfoDataTable = new DataTable();
            UserInfoDetailTableAdapter userInfoDetailAdapter = new UserInfoDetailTableAdapter();
            UserInfoTableAdapter userInfoAdapter = new UserInfoTableAdapter();
            userInfoDataTable = userInfoAdapter.GetDataByUsername(username);
            //string userTypeName = null;
            //string email = null;
            //if (!string.IsNullOrEmpty(userInfoDataTable.Rows[0]["TypeShortName"].ToString()))
            //{
            //	userInfoDataTable = userInfoDetailAdapter.GetDataByUsername(username);
            //	userTypeName = (string)userInfoDataTable.Rows[0]["TypeName"];
            //	email = userInfoDataTable.Rows[0]["Email"].ToString();
            //}
            //else
            //{
            //	AccountTableAdapter accountAdapter = new AccountTableAdapter();
            //	DataTable accountDataTable = new DataTable();
            //	accountDataTable = accountAdapter.GetDataByUsername(username);
            //	email = accountDataTable.Rows[0]["Email"].ToString();
            //}
            DateTime date = DateTime.Parse(userInfoDataTable.Rows[0]["LastUpdatedMoney"].ToString());
            int amountOfMoney = (int)userInfoDataTable.Rows[0]["AmountOfMoney"];

            TransactionHistoryTableAdapter transactionAdapter = new TransactionHistoryTableAdapter();
            int? money = transactionAdapter.GetCurrentMoney(username, date);
            if (money == null)
            {
                money = 0;
            }

            amountOfMoney += money.Value;

            if (withDrawMoney > amountOfMoney)
            {
                Session["withDrawMoney"] = "Giao dịch thất bại! Số tiền trong tài khoản không đủ để thực hiện giao dịch";
                return View(model);
            }
            else
            {
                try
                {
                    string transactionID = transactionAdapter.RechargeMoneyScalar(username, transactionType, amountOfMoney, transactionContent, null, false, date, updateBy, date).ToString();
                    int id = int.Parse(transactionID);
                    XmlSync.SaveTransactionHistoryXml(id, username, transactionType, amountOfMoney, transactionContent, null, false, date, updateBy, date, null);
                    Session["withDrawMoney"] = "Giao dịch thành công!";
                }
                catch (Exception ex)
                {
                    Log.ErrorLog(ex.Message);
                    Session["withDrawMoney"] = "Giao dịch thất bại!";
                }

                return RedirectToAction("WithdrawMoney","Transaction");
            }
        }
        public ActionResult RechargeMoney(RechargeMoney model)
        {
            if (!ModelState.IsValid)
            {
                return View();
            }

            string updateBy = AccountInfo.GetUserName(Request);
            string username = model.Username;
            int amountOfMoney = 0;
            if (!string.IsNullOrEmpty(model.AmountOfMoney.ToString()))
            {
                amountOfMoney = model.AmountOfMoney;
            }
            string transactionContent = "Nạp tiền";
            DateTime date = DateTime.Now;
            int transactionType = 2;
            UserInfoDetailTableAdapter userInfoAdapter = new UserInfoDetailTableAdapter();
            DataTable userInfoDataTable = userInfoAdapter.GetDataByUsername(username);

            if (userInfoDataTable.Rows.Count != 1)
            {
                ModelState.AddModelError("", "Tên đăng nhập không tồn tại.");
                return View(model);
            }
            TransactionHistoryTableAdapter transactionAdapter = new TransactionHistoryTableAdapter();
            try
            {
                string transactionID = transactionAdapter.RechargeMoneyScalar(username, transactionType, amountOfMoney, transactionContent, null, false, date, updateBy, date).ToString();
                int id = int.Parse(transactionID);
                XmlSync.SaveTransactionHistoryXml(id, username, transactionType, amountOfMoney, transactionContent, null, false, date, updateBy, date, null);
                Session["rechargeMoney"] = "Giao dịch thành công!";
            }
            catch (Exception ex)
            {
                Log.ErrorLog(ex.Message);
                Session["rechargeMoney"] = "Giao dịch thất bại!";
            }

            return RedirectToAction("RechargeMoney", "Transaction");
        }
        public ActionResult UserInfo()
        {
            string username = AccountInfo.GetUserName(Request);

            UserinfoModel userinfo = new UserinfoModel();
            DataTable userInfoDataTable = new DataTable();
            UserInfoDetailTableAdapter userInfoDetailAdapter = new UserInfoDetailTableAdapter();
            UserInfoTableAdapter userInfoAdapter = new UserInfoTableAdapter();
            userInfoDataTable = userInfoAdapter.GetDataByUsername(username);
            string userTypeName = null;
            string email = null;
            if (!string.IsNullOrEmpty(userInfoDataTable.Rows[0]["TypeShortName"].ToString()))
            {
                userInfoDataTable = userInfoDetailAdapter.GetDataByUsername(username);
                userTypeName = (string)userInfoDataTable.Rows[0]["TypeName"];
                email = userInfoDataTable.Rows[0]["Email"].ToString();
            }
            else
            {
                AccountTableAdapter accountAdapter = new AccountTableAdapter();
                DataTable accountDataTable = new DataTable();
                accountDataTable = accountAdapter.GetDataByUsername(username);
                email = accountDataTable.Rows[0]["Email"].ToString();
            }
            DateTime date = DateTime.Parse(userInfoDataTable.Rows[0]["LastUpdatedMoney"].ToString());
            int amountOfMoney = (int)userInfoDataTable.Rows[0]["AmountOfMoney"];

            TransactionHistoryTableAdapter transactionAdapter = new TransactionHistoryTableAdapter();
            int? money = transactionAdapter.GetCurrentMoney(username, date);
            if (money == null)
            {
                money = 0;
            }

            amountOfMoney += money.Value;

            userinfo.Username = username;
            userinfo.Name = userInfoDataTable.Rows[0]["Name"].ToString();
            userinfo.TypeName = userTypeName;
            userinfo.Email = email;
            userinfo.AmountOfMoney = amountOfMoney;

            return View(userinfo);
        }
        public ActionResult ListUser()
        {
            UserInfoDetailTableAdapter userInfoAdapter = new UserInfoDetailTableAdapter();
            DataTable userDT = new DataTable();

            string username = Request.QueryString["username"];
            string name = Request.QueryString["name"];
            string userType = Request.QueryString["userType"];
            string role = Request.QueryString["role"];
            string active = Request.QueryString["active"];

            string page = Request.QueryString["page"];
            string amountPerPage = Request.QueryString["amountPerPage"];

            if (String.IsNullOrWhiteSpace(userType))
            {
                userType = null;
            }

            int role_;
            if (!int.TryParse(role, out role_))
            {
                role = null;
            }

            int active_;
            if (!int.TryParse(active, out active_))
            {
                active = null;
            }

            int page_;
            if (!int.TryParse(page, out page_))
            {
                page = null;
                page_ = 1;
            }

            int amountPerPage_;
            if (!int.TryParse(amountPerPage, out amountPerPage_))
            {
                amountPerPage = "10";
                amountPerPage_ = 10;
            }

            try
            {
                string query = "SELECT * FROM ( SELECT UserInfo.Username, UserInfo.Name, UserInfo.TypeShortName, "
                    + "UserInfo.AmountOfMoney, UserInfo.LastUpdatedMoney, UserInfo.FingerPosition, UserInfo.IsCafeteriaStaff, "
                    + "UserInfo.InsertedDate, UserInfo.UpdatedBy, UserInfo.LastUpdated, Account.Email, Account.Role, "
                    + "UserType.TypeName, UserType.MealValue, UserType.MoreMealValue, UserType.CanDebt, "
                    + "UserType.CanEatMore, UserInfo.IsActive, ROW_NUMBER() OVER (order by UserInfo.InsertedDate DESC) AS RowNum "
                    + "FROM UserInfo INNER JOIN Account ON UserInfo.Username = Account.Username INNER JOIN "
                    + "UserType ON UserInfo.TypeShortName = UserType.TypeShortName ";
                string countQuery = "SELECT COUNT(UserInfo.Username) FROM UserInfo INNER JOIN Account "
                    + "ON UserInfo.Username = Account.Username ";
                string conditionQuery = "";

                if (username != null || name != null || userType != null || role != null || active != null)
                {
                    conditionQuery += "WHERE ";
                    bool isFirst = false;

                    if (username != null)
                    {
                        conditionQuery += "UserInfo.Username like '%" + username + "%' ";
                        isFirst = true;
                    }

                    if (name != null)
                    {
                        if (isFirst)
                        {
                            conditionQuery += "AND ";
                        }
                        conditionQuery += "UserInfo.Name like N'%" + name + "%' ";
                        isFirst = true;
                    }

                    if (userType != null)
                    {
                        if (isFirst)
                        {
                            conditionQuery += "AND ";
                        }
                        conditionQuery += "UserInfo.TypeShortName = '" + userType + "' ";
                        isFirst = true;
                    }

                    if (role != null)
                    {
                        if (isFirst)
                        {
                            conditionQuery += "AND ";
                        }
                        conditionQuery += "Account.Role = " + role + " ";
                        isFirst = true;
                    }

                    if (active != null)
                    {
                        if (isFirst)
                        {
                            conditionQuery += "AND ";
                        }
                        conditionQuery += "UserInfo.IsActive = " + active + " ";
                    }
                }

                int minRowNum = ((page_ - 1) * amountPerPage_) + 1;
                int maxRowNum = page_ * amountPerPage_;
                query += conditionQuery;
                query += ") AS UI WHERE UI.RowNum BETWEEN " + minRowNum + " AND " + maxRowNum + " ";

                SqlCommand countCmd = new SqlCommand(countQuery + conditionQuery, userInfoAdapter.Connection);
                SqlCommand getDataCmd = new SqlCommand(query, userInfoAdapter.Connection);
                SqlDataAdapter getDataAdapter = new SqlDataAdapter(getDataCmd);

                userInfoAdapter.Connection.Open();
                int count = (int)countCmd.ExecuteScalar();

                getDataAdapter.Fill(userDT);

                int maxPage = (count / amountPerPage_);
                if (count % amountPerPage_ != 0)
                {
                    maxPage++;
                }

                ViewBag.maxPage = maxPage;
                if (page_ > maxPage)
                {
                    page_ = maxPage;
                }

                ViewBag.curPage = page_;
                ViewBag.amountPerPage = amountPerPage_;

                ViewBag.roleList = AccountInfo.GetRoleListVnese();

                DataTable userTypeDT = new UserTypeTableAdapter().GetData();
                List<KeyValuePair<string, string>> userTypes = new List<KeyValuePair<string, string>>();
                foreach (DataRow row in userTypeDT.Rows)
                {
                    userTypes.Add(new KeyValuePair<string, string>(row.Field<string>("TypeShortName"), row.Field<string>("TypeName")));
                }
                ViewBag.userTypes = userTypes;
            }
            catch (Exception ex)
            {
                Log.ErrorLog(ex.Message);
                return View("Error");
            }

            return View(userDT);
        }
        public ActionResult EditUser(string username)
        {
            UserTypeTableAdapter userTypeAdapter = new UserTypeTableAdapter();
            DataTable userTypeDT = userTypeAdapter.GetData();

            List<SelectListItem> items = new List<SelectListItem>();
            foreach (DataRow row in userTypeDT.Rows)
            {
                items.Add(new SelectListItem { Text = row["TypeName"].ToString(), Value = row["TypeShortName"].ToString() });
            }
            ViewData["UserType"] = items;

            EditUserModel userInfo = new EditUserModel();
            UserInfoDetailTableAdapter userinfoAdapter = new UserInfoDetailTableAdapter();
            DataTable userinfoDataTable = userinfoAdapter.GetDataByUsername(username);

            try
            {
                userInfo.Username = username;
                userInfo.Name = userinfoDataTable.Rows[0]["Name"].ToString();
                userInfo.UserTypeID = (string)userinfoDataTable.Rows[0]["TypeShortName"];
                userInfo.Email = userinfoDataTable.Rows[0]["Email"].ToString();
                userInfo.Role = (int)userinfoDataTable.Rows[0]["Role"];
                userInfo.isActive = (bool)userinfoDataTable.Rows[0]["IsActive"];

                return View(userInfo);
            }
            catch (Exception ex)
            {
                Log.ErrorLog(ex.Message);
                return RedirectToAction("Error", "Error");
            }
        }
        public ActionResult DetailUser(string username)
        {
            UserinfoModel userinfo = new UserinfoModel();
            UserInfoDetailTableAdapter userinfoAdapter = new UserInfoDetailTableAdapter();
            DataTable userinfoDataTable = userinfoAdapter.GetDataByUsername(username);
            DateTime date = DateTime.Parse(userinfoDataTable.Rows[0]["LastUpdatedMoney"].ToString());
            int amountOfMoney = (int)userinfoDataTable.Rows[0]["AmountOfMoney"];

            TransactionHistoryTableAdapter transactionAdapter = new TransactionHistoryTableAdapter();
            int? money = transactionAdapter.GetCurrentMoney(username, date);
            if (money == null)
            {
                money = 0;
            }

            amountOfMoney += money.Value;

            userinfo.Username = username;
            userinfo.Name = userinfoDataTable.Rows[0]["Name"].ToString();
            userinfo.TypeName = (string)userinfoDataTable.Rows[0]["TypeName"];
            userinfo.Email = userinfoDataTable.Rows[0]["Email"].ToString();
            userinfo.AmountOfMoney = amountOfMoney;
            userinfo.Role = (int)userinfoDataTable.Rows[0]["Role"];

            return View(userinfo);
        }