protected virtual Aggregation GetRangeAggregation(RangeFilter rangeFilter, IList <AggregationResponse> aggregationResponses)
        {
            var result = new Aggregation
            {
                AggregationType = "range",
                Field           = rangeFilter.Key,
                Items           = GetRangeAggregationItems(rangeFilter.Key, rangeFilter.Values, aggregationResponses),
            };

            return(result);
        }
        public static webModel.Aggregation ToWebModel(this coreModel.Aggregation aggregation)
        {
            var result = new webModel.Aggregation();
            result.InjectFrom(aggregation);

            if (aggregation.Items != null)
            {
                result.Items = aggregation.Items.Select(i => i.ToWebModel()).ToArray();
            }

            return result;
        }
        protected virtual Aggregation GetAttributeAggregation(AttributeFilter attributeFilter, IList <AggregationResponse> aggregationResponses)
        {
            var result = new Aggregation
            {
                AggregationType = "attr",
                Field           = attributeFilter.Key,
                Labels          = attributeFilter.DisplayNames
                                  ?.Select(d => new AggregationLabel {
                    Language = d.Language, Label = d.Name
                })
                                  .ToArray(),
            };

            var aggregationId       = attributeFilter.Key;
            var aggregationResponse = aggregationResponses.FirstOrDefault(a => a.Id.EqualsInvariant(aggregationId));

            if (aggregationResponse != null)
            {
                if (attributeFilter.Values == null)
                {
                    // Return all values
                    result.Items = aggregationResponse.Values.Select(v => new AggregationItem {
                        Value = v.Id, Count = (int)v.Count
                    }).ToArray();
                }
                else
                {
                    // Return predefined values with localization
                    var aggregationItems = new List <AggregationItem>();

                    foreach (var group in attributeFilter.Values.GroupBy(v => v.Id))
                    {
                        var value = aggregationResponse.Values.FirstOrDefault(v => v.Id.EqualsInvariant(group.Key));
                        if (value != null)
                        {
                            var valueLabels     = group.GetValueLabels();
                            var aggregationItem = new AggregationItem {
                                Value = value.Id, Count = (int)value.Count, Labels = valueLabels
                            };
                            aggregationItems.Add(aggregationItem);
                        }
                    }

                    if (aggregationItems.Any())
                    {
                        result.Items = aggregationItems;
                    }
                }
            }

            return(result);
        }
Example #4
0
        public static webModel.Aggregation ToWebModel(this coreModel.Aggregation aggregation)
        {
            var result = new webModel.Aggregation();

            result.InjectFrom(aggregation);

            if (aggregation.Items != null)
            {
                result.Items = aggregation.Items.Select(i => i.ToWebModel()).ToArray();
            }

            return(result);
        }
        public static webModel.Aggregation ToWebModel(this coreModel.Aggregation aggregation)
        {
            var result = new webModel.Aggregation();

            result.AggregationType = aggregation.AggregationType;
            result.Field           = aggregation.Field;

            if (aggregation.Items != null)
            {
                result.Items = aggregation.Items.Select(i => i.ToWebModel()).ToArray();
            }

            if (aggregation.Labels != null)
            {
                result.Labels = aggregation.Labels.Select(ToWebModel).ToArray();
            }

            return(result);
        }
        protected override Aggregation[] ConvertAggregations(IList <AggregationResponse> aggregationResponses, ProductSearchCriteria criteria)
        {
            var result = new List <Aggregation>();

            var browseFilters = GetBrowseFilters(criteria);

            if (browseFilters != null && aggregationResponses?.Any() == true)
            {
                foreach (var filter in browseFilters)
                {
                    Aggregation aggregation = null;

                    var attributeFilter  = filter as AttributeFilter;
                    var rangeFilter      = filter as RangeFilter;
                    var priceRangeFilter = filter as PriceRangeFilter;

                    if (attributeFilter != null)
                    {
                        aggregation = GetAttributeAggregation(attributeFilter, aggregationResponses);
                    }
                    else if (rangeFilter != null)
                    {
                        aggregation = GetRangeAggregation(rangeFilter, aggregationResponses);
                    }
                    else if (priceRangeFilter != null)
                    {
                        aggregation = GetPriceRangeAggregation(priceRangeFilter, aggregationResponses);
                    }

                    if (aggregation?.Items?.Any() == true)
                    {
                        result.Add(aggregation);
                    }
                }
            }

            return(result.ToArray());
        }