Ejemplo n.º 1
0
			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);
			});
Ejemplo n.º 2
0
	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
		};
	});
Ejemplo n.º 3
0
				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));
				});
Ejemplo n.º 4
0
	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);
			});
		});	
	});
Ejemplo n.º 5
0
				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));
					}
				});
Ejemplo n.º 6
0
/**
 * 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');
					});
				});
			});
		});
	});
}
Ejemplo n.º 7
0
	return shopifyProductController.list().then(result => {
		return linq(result).where(x => {return new Date(x.updated_at) > time}).items;
	});
Ejemplo n.º 8
0
	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);
	});
Ejemplo n.º 9
0
	return shopifyCustomerController.search().then(function(result){
	 	return linq(result).where(function(x) {return new Date(x.updated_at) > time}).items;
	});
Ejemplo n.º 10
0
	return addressController.retrieveAddressTypes().then(function(result){
		return linq(result).firstOrDefault(function(x) {return x.Name === app.nconf.get('iq_settings:addressType')});
	}).then(function(result){
Ejemplo n.º 11
0
	return customerController.retrieveCustomerTypes().then(function(result){
		return linq(result).firstOrDefault(function(x) {return x.Name === app.nconf.get('iq_settings:customerType')});
	}).then(function(result){