public static Query CreateQueryFor(
            GetPseudoSkusByCategoryRequest getPseudoSkusByCategoryRequest)
        {
            Query pseudoSkuQuery = new Query();
            Query colorQuery     = new Query();
            Query functionQuery  = new Query();
            Query sizeQuery      = new Query();

            colorQuery.QueryOperator = QueryOperator.Or;
            foreach (int id in getPseudoSkusByCategoryRequest.ColorIds)
            {
                colorQuery.Add(Criterion.Create <PseudoSku>(p => p.Color.Id, id,
                                                            CriteriaOperator.Equal));
            }

            if (colorQuery.Criteria.Count() > 0)
            {
                pseudoSkuQuery.AddSubQuery(colorQuery);
            }

            functionQuery.QueryOperator = QueryOperator.Or;
            foreach (int id in getPseudoSkusByCategoryRequest.FunctionIds)
            {
                functionQuery.Add(Criterion.Create <PseudoSku>(p => p.Function.Id, id,
                                                               CriteriaOperator.Equal));
            }

            if (functionQuery.Criteria.Count() > 0)
            {
                pseudoSkuQuery.AddSubQuery(functionQuery);
            }

            sizeQuery.QueryOperator = QueryOperator.Or;
            foreach (int id in getPseudoSkusByCategoryRequest.SizeIds)
            {
                sizeQuery.Add(Criterion.Create <PseudoSku>(p => p.Size.Id, id,
                                                           CriteriaOperator.Equal));
            }

            if (sizeQuery.Criteria.Count() > 0)
            {
                pseudoSkuQuery.AddSubQuery(sizeQuery);
            }

            pseudoSkuQuery.Add(Criterion.Create <PseudoSku>(p => p.Category.Id,
                                                            getPseudoSkusByCategoryRequest.CategoryId, CriteriaOperator.Equal));

            return(pseudoSkuQuery);
        }
        //Gives pseudo SKUs that match a criterion of category, color, function and size
        private IEnumerable <PseudoSku> GetAllPseudoSkusMatchingQueryAndSort(GetPseudoSkusByCategoryRequest request, Query pseudoSkuQuery)
        {
            IEnumerable <PseudoSku> pseudoSkusMatchingRefinement = _pseudoSkuRepository.FindBy(pseudoSkuQuery);

            switch (request.SortBy)
            {
            case PseudoSkusSortBy.PriceLowToHigh:
                pseudoSkusMatchingRefinement = pseudoSkusMatchingRefinement.OrderBy(p => p.Price);
                break;

            case PseudoSkusSortBy.PriceHighToLow:
                pseudoSkusMatchingRefinement = pseudoSkusMatchingRefinement.OrderByDescending(p => p.Price);
                break;
            }
            return(pseudoSkusMatchingRefinement);
        }
        //Gives all pseudo for a category e.g. print, solution etc
        public GetPseudoSkusByCategoryResponse GetPseudoSkusByCategory(GetPseudoSkusByCategoryRequest request)
        {
            GetPseudoSkusByCategoryResponse response;

            Query productQuery = PseudoSkuSearchRequestGenerator.CreateQueryFor(request);

            IEnumerable <PseudoSku> pseudoSkusMatchingRefinement = GetAllPseudoSkusMatchingQueryAndSort(request, productQuery);

            response = pseudoSkusMatchingRefinement.CreateProductSearchResultFrom(request);

            response.SelectedCategoryName =
                _categoryRepository.FindBy(request.CategoryId).Name;


            return(response);
        }
Example #4
0
        public static GetPseudoSkusByCategoryResponse CreateProductSearchResultFrom(this IEnumerable <PseudoSku> pseudoSkusMatchingRefinement, GetPseudoSkusByCategoryRequest request)
        {
            var pseudoSkuSearchResultView = new GetPseudoSkusByCategoryResponse();

            IEnumerable <PseudoSkuTitle> pseudoSkusFound = pseudoSkusMatchingRefinement.Select(p => p.Title).Distinct();

            pseudoSkuSearchResultView.SelectedCategory = request.CategoryId;

            pseudoSkuSearchResultView.NumberOfTitlesFound = pseudoSkusFound.Count();

            pseudoSkuSearchResultView.TotalNumberOfPages = NoOfResultPagesGiven(request.NumberOfResultsPerPage,
                                                                                pseudoSkuSearchResultView.NumberOfTitlesFound);

            pseudoSkuSearchResultView.RefinementGroups = GenerateAvailableProductRefinementsFrom(pseudoSkusFound);

            pseudoSkuSearchResultView.Products = CropProductListToSatisfyGivenIndex(request.Index, request.NumberOfResultsPerPage, pseudoSkusFound);

            return(pseudoSkuSearchResultView);
        }