/// <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; }
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); }
public ProductVariantDisplay PutProductVariant(ProductVariantDisplay productVariant) { var variant = _productVariantService.GetByKey(productVariant.Key); variant = productVariant.ToProductVariant(variant); _productVariantService.Save(variant); return(variant.ToProductVariantDisplay()); }
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)); }
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); }
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); }
/// <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; }