blob: 6996329f0b1d99dee1702942b5ebef8846f70fed [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.ofbiz.base.util.UtilHttp;
import org.ofbiz.entity.util.EntityUtil;
import org.ofbiz.product.catalog.CatalogWorker;
import org.ofbiz.product.category.CategoryContentWrapper;
import org.ofbiz.product.category.CategoryWorker;
import org.ofbiz.product.product.ProductSearch;
import org.ofbiz.product.product.ProductSearchSession;
searchCategoryId = parameters.searchCategoryId;
if (!searchCategoryId) {
searchCategoryId = context.productCategoryId;
}
if (searchCategoryId) {
currentSearchCategory = delegator.findOne("ProductCategory", [productCategoryId: searchCategoryId], false);
CategoryWorker.getRelatedCategories(request, "subCategoryList", searchCategoryId, false);
subCategoryList = request.getAttribute("subCategoryList");
CategoryContentWrapper categoryContentWrapper = new CategoryContentWrapper(currentSearchCategory, request);
context.currentSearchCategory = currentSearchCategory;
context.categoryContentWrapper = categoryContentWrapper;
}
productCategoryId = context.productCategoryId;
if (productCategoryId) {
context.productCategory = delegator.findOne("ProductCategory", [productCategoryId: productCategoryId], false);
parameters.SEARCH_CATEGORY_ID = productCategoryId;
}
if (!parameters.clearSearch || !"N".equals(parameters.clearSearch)) {
ProductSearchSession.searchClear(session);
}
ProductSearchSession.processSearchParameters(parameters, request);
prodCatalogId = CatalogWorker.getCurrentCatalogId(request);
result = ProductSearchSession.getProductSearchResult(request, delegator, prodCatalogId);
context.index = ProductSearchSession.getCategoryCostraintIndex(session);
searchConstraintList = ProductSearchSession.getProductSearchOptions(session).getConstraintList();
if (searchCategoryId) {
productCategoryRollups = delegator.findByAnd("ProductCategoryRollup", [productCategoryId: searchCategoryId], null, false);
productCategoryRollups = EntityUtil.filterByDate(productCategoryRollups);
previousCategoryId = null;
if (productCategoryRollups) {
for (GenericValue categoryRollup : productCategoryRollups) {
categoryConstraint = new ProductSearch.CategoryConstraint(categoryRollup.parentProductCategoryId, true, false);
if (searchConstraintList.contains(categoryConstraint)) {
previousCategoryId = categoryRollup.parentProductCategoryId;
context.previousCategoryId = previousCategoryId;
}
}
}
}
context.showSubCats = true;
if (subCategoryList) {
thisSubCategoryList = [];
subCategoryList.each { subCategory ->
categoryCount = ProductSearchSession.getCountForProductCategory(subCategory.productCategoryId, session, delegator);
if (categoryCount > 0) {
subCategoryContentWrapper = new CategoryContentWrapper(subCategory, request);
thisSubCategoryList.add([productCategoryId: subCategory.productCategoryId, categoryName: subCategory.categoryName, count: categoryCount, categoryContentWrapper: subCategoryContentWrapper]);
}
}
if (thisSubCategoryList) {
context.subCategoryList = thisSubCategoryList;
} else {
context.showSubCats = false;
}
} else {
context.showSubCats = false;
}
context.showColors = true;
colors = ProductSearchSession.listCountByFeatureForType("COLOR", session, delegator);
colorFeatureType = delegator.findOne("ProductFeatureType", [productFeatureTypeId: "COLOR"], false);
if (colors) {
colors.each { color ->
featureConstraint = new ProductSearch.FeatureConstraint(color.productFeatureId, false);
if (searchConstraintList.contains(featureConstraint)) {
context.showColors=false;
}
}
} else {
context.showColors = false;
}
if (context.showColors) {
context.colors = colors;
context.colorFeatureType = colorFeatureType;
}
availablePriceRangeList = [[low: "0", high: "10"], [low: "10", high: "20"], [low: "20", high: "30"], [low: "30", high: "40"], [low: "40", high: "50"], [low: "50", high: "60"], [low: "60", high: "70"], [low: "70", high: "80"], [low: "80", high: "90"], [low: "90", high: "100"]];
priceRangeList = [];
context.showPriceRange = true;
availablePriceRangeList.each { priceRange ->
priceRangeConstraint = new ProductSearch.ListPriceRangeConstraint(new BigDecimal(priceRange.low), new BigDecimal(priceRange.high), UtilHttp.getCurrencyUom(request));
if (searchConstraintList.contains(priceRangeConstraint)) {
context.showPriceRange = false;
} else {
priceRangeCount = ProductSearchSession.getCountForListPriceRange(new BigDecimal(priceRange.low), new BigDecimal(priceRange.high), session, delegator);
if (priceRangeCount != 0) {
priceRangeList.add([low: priceRange.low, high: priceRange.high, count: priceRangeCount]);
}
}
}
if (!priceRangeList) {
context.showPriceRange = false;
}
if (context.showPriceRange) {
context.priceRangeList = priceRangeList;
}
context.productIds = result.productIds;
context.viewIndex = result.viewIndex;
context.viewSize = result.viewSize;
context.listSize = result.listSize;
context.lowIndex = result.lowIndex;
context.highIndex = result.highIndex;
context.paging = result.paging;
context.previousViewSize = result.previousViewSize;
context.searchConstraintStrings = result.searchConstraintStrings;