示例#1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ProductVariantContent"/> class.
 /// </summary>
 /// <param name="variant">
 /// The variant.
 /// </param>
 /// <param name="contentType">
 /// The content type.
 /// </param>
 /// <param name="optionContentTypes">
 /// The option Content Types.
 /// </param>
 /// <param name="attributes">
 /// The attributes.
 /// </param>
 /// <param name="cultureName">
 /// The culture name.
 /// </param>
 /// <param name="parent">
 /// The parent.
 /// </param>
 public ProductVariantContent(ProductVariantDisplay variant, PublishedContentType contentType, IDictionary <Guid, PublishedContentType> optionContentTypes, IEnumerable <IProductAttributeContent> attributes, string cultureName = "en-US", IPublishedContent parent = null)
     : base(variant, contentType, optionContentTypes, cultureName)
 {
     _variant   = variant;
     _attibutes = attributes;
     _parent    = parent;
 }
示例#2
0
        public HttpResponseMessage DeleteDetachedContent(ProductVariantDisplay productVariant)
        {
            var product = _productService.GetByKey(productVariant.ProductKey);

            if (product == null)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound));
            }

            if (product.ProductVariants.Any() && product.ProductVariants.FirstOrDefault(x => x.Key == productVariant.Key) != null)
            {
                var variant = product.ProductVariants.FirstOrDefault(x => x.Key == productVariant.Key);
                if (variant != null)
                {
                    variant.DetachedContents.Clear();
                }
                //// TODO need to walk this through better, we should not need to save the variant and then the product
                //// as the product save should take care of it, but somewhere in the service the runtime cache is resetting
                //// the variant's detached content in the productvariant collection.  Probably just need to rearrange some of the
                //// calls in the service - suspect EnsureProductVariants.
                _productVariantService.Save(variant);
            }
            else
            {
                product.DetachedContents.Clear();
            }

            _productService.Save(product);

            return(Request.CreateResponse(HttpStatusCode.OK));
        }
        /// <summary>
        /// Adds a <see cref="ProductVariantDisplay"/> to the item cache
        /// </summary>
        /// <param name="productVariant">
        /// The product variant to be added
        /// </param>
        /// <param name="name">
        /// The name.
        /// </param>
        /// <param name="quantity">
        /// The quantity to be represented
        /// </param>
        /// <param name="extendedData">
        /// The extended Data.
        /// </param>
        public void AddItem(ProductVariantDisplay productVariant, string name, int quantity, ExtendedDataCollection extendedData)
        {
            if (EnableDataModifiers)
            {
                var attempt = _productDataModifier.Value.Modify(productVariant);
                if (attempt.Success)
                {
                    var modified = attempt.Result as ProductVariantDisplay;
                    if (modified != null)
                    {
                        extendedData.MergeDataModifierLogs(modified);
                        if (!extendedData.DefinesProductVariant())
                        {
                            extendedData.AddProductVariantValues(modified);
                        }
                        productVariant = modified;
                    }
                }
            }
            else
            {
                extendedData.MergeDataModifierLogs(productVariant);
                if (!extendedData.DefinesProductVariant())
                {
                    extendedData.AddProductVariantValues(productVariant);
                }
            }

            var price = productVariant.OnSale ? extendedData.GetSalePriceValue() : extendedData.GetPriceValue();


            AddItem(string.IsNullOrEmpty(name) ? productVariant.Name : name, productVariant.Sku, quantity, price, extendedData);
        }
示例#4
0
        public ProductVariantDisplay PutProductVariant(ProductVariantDisplay productVariant)
        {
            var variant = _productVariantService.GetByKey(productVariant.Key);

            variant = productVariant.ToProductVariant(variant);

            _productVariantService.Save(variant);

            return(variant.ToProductVariantDisplay());
        }
示例#5
0
        public ProductVariantDisplay NewProductVariant(ProductVariantDisplay productVariant)
        {
            IProductVariant newProductVariant;

            try
            {
                var product = _productService.GetByKey(productVariant.ProductKey) as Product;

                if (product != null)
                {
                    var productAttributes = new ProductAttributeCollection();
                    foreach (var attribute in productVariant.Attributes)
                    {
                        // TODO: This should be refactored into an extension method
                        var productOption = product.ProductOptions.FirstOrDefault(x => x.Key == attribute.OptionKey) as ProductOption;

                        if (productOption != null)
                        {
                            productAttributes.Add(productOption.Choices[attribute.Key]);
                        }
                    }

                    newProductVariant = _productVariantService.CreateProductVariantWithKey(product, productAttributes);

                    if (productVariant.TrackInventory)
                    {
                        newProductVariant.AddToCatalogInventory(_warehouseService.GetDefaultWarehouse().DefaultCatalog());
                    }

                    newProductVariant = productVariant.ToProductVariant(newProductVariant);

                    _productVariantService.Save(newProductVariant);
                }
                else
                {
                    throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.InternalServerError));
                }
            }
            catch (Exception e)
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.InternalServerError));
            }

            return(newProductVariant.ToProductVariantDisplay());
        }
        public ProductVariantDisplay PutProductVariant(ProductVariantDisplay productVariant)
        {
            var variant = _productVariantService.GetByKey(productVariant.Key);

            if (productVariant.DetachedContents.Any())
            {
                foreach (var c in productVariant.DetachedContents.Select(x => x.CultureName))
                {
                    var pcs = new ProductVariantContentSave {
                        CultureName = c, Display = productVariant
                    };
                    ProductVariantDetachedContentHelper <ProductVariantContentSave, ProductVariantDisplay> .MapDetachedProperties(pcs);
                }
            }

            variant = productVariant.ToProductVariant(variant);

            _productVariantService.Save(variant);

            return(variant.ToProductVariantDisplay(DetachedValuesConversionType.Editor));
        }
示例#7
0
        public HttpResponseMessage PutProductVariant(ProductVariantDisplay productVariant)
        {
            var response = Request.CreateResponse(HttpStatusCode.OK);

            try
            {
                IProductVariant merchProductVariant = _productVariantService.GetByKey(productVariant.Key);

                if (productVariant.TrackInventory && !merchProductVariant.CatalogInventories.Any())
                {
                    merchProductVariant.AddToCatalogInventory(_warehouseService.GetDefaultWarehouse().DefaultCatalog());
                }

                merchProductVariant = productVariant.ToProductVariant(merchProductVariant);

                _productVariantService.Save(merchProductVariant);
            }
            catch (Exception ex) // I think this is not required as the server will create the error response message anyway
            {
                response = Request.CreateResponse(HttpStatusCode.NotFound, String.Format("{0}", ex.Message));
            }

            return(response);
        }
示例#8
0
        public IProductVariantContent BuildContent(ProductVariantDisplay display)
        {
            if (!display.DetachedContents.Any(x => x.CanBeRendered))
            {
                return(null);
            }

            // assert there is at least one the can be rendered
            var detachedContent = display.DetachedContents.FirstOrDefault(x => x.CanBeRendered);

            if (detachedContent == null)
            {
                return(null);
            }

            var publishedContentType = PublishedContentType.Get(PublishedItemType.Content, detachedContent.DetachedContentType.UmbContentType.Alias);

            //var optionContentTypes = GetProductOptionContentTypes(display);

            var clone = CloneHelper.JsonClone <ProductVariantDisplay>(display);

            //return new ProductVariantContent(publishedContentType, new Dictionary<Guid, PublishedContentType>(), clone, _parent, _defaultStoreLanguage);
            return(new ProductVariantContent(clone, publishedContentType, new Dictionary <Guid, PublishedContentType>(), new List <IProductAttributeContent>(), _defaultStoreLanguage));
        }
 /// <summary>
 /// Adds a <see cref="ProductVariantDisplay"/> to the item cache
 /// </summary>
 /// <param name="productVariant">
 /// The product variant to be added
 /// </param>
 /// <param name="name">
 /// The name.
 /// </param>
 /// <param name="quantity">
 /// The quantity to be represented
 /// </param>
 public void AddItem(ProductVariantDisplay productVariant, string name, int quantity)
 {
     AddItem(productVariant, name, quantity, new ExtendedDataCollection());
 }
 /// <summary>
 /// Adds a <see cref="ProductVariantDisplay"/> to the item cache
 /// </summary>
 /// <param name="productVariant">The product variant to be added</param>
 /// <param name="quantity">The quantity to be represented</param>
 public void AddItem(ProductVariantDisplay productVariant, int quantity)
 {
     AddItem(productVariant, productVariant.Name, quantity);
 }
 /// <summary>
 /// Adds a <see cref="ProductVariantDisplay"/> to the item cache
 /// </summary>
 /// <param name="productVariant">The product variant to be added</param>
 public void AddItem(ProductVariantDisplay productVariant)
 {
     AddItem(productVariant, 1);
 }
示例#12
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ProductVariantContent"/> class.
 /// </summary>
 /// <param name="variant">
 /// The variant.
 /// </param>
 /// <param name="contentType">
 /// The content type.
 /// </param>
 /// <param name="cultureName">
 /// The culture name.
 /// </param>
 public ProductVariantContent(ProductVariantDisplay variant, PublishedContentType contentType, string cultureName = "en-US")
     : base(variant, contentType, cultureName)
 {
     _variant = variant;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ProductVariantContent"/> class.
 /// </summary>
 /// <param name="variant">
 /// The variant.
 /// </param>
 /// <param name="contentType">
 /// The content type.
 /// </param>
 /// <param name="optionContentTypes">
 /// The option Content Types.
 /// </param>
 /// <param name="cultureName">
 /// The culture name.
 /// </param>
 /// <param name="parent">
 /// The parent.
 /// </param>
 public ProductVariantContent(ProductVariantDisplay variant, PublishedContentType contentType, IDictionary <Guid, PublishedContentType> optionContentTypes, string cultureName = "en-US", IPublishedContent parent = null)
     : base(variant, contentType, optionContentTypes, cultureName)
 {
     _variant = variant;
     _parent  = parent;
 }