/// <summary>
        /// Generates an XML document for the given user.
        /// </summary>
        /// <param name="user">The user instance for which the XML should be generated.</param>
        /// <param name="settings">A settings object to drive the rendering.</param>
        internal string RenderUserXml(User user, RenderUserSettings settings)
        {
            var xmlDocument = BuildXmlDocument();
            var tablesNode  = CreateAndAppendTablesNode(xmlDocument, settings);

            tablesNode.AppendChild(BuildUserXml(xmlDocument, user, settings));
            tablesNode.AppendChild(BuildSystemFields(xmlDocument, user));
            tablesNode.AppendChild(BuildUserAddressesXml(xmlDocument, user));
            if (settings.Beautify)
            {
                return(xmlDocument.Beautify());
            }
            return(xmlDocument.InnerXml);
        }
        private static XmlNode BuildUserXml(XmlDocument xmlDocument, User user, RenderUserSettings settings)
        {
            var tableNode = CreateTableNode(xmlDocument, "AccessUser");
            var itemNode  = CreateAndAppendItemNode(tableNode, "AccessUser");

            itemNode.SetAttribute("userMode", settings.UserSyncMode.ToString());

            AddChildXmlNode(itemNode, "AccessUserId", user.ID.ToString());
            AddChildXmlNode(itemNode, "AccessUserCustomerNumber", user.CustomerNumber);
            AddChildXmlNode(itemNode, "AccessUserExternalId", user.ExternalID);
            AddChildXmlNode(itemNode, "AccessUserUserName", user.UserName);
            AddChildXmlNode(itemNode, "AccessUserName", user.Name);
            AddChildXmlNode(itemNode, "AccessUserTitle", user.Title);
            AddChildXmlNode(itemNode, "AccessUserFirstName", user.FirstName);
            AddChildXmlNode(itemNode, "AccessUserMiddleName", user.MiddleName);
            AddChildXmlNode(itemNode, "AccessUserLastName", user.LastName);
            AddChildXmlNode(itemNode, "AccessUserDepartment", user.Department);
            AddChildXmlNode(itemNode, "AccessUserEmail", user.Email);
            AddChildXmlNode(itemNode, "AccessUserPhone", user.Phone);
            AddChildXmlNode(itemNode, "AccessUserFax", user.Fax);
            AddChildXmlNode(itemNode, "AccessUserType", user.UserType.ToString());
            AddChildXmlNode(itemNode, "AccessUserValidFrom", user.ValidFrom.ToIntegrationString());
            AddChildXmlNode(itemNode, "AccessUserValidTo", user.ValidTo.ToIntegrationString());
            AddChildXmlNode(itemNode, "AccessUserAddress", user.Address);
            AddChildXmlNode(itemNode, "AccessUserAddress2", user.Address2);
            AddChildXmlNode(itemNode, "AccessUserHouseNumber", user.HouseNumber);
            AddChildXmlNode(itemNode, "AccessUserZip", user.Zip);
            AddChildXmlNode(itemNode, "AccessUserCity", user.City);
            AddChildXmlNode(itemNode, "AccessUserState", user.State);
            AddChildXmlNode(itemNode, "AccessUserCountry", user.Country);
            AddChildXmlNode(itemNode, "AccessUserJobTitle", user.JobTitle);
            AddChildXmlNode(itemNode, "AccessUserCompany", user.Company);
            AddChildXmlNode(itemNode, "AccessUserPhonePrivate", user.PhonePrivate);
            AddChildXmlNode(itemNode, "AccessUserMobile", user.PhoneMobile);
            AddChildXmlNode(itemNode, "AccessUserCurrencyCode", user.Currency);
            AddChildXmlNode(itemNode, "AccessUserActive", user.Active.ToString());
            AddChildXmlNode(itemNode, "AccessUserImage", user.Image);
            AddChildXmlNode(itemNode, "AccessUserBusiness", user.PhoneBusiness);
            AddChildXmlNode(itemNode, "AccessUserShopId", user.ShopID);
            AddChildXmlNode(itemNode, "AccessUserPointBalance", user.PointBalance.ToIntegrationString());
            AddChildXmlNode(itemNode, "AccessUserGeoLocationLat", user.GeolocationLatitude.ToIntegrationString(6));
            AddChildXmlNode(itemNode, "AccessUserGeoLocationLng", user.GeolocationLongitude.ToIntegrationString(6));
            AddChildXmlNode(itemNode, "AccessUserGeoLocationIsCustom", user.IsGeolocationCustom.ToString());
            AddChildXmlNode(itemNode, "AccessUserGeoLocationHash", user.GeolocationHashCode);
            AddChildXmlNode(itemNode, "AccessUserGeoLocationImage", user.GeolocationIcon);
            AddChildXmlNode(itemNode, "AccessUserNewsletterAllowed", user.EmailAllowed.ToString());
            AddChildXmlNode(itemNode, "AccessUserCreatedOn", user.CreatedOn?.ToIntegrationString() ?? string.Empty);
            AddChildXmlNode(itemNode, "AccessUserUpdatedOn", user.UpdatedOn?.ToIntegrationString() ?? string.Empty);
            AddChildXmlNode(itemNode, "AccessUserCreatedBy", user.CreatedByUser);
            AddChildXmlNode(itemNode, "AccessUserUpdatedBy", user.UpdatedByUser);
            AddChildXmlNode(itemNode, "AccessUserEmailPermissionGivenOn", user.EmailPermissionGivenOn?.ToIntegrationString() ?? string.Empty);
            AddChildXmlNode(itemNode, "AccessUserEmailPermissionUpdatedOn", user.EmailPermissionUpdatedOn?.ToIntegrationString() ?? string.Empty);
            AddChildXmlNode(itemNode, "AccessUserVatRegNumber", user.VatRegNumber);
            AddChildXmlNode(itemNode, "AccessUserDisableLivePrices", user.IsLivePricesDisabled.ToString());
            AddChildXmlNode(itemNode, "AccessUserLastLoginOn", user.LastLogOnOn?.ToIntegrationString() ?? string.Empty);
            AddChildXmlNode(itemNode, "AccessUserExported", user.Exported?.ToIntegrationString() ?? string.Empty);

            RenderCustomFields(itemNode, user);

            tableNode.AppendChild(itemNode);
            return(tableNode);
        }
 internal static string BuildUserRequest(User user, RenderUserSettings renderUserSettings)
 {
     return(new UserXmlRenderer().RenderUserXml(user, renderUserSettings));
 }