public ActionResult ChangePassword(ChangePasswordModel PasswordModel, string command)
 {
     if (string.IsNullOrEmpty(command))
     {
         if (ModelState.IsValid)
         {
             bool PasswordChangedSucceeded = false;
             try
             {
                 if (PasswordModel.NewPassword == PasswordModel.ConfirmNewPassword && Regex.Match(PasswordModel.NewPassword, @"^.*(?=.{6,20})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=]).*$").Success)
                 {
                     var            md5HashOld  = CustomMembershipProvider.GetMd5Hash(PasswordModel.OldPassword);
                     var            md5HashNew  = CustomMembershipProvider.GetMd5Hash(PasswordModel.NewPassword);
                     MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);
                     PasswordChangedSucceeded = currentUser.ChangePassword(md5HashOld, md5HashNew);
                 }
                 else if (!Regex.Match(PasswordModel.NewPassword, @"^.*(?=.{6,20})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=]).*$").Success)
                 {
                     TempData["AlertMessage"] = "Password must be 6 to 20 alphanumeric characters including one uppercase letter, one lowercase letter and one special character.";
                     return(View(PasswordModel));
                 }
                 else
                 {
                     TempData["AlertMessage"] = "Confirm Password does not match with new Password.";
                     return(View(PasswordModel));
                 }
             }
             catch (Exception)
             {
                 PasswordChangedSucceeded = false;
             }
             if (PasswordChangedSucceeded)
             {
                 FormsAuthentication.SignOut();
                 Session.Abandon();
                 return(RedirectToAction("Login", "Account", new { isChanged = "1" }));
             }
             else
             {
                 ModelState.AddModelError("OldPassword", "The current password is incorrect.");
             }
         }
         //when something went wrong then return view with model
         return(View(PasswordModel));
     }
     else
     {
         ModelState.Clear();
         return(RedirectToAction("Index", "Home"));
     }
 }
        public ActionResult Create(UsersModel model, string command, FormCollection fm)
        {
            var currentLoggedUserId = Convert.ToInt64(Membership.GetUser().ProviderUserKey);
            var CurrentUserRoleID   = objContext.UserRoles.Where(x => x.UserID == currentLoggedUserId).FirstOrDefault().RoleID;

            if (CurrentUserRoleID > 2)//if not super admin and sub admin then redirect to home
            {
                return(RedirectToAction("Index", "Home"));
            }

            var EncryptUserID = EncryptDecrypt.Encrypt(model.UserID.ToString());

            var rvd = new RouteValueDictionary();

            rvd.Add("Column", Request.QueryString["Column"] != null ? Request.QueryString["Column"].ToString() : "UserCreateDate");
            rvd.Add("Direction", Request.QueryString["Direction"] != null ? Request.QueryString["Direction"].ToString() : "Descending");
            rvd.Add("pagesize", Request.QueryString["pagesize"] != null ? Request.QueryString["pagesize"].ToString() : Models.Common._pageSize.ToString());
            rvd.Add("page", Request.QueryString["page"] != null ? Request.QueryString["page"].ToString() : Models.Common._currentPage.ToString());
            ViewBag.Title = ViewBag.PageTitle = (model.UserID > 0 ? "Edit " : "Add ") + " User Details ";

            ViewBag.Submit         = model.UserID > 0 ? "Update" : "Save";
            ViewBag.CreateDate     = DateTime.Now.ToShortDateString();
            ViewBag.UserCreateDate = DateTime.Now.ToShortDateString();

            #region System Change Log
            DataTable dtOld;
            var       oldresult = (from a in objContext.Users
                                   where a.UserID == model.UserID
                                   select a).ToList();
            dtOld = KISD.Areas.Admin.Models.Common.LINQResultToDataTable(oldresult);
            #endregion

            var objDBContent = new db_KISDEntities();
            var objctUser    = new User();
            ViewBag.IsActiveInd = Models.Common.GetStatusListBoolean(model.Status.ToString());
            ViewBag.UserID      = model.UserID;
            ViewBag.isValid     = "1";
            ViewBag.RolesList   = GetAllUserType(currentLoggedUserId);
            ViewBag.UserTypeID  = model.UserRoleID;
            if (string.IsNullOrEmpty(command))
            {
                if (model.UserID > 0)
                {
                    objctUser = objDBContent.Users.Where(x => x.UserID == model.UserID).FirstOrDefault();
                }

                model.DepartmentUsersList = GetDepartments();


                var UserNameCount = objDBContent.Users.Where(x => x.UserNameTxt.ToLower().Trim() == model.UserNameTxt.ToLower().Trim() && x.UserID != model.UserID).Count();
                if (UserNameCount > 0)
                {
                    var selectedDepts = objContext.UserDepartments.Where(m => m.UserID == model.UserID).Select(m => m.DepartmentID).ToArray();
                    model.SelectedDepartment = Array.ConvertAll <long, string>(selectedDepts,
                                                                               delegate(long i)
                    {
                        return(i.ToString());
                    });

                    ModelState.AddModelError("UserNameTxt", "Username already exists.");
                    ViewBag.isValid = "0";
                    return(View(model));
                }

                objctUser.FirstNameTxt = model.FirstName;
                objctUser.LastNameTxt  = model.LastName;
                objctUser.UserNameTxt  = model.UserNameTxt;
                objctUser.EmailTxt     = model.Email;
                //  objctUser.PasswordTxt = !string.IsNullOrEmpty(model.Password)? CustomMembershipProvider.GetMd5Hash(model.Password): objctUser.PasswordTxt;
                objctUser.PasswordTxt = (!string.IsNullOrEmpty(model.ChangedPassword) ? CustomMembershipProvider.GetMd5Hash(model.ChangedPassword) :
                                         (!string.IsNullOrEmpty(model.Password) ? CustomMembershipProvider.GetMd5Hash(model.Password) : objctUser.PasswordTxt)
                                         );

                objctUser.StatusInd      = Convert.ToBoolean(fm["IsActiveInd"]);
                objctUser.IsDeletedInd   = false;
                objctUser.CreateDate     = DateTime.Now;
                objctUser.UserCreateDate = model.UserID > 0 ? objctUser.CreateDate : model.UserCreateDate;
                objctUser.CreateByID     = model.UserID > 0 ? objctUser.CreateByID : Convert.ToInt64(Membership.GetUser().ProviderUserKey);
                objctUser.LastModifyByID = Convert.ToInt64(Membership.GetUser().ProviderUserKey);
                objctUser.LastModifyDate = DateTime.Now;
                if (model.UserID == 0)
                {
                    objDBContent.Users.Add(objctUser);
                    var UserID = model.UserID != 0 ? model.UserID : objctUser.UserID;
                    var obj    = new UserRole();
                    obj.UserID = Convert.ToInt32(UserID);
                    obj.RoleID = Convert.ToInt16(model.UserRoleID);
                    objDBContent.UserRoles.Add(obj);
                    objDBContent.SaveChanges();
                }
                else
                {
                    var UserID = model.UserID != 0 ? model.UserID : objctUser.UserID;
                    var obj    = new UserRole();
                    obj        = objDBContent.UserRoles.Where(x => x.UserID == model.UserID).FirstOrDefault();
                    obj.RoleID = Convert.ToInt16(model.UserRoleID);
                }
                try
                {
                    objDBContent.SaveChanges();
                    var newUserID = objctUser.UserID;

                    #region System Change Log
                    SystemChangeLog objSCL  = new SystemChangeLog();
                    long            userid  = Convert.ToInt64(Membership.GetUser().ProviderUserKey);
                    User            objuser = objContext.Users.Where(x => x.UserID == userid).FirstOrDefault();
                    objSCL.NameTxt     = objuser.FirstNameTxt + " " + objuser.LastNameTxt;
                    objSCL.UsernameTxt = objuser.UserNameTxt;
                    objSCL.UserRoleID  = (short)objContext.UserRoles.Where(x => x.UserID == objuser.UserID).First().RoleID;
                    objSCL.ModuleTxt   = "Users";
                    objSCL.LogTypeTxt  = model.UserID > 0 ? "Update" : "Add";
                    objSCL.NotesTxt    = "User Details" + (objctUser.UserID > 0 ? " updated for " : "  added for ") + objctUser.FirstNameTxt + " " + objctUser.LastNameTxt;
                    objSCL.LogDateTime = DateTime.Now;
                    objContext.SystemChangeLogs.Add(objSCL);
                    objContext.SaveChanges();

                    objSCL = objContext.SystemChangeLogs.OrderByDescending(x => x.ChangeLogID).FirstOrDefault();
                    var newResult = (from x in objContext.Users
                                     where x.UserID == newUserID
                                     select x);
                    DataTable dtNew = Models.Common.LINQResultToDataTable(newResult);
                    foreach (DataColumn col in dtNew.Columns)
                    {
                        if (dtOld.Rows.Count > 0)
                        {
                            if (dtOld.Rows[0][col.ColumnName].ToString() != dtNew.Rows[0][col.ColumnName].ToString())
                            {
                                SystemChangeLogDetail objSCLD = new SystemChangeLogDetail();
                                objSCLD.ChangeLogID  = objSCL.ChangeLogID;
                                objSCLD.FieldNameTxt = col.ColumnName.ToString();
                                objSCLD.OldValueTxt  = dtOld.Rows[0][col.ColumnName].ToString();
                                objSCLD.NewValueTxt  = dtNew.Rows[0][col.ColumnName].ToString();
                                objContext.SystemChangeLogDetails.Add(objSCLD);
                                objContext.SaveChanges();
                            }
                        }
                    }
                    #endregion

                    #region Save Department Users
                    if (model.UserRoleID == 3)
                    {
                        var objUserDept = objContext.UserDepartments.Where(x => x.UserID == objctUser.UserID).ToList();
                        if (objUserDept.Count > 0)
                        {
                            foreach (var s in objUserDept)
                            {
                                objContext.UserDepartments.Remove(s);
                                objContext.SaveChanges();
                            }
                        }

                        if (model.SelectedDepartment != null)
                        {
                            foreach (var list in model.SelectedDepartment)
                            {
                                UserDepartment objUserDepartment = new UserDepartment();
                                objUserDepartment.DepartmentID = Convert.ToInt64(list);
                                objUserDepartment.UserID       = model.UserID;
                                objUserDepartment.CreateDate   = DateTime.Now;
                                objContext.UserDepartments.Add(objUserDepartment);
                                objContext.SaveChanges();
                            }
                        }
                    }
                    else
                    {
                        var objUserDept = objContext.UserDepartments.Where(x => x.UserID == objctUser.UserID).ToList();
                        if (objUserDept.Count > 0)
                        {
                            foreach (var s in objUserDept)
                            {
                                objContext.UserDepartments.Remove(s);
                                objContext.SaveChanges();
                            }
                        }

                        var objUserPermissions = objContext.UserPermissions.Where(x => x.UserID == objctUser.UserID).ToList();
                        if (objUserPermissions != null && objUserPermissions.Count > 0)
                        {
                            foreach (var up in objUserPermissions)
                            {
                                objContext.UserPermissions.Remove(up);
                            }
                            objContext.SaveChanges();
                        }
                    }
                    #endregion

                    TempData["AlertMessage"] = "User details " + ((objctUser.UserID == 0) ? "saved" : "updated") + " successfully.";
                }
                catch (Exception ex)
                {
                    TempData["AlertMessage"] = "Some error occured. Please try after some time.";
                }
            }
            return(RedirectToAction("Index", "UsersManagement", rvd));
        }