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