public Product(IProductVariant variantTemplate, OptionCollection optionCollection) { Mandate.ParameterNotNull(variantTemplate, "groupTemplate"); Mandate.ParameterNotNull(optionCollection, "optionCollection"); _variantTemplate = variantTemplate; _optionCollection = optionCollection; }
public Product(IProductVariant variant, ProductOptionCollection productOptions, ProductVariantCollection productVariants) { Mandate.ParameterNotNull(variant, "variantMaster"); Mandate.ParameterNotNull(productOptions, "optionCollection"); Mandate.ParameterNotNull(productVariants, "productVariants"); _variant = variant; _productOptions = productOptions; _productVariants = productVariants; }
public void Init() { _attributes = new ProductAttributeCollection() { new ProductAttribute("Att1", "Sku1") { Key = Guid.NewGuid() }, new ProductAttribute("Att2", "Sku2") { Key = Guid.NewGuid() }, new ProductAttribute("Att3", "Sku3") { Key = Guid.NewGuid() } }; _productVariant = new ProductVariant(Guid.NewGuid(), _attributes, new CatalogInventoryCollection(), false, "Product1", "P1", 11M); }
/// <summary> /// Adds the variants to the catalog. /// </summary> /// <param name="variant"> /// The variant. /// </param> private void AddToCatalog(IProductVariant variant) { var matching = this.GetOrignalMatchingVariant(variant); var catalogKeys = matching.CatalogInventories.Select(x => x.CatalogKey).ToArray(); foreach (var key in catalogKeys) { if (variant.CatalogInventories.All(x => x.CatalogKey != key)) { var catalog = _warehouseCatalogs.Value.FirstOrDefault(x => x.Key == key); if (catalog != null) variant.AddToCatalogInventory(catalog); } } }
/// <summary> /// Adds a line item to the customer item cache /// </summary> /// <param name="productVariant"> /// The product Variant. /// </param> /// <param name="name"> /// The name. /// </param> /// <param name="quantity"> /// The quantity. /// </param> /// <param name="extendedData"> /// The extended Data. /// </param> public void AddItem(IProductVariant productVariant, string name, int quantity, ExtendedDataCollection extendedData) { AddItem(productVariant.ToProductVariantDisplay(), name, quantity, extendedData); }
/// <summary> /// Calculates taxes for a product variant. /// </summary> /// <param name="context"> /// The <see cref="ITaxationContext"/>. /// </param> /// <param name="productVariant"> /// The <see cref="IProductVariant"/>. /// </param> /// <returns> /// The <see cref="ITaxCalculationResult"/>. /// </returns> public static IProductTaxCalculationResult CalculateTaxesForProduct(this ITaxationContext context, IProductVariant productVariant) { return(context.CalculateTaxesForProduct(productVariant.ToProductVariantDisplay())); }
/// <summary> /// Adds a line item to the customer item cache /// </summary> /// <param name="productVariant"> /// The product Variant. /// </param> /// <param name="quantity"> /// The quantity. /// </param> public void AddItem(IProductVariant productVariant, int quantity) { AddItem(productVariant, productVariant.Name, quantity); }
private static void DeleteProductVariantFromIndex(IProductVariant productVariant) { ExamineManager.Instance.IndexProviderCollection["MerchelloProductIndexer"].DeleteFromIndex(((ProductVariant)productVariant).ExamineId.ToString(CultureInfo.InvariantCulture)); }
public Product(IProductVariant variantTemplate) : this(variantTemplate, new OptionCollection()) { }
/// <summary> /// The add product variant values. /// </summary> /// <param name="extendedData"> /// The extended data. /// </param> /// <param name="productVariant"> /// The product variant. /// </param> public static void AddProductVariantValues(this ExtendedDataCollection extendedData, IProductVariant productVariant) { extendedData.SetValue(Constants.ExtendedDataKeys.ProductKey, productVariant.ProductKey.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.ProductVariantKey, productVariant.Key.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.CostOfGoods, productVariant.CostOfGoods == null ? 0.ToString(CultureInfo.InvariantCulture) : ((decimal)productVariant.CostOfGoods).ToString(CultureInfo.InvariantCulture)); extendedData.SetValue(Constants.ExtendedDataKeys.Weight, productVariant.Weight == null ? 0.ToString(CultureInfo.InvariantCulture) : ((decimal)productVariant.Weight).ToString(CultureInfo.InvariantCulture)); extendedData.SetValue(Constants.ExtendedDataKeys.Width, productVariant.Width == null ? 0.ToString(CultureInfo.InvariantCulture) : ((decimal)productVariant.Width).ToString(CultureInfo.InvariantCulture)); extendedData.SetValue(Constants.ExtendedDataKeys.Height, productVariant.Height == null ? 0.ToString(CultureInfo.InvariantCulture) : ((decimal)productVariant.Height).ToString(CultureInfo.InvariantCulture)); extendedData.SetValue(Constants.ExtendedDataKeys.Length, productVariant.Length == null ? 0.ToString(CultureInfo.InvariantCulture) : ((decimal)productVariant.Length).ToString(CultureInfo.InvariantCulture)); extendedData.SetValue(Constants.ExtendedDataKeys.Barcode, productVariant.Barcode); extendedData.SetValue(Constants.ExtendedDataKeys.Price, productVariant.Price.ToString(CultureInfo.InvariantCulture)); extendedData.SetValue(Constants.ExtendedDataKeys.OnSale, productVariant.OnSale.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.Manufacturer, productVariant.Manufacturer); extendedData.SetValue(Constants.ExtendedDataKeys.ManufacturerModelNumber, productVariant.ManufacturerModelNumber); extendedData.SetValue(Constants.ExtendedDataKeys.SalePrice, productVariant.SalePrice == null ? 0.ToString(CultureInfo.InvariantCulture) : ((decimal)productVariant.SalePrice).ToString(CultureInfo.InvariantCulture)); extendedData.SetValue(Constants.ExtendedDataKeys.TrackInventory, productVariant.TrackInventory.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.OutOfStockPurchase, productVariant.OutOfStockPurchase.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.Taxable, productVariant.Taxable.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.Shippable, productVariant.Shippable.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.Download, productVariant.Download.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.DownloadMediaId, productVariant.DownloadMediaId.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.VersionKey, productVariant.VersionKey.ToString()); }
/// <summary> /// The add to catalog inventory. /// </summary> /// <param name="productVariant"> /// The <see cref="IProductVariant"/> /// </param> /// <param name="catalogInventory"> /// The <see cref="ICatalogInventory"/> to be added /// </param> public static void AddToCatalogInventory(this IProductVariant productVariant, ICatalogInventory catalogInventory) { ((CatalogInventoryCollection)productVariant.CatalogInventories).Add(catalogInventory); }
/// <summary> /// Adds a line item to the basket /// </summary> public void AddItem(IProductVariant productVariant, string name, int quantity, ExtendedDataCollection extendedData) { if(!extendedData.DefinesProductVariant()) extendedData.AddProductVariantValues(productVariant); AddItem( string.IsNullOrEmpty(name) ? productVariant.Name : name, productVariant.Sku, quantity, productVariant.OnSale ? extendedData.GetSalePriceValue() : extendedData.GetPriceValue(), extendedData); // get the price information from extended data in case it has been overriden //productVariant.SalePrice.Value : productVariant.Price }
private static string GetAttributesJson(IProductVariant productVariant) { var json = "[{0}]"; var atts = ""; foreach (var attribute in productVariant.Attributes) { if (atts.Length > 0) atts += ","; atts += JsonConvert.SerializeObject( new { key = attribute.Key, optionKey = attribute.OptionKey, name = attribute.Name, sku = attribute.Sku, sortOrder = attribute.SortOrder }, Formatting.None); } json = string.Format(json, atts); return json; }
private static string GetCatalogInventoriesJson(IProductVariant productVariant) { var json = "[{0}]"; var catalogInventories = ""; foreach (var ch in productVariant.CatalogInventories) { if (catalogInventories.Length > 0) catalogInventories += ","; catalogInventories += JsonConvert.SerializeObject( new { catalogKey = ch.CatalogKey, productVariantKey = ch.ProductVariantKey, location = ch.Location, count = ch.Count, lowCount = ch.LowCount }, Formatting.None); } json = string.Format(json, catalogInventories); return json; }
/// <summary> /// Deletes a single <see cref="IProductVariant"/> /// </summary> /// <param name="productVariant">The <see cref="IProductVariant"/> to be deleted</param> /// <param name="raiseEvents">Optional boolean indicating whether or not to raise events</param> public void Delete(IProductVariant productVariant, bool raiseEvents = true) { if (raiseEvents) { if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs<IProductVariant>(productVariant), this)) { ((ProductVariant)productVariant).WasCancelled = true; return; } } using (new WriteLock(Locker)) { var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateProductVariantRepository(uow)) { repository.Delete(productVariant); uow.Commit(); } } if (raiseEvents) Deleted.RaiseEvent(new DeleteEventArgs<IProductVariant>(productVariant), this); }
/// <summary> /// Gets the product variant. /// </summary> /// <param name="variant">The variant.</param> /// <param name="storeAlias">The store alias.</param> /// <param name="currencyCode">The currency code.</param> /// <returns></returns> /// <exception cref="System.ArgumentNullException">variant</exception> public static IProductVariant GetProductVariant(IProductVariant variant, string storeAlias = null, string currencyCode = null) { if (variant == null) throw new ArgumentNullException("variant"); return GetProductVariant(variant.Id, storeAlias, currencyCode); }
public VariantAdaptor(IProductVariant source) { _source = source; }
/// <summary> /// Removes a customer item cache line item /// </summary> /// <param name="productVariant"> /// The product Variant. /// </param> public void RemoveItem(IProductVariant productVariant) { RemoveItem(productVariant.Sku); }
internal static ProductVariantDisplay ToProductVariantDisplay(this IProductVariant productVariant) { return(AutoMapper.Mapper.Map <ProductVariantDisplay>(productVariant)); }
/// <summary> /// Adds a <see cref="IProductVariant"/> line item to the collection /// </summary> /// <param name="container"> /// The container. /// </param> /// <param name="productVariant"> /// The product Variant. /// </param> /// <param name="quantity"> /// The quantity. /// </param> /// <param name="extendedData"> /// The extended Data. /// </param> public static void AddItem(this ILineItemContainer container, IProductVariant productVariant, int quantity, ExtendedDataCollection extendedData) { extendedData.AddProductVariantValues(productVariant); container.AddItem(LineItemType.Product, productVariant.Name, productVariant.Sku, quantity, productVariant.Price, extendedData); }
internal static IProductVariant ToProductVariant(this ProductVariantDisplay productVariantDisplay, IProductVariant destination) { if (productVariantDisplay.Key != Guid.Empty) { destination.Key = productVariantDisplay.Key; } if (!String.IsNullOrEmpty(productVariantDisplay.Name)) { destination.Name = productVariantDisplay.Name; } if (!String.IsNullOrEmpty(productVariantDisplay.Sku)) { destination.Sku = productVariantDisplay.Sku; } destination.Price = productVariantDisplay.Price; destination.CostOfGoods = productVariantDisplay.CostOfGoods; destination.SalePrice = productVariantDisplay.SalePrice; destination.OnSale = productVariantDisplay.OnSale; destination.Manufacturer = productVariantDisplay.Manufacturer; destination.ManufacturerModelNumber = productVariantDisplay.ManufacturerModelNumber; destination.Weight = productVariantDisplay.Weight; destination.Length = productVariantDisplay.Length; destination.Width = productVariantDisplay.Width; destination.Height = productVariantDisplay.Height; destination.Barcode = productVariantDisplay.Barcode; destination.Available = productVariantDisplay.Available; destination.TrackInventory = productVariantDisplay.TrackInventory; destination.OutOfStockPurchase = productVariantDisplay.OutOfStockPurchase; destination.Taxable = productVariantDisplay.Taxable; destination.Shippable = productVariantDisplay.Shippable; destination.Download = productVariantDisplay.Download; destination.DownloadMediaId = productVariantDisplay.DownloadMediaId; destination.ProductKey = productVariantDisplay.ProductKey; foreach (var catalogInventory in productVariantDisplay.CatalogInventories) { ICatalogInventory destinationCatalogInventory; if (destination.CatalogInventories.Count() > 0) { var catInv = destination.CatalogInventories.Where(x => x.CatalogKey == catalogInventory.CatalogKey).First(); if (catInv != null) { destinationCatalogInventory = catInv; destinationCatalogInventory = catalogInventory.ToCatalogInventory(destinationCatalogInventory); } } } foreach (var attribute in productVariantDisplay.Attributes) { IProductAttribute destinationProductAttribute; var attr = destination.Attributes.First(x => x.Key == attribute.Key); if (attr != null) { destinationProductAttribute = attr; destinationProductAttribute = attribute.ToProductAttribute(destinationProductAttribute); } else { destinationProductAttribute = new ProductAttribute(attribute.Name, attribute.Sku); destinationProductAttribute = attribute.ToProductAttribute(destinationProductAttribute); ProductAttributeCollection variantAttributes = destination.Attributes as ProductAttributeCollection; variantAttributes.Add(destinationProductAttribute); } } return(destination); }
/// <summary> /// Associates a product variant with a warehouse /// </summary> /// <param name="productVariant">The <see cref="IProductVariant"/></param> /// <param name="catalog">The <see cref="IWarehouseCatalog"/></param> public static void AddToCatalogInventory(this IProductVariant productVariant, IWarehouseCatalog catalog) { productVariant.AddToCatalogInventory(catalog.Key); }
/// <summary> /// Associates a product variant with a warehouse /// </summary> /// <param name="productVariant"> /// The <see cref="IProductVariant"/> /// </param> /// <param name="catalogKey"> /// The catalog Key. /// </param> public static void AddToCatalogInventory(this IProductVariant productVariant, Guid catalogKey) { ((CatalogInventoryCollection)productVariant.CatalogInventories).Add(new CatalogInventory(catalogKey, productVariant.Key)); }
private static void IndexProductVariant(IProductVariant productVariant) { IndexProductVariant(productVariant, null); }
private static void IndexProductVariant(IProductVariant productVariant) { ProductIndexer.ReIndexNode(productVariant.SerializeToXml().Root, IndexTypes.ProductVariant); }
/// <summary> /// Adds a line item to the wish list /// </summary> /// <param name="productVariant"> /// The product Variant. /// </param> /// <param name="quantity"> /// The quantity. /// </param> public void AddItem(IProductVariant productVariant, int quantity) { AddItem(productVariant, productVariant.Name, quantity); }
private static void DeleteProductVariantFromIndex(IProductVariant productVariant) { ProductIndexer.DeleteFromIndex(((ProductVariant)productVariant).ExamineId.ToString(CultureInfo.InvariantCulture)); }
/// <summary> /// Re-indexes entity document via Examine. /// </summary> /// <param name="entity"> /// The entity. /// </param> internal void ReindexEntity(IProductVariant entity) { IndexProvider.ReIndexNode(entity.SerializeToXml().Root, IndexTypes.ProductVariant); }
/// <summary> /// Adds a line item to the customer item cache /// </summary> /// <param name="productVariant"> /// The product Variant. /// </param> public void AddItem(IProductVariant productVariant) { AddItem(productVariant, productVariant.Name, 1); }
internal static IProductVariant ToProductVariant(this ProductVariantDisplay productVariantDisplay, IProductVariant destination) { if (productVariantDisplay.Key != Guid.Empty) { destination.Key = productVariantDisplay.Key; } if( !String.IsNullOrEmpty(productVariantDisplay.Name) ) { destination.Name = productVariantDisplay.Name; } if( !String.IsNullOrEmpty(productVariantDisplay.Sku) ) { destination.Sku = productVariantDisplay.Sku; } destination.Price = productVariantDisplay.Price; destination.CostOfGoods = productVariantDisplay.CostOfGoods; destination.SalePrice = productVariantDisplay.SalePrice; destination.OnSale = productVariantDisplay.OnSale; destination.Manufacturer = productVariantDisplay.Manufacturer; destination.ManufacturerModelNumber = productVariantDisplay.ManufacturerModelNumber; destination.Weight = productVariantDisplay.Weight; destination.Length = productVariantDisplay.Length; destination.Width = productVariantDisplay.Width; destination.Height = productVariantDisplay.Height; destination.Barcode = productVariantDisplay.Barcode; destination.Available = productVariantDisplay.Available; destination.TrackInventory = productVariantDisplay.TrackInventory; destination.OutOfStockPurchase = productVariantDisplay.OutOfStockPurchase; destination.Taxable = productVariantDisplay.Taxable; destination.Shippable = productVariantDisplay.Shippable; destination.Download = productVariantDisplay.Download; destination.DownloadMediaId = productVariantDisplay.DownloadMediaId; destination.ProductKey = productVariantDisplay.ProductKey; foreach (var catalogInventory in productVariantDisplay.CatalogInventories) { var catInv = destination.CatalogInventories.FirstOrDefault(x => x.CatalogKey == catalogInventory.CatalogKey); if (catInv != null) { var destinationCatalogInventory = catInv; destinationCatalogInventory = catalogInventory.ToCatalogInventory(destinationCatalogInventory); } else if (!Guid.Empty.Equals(catalogInventory.CatalogKey) && destination.HasIdentity) { //// Add to a new catalog destination.AddToCatalogInventory(catalogInventory.CatalogKey); } } foreach (var attribute in productVariantDisplay.Attributes) { IProductAttribute destinationProductAttribute; var attr = destination.Attributes.First(x => x.Key == attribute.Key); if (attr != null) { destinationProductAttribute = attr; destinationProductAttribute = attribute.ToProductAttribute(destinationProductAttribute); } else { destinationProductAttribute = new ProductAttribute(attribute.Name, attribute.Sku); destinationProductAttribute = attribute.ToProductAttribute(destinationProductAttribute); ProductAttributeCollection variantAttributes = destination.Attributes as ProductAttributeCollection; variantAttributes.Add(destinationProductAttribute); } } return destination; }
/// <summary> /// Adds a line item to the customer item cache /// </summary> /// <param name="productVariant"> /// The product Variant. /// </param> /// <param name="name"> /// The name. /// </param> /// <param name="quantity"> /// The quantity. /// </param> public void AddItem(IProductVariant productVariant, string name, int quantity) { AddItem(productVariant, name, quantity, new ExtendedDataCollection()); }
/// <summary> /// Gets the discount for product variant. /// </summary> /// <param name="variant">The variant.</param> /// <param name="storeAlias">The store alias.</param> /// <param name="currencyCode">The currency code.</param> /// <returns></returns> /// <exception cref="System.ArgumentNullException">variant</exception> public static IEnumerable<IProductDiscount> GetDiscountForProductVariant(IProductVariant variant, string storeAlias = null, string currencyCode = null) { if (variant == null) throw new ArgumentNullException("variant"); return GetDiscountForProduct(variant.Id, storeAlias, currencyCode); }
/// <summary> /// Updates a customer item cache item's quantity /// </summary> /// <param name="productVariant"> /// The product Variant. /// </param> /// <param name="quantity"> /// The quantity. /// </param> public void UpdateQuantity(IProductVariant productVariant, int quantity) { UpdateQuantity(productVariant.Sku, quantity); }
/// <summary> /// Initializes a new instance of the <see cref="Product"/> class. /// </summary> /// <param name="variant"> /// The variant. /// </param> public Product(IProductVariant variant) : this(variant, new ProductOptionCollection(), new ProductVariantCollection()) { }
internal static IProductVariant ToProductVariant(this ProductVariantDisplay productVariantDisplay, IProductVariant destination) { if (productVariantDisplay.Key != Guid.Empty) { destination.Key = productVariantDisplay.Key; } if( !String.IsNullOrEmpty(productVariantDisplay.Name) ) { destination.Name = productVariantDisplay.Name; } if( !String.IsNullOrEmpty(productVariantDisplay.Sku) ) { destination.Sku = productVariantDisplay.Sku; } destination.Price = productVariantDisplay.Price; destination.CostOfGoods = productVariantDisplay.CostOfGoods; destination.SalePrice = productVariantDisplay.SalePrice; destination.OnSale = productVariantDisplay.OnSale; destination.Manufacturer = productVariantDisplay.Manufacturer; destination.ManufacturerModelNumber = productVariantDisplay.ManufacturerModelNumber; destination.Weight = productVariantDisplay.Weight; destination.Length = productVariantDisplay.Length; destination.Width = productVariantDisplay.Width; destination.Height = productVariantDisplay.Height; destination.Barcode = productVariantDisplay.Barcode; destination.Available = productVariantDisplay.Available; destination.TrackInventory = productVariantDisplay.TrackInventory; destination.OutOfStockPurchase = productVariantDisplay.OutOfStockPurchase; destination.Taxable = productVariantDisplay.Taxable; destination.Shippable = productVariantDisplay.Shippable; destination.Download = productVariantDisplay.Download; destination.DownloadMediaId = productVariantDisplay.DownloadMediaId; destination.ProductKey = productVariantDisplay.ProductKey; // We need to refactor the CatalogInventories to not be immutable if we are // going to need to do operations like this. In the UI, the user "unchecks" a catalog that was // previously checked - so we need to remove it. var deletedCatalogKeys = destination.CatalogInventories.Where( x => !productVariantDisplay.CatalogInventories.Select(ci => ci.CatalogKey).Contains(x.CatalogKey)).Select(x => x.CatalogKey).ToArray(); foreach (var deletedCatalogKey in deletedCatalogKeys) { destination.RemoveFromCatalogInventory(deletedCatalogKey); } foreach (var catalogInventory in productVariantDisplay.CatalogInventories) { var catInv = destination.CatalogInventories.FirstOrDefault(x => x.CatalogKey == catalogInventory.CatalogKey); if (catInv != null) { var destinationCatalogInventory = catInv; destinationCatalogInventory = catalogInventory.ToCatalogInventory(destinationCatalogInventory); } else if (!Guid.Empty.Equals(catalogInventory.CatalogKey) && destination.HasIdentity) { //// Add to a new catalog destination.AddToCatalogInventory(catalogInventory.CatalogKey); } } foreach (var attribute in productVariantDisplay.Attributes) { IProductAttribute destinationProductAttribute; var attr = destination.Attributes.FirstOrDefault(x => x.Key == attribute.Key); if (attr != null) { destinationProductAttribute = attr; destinationProductAttribute = attribute.ToProductAttribute(destinationProductAttribute); } else { destinationProductAttribute = new ProductAttribute(attribute.Name, attribute.Sku); destinationProductAttribute = attribute.ToProductAttribute(destinationProductAttribute); ProductAttributeCollection variantAttributes = destination.Attributes as ProductAttributeCollection; variantAttributes.Add(destinationProductAttribute); } } destination.AddOrUpdateDetachedContent(productVariantDisplay); return destination; }
internal static IProductVariant ToProductVariant(this ProductVariantDisplay productVariantDisplay, IProductVariant destination) { if (productVariantDisplay.Key != Guid.Empty) { destination.Key = productVariantDisplay.Key; } if (!String.IsNullOrEmpty(productVariantDisplay.Name)) { destination.Name = productVariantDisplay.Name; } if (!String.IsNullOrEmpty(productVariantDisplay.Sku)) { destination.Sku = productVariantDisplay.Sku; } destination.Price = productVariantDisplay.Price; destination.CostOfGoods = productVariantDisplay.CostOfGoods; destination.SalePrice = productVariantDisplay.SalePrice; destination.OnSale = productVariantDisplay.OnSale; destination.Manufacturer = productVariantDisplay.Manufacturer; destination.ManufacturerModelNumber = productVariantDisplay.ManufacturerModelNumber; destination.Weight = productVariantDisplay.Weight; destination.Length = productVariantDisplay.Length; destination.Width = productVariantDisplay.Width; destination.Height = productVariantDisplay.Height; destination.Barcode = productVariantDisplay.Barcode; destination.Available = productVariantDisplay.Available; destination.TrackInventory = productVariantDisplay.TrackInventory; destination.OutOfStockPurchase = productVariantDisplay.OutOfStockPurchase; destination.Taxable = productVariantDisplay.Taxable; destination.Shippable = productVariantDisplay.Shippable; destination.Download = productVariantDisplay.Download; destination.DownloadMediaId = productVariantDisplay.DownloadMediaId; destination.ProductKey = productVariantDisplay.ProductKey; // We need to refactor the CatalogInventories to not be immutable if we are // going to need to do operations like this. In the UI, the user "unchecks" a catalog that was // previously checked - so we need to remove it. var deletedCatalogKeys = destination.CatalogInventories.Where( x => !productVariantDisplay.CatalogInventories.Select(ci => ci.CatalogKey).Contains(x.CatalogKey)).Select(x => x.CatalogKey).ToArray(); foreach (var deletedCatalogKey in deletedCatalogKeys) { destination.RemoveFromCatalogInventory(deletedCatalogKey); } foreach (var catalogInventory in productVariantDisplay.CatalogInventories) { var catInv = destination.CatalogInventories.FirstOrDefault(x => x.CatalogKey == catalogInventory.CatalogKey); if (catInv != null) { var destinationCatalogInventory = catInv; destinationCatalogInventory = catalogInventory.ToCatalogInventory(destinationCatalogInventory); } else if (!Guid.Empty.Equals(catalogInventory.CatalogKey) && destination.HasIdentity) { //// Add to a new catalog destination.AddToCatalogInventory(catalogInventory.CatalogKey); } } foreach (var attribute in productVariantDisplay.Attributes) { IProductAttribute destinationProductAttribute; var attr = destination.Attributes.FirstOrDefault(x => x.Key == attribute.Key); if (attr != null) { destinationProductAttribute = attr; destinationProductAttribute = attribute.ToProductAttribute(destinationProductAttribute); } else { destinationProductAttribute = new ProductAttribute(attribute.Name, attribute.Sku); destinationProductAttribute = attribute.ToProductAttribute(destinationProductAttribute); ProductAttributeCollection variantAttributes = destination.Attributes as ProductAttributeCollection; variantAttributes.Add(destinationProductAttribute); } } destination.AddOrUpdateDetachedContent(productVariantDisplay); return(destination); }
/// <summary> /// Adds a <see cref="IProductVariant"/> line item to the collection /// </summary> /// <param name="container"> /// The container. /// </param> /// <param name="productVariant"> /// The product Variant. /// </param> /// <param name="quantity"> /// The quantity. /// </param> public static void AddItem(this ILineItemContainer container, IProductVariant productVariant, int quantity) { var extendedData = new ExtendedDataCollection(); container.AddItem(productVariant, quantity, extendedData); }
private static void DeleteProductVariantFromIndex(IProductVariant productVariant) { var cache = new VirtualProductContentCache(); cache.ClearVirtualCache(productVariant.ProductKey); ProductIndexer.DeleteFromIndex(((ProductVariant)productVariant).ExamineId.ToString(CultureInfo.InvariantCulture)); }
private static void IndexProductVariant(IProductVariant productVariant) { var cache = new VirtualProductContentCache(); cache.ClearVirtualCache(productVariant.ProductKey); ProductIndexer.ReIndexNode(productVariant.SerializeToXml().Root, IndexTypes.ProductVariant); }
/// <summary> /// Associates a product variant with a warehouse /// </summary> /// <param name="productVariant"> /// The <see cref="IProductVariant"/> /// </param> /// <param name="catalogKey"> /// The catalog Key. /// </param> public static void AddToCatalogInventory(this IProductVariant productVariant, Guid catalogKey) { productVariant.AddToCatalogInventory(new CatalogInventory(catalogKey, productVariant.Key)); }
public Product(IProductVariant variant) : this(variant, new ProductOptionCollection(), new ProductVariantCollection()) { }
/// <summary> /// Associates a product variant with a warehouse /// </summary> /// <param name="productVariant">The <see cref="IProductVariant"/></param> /// <param name="catalog">The <see cref="IWarehouseCatalog"/></param> internal static void AddToCatalogInventory(this IProductVariant productVariant, IWarehouseCatalog catalog) { ((CatalogInventoryCollection)productVariant.CatalogInventories).Add(new CatalogInventory(catalog.Key, productVariant.Key)); }
/// <summary> /// Adds a line item to the wish list /// </summary> /// <param name="productVariant"> /// The product Variant. /// </param> /// <param name="name"> /// The name. /// </param> /// <param name="quantity"> /// The quantity. /// </param> /// <param name="extendedData"> /// The extended Data. /// </param> public void AddItem(IProductVariant productVariant, string name, int quantity, ExtendedDataCollection extendedData) { if (!extendedData.DefinesProductVariant()) extendedData.AddProductVariantValues(productVariant); var onSale = productVariant.OnSale ? extendedData.GetSalePriceValue() : extendedData.GetPriceValue(); AddItem(string.IsNullOrEmpty(name) ? productVariant.Name : name, productVariant.Sku, quantity, onSale, extendedData); }
private static void IndexProductVariant(IProductVariant productVariant, ProductOptionCollection productOptions) { ExamineManager.Instance.IndexProviderCollection["MerchelloProductIndexer"].ReIndexNode(productVariant.SerializeToXml(productOptions).Root, IndexTypes.ProductVariant); }
/// <summary> /// Updates a wish list item's quantity /// </summary> /// <param name="productVariant"> /// The product Variant. /// </param> /// <param name="quantity"> /// The quantity. /// </param> public void UpdateQuantity(IProductVariant productVariant, int quantity) { UpdateQuantity(productVariant.Sku, quantity); }
/// <summary> /// Adds a line item to the wish list /// </summary> /// <param name="productVariant"> /// The product Variant. /// </param> public void AddItem(IProductVariant productVariant) { AddItem(productVariant, productVariant.Name, 1); }
/// <summary> /// Saves a single instance of a <see cref="IProductVariant"/> /// </summary> /// <param name="productVariant"></param> /// <param name="raiseEvents">Optional boolean indicating whether or not to raise events</param> public void Save(IProductVariant productVariant, bool raiseEvents = true) { if(raiseEvents) if (Saving.IsRaisedEventCancelled(new SaveEventArgs<IProductVariant>(productVariant), this)) { ((ProductVariant)productVariant).WasCancelled = true; return; } using (new WriteLock(Locker)) { var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateProductVariantRepository(uow)) { repository.AddOrUpdate(productVariant); uow.Commit(); } } if (raiseEvents) Saved.RaiseEvent(new SaveEventArgs<IProductVariant>(productVariant), this); }
/// <summary> /// Adds a line item to the wish list /// </summary> /// <param name="productVariant"> /// The product Variant. /// </param> /// <param name="name"> /// The name. /// </param> /// <param name="quantity"> /// The quantity. /// </param> public void AddItem(IProductVariant productVariant, string name, int quantity) { AddItem(productVariant, name, quantity, new ExtendedDataCollection()); }
private IProductVariant GetOrignalMatchingVariant(IProductVariant cloneVariant) { var skus = cloneVariant.Attributes.Select(x => x.Sku).ToArray(); return(_original.ProductVariants.FirstOrDefault(x => x.Attributes.All(y => skus.Contains(y.Sku)))); }
/// <summary> /// Removes a wish list line item /// </summary> /// <param name="productVariant"> /// The product Variant. /// </param> public void RemoveItem(IProductVariant productVariant) { RemoveItem(productVariant.Sku); }
/// <summary> /// The add product variant values. /// </summary> /// <param name="extendedData"> /// The extended data. /// </param> /// <param name="productVariant"> /// The product variant. /// </param> public static void AddProductVariantValues(this ExtendedDataCollection extendedData, IProductVariant productVariant) { extendedData.SetValue(Constants.ExtendedDataKeys.ProductKey, productVariant.ProductKey.ToString()); extendedData.SetValue(Constants.ExtendedDataKeys.ProductVariantKey, productVariant.Key.ToString()); AddBaseProductValues(extendedData, productVariant); }
private IProductVariant GetOrignalMatchingVariant(IProductVariant cloneVariant) { var skus = cloneVariant.Attributes.Select(x => x.Sku).ToArray(); return _original.ProductVariants.FirstOrDefault(x => x.Attributes.All(y => skus.Contains(y.Sku))); }
/// <summary> /// Serializes a product variant for Examine indexing. /// </summary> /// <param name="productVariant"> /// The product variant. /// </param> /// <param name="productOptionCollection"> /// The product option collection. /// </param> /// <param name="collections"> /// Static collections keys product belongs /// </param> /// <returns> /// The <see cref="XDocument"/>. /// </returns> internal static XDocument SerializeToXml(this IProductVariant productVariant, ProductOptionCollection productOptionCollection = null, IEnumerable <Guid> collections = null) { string xml; using (var sw = new StringWriter()) { using (var writer = new XmlTextWriter(sw)) { writer.WriteStartDocument(); writer.WriteStartElement("productVariant"); writer.WriteAttributeString("id", ((ProductVariant)productVariant).ExamineId.ToString(CultureInfo.InvariantCulture)); writer.WriteAttributeString("productKey", productVariant.ProductKey.ToString()); writer.WriteAttributeString("productVariantKey", productVariant.Key.ToString()); writer.WriteAttributeString("master", ((ProductVariant)productVariant).Master.ToString()); writer.WriteAttributeString("name", productVariant.Name); writer.WriteAttributeString("sku", productVariant.Sku); writer.WriteAttributeString("price", productVariant.Price.ToString(CultureInfo.InvariantCulture)); writer.WriteAttributeString("manufacturer", productVariant.Manufacturer); writer.WriteAttributeString("modelNumber", productVariant.ManufacturerModelNumber); writer.WriteAttributeString("costOfGoods", productVariant.CostOfGoods.ToString()); writer.WriteAttributeString("salePrice", productVariant.SalePrice.ToString()); writer.WriteAttributeString("onSale", productVariant.OnSale.ToString()); writer.WriteAttributeString("weight", productVariant.Weight.ToString()); writer.WriteAttributeString("length", productVariant.Length.ToString()); writer.WriteAttributeString("width", productVariant.Width.ToString()); writer.WriteAttributeString("height", productVariant.Height.ToString()); writer.WriteAttributeString("barcode", productVariant.Barcode); writer.WriteAttributeString("available", productVariant.Available.ToString()); writer.WriteAttributeString("trackInventory", productVariant.TrackInventory.ToString()); writer.WriteAttributeString("outOfStockPurchase", productVariant.OutOfStockPurchase.ToString()); writer.WriteAttributeString("taxable", productVariant.Taxable.ToString()); writer.WriteAttributeString("shippable", productVariant.Shippable.ToString()); writer.WriteAttributeString("download", productVariant.Download.ToString()); writer.WriteAttributeString("downloadMediaId", productVariant.DownloadMediaId.ToString()); writer.WriteAttributeString("totalInventoryCount", productVariant.TotalInventoryCount.ToString()); writer.WriteAttributeString("attributes", GetAttributesJson(productVariant)); writer.WriteAttributeString("catalogInventories", GetCatalogInventoriesJson(productVariant)); writer.WriteAttributeString("productOptions", GetProductOptionsJson(productOptionCollection)); writer.WriteAttributeString("versionKey", productVariant.VersionKey.ToString()); // 1.11.0 - static collections if (collections != null) { var collectionKeys = collections as Guid[] ?? collections.ToArray(); if (collectionKeys.Any()) { writer.WriteAttributeString("staticCollectionKeys", string.Join(",", collectionKeys)); } } writer.WriteAttributeString("createDate", productVariant.CreateDate.ToString("s")); writer.WriteAttributeString("updateDate", productVariant.UpdateDate.ToString("s")); writer.WriteAttributeString("allDocs", "1"); writer.WriteEndElement(); // product variant writer.WriteEndDocument(); xml = sw.ToString(); } } return(XDocument.Parse(xml)); }