Example #1
0
        public ActionResult Facet(GenericNode currentContent, CommerceFilterOptionViewModel viewModel)
        {
            if (string.IsNullOrEmpty(viewModel.ViewSwitcher))
            {
                viewModel.ViewSwitcher = string.IsNullOrEmpty(currentContent.DefaultTemplate) ? "List" : currentContent.DefaultTemplate;
            }

            return(PartialView("_Facet", viewModel));
        }
Example #2
0
        public IEnumerable <ProductTileViewModel> QuickSearch(string query, int catalogId = 0)
        {
            var filterOptions = new CommerceFilterOptionViewModel
            {
                Q           = query,
                PageSize    = 5,
                Sort        = string.Empty,
                FacetGroups = new List <FacetGroupOption>(),
                Page        = 1,
                TrackData   = false
            };

            return(QuickSearch(filterOptions, catalogId));
        }
        private ProductSearchResults GetSearchResults(string language, Commerce.Models.Blocks.ProductSearchBlock productSearchBlock)
        {
            var filterOptions = new CommerceFilterOptionViewModel
            {
                Q           = productSearchBlock.SearchTerm,
                PageSize    = productSearchBlock.ResultsPerPage,
                Sort        = string.Empty,
                FacetGroups = new List <FacetGroupOption>(),
                Page        = 1
            };

            var filters = GetFilters(productSearchBlock);

            return(_searchService.SearchWithFilters(null, filterOptions, filters));
        }
Example #4
0
        public async Task <ViewResult> Index(GenericNode currentContent, CommerceFilterOptionViewModel viewModel)
        {
            var model = _viewModelFactory.Create <DemoSearchViewModel <GenericNode>, GenericNode>(currentContent, new CommerceArgs
            {
                FilterOption   = viewModel,
                SelectedFacets = HttpContext.Request.QueryString["facets"],
                CatalogId      = 0
            });

            if (HttpContext.Request.HttpMethod == "GET")
            {
                var response = await _recommendationService.TrackCategory(HttpContext, currentContent);

                model.Recommendations = response.GetCategoryRecommendations(_referenceConverter);
            }

            model.BreadCrumb = GetBreadCrumb(currentContent.Code);
            return(View(model));
        }
Example #5
0
 public IEnumerable <ProductTileViewModel> QuickSearch(CommerceFilterOptionViewModel filterOptions,
                                                       int catalogId = 0)
 => string.IsNullOrEmpty(filterOptions.Q) ? Enumerable.Empty <ProductTileViewModel>() : GetSearchResults(null, filterOptions, "", null, catalogId).ProductViewModels;
Example #6
0
 public ProductSearchResults SearchWithFilters(IContent currentContent,
                                               CommerceFilterOptionViewModel filterOptions,
                                               IEnumerable <Filter> filters,
                                               int catalogId = 0) => filterOptions == null?CreateEmptyResult() : GetSearchResults(currentContent, filterOptions, "", filters, catalogId);
Example #7
0
 public ProductSearchResults Search(IContent currentContent,
                                    CommerceFilterOptionViewModel filterOptions,
                                    string selectedFacets,
                                    int catalogId = 0) => filterOptions == null?CreateEmptyResult() : GetSearchResults(currentContent, filterOptions, selectedFacets, null, catalogId);
Example #8
0
        private ITypeSearch <EntryContentBase> OrderBy(ITypeSearch <EntryContentBase> query, CommerceFilterOptionViewModel CommerceFilterOptionViewModel)
        {
            if (string.IsNullOrEmpty(CommerceFilterOptionViewModel.Sort) || CommerceFilterOptionViewModel.Sort.Equals("Position"))
            {
                if (CommerceFilterOptionViewModel.SortDirection.Equals("Asc"))
                {
                    query = query.OrderBy(x => x.SortOrder());
                    return(query);
                }
                query = query.OrderByDescending(x => x.SortOrder());
                return(query);
            }

            if (CommerceFilterOptionViewModel.Sort.Equals("Price"))
            {
                if (CommerceFilterOptionViewModel.SortDirection.Equals("Asc"))
                {
                    query = query.OrderBy(x => x.DefaultPrice());
                    return(query);
                }
                query = query.OrderByDescending(x => x.DefaultPrice());
                return(query);
            }

            if (CommerceFilterOptionViewModel.Sort.Equals("Name"))
            {
                if (CommerceFilterOptionViewModel.SortDirection.Equals("Asc"))
                {
                    query = query.OrderBy(x => x.DisplayName);
                    return(query);
                }
                query = query.OrderByDescending(x => x.DisplayName);
                return(query);
            }

            //if (CommerceFilterOptionViewModel.Sort.Equals("Recommended"))
            //{
            //    query = query.UsingPersonalization();
            //    return query;
            //}

            return(query);
        }
Example #9
0
        private ProductSearchResults GetSearchResults(IContent currentContent,
                                                      CommerceFilterOptionViewModel filterOptions,
                                                      string selectedfacets,
                                                      IEnumerable <Filter> filters = null,
                                                      int catalogId = 0)
        {
            //If contact belong organization, only find product that belong the categories that has owner is this organization
            var            contact             = PrincipalInfo.CurrentPrincipal.GetCustomerContact();
            var            organizationId      = contact?.ContactOrganization?.PrimaryKeyId ?? Guid.Empty;
            CatalogContent catalogOrganization = null;

            if (organizationId != Guid.Empty)
            {
                //get category that has owner id = organizationId
                catalogOrganization = _contentRepository
                                      .GetChildren <CatalogContent>(_referenceConverter.GetRootLink())
                                      .FirstOrDefault(x => !string.IsNullOrEmpty(x.Owner) && x.Owner.Equals(organizationId.ToString(), StringComparison.OrdinalIgnoreCase));
            }

            var pageSize = filterOptions.PageSize > 0 ? filterOptions.PageSize : DefaultPageSize;
            var market   = _currentMarket.GetCurrentMarket();

            var query = _findClient.Search <EntryContentBase>();

            query = ApplyTermFilter(query, filterOptions.Q, filterOptions.TrackData);
            query = query.Filter(x => x.Language.Name.Match(_languageResolver.GetPreferredCulture().Name));

            if (organizationId != Guid.Empty && catalogOrganization != null)
            {
                query = query.Filter(x => x.Outline().PrefixCaseInsensitive(catalogOrganization.Name));
            }

            var nodeContent = currentContent as NodeContent;

            if (nodeContent != null)
            {
                var outline = GetOutline(nodeContent.Code);
                query = query.FilterOutline(new[] { outline });
            }

            query = query.FilterMarket(market);
            var facetQuery = query;

            query = FilterSelected(query, filterOptions.FacetGroups);
            query = ApplyFilters(query, filters);
            query = OrderBy(query, filterOptions);
            //Exclude products from search
            //query = query.Filter(x => (x as ProductContent).ExcludeFromSearch.Match(false));

            if (catalogId != 0)
            {
                query = query.Filter(x => x.CatalogId.Match(catalogId));
            }

            query = query.ApplyBestBets()
                    .Skip((filterOptions.Page - 1) * pageSize)
                    .Take(pageSize)
                    .StaticallyCacheFor(TimeSpan.FromMinutes(1));

            var result = query.GetContentResult();

            return(new ProductSearchResults
            {
                ProductViewModels = CreateProductViewModels(result, currentContent, filterOptions.Q),
                FacetGroups = GetFacetResults(filterOptions.FacetGroups, facetQuery, selectedfacets),
                TotalCount = result.TotalMatching,
                DidYouMeans = string.IsNullOrEmpty(filterOptions.Q) ? null : _findClient.Statistics().GetDidYouMean(filterOptions.Q),
                Query = filterOptions.Q,
            });
        }
        public async Task <ActionResult> Index(SearchResultPage currentPage, CommerceFilterOptionViewModel filterOptions)
        {
            if (filterOptions == null)
            {
                return(Redirect(Url.ContentUrl(ContentReference.StartPage)));
            }

            if (string.IsNullOrEmpty(filterOptions.ViewSwitcher))
            {
                filterOptions.ViewSwitcher = "List";
            }

            var startPage = _contentLoader.Get <DemoHomePage>(ContentReference.StartPage);
            var viewModel = _viewModelFactory.Create <DemoSearchViewModel <SearchResultPage>, SearchResultPage>(currentPage, new CommerceArgs
            {
                FilterOption   = filterOptions,
                SelectedFacets = HttpContext.Request.QueryString["facets"],
                CatalogId      = startPage.SearchCatalog,
            });

            if (viewModel == null)
            {
                return(View(viewModel));
            }

            if (!startPage.ShowProductSearchResults)
            {
                viewModel.ProductViewModels = new List <ProductTileViewModel>();
            }
            else
            {
                var bestBestList    = viewModel.ProductViewModels.Where(x => x.IsBestBetProduct);
                var notBestBestList = viewModel.ProductViewModels.Where(x => !x.IsBestBetProduct);
                viewModel.ProductViewModels = bestBestList.Union(notBestBestList);

                if (filterOptions.Page <= 1 && HttpContext.Request.HttpMethod == "GET")
                {
                    var trackingResult =
                        await _recommendationService.TrackSearch(HttpContext, filterOptions.Q, filterOptions.PageSize,
                                                                 viewModel.ProductViewModels.Select(x => x.Code));

                    viewModel.Recommendations = trackingResult.GetSearchResultRecommendations(_referenceConverter);
                }
            }

            await _cmsTrackingService.SearchedKeyword(_httpContextBase, filterOptions.Q);

            if (startPage.ShowContentSearchResults)
            {
                viewModel.ContentSearchResult = _cmsSearchService.SearchContent(new CmsFilterOptionViewModel()
                {
                    Q             = filterOptions.Q,
                    PageSize      = 5,
                    Page          = filterOptions.SearchContent ? filterOptions.Page : 1,
                    SectionFilter = filterOptions.SectionFilter
                });
            }

            var productCount = viewModel.ProductViewModels?.Count() ?? 0;
            var contentCount = viewModel.ContentSearchResult.Hits?.Count() ?? 0;

            if (productCount + contentCount == 1)
            {
                if (productCount == 1)
                {
                    var product = viewModel.ProductViewModels.FirstOrDefault();
                    return(Redirect(product.Url));
                }
                else
                {
                    var content = viewModel.ContentSearchResult.Hits.FirstOrDefault();
                    return(Redirect(content.Url));
                }
            }

            viewModel.ShowContentSearchResults = startPage.ShowContentSearchResults;
            viewModel.ShowProductSearchResults = startPage.ShowProductSearchResults;

            return(View(viewModel));
        }
 public ActionResult Facet(SearchResultPage currentPage, CommerceFilterOptionViewModel viewModel) => PartialView("_Facet", viewModel);
Example #12
0
 public ActionResult Facet(GenericNode currentContent, CommerceFilterOptionViewModel viewModel) => PartialView("_Facet", viewModel);