public string Parse(ProductListTemplateData template, Product item) { if (template == null) { return(string.Empty); } string output = template.ProductTemplate; if (string.IsNullOrWhiteSpace(output)) { return(string.Empty); } MediaFile image = _imageProcessor.GetImage(item.DisplayImageUrl); output = ImageRegex.Replace(output, _urlHelper.ToAbsolute(_fileService.GetFileLocation(image, new Size { Width = 150, Height = 150 }))); output = NameRegex.Replace(output, item.Name ?? string.Empty); output = LinkRegex.Replace(output, item.AbsoluteUrl); output = PriceRegex.Replace(output, GetPrice(_productPricingMethod.GetDisplayPrice(item))); output = OldPriceRegex.Replace(output, GetPrice(_productPricingMethod.GetDisplayPreviousPrice(item))); return(output); }
public List <ProductCardModel> Get(List <Product> products) { var galleryIds = products.Select(product => product.Gallery.Id).ToList(); var productIds = products.Select(product => product.Id).ToList(); List <MediaFile> mediaFiles = _session.QueryOver <MediaFile>() .Where(file => file.MediaCategory.Id.IsIn(galleryIds)) .OrderBy(file => file.DisplayOrder) .Asc.Cacheable() .List().ToList(); List <ProductVariant> variants = _session.QueryOver <ProductVariant>() .Where(productVariant => productVariant.Product.Id.IsIn(productIds)) .Cacheable() .List().ToList(); var productCardModels = new List <ProductCardModel>(); foreach (var product in products) { MediaFile image = mediaFiles.FirstOrDefault(file => file.IsImage() && file.MediaCategory.Id == product.Gallery.Id); var productVariants = variants.FindAll(productVariant => productVariant.Product.Id == product.Id); if (!productVariants.Any()) { continue; } var productCardModel = new ProductCardModel { Name = product.Name, Url = product.LiveUrlSegment, Abstract = product.ProductAbstract, SearchResultAbstract = product.SearchResultAbstract, Image = image?.FileUrl, BrandImage = product.BrandPage?.FeatureImage, PreviousPriceText = _ecommerceSettings.PreviousPriceText, ProductReviewsEnabled = _productReviewSettings.EnableProductReviews, IsMultiVariant = productVariants.Count > 1 }; if (productVariants.Count == 1) { var variant = productVariants.FirstOrDefault(); productCardModel.PreviousPrice = _productPricingMethod.GetDisplayPreviousPrice(variant); productCardModel.Price = _productPricingMethod.GetUnitPrice(variant); productCardModel.PricePreTax = _productPricingMethod.GetUnitPricePreTax(variant); productCardModel.Tax = _productPricingMethod.GetUnitTax(variant); productCardModel.VariantId = variant.Id; CanBuyStatus canBuyStatus = _productVariantAvailabilityService.CanBuy(variant, 1); productCardModel.CanBuyStatus = canBuyStatus; productCardModel.StockMessage = canBuyStatus.OK ? (!string.IsNullOrEmpty(variant.CustomStockInStockMessage) ? variant.CustomStockInStockMessage : _stringResourceProvider.GetValue("In Stock")) : (!string.IsNullOrEmpty(variant.CustomStockOutOfStockMessage) ? variant.CustomStockOutOfStockMessage : _stringResourceProvider.GetValue("Out of Stock")); productCardModel.Rating = variant.Rating; productCardModel.NumberOfReviews = variant.NumberOfReviews; if (variant.ETag != null) { productCardModel.ETag = variant.ETag; } } else { ProductVariant variant = productVariants.OrderBy(x => _productPricingMethod.GetUnitPrice(x, 0m, 0m)).FirstOrDefault(); productCardModel.Price = variant != null ? _productPricingMethod.GetUnitPrice(variant, 0m, 0m) : (decimal?)null; productCardModel.Rating = variant.Rating; productCardModel.NumberOfReviews = variant.NumberOfReviews; if (variant.ETag != null) { productCardModel.ETag = variant.ETag; } } productCardModels.Add(productCardModel); } return(productCardModels); }