예제 #1
0
파일: Product.cs 프로젝트: BatJan/Merchello
        public Product(IProductVariant variantTemplate, OptionCollection optionCollection)
        {
            Mandate.ParameterNotNull(variantTemplate, "groupTemplate");
            Mandate.ParameterNotNull(optionCollection, "optionCollection");

            _variantTemplate = variantTemplate;
            _optionCollection = optionCollection;
        }
예제 #2
0
        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;
        }
예제 #3
0
        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);
 }
예제 #6
0
 /// <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);
 }
예제 #8
0
 private static void DeleteProductVariantFromIndex(IProductVariant productVariant)
 {
     ExamineManager.Instance.IndexProviderCollection["MerchelloProductIndexer"].DeleteFromIndex(((ProductVariant)productVariant).ExamineId.ToString(CultureInfo.InvariantCulture));
 }
예제 #9
0
파일: Product.cs 프로젝트: BatJan/Merchello
 public Product(IProductVariant variantTemplate)
     : this(variantTemplate, new OptionCollection())
 {
 }
예제 #10
0
 /// <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());
 }
예제 #11
0
 /// <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);
 }
예제 #12
0
파일: Basket.cs 프로젝트: BatJan/Merchello
        /// <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
        }
예제 #13
0
 public Product(IProductVariant variantTemplate)
     : this(variantTemplate, new OptionCollection())
 {
 }
예제 #14
0
        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;
        }
예제 #15
0
        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;
        }
예제 #16
0
        /// <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);
        }
예제 #17
0
		/// <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);
		}
예제 #18
0
 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));
 }
예제 #21
0
 /// <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);
        }
예제 #23
0
 /// <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);
 }
예제 #24
0
 /// <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));
 }
예제 #25
0
 private static void IndexProductVariant(IProductVariant productVariant)
 {
     IndexProductVariant(productVariant, null);
 }
예제 #26
0
 private static void IndexProductVariant(IProductVariant productVariant)
 {
     ProductIndexer.ReIndexNode(productVariant.SerializeToXml().Root, IndexTypes.ProductVariant);
 }
예제 #27
0
파일: Wishlist.cs 프로젝트: arknu/Merchello
 /// <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);
 }
예제 #28
0
 private static void DeleteProductVariantFromIndex(IProductVariant productVariant)
 {
     ProductIndexer.DeleteFromIndex(((ProductVariant)productVariant).ExamineId.ToString(CultureInfo.InvariantCulture));
 }
예제 #29
0
 private static void IndexProductVariant(IProductVariant productVariant)
 {
     IndexProductVariant(productVariant, null);
 }
예제 #30
0
 /// <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);
 }
예제 #32
0
        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());
 }
예제 #34
0
		/// <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);
 }
예제 #36
0
 /// <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())
 {
 }
예제 #37
0
        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);
        }
예제 #39
0
        /// <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);
        }
예제 #40
0
 private static void DeleteProductVariantFromIndex(IProductVariant productVariant)
 {
     var cache = new VirtualProductContentCache();
     cache.ClearVirtualCache(productVariant.ProductKey);
     ProductIndexer.DeleteFromIndex(((ProductVariant)productVariant).ExamineId.ToString(CultureInfo.InvariantCulture));
 }
예제 #41
0
 /// <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);
 }
예제 #42
0
 private static void IndexProductVariant(IProductVariant productVariant)
 {
     var cache = new VirtualProductContentCache();
     cache.ClearVirtualCache(productVariant.ProductKey);
     ProductIndexer.ReIndexNode(productVariant.SerializeToXml().Root, IndexTypes.ProductVariant);
 }
예제 #43
0
 /// <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));
 }
예제 #44
0
 public Product(IProductVariant variant)
     : this(variant, new ProductOptionCollection(), new ProductVariantCollection())
 {
 }
예제 #45
0
 /// <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));
 }
예제 #46
0
파일: Wishlist.cs 프로젝트: arknu/Merchello
        /// <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);
        }
예제 #47
0
 private static void IndexProductVariant(IProductVariant productVariant, ProductOptionCollection productOptions)
 {
     ExamineManager.Instance.IndexProviderCollection["MerchelloProductIndexer"].ReIndexNode(productVariant.SerializeToXml(productOptions).Root, IndexTypes.ProductVariant);
 }
예제 #48
0
파일: Wishlist.cs 프로젝트: arknu/Merchello
 /// <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);
 }
예제 #49
0
파일: Wishlist.cs 프로젝트: arknu/Merchello
 /// <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);
 }
예제 #50
0
        /// <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);
        }
예제 #51
0
파일: Wishlist.cs 프로젝트: arknu/Merchello
 /// <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());
 }
예제 #52
0
        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))));
        }
예제 #53
0
파일: Wishlist.cs 프로젝트: arknu/Merchello
 /// <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);
 }
예제 #55
0
        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)));
        }
예제 #56
0
        /// <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));
        }
예제 #57
0
 private static void DeleteProductVariantFromIndex(IProductVariant productVariant)
 {
     ExamineManager.Instance.IndexProviderCollection["MerchelloProductIndexer"].DeleteFromIndex(((ProductVariant)productVariant).ExamineId.ToString(CultureInfo.InvariantCulture));
 }
예제 #58
0
 private static void IndexProductVariant(IProductVariant productVariant)
 {
     ProductIndexer.ReIndexNode(productVariant.SerializeToXml().Root, IndexTypes.ProductVariant);
 }
예제 #59
0
 private static void IndexProductVariant(IProductVariant productVariant, ProductOptionCollection productOptions)
 {
     ExamineManager.Instance.IndexProviderCollection["MerchelloProductIndexer"].ReIndexNode(productVariant.SerializeToXml(productOptions).Root, IndexTypes.ProductVariant);
 }
예제 #60
0
 private static void DeleteProductVariantFromIndex(IProductVariant productVariant)
 {
     ProductIndexer.DeleteFromIndex(((ProductVariant)productVariant).ExamineId.ToString(CultureInfo.InvariantCulture));
 }