public HttpResponseMessage UpdateAccount(HttpRequestMessage request, [FromBody] UserModel accountModel)
        {
            return(GetHttpResponse(request, () =>
            {
                HttpResponseMessage response = null;
                UserSetup account = null;

                var securityMode = ConfigurationManager.AppSettings["SecurityMode"].ToString();
                var clientcode = Convert.ToString(ConfigurationManager.AppSettings["ClientCode"]);

                // revalidate all steps to ensure this operation is secure against hacks
                if (accountModel.UserSetup.UserSetupId <= 0)
                {
                    if (securityMode == "UP")
                    {
                        _SecurityAdapter.Initialize();
                        _SecurityAdapter.Register(accountModel.UserSetup.LoginID, "@password",
                                                  propertyValues: new
                        {
                            Name = accountModel.UserSetup.Name,
                            Email = accountModel.UserSetup.Email,
                            MultiCompanyAccess = accountModel.UserSetup.MultiCompanyAccess,
                            LatestConnection = DateTime.Now,
                            Deleted = false,
                            Active = true,
                            CreatedBy = User.Identity.Name,
                            CreatedOn = DateTime.Now,
                            UpdatedBy = User.Identity.Name,
                            UpdatedOn = DateTime.Now,

                            Mis_Code = accountModel.UserSetup.Mis_Code,
                            Grade = accountModel.UserSetup.Grade,
                            ManagerID = accountModel.UserSetup.ManagerID,
                            Segment = accountModel.UserSetup.Segment,
                            DateEmployed = accountModel.UserSetup.DateEmployed,
                        });


                        account = _CoreService.GetUserSetupByLoginID(accountModel.UserSetup.LoginID);
                    }
                    else
                    {
                        ////=========== another sample ==================
                        //DirectoryEntry de = new DirectoryEntry(ConfigurationManager.AppSettings.Get("ADPath"));
                        //de.Username = ConfigurationManager.AppSettings.Get("ADServiceAccount");
                        //de.Password = ConfigurationManager.AppSettings.Get("ADServiceAccountPassword");
                        //de.AuthenticationType = AuthenticationTypes.FastBind;
                        //DirectorySearcher dssearch = new DirectorySearcher(de);
                        //dssearch.Filter = "(CN=" + Session["username"].ToString() + ")";
                        //SearchResult sresult = dssearch.FindOne();
                        //DirectoryEntry dsresult = sresult.GetDirectoryEntry();
                        //lblfname.Text = dsresult.Properties["displayName"][0].ToString();
                        //lbltitle.Text = dsresult.Properties["title"][0].ToString();
                        //lbllname.Text = dsresult.Properties["telephonenumber"][0].ToString();
                        //lblemail.Text = dsresult.Properties["mobile"][0].ToString();
                        ////=========== another sample ends =============

                        //string connection = ConfigurationManager.ConnectionStrings["ADConnectionString"].ToString();
                        //appLog.InfoFormat("declaring connection with connection name: ADConnectionString");

                        //System.DirectoryServices.DirectorySearcher dssearch = new System.DirectoryServices.DirectorySearcher(connection);
                        //appLog.InfoFormat("calling DirectorySearcher(x) method to pass the AD connection to the declared DirectorySearcher property: dssearch");
                        ////dssearch.Filter = username;
                        ////dssearch.Filter = "fintrakbusiness";
                        ////dssearch.Filter = "(CN=" + Session["username"].ToString() + ")";
                        ////dssearch.Filter = "(CN=MyName)";
                        ////dssearch.Filter = "(sAMAccountName=" + txtusername.Text + ")";
                        //dssearch.Filter = "(sAMAccountName=" + "fintrack" + ")";
                        //appLog.InfoFormat("passing sAMAccountName fintrack to dssearch.Filter.");

                        ////dssearch.Filter = "(CN=" + "fintrack" + ")";
                        //System.DirectoryServices.SearchResult sresult = dssearch.FindOne();
                        //appLog.InfoFormat("calling FindOne()");
                        //System.DirectoryServices.DirectoryEntry dsresult = sresult.GetDirectoryEntry();
                        //appLog.InfoFormat("calling GetDirectoryEntry()");

                        //string firstname = dsresult.Properties["givenName"][0].ToString();
                        //string lastname = dsresult.Properties["sn"][0].ToString();  //sn means surname
                        ////accountModel.UserSetup.Name = firstname + " " + lastname;

                        ////accountModel.UserSetup.Email = dsresult.Properties["mail"][0].ToString();
                        //////string initials = dsresult.Properties["initials"][0].ToString();
                        //////string displayName = dsresult.Properties["displayName"][0].ToString();
                        //////string mobile = dsresult.Properties["mobile"][0].ToString();
                        ////accountModel.UserSetup.LoginID = dsresult.Properties["sAMAccountName"][0].ToString();

                        //string empid = dsresult.Properties["employeeID"][0].ToString();
                        //string empno = dsresult.Properties["employeeNumber"][0].ToString();
                        ////accountModel.UserSetup.StaffID = empid + "" + empno;


                        accountModel.UserSetup.LatestConnection = DateTime.Now;
                        accountModel.UserSetup.Active = true;
                        accountModel.UserSetup.Deleted = false;
                        accountModel.UserSetup.CreatedBy = User.Identity.Name;
                        accountModel.UserSetup.CreatedOn = DateTime.Now;
                        accountModel.UserSetup.UpdatedBy = User.Identity.Name;
                        accountModel.UserSetup.UpdatedOn = DateTime.Now;

                        account = _CoreService.UpdateUserSetup(accountModel.UserSetup);
                    }

                    //create default role
                    _CoreService.AssignDefaultRole(account);
                }
                else
                {
                    account = _CoreService.UpdateUserSetup(accountModel.UserSetup);
                }

                var existingUserRoles = _CoreService.GetUserRoleByLoginID(account.LoginID);

                foreach (var userRole in existingUserRoles)
                {
                    _CoreService.DeleteUserRole(userRole.UserRoleId);
                }

                foreach (var userRole in accountModel.Roles)
                {
                    if (userRole.RoleId > 0)
                    {
                        var newUserRole = new UserRole()
                        {
                            UserSetupId = account.UserSetupId,
                            RoleId = userRole.RoleId
                        };

                        _CoreService.UpdateUserRole(newUserRole);
                    }
                }

                foreach (var userRole in accountModel.ReportRoles)
                {
                    if (userRole.RoleId > 0)
                    {
                        var newUserRole = new UserRole()
                        {
                            UserSetupId = account.UserSetupId,
                            RoleId = userRole.RoleId
                        };

                        _CoreService.UpdateUserRole(newUserRole);
                    }
                }

                //Companies
                var existingUserCompanies = _CoreService.GetCompanyUserByLogin(account.LoginID);

                foreach (var userCompany in accountModel.UserCompanies)
                {
                    var existingUserCompany = existingUserCompanies.Where(c => c.CompanyCode == userCompany.CompanyCode).FirstOrDefault();

                    if (existingUserCompany == null)
                    {
                        var newUserCompany = new CompanyUser()
                        {
                            UserId = account.UserSetupId,
                            CompanyCode = userCompany.CompanyCode,
                            Active = true
                        };

                        if (userCompany.IsChecked)
                        {
                            _CoreService.UpdateCompanyUser(newUserCompany);
                        }
                    }
                    else
                    {
                        if (!userCompany.IsChecked)
                        {
                            _CoreService.DeleteCompanyUser(existingUserCompany.CompanyUserId);
                        }
                    }
                }

                response = request.CreateResponse <UserSetup>(HttpStatusCode.OK, account);

                return response;
            }));
        }