/// <summary> /// This method uses the ProductRepository to find the requested product, but also ties in the desired variant id /// </summary> /// <param name="productId"></param> /// <param name="variantId"></param> /// <param name="scope"></param> /// <param name="cultureInfo"></param> /// <returns></returns> protected virtual async Task <ProductWithVariant> GetProductWithVariantAsync( string productId, string variantId, string scope, CultureInfo cultureInfo) { var baseProduct = await ProductRepository.GetProductAsync(new GetProductParam { CultureInfo = cultureInfo, ProductId = productId, Scope = scope }).ConfigureAwait(false); Variant baseVariant = null; if (baseProduct == null) { return(null); } if (baseProduct?.Variants != null) { baseVariant = baseProduct.Variants.Find(variant => variant.Id == variantId); } var productWithVariant = new ProductWithVariant { Product = baseProduct, Variant = baseVariant }; return(productWithVariant); }
protected virtual RelatedProductViewModel CreateRelatedProductsViewModel( Uri baseUrl, CultureInfo cultureInfo, ProductWithVariant productVariant, List <ProductPrice> prices, IEnumerable <ProductMainImage> images, string currencyIso) { var productId = productVariant.Product.Id; var variantId = productVariant.Variant?.Id; var mainImage = images.FirstOrDefault(image => image.ProductId == productId && image.VariantId == variantId); var vm = ViewModelMapper.MapTo <RelatedProductViewModel>(productVariant.Product, cultureInfo); if (mainImage != null) { vm.ImageUrl = mainImage.ImageUrl; vm.FallbackImageUrl = mainImage.FallbackImageUrl; } vm.Url = GetProductUrl(baseUrl, cultureInfo, productId, variantId, productVariant.Product.DisplayName.GetLocalizedValue(cultureInfo.Name), productVariant.Product.Sku); vm.Quantity = GetQuantity(); vm.ListPrice = GetProductBasePrice(prices, productVariant.Product, productVariant.Variant); vm.Price = GetCurrentPrice(prices, productVariant.Product, productVariant.Variant); vm.ProductId = productId; vm.VariantId = variantId; vm.IsOnSale = vm.Price < vm.ListPrice; vm.HasVariants = productVariant.Product.Variants != null && productVariant.Product.Variants.Count > 0; //For now all the related products add to cart button is enable to add to cart vm.IsAvailableToSell = true; vm.DisplaySpecialPrice = GetDisplayPrice(vm.Price, currencyIso); vm.DisplayListPrice = GetDisplayPrice(vm.ListPrice, currencyIso); var recurringOrdersEnabled = RecurringOrdersSettings.Enabled; var recurringOrderProgramName = productVariant.Product.PropertyBag.GetValueOrDefault <string>(Constants.ProductAttributes.RecurringOrderProgramName); vm.RecurringOrderProgramName = recurringOrderProgramName; vm.IsRecurringOrderEligible = recurringOrdersEnabled && !string.IsNullOrWhiteSpace(recurringOrderProgramName); return(vm); }