public static ProductTileViewModel GetProductTileViewModel(this EntryContentBase entry, IMarket market, Currency currency) { var placedPrice = entry.Prices() .Where(id => id.MarketId == market.MarketId) .OrderBy(sort => sort.UnitPrice.Amount) .FirstOrDefault(x => x.UnitPrice.Currency == currency); var entryRecommendations = entry as IProductRecommendations; var product = entry; var entryUrl = ""; var firstCode = placedPrice != null && placedPrice.EntryContent is VariationContent ? (placedPrice.EntryContent as VariationContent).Code : ""; var type = typeof(GenericProduct); if (entry is GenericProduct) { entryUrl = UrlResolver.Value.GetUrl(product.ContentLink); } if (entry is GenericBundle) { type = typeof(GenericBundle); firstCode = product.Code; entryUrl = UrlResolver.Value.GetUrl(product.ContentLink); } if (entry is GenericPackage) { type = typeof(GenericPackage); firstCode = product.Code; entryUrl = UrlResolver.Value.GetUrl(product.ContentLink); } if (entry is GenericVariant) { var variantEntry = entry as GenericVariant; type = typeof(GenericVariant); product = ContentLoader.Value.Get <EntryContentBase>(entry.GetParentProducts().FirstOrDefault()) as GenericProduct; entryUrl = UrlResolver.Value.GetUrl(product.ContentLink) + "?variationCode=" + variantEntry.Code; } return(new ProductTileViewModel { ProductId = product.ContentLink.ID, Brand = entry.Property.Keys.Contains("Brand") ? entry.Property["Brand"]?.Value?.ToString() ?? "" : "", Code = product.Code, DisplayName = entry.DisplayName, Description = entry.Property.Keys.Contains("Description") ? entry.Property["Description"]?.Value != null ? ((XhtmlString)entry.Property["Description"].Value).ToHtmlString() : "" : "", LongDescription = ShortenLongDescription(entry.Property.Keys.Contains("LongDescription") ? entry.Property["LongDescription"]?.Value != null ? ((XhtmlString)entry.Property["LongDescription"].Value).ToHtmlString() : "" : ""), PlacedPrice = placedPrice?.UnitPrice ?? new Money(0, currency), DiscountedPrice = placedPrice == null ? new Money(0, currency) : PromotionService.Value.GetDiscountPrice(placedPrice.EntryContent.GetCatalogKey(), market.MarketId, currency).UnitPrice, FirstVariationCode = firstCode, ImageUrl = AssetUrlResolver.Value.GetAssetUrl <IContentImage>(entry), Url = entryUrl, IsAvailable = entry.Prices().Where(price => price.MarketId == market.MarketId) .Any(x => x.UnitPrice.Currency == currency), OnSale = entry.Property.Keys.Contains("OnSale") && ((bool?)entry.Property["OnSale"]?.Value ?? false), NewArrival = entry.Property.Keys.Contains("NewArrival") && ((bool?)entry.Property["NewArrival"]?.Value ?? false), ShowRecommendations = entryRecommendations != null ? entryRecommendations.ShowRecommendations : true, EntryType = type }); }
public static ProductTileViewModel GetProductTileViewModel(this EntryContentBase entry, IMarket market, Currency currency, bool isFeaturedProduct = false) { var prices = entry.Prices(); var minPrice = prices.OrderBy(x => x.UnitPrice).ThenBy(x => x.MinQuantity).FirstOrDefault(); var discountPriceList = GetDiscountPriceCollection(entry, market, currency); var minDiscountPrice = GetMinDiscountPrice(discountPriceList); // if discount price is selected var isDiscounted = minDiscountPrice.Value != null ? (minDiscountPrice.Value.Price < minPrice.UnitPrice ? true : false) : false; var entryRecommendations = entry as IProductRecommendations; var product = entry; var entryUrl = ""; var firstCode = ""; var type = typeof(GenericProduct); if (entry is GenericProduct) { entryUrl = UrlResolver.Value.GetUrl(product.ContentLink); firstCode = isDiscounted ? ContentLoader.Value.Get <EntryContentBase>(minDiscountPrice.Key).Code : minPrice.EntryContent.Code; } if (entry is GenericBundle) { type = typeof(GenericBundle); firstCode = product.Code; entryUrl = UrlResolver.Value.GetUrl(product.ContentLink); } if (entry is GenericPackage) { type = typeof(GenericPackage); firstCode = product.Code; entryUrl = UrlResolver.Value.GetUrl(product.ContentLink); } if (entry is GenericVariant) { var variantEntry = entry as GenericVariant; type = typeof(GenericVariant); firstCode = entry.Code; var parentLink = entry.GetParentProducts().FirstOrDefault(); if (ContentReference.IsNullOrEmpty(parentLink)) { product = ContentLoader.Value.Get <EntryContentBase>(variantEntry.ContentLink); entryUrl = UrlResolver.Value.GetUrl(variantEntry.ContentLink); } else { product = ContentLoader.Value.Get <EntryContentBase>(parentLink) as GenericProduct; entryUrl = UrlResolver.Value.GetUrl(product.ContentLink) + "?variationCode=" + variantEntry.Code; } } return(new ProductTileViewModel { ProductId = product.ContentLink.ID, Brand = entry.Property.Keys.Contains("Brand") ? entry.Property["Brand"]?.Value?.ToString() ?? "" : "", Code = product.Code, DisplayName = entry.DisplayName, Description = entry.Property.Keys.Contains("Description") ? entry.Property["Description"]?.Value != null ? ((XhtmlString)entry.Property["Description"].Value).ToHtmlString() : "" : "", LongDescription = ShortenLongDescription(entry.Property.Keys.Contains("LongDescription") ? entry.Property["LongDescription"]?.Value != null ? ((XhtmlString)entry.Property["LongDescription"].Value).ToHtmlString() : "" : ""), PlacedPrice = isDiscounted ? minDiscountPrice.Value.DefaultPrice : (minPrice != null ? minPrice.UnitPrice : new Money(0, currency)), DiscountedPrice = isDiscounted ? minDiscountPrice.Value.Price : (minPrice != null ? minPrice.UnitPrice : new Money(0, currency)), FirstVariationCode = firstCode, ImageUrl = AssetUrlResolver.Value.GetAssetUrl <IContentImage>(entry), VideoAssetUrl = AssetUrlResolver.Value.GetAssetUrl <IContentVideo>(entry), Url = entryUrl, IsAvailable = entry.Prices().Where(price => price.MarketId == market.MarketId) .Any(x => x.UnitPrice.Currency == currency), OnSale = entry.Property.Keys.Contains("OnSale") && ((bool?)entry.Property["OnSale"]?.Value ?? false), NewArrival = entry.Property.Keys.Contains("NewArrival") && ((bool?)entry.Property["NewArrival"]?.Value ?? false), ShowRecommendations = entryRecommendations != null ? entryRecommendations.ShowRecommendations : true, EntryType = type, ProductStatus = entry.Property.Keys.Contains("ProductStatus") ? entry.Property["ProductStatus"]?.Value?.ToString() ?? "Active" : "Active", Created = entry.Created, IsFeaturedProduct = isFeaturedProduct }); }