Exemplo n.º 1
0
        public async Task <ProductsSearchResult> GetProductsSearchResult(int storeId, string search, string filters, int top, int skip, bool isAdmin, string categoryApiId)
        {
            var fltrs = FilterHelper.ParseFiltersFromString(filters);
            ProductsSearchResult t = await Task.Run(() => this.GetProductsSearchResult(storeId, search, fltrs, top, skip, isAdmin, categoryApiId));

            return(t);
        }
        public async Task <ProductsSearchResult> SearchForProducts(SearchArguments args = null)
        {
            var config = _getConfiguration();

            string facetsFilter = null;

            if (args?.FacetValues?.Any() ?? false)
            {
                facetsFilter = string.Join(" and ", args?.FacetValues?.Select(GenerateFacetFilterString).ToArray());
            }

            var searchParameters = new SearchParameters {
                SearchMode = SearchMode.Any,
                IncludeTotalResultCount = true,
                HighlightFields         = config.HighlightFields?.ToList(),
                Skip   = (int)args?.SkipAmount,
                Facets = config.ProductFacets?.Select(GenerateFacetString).ToList(),
                Filter = facetsFilter,
                Top    = args?.PageSize
            };

            var productsResult = await _searchClient.Documents.SearchAsync <AWProduct>(args?.FilterText, searchParameters);

            var pageProducts = productsResult.Results.Select(productResult => new ProductHitResult {
                Product           = productResult.Document,
                HitHighlightsHtml = productResult.Highlights?.SelectMany(x => x.Value)
            }).ToArray();
            var productFacets = productsResult.Facets.Select(facet => {
                var facetName    = facet.Key;
                var friendlyName = GetFacetFriendlyName(facet.Key);
                var values       = facet.Value.Select(value => GetFacetValue(facet.Key, value));
                return(new FacetsHit(facetName, friendlyName, values));
            }).ToArray();

            var searchResult = new ProductsSearchResult {
                ProductHits  = pageProducts,
                Facets       = productFacets,
                ResultsCount = productsResult.Count ?? 0L,
                SkipCount    = args?.SkipAmount ?? 0L
            };

            return(searchResult);
        }
Exemplo n.º 3
0
        public StoreLiquidResult GetProductsSearchPage(Controller controller,
                                                       ProductsSearchResult productSearchResult,
                                                       PageDesign pageDesign,
                                                       List <ProductCategory> categories,
                                                       String search,
                                                       String filters,
                                                       String headerText,
                                                       String categoryApiId)
        {
            var dic = new Dictionary <String, String>();

            dic.Add(StoreConstants.PageOutput, "");
            var items              = new List <ProductLiquid>();
            var cats               = new List <ProductCategoryLiquid>();
            var products           = productSearchResult.Products;
            var filterGroups       = productSearchResult.FiltersGroups;
            var httpContextRequest = controller.Request;

            foreach (FilterGroup filterGroup in filterGroups)
            {
                foreach (Data.HelpersModel.Filter filter in filterGroup.FiltersHidden)
                {
                    if (string.IsNullOrEmpty(filter.Text))
                    {
                        continue;
                    }

                    filter.FilterLink = filter.Link(httpContextRequest);
                }
            }

            var filtersList = FilterHelper.GetFiltersFromContextRequest(httpContextRequest);

            foreach (var filter in filtersList)
            {
                filter.FilterLink = filter.LinkExclude(httpContextRequest, productSearchResult.Stats.OwnerType);
            }

            foreach (var item in products)
            {
                var category = categories.FirstOrDefault(r => r.Id == item.ProductCategoryId);
                if (category != null)
                {
                    var blog = new ProductLiquid(item, category, ImageWidth, ImageHeight);
                    items.Add(blog);
                }
            }

            var selectedCategory = categories.FirstOrDefault(r => r.ApiCategoryId.Equals(categoryApiId, StringComparison.InvariantCultureIgnoreCase));
            ProductCategoryLiquid selectedCategoryLiquid = null;

            if (selectedCategory == null)
            {
                selectedCategory = categories.FirstOrDefault();
            }
            selectedCategoryLiquid = new ProductCategoryLiquid(selectedCategory);


            var categoryTree = controller.RenderPartialToStringCache(
                "pCreateCategoryTree",
                new ViewDataDictionary(categories));



            object anonymousObject = new
            {
                filterExcluded   = LiquidAnonymousObject.GetFilters(filtersList),
                filterGroup      = LiquidAnonymousObject.GetFilterGroup(filterGroups),
                products         = LiquidAnonymousObject.GetProductsLiquid(items),
                selectedCategory = LiquidAnonymousObject.GetProductCategory(selectedCategoryLiquid),
                categoryTree     = categoryTree,
                search           = search,
                filters          = filters,
                headerText       = headerText,
                recordsTotal     = productSearchResult.Stats.RecordsTotal,
                isCleanButton    = !String.IsNullOrEmpty(search) || !String.IsNullOrEmpty(filters)
            };

            var indexPageOutput = LiquidEngineHelper.RenderPage(pageDesign, anonymousObject);

            dic[StoreConstants.PageOutput] = indexPageOutput;
            dic.Add(StoreConstants.PageSize, productSearchResult.PageSize.ToStr());
            dic.Add(StoreConstants.PageNumber, productSearchResult.Stats.PageCurrent.ToStr());
            dic.Add(StoreConstants.TotalItemCount, productSearchResult.Stats.RecordsTotal.ToStr());

            var result = new StoreLiquidResult();

            result.PageDesingName       = pageDesign.Name;
            result.LiquidRenderedResult = dic;
            if (selectedCategory != null)
            {
                result.PageTitle = selectedCategory.Name + " Products";
            }
            else
            {
                result.PageTitle = "Products";
            }
            return(result);
        }
Exemplo n.º 4
0
        private ProductsSearchResult GetProductsSearchResult(
            int storeId,
            string search,
            List <Filter> filters,
            int top,
            int skip,
            Boolean isAdmin = false, string categoryApiId = "women")
        {
            var searchResult = new ProductsSearchResult();

            String commandText   = @"SearchProducts";
            var    commandType   = CommandType.StoredProcedure;
            var    parameterList = new List <SqlParameter>();
            var    dtFilters     = new DataTable("med_tpt_Filter");

            dtFilters.Columns.Add("FieldName");
            dtFilters.Columns.Add("ValueFirst");
            dtFilters.Columns.Add("ValueLast");

            if (filters != null && filters.Any())
            {
                foreach (var filter in filters)
                {
                    DataRow dr = dtFilters.NewRow();
                    dr["FieldName"]  = filter.FieldName;
                    dr["ValueFirst"] = filter.ValueFirst;
                    dr["ValueLast"]  = filter.ValueLast;
                    dtFilters.Rows.Add(dr);
                }
            }

            parameterList.Add(DatabaseUtility.GetSqlParameter("IsAdmin", isAdmin, SqlDbType.Bit));
            parameterList.Add(DatabaseUtility.GetSqlParameter("storeId", storeId, SqlDbType.Int));
            parameterList.Add(DatabaseUtility.GetSqlParameter("search", search.ToStr(), SqlDbType.NVarChar));
            parameterList.Add(DatabaseUtility.GetSqlParameter("ApiCategoryId", categoryApiId.ToStr(), SqlDbType.NVarChar));
            parameterList.Add(DatabaseUtility.GetSqlParameter("filter", dtFilters, SqlDbType.Structured));
            parameterList.Add(DatabaseUtility.GetSqlParameter("top", top, SqlDbType.Int));
            parameterList.Add(DatabaseUtility.GetSqlParameter("skip", skip, SqlDbType.Int));
            DatabaseUtility.SqlCommandTimeout = StoreConstants.StoreProcedureCommandTimeOut;
            DataSet dataSet = DatabaseUtility.ExecuteDataSet((SqlConnection)StoreDbContext.Database.Connection, commandText, commandType, parameterList.ToArray());

            if (dataSet.Tables.Count > 0)
            {
                var productCategories = new List <ProductCategory>();
                using (DataTable dt = dataSet.Tables[0])
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        var item = GetProductCategoriesFromDataRow(dr);
                        productCategories.Add(item);
                    }
                    ;
                }
                searchResult.ProductCategories = productCategories;


                var fileManagerList = new List <FileManager>();
                using (DataTable dt = dataSet.Tables[3])
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        var item = GetFileManagerFromDataRow(dr);
                        fileManagerList.Add(item);
                    }
                    ;
                }

                var productFiles = new List <ProductFile>();
                using (DataTable dt = dataSet.Tables[2])
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        var item = GetProductFilesFromDataRow(dr);
                        productFiles.Add(item);
                        item.FileManager = fileManagerList.FirstOrDefault(r => r.Id == item.FileManagerId);
                    }
                    ;
                }


                var products = new List <Product>();
                using (DataTable dt = dataSet.Tables[1])
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        var item = GetProductsFromDataRow(dr);
                        products.Add(item);
                        item.ProductFiles = productFiles.Where(r => r.ProductId == item.Id).ToList();
                    }
                    ;
                }
                searchResult.Products = products;

                using (DataTable dt = dataSet.Tables[4])
                {
                    var m = new List <Filter>();
                    foreach (DataRow dr in dt.Rows)
                    {
                        var item = GetFilterFromDataRow(dr);
                        item.OwnerType = ProductsItem;
                        m.Add(item);
                    }
                    searchResult.Filters = m;
                }
                using (DataTable dt = dataSet.Tables[5])
                {
                    var stats = new RecordsStats();
                    foreach (DataRow dr in dt.Rows)
                    {
                        stats           = GetRecordsStatsFromDataRow(dr);
                        stats.OwnerType = ProductsItem;
                    }
                    searchResult.Stats = stats;
                }
            }
            searchResult.PageSize = top;
            return(searchResult);
        }