You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by as...@apache.org on 2010/01/08 12:33:22 UTC
svn commit: r897170 - in /ofbiz/trunk:
applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/
applications/product/src/org/ofbiz/product/product/
specialpurpose/ecommerce/webapp/ecommerce/catalog/
Author: ashish
Date: Fri Jan 8 11:33:19 2010
New Revision: 897170
URL: http://svn.apache.org/viewvc?rev=897170&view=rev
Log:
Applied patch from jira issue - OFBIZ-3397- Advance Search should also support the feature base sorting.
User should be able to sort on SIZE and COLORS kind of features associated with Products. This sort will be additional sort with ProductFields and ProductPrice. Here we need to add the additional sort not to change the existing.
This will be achieve in the similar manner the ProductPrice in the ProductSearch.java and ProductSearchSession.java.
Thanks Deepak & Rishi for the contribution.
Modified:
ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/AdvancedSearchOptions.groovy
ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java
ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java
ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/catalog/advancedsearch.ftl
Modified: ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/AdvancedSearchOptions.groovy
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/AdvancedSearchOptions.groovy?rev=897170&r1=897169&r2=897170&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/AdvancedSearchOptions.groovy (original)
+++ ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/AdvancedSearchOptions.groovy Fri Jan 8 11:33:19 2010
@@ -26,6 +26,8 @@
import org.ofbiz.product.catalog.*;
import org.ofbiz.product.feature.*;
import org.ofbiz.product.product.*;
+import org.ofbiz.entity.condition.EntityCondition;
+import org.ofbiz.entity.condition.EntityOperator;
searchCategoryId = parameters.SEARCH_CATEGORY_ID;
if (!searchCategoryId) {
@@ -36,6 +38,9 @@
productFeaturesByTypeMap = ParametricSearch.makeCategoryFeatureLists(searchCategoryId, delegator);
productFeatureTypeIdsOrdered = new TreeSet(productFeaturesByTypeMap.keySet()) as List;
+if(productFeatureTypeIdsOrdered) {
+ context.productFeatureTypes = delegator.findList("ProductFeatureType", EntityCondition.makeCondition("productFeatureTypeId", EntityOperator.IN, productFeatureTypeIdsOrdered), null, null, null, false);
+}
searchOperator = parameters.SEARCH_OPERATOR;
if (!"AND".equals(searchOperator) && !"OR".equals(searchOperator)) {
Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java?rev=897170&r1=897169&r2=897170&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java (original)
+++ ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearch.java Fri Jan 8 11:33:19 2010
@@ -2094,6 +2094,55 @@
}
}
+ public static class SortProductFeature extends ResultSortOrder {
+ protected String productFeatureTypeId;
+ protected boolean ascending;
+
+ public SortProductFeature(String productFeatureTypeId, boolean ascending) {
+ this.productFeatureTypeId = productFeatureTypeId;
+ this.ascending = ascending;
+ }
+
+ @Override
+ public void setSortOrder(ProductSearchContext productSearchContext) {
+ productSearchContext.dynamicViewEntity.addMemberEntity("PFAPPL", "ProductFeatureAndAppl");
+ productSearchContext.dynamicViewEntity.addAlias("PFAPPL", "sortProductFeatureTypeId", "productFeatureTypeId", null, null, null, null);
+ productSearchContext.dynamicViewEntity.addAlias("PFAPPL", "sortProductFeatureId", "productFeatureId", null, null, null, null);
+ productSearchContext.dynamicViewEntity.addAlias("PFAPPL", "sortFromDate", "fromDate", null, null, null, null);
+ productSearchContext.dynamicViewEntity.addAlias("PFAPPL", "sortThruDate", "thruDate", null, null, null, null);
+ productSearchContext.dynamicViewEntity.addViewLink("PROD", "PFAPPL", Boolean.TRUE, UtilMisc.toList(new ModelKeyMap("productId", "productId")));
+ productSearchContext.entityConditionList.add(EntityCondition.makeCondition("sortProductFeatureTypeId", EntityOperator.EQUALS, this.productFeatureTypeId));
+ productSearchContext.entityConditionList.add(EntityCondition.makeCondition("sortFromDate", EntityOperator.LESS_THAN_EQUAL_TO, productSearchContext.nowTimestamp));
+ productSearchContext.entityConditionList.add(EntityCondition.makeCondition(
+ EntityCondition.makeCondition("sortThruDate", EntityOperator.EQUALS, null), EntityOperator.OR,
+ EntityCondition.makeCondition("sortThruDate", EntityOperator.GREATER_THAN_EQUAL_TO, productSearchContext.nowTimestamp)));
+ if (ascending) {
+ productSearchContext.orderByList.add("+sortProductFeatureId");
+ } else {
+ productSearchContext.orderByList.add("-sortProductFeatureId");
+ }
+ productSearchContext.fieldsToSelect.add("sortProductFeatureId");
+ }
+
+ @Override
+ public String getOrderName() {
+ return "ProductFeature:" + this.productFeatureTypeId;
+ }
+
+ @Override
+ public String prettyPrintSortOrder(boolean detailed, Locale locale) {
+ String featureTypeName = null;
+ if (this.productFeatureTypeId != null) {
+ featureTypeName = this.productFeatureTypeId;
+ }
+ return featureTypeName;
+ }
+
+ @Override
+ public boolean isAscending() {
+ return this.ascending;
+ }
+ }
/** A rather large and verbose method that doesn't use the cool constraint and sort order objects */
/*
public static ArrayList parametricKeywordSearchStandAlone(Set featureIdSet, String keywordsString, Delegator delegator, String productCategoryId, boolean includeSubCategories, String visitId, boolean anyPrefix, boolean anySuffix, boolean isAnd) {
Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java?rev=897170&r1=897169&r2=897170&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java (original)
+++ ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java Fri Jan 8 11:33:19 2010
@@ -828,6 +828,12 @@
} else if (sortOrder.startsWith("SPP:")) {
String priceTypeId = sortOrder.substring("SPP:".length());
searchSetSortOrder(new ProductSearch.SortProductPrice(priceTypeId, ascending), session);
+ } else if (sortOrder.startsWith("SortProductFeature:")) {
+ String featureId = sortOrder.substring("SortProductFeature:".length());
+ searchSetSortOrder(new ProductSearch.SortProductFeature(featureId, ascending), session);
+ } else if (sortOrder.startsWith("SPFT:")) {
+ String priceTypeId = sortOrder.substring("SPFT:".length());
+ searchSetSortOrder(new ProductSearch.SortProductPrice(priceTypeId, ascending), session);
}
}
@@ -1151,6 +1157,10 @@
ProductSearch.SortProductPrice spp = (ProductSearch.SortProductPrice) resultSortOrder;
searchParamString.append("&S_O=SPP:");
searchParamString.append(spp.productPriceTypeId);
+ } else if (resultSortOrder instanceof ProductSearch.SortProductFeature) {
+ ProductSearch.SortProductFeature spf = (ProductSearch.SortProductFeature) resultSortOrder;
+ searchParamString.append("&S_O=SPFT:");
+ searchParamString.append(spf.productFeatureTypeId);
}
searchParamString.append("&S_A=");
searchParamString.append(resultSortOrder.isAscending() ? "Y" : "N");
Modified: ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/catalog/advancedsearch.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/catalog/advancedsearch.ftl?rev=897170&r1=897169&r2=897170&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/catalog/advancedsearch.ftl (original)
+++ ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/catalog/advancedsearch.ftl Fri Jan 8 11:33:19 2010
@@ -73,6 +73,11 @@
<option value="SortProductField:averageCustomerRating">${uiLabelMap.ProductCustomerRating}</option>
<option value="SortProductPrice:LIST_PRICE">${uiLabelMap.ProductListPrice}</option>
<option value="SortProductPrice:DEFAULT_PRICE">${uiLabelMap.ProductDefaultPrice}</option>
+ <#if productFeatureTypes?exists && productFeatureTypes?has_content>
+ <#list productFeatureTypes as productFeatureType>
+ <option value="SortProductFeature:${productFeatureType.productFeatureTypeId}">${productFeatureType.description?default(productFeatureType.productFeatureTypeId)}</option>
+ </#list>
+ </#if>
</select>
${uiLabelMap.EcommerceLowToHigh} <input type="radio" name="sortAscending" value="Y" checked="checked"/>
${uiLabelMap.EcommerceHighToLow} <input type="radio" name="sortAscending" value="N"/>