public static io.Data.Return<bool> SetPassword(int userSessionKey, int entityContactKey, string newPassword, string oldPassword, bool compareOldPassword)
        {
            const string functionName = _className + ".SetPassword()";

            var validPasswordResult = ValidPassword(newPassword);

            if (validPasswordResult.Failed)
                return new io.Data.Return<bool>(io.Constants.FAILURE, validPasswordResult.Message, "", io.Constants.NO);

            using (Databases.io_contacts.Tables.EntityContacts rows = new Databases.io_contacts.Tables.EntityContacts(entityContactKey))
            {
                if (rows.QueryResult.Failed)
                    return new io.Data.Return<bool>(io.Constants.FAILURE, "Unable to change password, contact Administrator.", rows.QueryResult.Message, false).LogResult(Constants.SystemInstallKey, Constants.SystemKey, Constants.AppKey, userSessionKey, (int)ErrorCodes.QueryContactFailed, functionName);

                if (rows.Count == 0)
                    return new io.Data.Return<bool>(io.Constants.FAILURE, "Unable to change password, contact Administrator.", rows.QueryResult.Message, false).LogResult(Constants.SystemInstallKey, Constants.SystemKey, Constants.AppKey, userSessionKey, (int)ErrorCodes.QueryContactNoResult, functionName);

                if (compareOldPassword)
                {
                    if (rows[0].Password != GenerateHash(oldPassword, rows[0].EntityContactKey.ToString()))
                        return new io.Data.Return<bool>(io.Constants.FAILURE, "Invalid Password", "", false);
                }

                rows[0].Password = GenerateHash(newPassword, rows[0].EntityContactKey.ToString());
                rows[0].PasswordExpired = false;

                var updateResult = rows[0].UpdateRow();

                if (updateResult.Failed)
                    return new io.Data.Return<bool>(io.Constants.FAILURE, "Error changing password contact the administrator.", "", false).LogResult(Constants.SystemInstallKey, Constants.SystemKey, Constants.AppKey, userSessionKey, (int)ErrorCodes.UpdatePasswordChangedFailed, functionName);

                return new io.Data.Return<bool>(io.Constants.SUCCESS, "Password changed successfully.", "", true).LogResult(Constants.SystemInstallKey, Constants.SystemKey, Constants.AppKey, userSessionKey, (int)ErrorCodes.PasswordChangedSuccess, functionName);
            }
        }
        internal static io.Data.Return<DataContracts.ResetPasswordData> ResetPassword(DataContracts.ResetPasswordData passwordData)
        {
            const string functionName = _className + ".ResetPassword()";

            if (!passwordData.IsValid())
                return new io.Data.Return<DataContracts.ResetPasswordData>(io.Constants.FAILURE, "Check required fields", "", passwordData);

            Guid validGUID;
            if (!Guid.TryParse(passwordData.UID.Value.ToString(), out validGUID))
                return new io.Data.Return<DataContracts.ResetPasswordData>(io.Constants.FAILURE, "Check required fields", "", passwordData);

            if (passwordData.NewPassword.Value != passwordData.RepeatPassword.Value)
                return new io.Data.Return<DataContracts.ResetPasswordData>(io.Constants.FAILURE, "New Password must match", "", passwordData);

            var where = "(UID = '" + validGUID.ToString() + "')";
            int entityContactKey = 20;

            using (var rows = new Databases.io_contacts.Tables.EntityContacts(where, ""))
            {
                if (rows.QueryResult.Failed)
                    return new io.Data.Return<DataContracts.ResetPasswordData>(io.Constants.FAILURE, "Unable to change password, contact Administrator.", rows.QueryResult.Message, passwordData).LogResult(Constants.SystemInstallKey, Constants.SystemKey, Constants.AppKey, 0, (int)ErrorCodes.QueryContactFailed, functionName);

                if (rows.Count == 0)
                    return new io.Data.Return<DataContracts.ResetPasswordData>(io.Constants.FAILURE, "Unable to change password, contact Administrator.", rows.QueryResult.Message, passwordData).LogResult(Constants.SystemInstallKey, Constants.SystemKey, Constants.AppKey, 0, (int)ErrorCodes.QueryContactFailed, functionName);

                entityContactKey = rows[0].EntityContactKey;
            }

            var updatePassword = iocontacts.Modules.Administration.EntityContact.SetPassword(0, entityContactKey, passwordData.NewPassword.Value, passwordData.RepeatPassword.Value, false);

            if (updatePassword.Failed)
                return new io.Data.Return<DataContracts.ResetPasswordData>(io.Constants.FAILURE, updatePassword.Message, "", passwordData);

            return new io.Data.Return<DataContracts.ResetPasswordData>(io.Constants.SUCCESS, updatePassword.Message, "", passwordData);
        }