Author: doogie
Date: Sat Mar 13 05:48:55 2010 New Revision: 922482 URL: http://svn.apache.org/viewvc?rev=922482&view=rev Log: Add support for filtering products inside categories based on their introductionDate. Modified: ofbiz/trunk/applications/product/servicedef/services_view.xml ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryServices.java Modified: ofbiz/trunk/applications/product/servicedef/services_view.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services_view.xml?rev=922482&r1=922481&r2=922482&view=diff ============================================================================== --- ofbiz/trunk/applications/product/servicedef/services_view.xml (original) +++ ofbiz/trunk/applications/product/servicedef/services_view.xml Sat Mar 13 05:48:55 2010 @@ -122,6 +122,7 @@ under the License. <attribute name="categoryId" type="String" mode="IN"/> <attribute name="productId" type="String" mode="IN"/> <attribute name="activeOnly" type="Boolean" mode="IN" optional="true"/> + <attribute name="introductionDateLimit" type="java.sql.Timestamp" mode="IN" optional="true"/> <attribute name="orderByFields" type="List" mode="IN" optional="true"/> <attribute name="category" type="org.ofbiz.entity.GenericValue" mode="OUT" optional="true"/> <attribute name="previousProductId" type="String" mode="OUT" optional="true"/> @@ -139,6 +140,7 @@ under the License. <attribute name="viewSizeString" type="String" mode="IN" optional="true"/> <attribute name="useCacheForMembers" type="Boolean" mode="IN" optional="true"/> <attribute name="activeOnly" type="Boolean" mode="IN" optional="true"/> + <attribute name="introductionDateLimit" type="java.sql.Timestamp" mode="IN" optional="true"/> <attribute name="orderByFields" type="List" mode="IN" optional="true"/> <attribute name="productCategory" type="org.ofbiz.entity.GenericValue" mode="OUT" optional="true"/> <attribute name="productCategoryMembers" type="java.util.Collection" mode="OUT" optional="true"/> <!-- this list will only contain the limited members if limitView=true --> Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryServices.java?rev=922482&r1=922481&r2=922482&view=diff ============================================================================== --- ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryServices.java (original) +++ ofbiz/trunk/applications/product/src/org/ofbiz/product/category/CategoryServices.java Sat Mar 13 05:48:55 2010 @@ -79,6 +79,7 @@ public class CategoryServices { String productId = (String) context.get("productId"); boolean activeOnly = (context.get("activeOnly") != null ? ((Boolean) context.get("activeOnly")).booleanValue() : true); Integer index = (Integer) context.get("index"); + Timestamp introductionDateLimit = (Timestamp) context.get("introductionDateLimit"); if (index == null && productId == null) { return ServiceUtil.returnError("Both Index and ProductID cannot be null."); @@ -86,7 +87,7 @@ public class CategoryServices { List<String> orderByFields = UtilGenerics.checkList(context.get("orderByFields")); if (orderByFields == null) orderByFields = FastList.newInstance(); - String entityName = getCategoryFindEntityName(delegator, orderByFields); + String entityName = getCategoryFindEntityName(delegator, orderByFields, introductionDateLimit); GenericValue productCategory; List<GenericValue> productCategoryMembers; @@ -101,7 +102,10 @@ public class CategoryServices { if (activeOnly) { productCategoryMembers = EntityUtil.filterByDate(productCategoryMembers, true); } - + if (introductionDateLimit != null) { + EntityCondition condition = EntityCondition.makeCondition(EntityCondition.makeCondition("introductionDate", EntityOperator.EQUALS, null), EntityOperator.OR, EntityCondition.makeCondition("introductionDate", EntityOperator.LESS_THAN_EQUAL_TO, introductionDateLimit)); + productCategoryMembers = EntityUtil.filterByCondition(productCategoryMembers, condition); + } if (productId != null && index == null) { for (GenericValue v: productCategoryMembers) { @@ -140,9 +144,9 @@ public class CategoryServices { return result; } - private static String getCategoryFindEntityName(Delegator delegator, List<String> orderByFields) { + private static String getCategoryFindEntityName(Delegator delegator, List<String> orderByFields, Timestamp introductionDateLimit) { // allow orderByFields to contain fields from the Product entity, if there are such fields - String entityName = "ProductCategoryMember"; + String entityName = introductionDateLimit == null ? "ProductCategoryMember" : "ProductAndCategoryMember"; if (orderByFields == null) { return entityName; } @@ -191,10 +195,11 @@ public class CategoryServices { String productCategoryId = (String) context.get("productCategoryId"); boolean limitView = ((Boolean) context.get("limitView")).booleanValue(); int defaultViewSize = ((Integer) context.get("defaultViewSize")).intValue(); + Timestamp introductionDateLimit = (Timestamp) context.get("introductionDateLimit"); List<String> orderByFields = UtilGenerics.checkList(context.get("orderByFields")); if (orderByFields == null) orderByFields = FastList.newInstance(); - String entityName = getCategoryFindEntityName(delegator, orderByFields); + String entityName = getCategoryFindEntityName(delegator, orderByFields, introductionDateLimit); String prodCatalogId = (String) context.get("prodCatalogId"); @@ -255,6 +260,10 @@ public class CategoryServices { if (activeOnly) { productCategoryMembers = EntityUtil.filterByDate(productCategoryMembers, true); } + if (introductionDateLimit != null) { + EntityCondition condition = EntityCondition.makeCondition(EntityCondition.makeCondition("introductionDate", EntityOperator.EQUALS, null), EntityOperator.OR, EntityCondition.makeCondition("introductionDate", EntityOperator.LESS_THAN_EQUAL_TO, introductionDateLimit)); + productCategoryMembers = EntityUtil.filterByCondition(productCategoryMembers, condition); + } // filter out the view allow before getting the sublist if (UtilValidate.isNotEmpty(viewProductCategoryId)) { @@ -284,6 +293,9 @@ public class CategoryServices { mainCondList.add(EntityCondition.makeCondition("fromDate", EntityOperator.LESS_THAN_EQUAL_TO, nowTimestamp)); mainCondList.add(EntityCondition.makeCondition(EntityCondition.makeCondition("thruDate", EntityOperator.EQUALS, null), EntityOperator.OR, EntityCondition.makeCondition("thruDate", EntityOperator.GREATER_THAN, nowTimestamp))); } + if (introductionDateLimit != null) { + mainCondList.add(EntityCondition.makeCondition(EntityCondition.makeCondition("introductionDate", EntityOperator.EQUALS, null), EntityOperator.OR, EntityCondition.makeCondition("introductionDate", EntityOperator.LESS_THAN_EQUAL_TO, introductionDateLimit))); + } EntityCondition mainCond = EntityCondition.makeCondition(mainCondList, EntityOperator.AND); // set distinct on |
Free forum by Nabble | Edit this page |