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/

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

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/

ashish-18
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"/>