Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        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);
        }