let promises = shopifyProduct.variants.map(variant => { let catalogItemId = linq(variant.metafields) .firstOrDefault(x => {return x.key === app.nconf.get('iq_settings:mappingFieldName')}).value; let pricing = getPricingFromVariant(catalogItemId, variant); return iqPricingController.createPricing(pricing); });
return shopifyMetafieldController.retrieveMetaFields(resourceName, resource.id).then(metafields => { resource.metafields = metafields; return { mapped: linq(metafields).any(x => {return x.key === app.nconf.get('iq_settings:mappingFieldName')}), value: resource }; });
return new Promise(resolve => { let catalogItemId = linq(variant.metafields) .firstOrDefault(x => {return x.key === app.nconf.get('iq_settings:mappingFieldName')}).value; let availability = getAvailabilityFromVariant(catalogItemId, variant); resolve(iqAvailabilityController.createAvailability(availability)); });
return new Promise(resolve => { let catalogItemId = linq(variant.metafields) .firstOrDefault(function(x) {return x.key === app.nconf.get('iq_settings:mappingFieldName')}).value; iqCatalogItemController.retrieveProductDetails(catalogItemId).then(productDetails => { iqVariationController.updateVariation(productDocId, variationToUpdate, productDetails.VariationId).then(variation => { console.log('Variation update completed for ' + variant.id); resolve(variation); }); }); });
results.map(image => { //Success if(image.state === 'fulfilled'){ //Determine if assets need to be created in iQmetrix let asset = linq(assets).firstOrDefault(x => {return x.name === image.value.name && x.md5Checksum == image.value.checksum}); if (asset){ existingAssets.push(asset); }else{ newImages.push(image.value); } } //Failure if(image.state === 'rejected'){ console.log(colors.red(asset.reason)); } });
/** * Updates a shopify product for iQmetrix. * * NOTE: * shopifyProduct must have 'metafields' property added to it prior to function. * Mapping variables must be initialized. * * @param {Object} shopifyProduct Product to update */ function updateProductLoaded(shopifyProduct){ let catalogItemId = linq(shopifyProduct.metafields).firstOrDefault(x => {return x.key === app.nconf.get('iq_settings:mappingFieldName')}).value; iqCatalogItemController.retrieveProductDetails(catalogItemId).then(productDetails => { //Get the assets on the iQmetrix product (with checksum) let assets = productDetails.Assets.map(asset => { return new Promise(resolve => { iqAssetController.retrieveAsset(asset.Id).then(result => { resolve(result); }); }); }); Promise.all(assets).then(assets => { //Download and generate hash values for all shopify images let promises = shopifyProduct.images.map(image => { return new Promise(resolve => { file.download(image.src).then(fileName => { md5File(app.rootDirectory + `\\${fileName}`).then(hash => { resolve({ name: fileName, src: image.src, checksum: hash }); }) }) }) }); let existingAssets = []; let newImages = []; q.allSettled(promises).then(results => { results.map(image => { //Success if(image.state === 'fulfilled'){ //Determine if assets need to be created in iQmetrix let asset = linq(assets).firstOrDefault(x => {return x.name === image.value.name && x.md5Checksum == image.value.checksum}); if (asset){ existingAssets.push(asset); }else{ newImages.push(image.value); } } //Failure if(image.state === 'rejected'){ console.log(colors.red(asset.reason)); } }); //Create new assets let newAssetPromises = newImages.map(image => { return new Promise(resolve => { iqAssetController.createAsset(image.name).then(asset => { resolve(asset); }) }) }); let newAssets = []; q.allSettled(newAssetPromises).then(results => { results.map(asset => { //Success if(asset.state === 'fulfilled'){ newAssets.push({ Id: asset.value.id, Name: asset.value.name, MimeType: asset.value.mimeType }); } //Failure if(asset.state === 'rejected'){ console.log(colors.red(asset.reason)); } }); //Build Master Product let masterProduct = { FieldValues: [ { FieldDefinitionId: app.nconf.get('fieldMapping:title'), LanguageInvariantValue: shopifyProduct.title }, { FieldDefinitionId: app.nconf.get('fieldMapping:body_html'), LanguageInvariantValue: shopifyProduct.body_html } ], Assets: newAssets } return iqMPController.updateMasterProduct(masterProduct, productDetails.MasterProductId); }).then(masterProduct => { otherProductAdjustments(shopifyProduct, productDetails.MasterProductId).then(() => { console.log('Product update for', shopifyProduct.id, 'complete'); }); }); }); }); }); }
return shopifyProductController.list().then(result => { return linq(result).where(x => {return new Date(x.updated_at) > time}).items; });
customerController.retrieveCustomerFull(iqmetrixCustomerId).then(function (customerFull){ //Update Addresses iqmetrixAddresses = customerFull.Addresses; //Go through shopify addresses to find new ones for (var i = 0; i < shopifyAddresses.length; ++i){ var postCode = getValidPostCode(shopifyAddresses[i]); if(!linq(iqmetrixAddresses) .any(function(x) { return x.StreetAddress1 === shopifyAddresses[i].address1 && x.StreetAddress2 === shopifyAddresses[i].address2 && x.StateCode === shopifyAddresses[i].province_code && x.State === shopifyAddresses[i].province && x.PostalCode === postCode && x.CountryCode === shopifyAddresses[i].country_code && x.Country === shopifyAddresses[i].country }) ){ toCreate.push(shopifyAddresses[i]); } } //Go through iqmetrix addresses to find ones to delete for (var i = 0; i < iqmetrixAddresses.length; ++i){ if(!linq(shopifyAddresses) .any(function(x) { return iqmetrixAddresses[i].StreetAddress1 === x.address1 && iqmetrixAddresses[i].StreetAddress2 === x.address2 && iqmetrixAddresses[i].StateCode === x.province_code && iqmetrixAddresses[i].State === x.province && iqmetrixAddresses[i].PostalCode === postCode && iqmetrixAddresses[i].CountryCode === x.country_code && iqmetrixAddresses[i].Country === x.country }) ){ toDelete.push(iqmetrixAddresses[i]); } } //Do all creations and deletions for addresses necessary for (var i = 0; i < toCreate.length; ++i){ addressController.createAddress(iQAddressFromShopifyAddress(toCreate[i], shopifyCustomer.email, customerFull.Id)); } for (var i = 0; i < toDelete.length; ++i){ addressController.deleteAddress(toDelete[i]); } //Update customer itself if(customerFull.PrimaryName !== shopifyCustomer.first_name || customerFull.FamilyName !== shopifyCustomer.last_name ){ customerController.updateCustomer({ Id: customerFull.Id, CustomerTypeId: customerTypeId, PrimaryName: shopifyCustomer.first_name, FamilyName: shopifyCustomer.last_name }); } console.log('All Customer Update calls made for ' + shopifyCustomer.id); });
return shopifyCustomerController.search().then(function(result){ return linq(result).where(function(x) {return new Date(x.updated_at) > time}).items; });
return addressController.retrieveAddressTypes().then(function(result){ return linq(result).firstOrDefault(function(x) {return x.Name === app.nconf.get('iq_settings:addressType')}); }).then(function(result){
return customerController.retrieveCustomerTypes().then(function(result){ return linq(result).firstOrDefault(function(x) {return x.Name === app.nconf.get('iq_settings:customerType')}); }).then(function(result){