/// <summary> /// Creates a product URL including variant query string. /// </summary> /// <param name="helper">Product URL helper.</param> /// <param name="productSlug">Product URL slug.</param> /// <param name="cartItem">Organized shopping cart item.</param> /// <returns>Product URL.</returns> public static async Task <string> GetProductUrlAsync(this ProductUrlHelper helper, string productSlug, OrganizedShoppingCartItem cartItem) { Guard.NotNull(helper, nameof(helper)); Guard.NotNull(cartItem, nameof(cartItem)); var query = new ProductVariantQuery(); var product = cartItem.Item.Product; if (product.ProductType != ProductType.BundledProduct) { await helper.AddAttributesToQueryAsync(query, cartItem.Item.AttributeSelection, product.Id); } else if (cartItem.ChildItems != null && product.BundlePerItemPricing) { foreach (var childItem in cartItem.ChildItems.Where(x => x.Item.Id != cartItem.Item.Id)) { await helper.AddAttributesToQueryAsync(query, childItem.Item.AttributeSelection, childItem.Item.ProductId, childItem.Item.BundleItem.Id); } } return(helper.GetProductUrl(productSlug, query)); }
/// <summary> /// Creates a product URL including variant query string. /// </summary> /// <param name="helper">Product URL helper.</param> /// <param name="productSlug">Product URL slug.</param> /// <param name="orderItem">Order item.</param> /// <returns>Product URL.</returns> public static async Task <string> GetProductUrlAsync(this ProductUrlHelper helper, string productSlug, OrderItem orderItem) { Guard.NotNull(helper, nameof(helper)); Guard.NotNull(orderItem, nameof(orderItem)); var query = new ProductVariantQuery(); if (orderItem.Product.ProductType != ProductType.BundledProduct) { await helper.AddAttributesToQueryAsync(query, orderItem.AttributeSelection, orderItem.ProductId); } else if (orderItem.Product.BundlePerItemPricing && orderItem.BundleData.HasValue()) { var bundleData = orderItem.GetBundleData(); foreach (var item in bundleData) { await helper.AddAttributesToQueryAsync(query, item.AttributeSelection, item.ProductId, item.BundleItemId); } } return(helper.GetProductUrl(productSlug, query)); }