public IProductList FindByCategory(IUser currentUser, IProductListInputModel query)
        {
            // Find the list of products
            string url = "ProductService.svc/rest/ListProducts2?";

            url += addUserUrlDetails(currentUser);

            url += "&statusSeed=" + _configuration["Storm:StatusSeed"];

            if (query.CategoryIds != null)
            {
                url += "&categorySeed=" + string.Join(",", query.CategoryIds);
            }

            if (query.FlagIds != null)
            {
                url += "&flagSeed=" + string.Join(",", query.FlagIds);
            }
            if (!string.IsNullOrEmpty(query.Query))
            {
                url += "&searchString=" + System.Web.HttpUtility.UrlEncode(query.Query);
            }

            url += "&pageNo=" + (query.PageNumber > 0 ? query.PageNumber : 1);
            url += "&pageSize=" + (query.PageSize > 0?query.PageSize:PageSize);
            url += "&asVariants=1";

            var productList = _connectionManager.GetResult <StormProductList>(url);

            ProductListDto result = new ProductListDto();

            result.ProductCount = productList.ItemCount;
            result.PageSize     = PageSize;
            result.PageNumber   = (query.PageNumber > 0 ? query.PageNumber : 1);
            result.Products     = new List <IProduct>();

            Dictionary <string, ProductDto> variants = new Dictionary <string, ProductDto>();

            foreach (var item in productList.Items)
            {
                ProductDto p = (ProductDto)_productBuilder.BuildFromItem(item);

                if (!string.IsNullOrEmpty(p.GroupByKey))
                {
                    if (variants.ContainsKey(p.GroupByKey))
                    {
                        variants[p.GroupByKey].Variants.Add((VariantDto)p.PrimaryVariant);
                    }
                    else
                    {
                        variants[p.GroupByKey] = p;
                        result.Products.Add(p);
                    }
                }
                else
                {
                    result.Products.Add(p);
                }
            }

            return(result);
        }
        public IList <IProductFilter> FindAllFilters(IUser currentUser, IProductListInputModel query)
        {
            // Find the list of products
            string url = "ProductService.svc/rest/ListProductFilters2?";

            url += addUserUrlDetails(currentUser);

            url += "&statusSeed=" + _configuration["Storm:StatusSeed"];

            if (query.CategoryIds != null)
            {
                url += "&categorySeed=" + string.Join(",", query.CategoryIds);
            }

            if (query.FlagIds != null)
            {
                url += "&flagSeed=" + string.Join(",", query.FlagIds);
            }
            if (!string.IsNullOrEmpty(query.Query))
            {
                url += "&searchString=" + System.Web.HttpUtility.UrlEncode(query.Query);
            }


            var filterList = _connectionManager.GetResult <List <StormFilter> >(url);

            List <IProductFilter> result = new List <IProductFilter>();

            Dictionary <string, ProductDto> variants = new Dictionary <string, ProductDto>();

            foreach (var item in filterList)
            {
                var dto = new ProductFilterDto();

                dto.Items = new List <IProductFilterItem>();
                dto.Name  = item.Type;
                dto.Type  = item.Name;

                if (item.Name.Equals("parf"))
                {
                    foreach (var entry in item.Items)
                    {
                        dto       = new ProductFilterDto();
                        dto.Items = new List <IProductFilterItem>();
                        dto.Name  = entry.Name;
                        dto.Type  = entry.Id;
                        if (entry.Items != null)
                        {
                            foreach (var valuef in entry.Items)
                            {
                                var dtoi = new ProductFilterItem();
                                dtoi.Count = valuef.Count ?? 0;
                                dtoi.Id    = valuef.Id;
                                dtoi.Name  = valuef.Name;
                                dtoi.Type  = valuef.Type;
                                dtoi.Value = valuef.Value;
                                dto.Items.Add(dtoi);
                            }
                        }
                        else if (entry.FalseCount.HasValue)
                        {
                            var dtoi = new ProductFilterItem();
                            dtoi.Count = entry.Count ?? 0;
                            dtoi.Name  = "True";
                            dto.Items.Add(dtoi);

                            dtoi       = new ProductFilterItem();
                            dtoi.Count = entry.FalseCount ?? 0;
                            dtoi.Name  = "False";
                            dto.Items.Add(dtoi);
                        }
                        result.Add(dto);
                    }
                }
                else if (item.Name.Equals("ohf"))
                {
                    result.Add(dto);
                    var dtoi = new ProductFilterItem();
                    dtoi.Count = item.Items[0].Count ?? 0;
                    dtoi.Name  = "Onhand";
                    dto.Items.Add(dtoi);
                }
                else
                {
                    foreach (var entry in item.Items)
                    {
                        var dtoi = new ProductFilterItem();
                        dtoi.Count = entry.Count ?? 0;
                        dtoi.Id    = entry.Id;
                        dtoi.Name  = entry.Name;
                        dtoi.Type  = entry.Type;
                        dtoi.Value = entry.Value;
                        dto.Items.Add(dtoi);
                    }
                    result.Add(dto);
                }
            }

            return(result);
        }