Esempio n. 1
0
        protected RestSearchDocument PopulateRestSearchDocument(string code, string language)
        {
            var contentLink = _referenceConverter.GetContentLink(code);

            if (ContentReference.IsNullOrEmpty(contentLink))
            {
                return(null);
            }
            var document       = new RestSearchDocument();
            var entryContent   = _contentLoader.Get <EntryContentBase>(contentLink);
            var fashionProduct = entryContent as FashionProduct;
            var fashionPackage = entryContent as FashionPackage;

            if (fashionProduct != null)
            {
                var variants = _contentLoader.GetItems(fashionProduct.GetVariants(_relationRepository), CultureInfo.GetCultureInfo(language)).OfType <FashionVariant>().ToList();
                AddPrices(document, variants.Select(v => new CatalogKey(v.Code)));
                AddColors(document, variants);
                AddSizes(document, variants);
                AddCodes(document, variants);
                document.Fields.Add(new RestSearchField("brand", fashionProduct.Brand));
            }
            else if (fashionPackage != null)
            {
                AddPrices(document, new [] { new CatalogKey(fashionPackage.Code) });
            }
            document.Fields.Add(new RestSearchField("code", entryContent.Code, new[] { SearchField.Store.YES, SearchField.IncludeInDefaultSearch.YES }));
            document.Fields.Add(new RestSearchField("displayname", entryContent.DisplayName));
            document.Fields.Add(new RestSearchField("image_url", _assetUrlResolver.GetAssetUrl <IContentImage>(entryContent)));
            document.Fields.Add(new RestSearchField("content_link", entryContent.ContentLink.ToString()));
            document.Fields.Add(new RestSearchField("created", entryContent.Created.ToString("yyyyMMddhhmmss")));
            document.Fields.Add(new RestSearchField("top_category_name", GetTopCategoryName(entryContent)));

            return(document);
        }
Esempio n. 2
0
 private void AddCodes(RestSearchDocument document, IEnumerable <FashionVariant> variants)
 {
     foreach (var variant in variants)
     {
         document.Fields.Add(new RestSearchField("code", variant.Code, new[] { SearchField.Store.YES, SearchField.IncludeInDefaultSearch.YES }));
     }
 }
Esempio n. 3
0
        private void AddPrices(RestSearchDocument document, IEnumerable <CatalogKey> catalogKeys)
        {
            var prices      = _priceService.GetCatalogEntryPrices(catalogKeys).ToList();
            var validPrices = prices.Where(x => x.ValidFrom <= DateTime.Now && (x.ValidUntil == null || x.ValidUntil >= DateTime.Now));

            foreach (var marketPrices in validPrices.GroupBy(x => x.MarketId))
            {
                foreach (var currencyPrices in marketPrices.GroupBy(x => x.UnitPrice.Currency))
                {
                    var topPrice = currencyPrices.OrderByDescending(x => x.UnitPrice).FirstOrDefault();
                    if (topPrice == null)
                    {
                        continue;
                    }

                    var variationPrice = new RestSearchField(IndexingHelper.GetOriginalPriceField(topPrice.MarketId, topPrice.UnitPrice.Currency),
                                                             topPrice.UnitPrice.Amount.ToString(CultureInfo.InvariantCulture), true);

                    var discountedPrice = new RestSearchField(IndexingHelper.GetPriceField(topPrice.MarketId, topPrice.UnitPrice.Currency),
                                                              _promotionService.GetDiscountPrice(topPrice.CatalogKey, topPrice.MarketId, topPrice.UnitPrice.Currency).UnitPrice.Amount.ToString(CultureInfo.InvariantCulture), true);

                    document.Fields.Add(variationPrice);
                    document.Fields.Add(discountedPrice);
                }
            }
        }
        protected RestSearchDocument PopulateRestSearchDocument(string code, string language)
        {
            EntryContentBase entryContent;

            if (!_catalogContentService.TryGet(code, out entryContent))
            {
                return(null);
            }

            var document       = new RestSearchDocument();
            var fashionProduct = entryContent as FashionProduct;
            var fashionPackage = entryContent as FashionPackage;

            if (fashionProduct != null)
            {
                var variants = _catalogContentService.GetAllVariants <FashionVariant>(fashionProduct, language).ToList();
                AddPrices(document, variants);
                AddColors(document, variants);
                AddSizes(document, variants);
                AddCodes(document, variants);
                document.Fields.Add(new RestSearchField("brand", fashionProduct.Brand));
            }
            else if (fashionPackage != null)
            {
                AddPrices(document, new [] { fashionPackage });
            }
            document.Fields.Add(new RestSearchField("code", entryContent.Code, new[] { SearchField.Store.YES, SearchField.IncludeInDefaultSearch.YES }));
            document.Fields.Add(new RestSearchField("displayname", entryContent.DisplayName));
            document.Fields.Add(new RestSearchField("image_url", _assetUrlResolver.GetAssetUrl <IContentImage>(entryContent)));
            document.Fields.Add(new RestSearchField("content_link", entryContent.ContentLink.ToString()));
            document.Fields.Add(new RestSearchField("created", entryContent.Created.ToString("yyyyMMddhhmmss")));
            document.Fields.Add(new RestSearchField("top_category_name", _catalogContentService.GetTopCategoryName(entryContent)));

            return(document);
        }
Esempio n. 5
0
        private void AddColors(RestSearchDocument document, IEnumerable <FashionVariant> variants)
        {
            var colors = new List <string>();

            foreach (var fashionVariant in variants)
            {
                if (!String.IsNullOrEmpty(fashionVariant.Color) && !colors.Contains(fashionVariant.Color.ToLower()))
                {
                    colors.Add(fashionVariant.Color.ToLower());
                    document.Fields.Add(new RestSearchField("color", fashionVariant.Color.ToLower()));
                }
            }
        }
Esempio n. 6
0
        private void AddSizes(RestSearchDocument document, IEnumerable <FashionVariant> variants)
        {
            var sizes = new List <string>();

            foreach (var fashionVariant in variants)
            {
                if (!String.IsNullOrEmpty(fashionVariant.Size) && !sizes.Contains(fashionVariant.Size.ToLower()))
                {
                    sizes.Add(fashionVariant.Size.ToLower());
                    document.Fields.Add(new RestSearchField("size", fashionVariant.Size.ToLower()));
                }
            }
        }