You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by gil portenseigne <gi...@nereide.fr> on 2014/10/23 17:57:33 UTC

Re: svn commit: r1632760 - in /ofbiz/branches/release13.07/applications: order/webapp/ordermgr/WEB-INF/actions/entry/catalog/ order/webapp/ordermgr/entry/catalog/ product/servicedef/ product/src/org/ofbiz/product/category/ product/src/org/ofbiz/product/pro...

I ashish,

Is there a reason to introduce these imports in : CategoryServices.java, 
these might be remains of devel

  import java.io.Writer;
+import java.math.BigDecimal;
  import java.sql.Timestamp;
+import java.util.ArrayList;
  import java.util.List;

[...]

  import org.ofbiz.entity.util.EntityListIterator;
+import org.ofbiz.entity.util.EntityTypeUtil;
  import org.ofbiz.entity.util.EntityUtil;
[...]
+import org.ofbiz.service.GenericServiceException;

My eclipse tell me they are no use here :).

Not so important i guess, but to have less import is better.

Other thing is formatting where you remove an empty line for spaces :

@@ -237,7 +245,7 @@ public class CategoryServices {
          }
  
          Timestamp nowTimestamp = UtilDateTime.nowTimestamp();
-
+
          int viewIndex = 0;
          try {


Best Regards

Gil

Le 18/10/2014 13:23, ashish@apache.org a écrit :
> Author: ashish
> Date: Sat Oct 18 11:23:45 2014
> New Revision: 1632760
>
> URL: http://svn.apache.org/r1632760
> Log:
> Applied bug fix from trunk r1632750.
> ===========================================
> Applied patch from jira issue - OFBIZ-4528 - Out of stock products screw up the pagination during category browsing.
> ===================================================================
> Pagination is handled in getProductCategoryAndLimitedMembers
> Then the out of stock filtering is done in CategoryDetail.groovy.
> Hence the pagination is screwed up. Certain pages might show less records or no records based upon data condition.
> ===================================================================
> Thanks Arun for the contribution and Thanks Kiran for creating the issue.
>
> Modified:
>      ofbiz/branches/release13.07/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/CategoryDetail.groovy
>      ofbiz/branches/release13.07/applications/order/webapp/ordermgr/entry/catalog/categorydetail.ftl
>      ofbiz/branches/release13.07/applications/product/servicedef/services_view.xml
>      ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/category/CategoryServices.java
>      ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/product/ProductWorker.java
>
> Modified: ofbiz/branches/release13.07/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/CategoryDetail.groovy
> URL: http://svn.apache.org/viewvc/ofbiz/branches/release13.07/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/CategoryDetail.groovy?rev=1632760&r1=1632759&r2=1632760&view=diff
> ==============================================================================
> --- ofbiz/branches/release13.07/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/CategoryDetail.groovy (original)
> +++ ofbiz/branches/release13.07/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/CategoryDetail.groovy Sat Oct 18 11:23:45 2014
> @@ -54,52 +54,20 @@ andMap = [productCategoryId : productCat
>           limitView : limitView];
>   andMap.put("prodCatalogId", currentCatalogId);
>   andMap.put("checkViewAllow", true);
> +// Prevents out of stock product to be displayed on site
> +productStore = ProductStoreWorker.getProductStore(request);
> +if (productStore) {
> +    andMap.put("productStoreId", productStore.productStoreId);
> +}
>   if (context.orderByFields) {
>       andMap.put("orderByFields", context.orderByFields);
>   } else {
>       andMap.put("orderByFields", ["sequenceNum", "productId"]);
>   }
>   catResult = dispatcher.runSync("getProductCategoryAndLimitedMembers", andMap);
> -
>   productCategory = catResult.productCategory;
>   productCategoryMembers = catResult.productCategoryMembers;
> -
> -// Prevents out of stock product to be displayed on site
> -productStore = ProductStoreWorker.getProductStore(request);
> -if(productStore) {
> -    if("N".equals(productStore.showOutOfStockProducts)) {
> -        productsInStock = [];
> -        productCategoryMembers.each { productCategoryMember ->
> -            product = delegator.findOne("Product", [productId : productCategoryMember.productId], true);
> -            boolean isMarketingPackage = EntityTypeUtil.hasParentType(delegator, "ProductType", "productTypeId", product.productTypeId, "parentTypeId", "MARKETING_PKG");
> -            context.isMarketingPackage = (isMarketingPackage? "true": "false");
> -            if (isMarketingPackage) {
> -                resultOutput = dispatcher.runSync("getMktgPackagesAvailable", [productId : productCategoryMember.productId]);
> -                availableInventory = resultOutput.availableToPromiseTotal;
> -                if(availableInventory > 0) {
> -                    productsInStock.add(productCategoryMember);
> -                }
> -            } else {
> -                facilities = delegator.findList("ProductFacility", EntityCondition.makeCondition([productId : productCategoryMember.productId]), null, null, null, false);
> -                availableInventory = 0.0;
> -                if (facilities) {
> -                    facilities.each { facility ->
> -                        lastInventoryCount = facility.lastInventoryCount;
> -                        if (lastInventoryCount != null) {
> -                            availableInventory += lastInventoryCount;
> -                        }
> -                    }
> -                    if (availableInventory > 0) {
> -                        productsInStock.add(productCategoryMember);
> -                    }
> -                }
> -            }
> -        }
> -        context.productCategoryMembers = productsInStock;
> -    } else {
> -        context.productCategoryMembers = productCategoryMembers;
> -    }
> -}
> +context.productCategoryMembers = productCategoryMembers;
>   context.productCategory = productCategory;
>   context.viewIndex = catResult.viewIndex;
>   context.viewSize = catResult.viewSize;
>
> Modified: ofbiz/branches/release13.07/applications/order/webapp/ordermgr/entry/catalog/categorydetail.ftl
> URL: http://svn.apache.org/viewvc/ofbiz/branches/release13.07/applications/order/webapp/ordermgr/entry/catalog/categorydetail.ftl?rev=1632760&r1=1632759&r2=1632760&view=diff
> ==============================================================================
> --- ofbiz/branches/release13.07/applications/order/webapp/ordermgr/entry/catalog/categorydetail.ftl (original)
> +++ ofbiz/branches/release13.07/applications/order/webapp/ordermgr/entry/catalog/categorydetail.ftl Sat Oct 18 11:23:45 2014
> @@ -41,14 +41,14 @@ under the License.
>   </script>
>   
>   <#macro paginationControls>
> -    <#assign viewIndexMax = Static["java.lang.Math"].ceil((listSize - 1)?double / viewSize?double)>
> +    <#assign viewIndexMax = Static["java.lang.Math"].ceil((listSize)?double / viewSize?double)>
>         <#if (viewIndexMax?int > 0)>
>           <div class="product-prevnext">
>               <select name="pageSelect" onchange="callDocumentByPaginate(this[this.selectedIndex].value);">
>                   <option value="#">${uiLabelMap.CommonPage} ${viewIndex?int + 1} ${uiLabelMap.CommonOf} ${viewIndexMax}</option>
>                   <#if (viewIndex?int > 1)>
> -                    <#list 0..viewIndexMax as curViewNum>
> -                         <option value="${productCategoryId}~${viewSize}~${curViewNum?int}">${uiLabelMap.CommonGotoPage} ${curViewNum + 1}</option>
> +                    <#list 1..viewIndexMax as curViewNum>
> +                         <option value="${productCategoryId}~${viewSize}~${curViewNum-1?int}">${uiLabelMap.CommonGotoPage} ${curViewNum}</option>
>                       </#list>
>                   </#if>
>               </select>
>
> Modified: ofbiz/branches/release13.07/applications/product/servicedef/services_view.xml
> URL: http://svn.apache.org/viewvc/ofbiz/branches/release13.07/applications/product/servicedef/services_view.xml?rev=1632760&r1=1632759&r2=1632760&view=diff
> ==============================================================================
> --- ofbiz/branches/release13.07/applications/product/servicedef/services_view.xml (original)
> +++ ofbiz/branches/release13.07/applications/product/servicedef/services_view.xml Sat Oct 18 11:23:45 2014
> @@ -152,6 +152,7 @@ under the License.
>           <attribute name="introductionDateLimit" type="java.sql.Timestamp" mode="IN" optional="true"/>
>           <attribute name="releaseDateLimit" type="java.sql.Timestamp" mode="IN" optional="true"/>
>           <attribute name="orderByFields" type="List" mode="IN" optional="true"/>
> +        <attribute name="productStoreId" mode="IN" type="String" 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 -->
>           <attribute name="viewIndex" type="Integer" mode="OUT" optional="false"/> <!-- this is a 1 based index, ie the first results are in index 1 -->
>
> Modified: ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/category/CategoryServices.java
> URL: http://svn.apache.org/viewvc/ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/category/CategoryServices.java?rev=1632760&r1=1632759&r2=1632760&view=diff
> ==============================================================================
> --- ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/category/CategoryServices.java (original)
> +++ ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/category/CategoryServices.java Sat Oct 18 11:23:45 2014
> @@ -21,7 +21,9 @@ package org.ofbiz.product.category;
>   import java.io.IOException;
>   import java.io.UnsupportedEncodingException;
>   import java.io.Writer;
> +import java.math.BigDecimal;
>   import java.sql.Timestamp;
> +import java.util.ArrayList;
>   import java.util.List;
>   import java.util.Locale;
>   import java.util.Map;
> @@ -35,6 +37,7 @@ import javolution.util.FastMap;
>   import net.sf.json.JSONObject;
>   
>   import org.ofbiz.base.util.Debug;
> +import org.ofbiz.base.util.GeneralException;
>   import org.ofbiz.base.util.UtilDateTime;
>   import org.ofbiz.base.util.UtilGenerics;
>   import org.ofbiz.base.util.UtilMisc;
> @@ -48,9 +51,13 @@ import org.ofbiz.entity.condition.Entity
>   import org.ofbiz.entity.model.ModelEntity;
>   import org.ofbiz.entity.util.EntityFindOptions;
>   import org.ofbiz.entity.util.EntityListIterator;
> +import org.ofbiz.entity.util.EntityTypeUtil;
>   import org.ofbiz.entity.util.EntityUtil;
>   import org.ofbiz.product.catalog.CatalogWorker;
> +import org.ofbiz.product.product.ProductWorker;
>   import org.ofbiz.service.DispatchContext;
> +import org.ofbiz.service.GenericServiceException;
> +import org.ofbiz.service.LocalDispatcher;
>   import org.ofbiz.service.ServiceUtil;
>   
>   /**
> @@ -212,6 +219,7 @@ public class CategoryServices {
>   
>       public static Map<String, Object> getProductCategoryAndLimitedMembers(DispatchContext dctx, Map<String, ? extends Object> context) {
>           Delegator delegator = dctx.getDelegator();
> +        LocalDispatcher dispatcher = dctx.getDispatcher();
>           String productCategoryId = (String) context.get("productCategoryId");
>           boolean limitView = ((Boolean) context.get("limitView")).booleanValue();
>           int defaultViewSize = ((Integer) context.get("defaultViewSize")).intValue();
> @@ -237,7 +245,7 @@ public class CategoryServices {
>           }
>   
>           Timestamp nowTimestamp = UtilDateTime.nowTimestamp();
> -
> +
>           int viewIndex = 0;
>           try {
>               viewIndex = Integer.valueOf((String) context.get("viewIndexString")).intValue();
> @@ -272,7 +280,18 @@ public class CategoryServices {
>               lowIndex = 0;
>               highIndex = 0;
>           }
> -
> +        Boolean filterOutOfStock = false ;
> +        try {
> +            String productStoreId = (String) context.get("productStoreId");
> +            if (UtilValidate.isNotEmpty(productStoreId)) {
> +                GenericValue productStore = delegator.findOne("ProductStore", UtilMisc.toMap("productStoreId", productStoreId), false);
> +                if (productStore != null && "N".equals(productStore.getString("showOutOfStockProducts"))) {
> +                    filterOutOfStock = true;
> +                }
> +            }
> +        } catch (GenericEntityException e) {
> +            Debug.logWarning(e.getMessage(), module);
> +        }
>           List<GenericValue> productCategoryMembers = null;
>           if (productCategory != null) {
>               try {
> @@ -293,7 +312,16 @@ public class CategoryServices {
>                       if (!filterConditions.isEmpty()) {
>                           productCategoryMembers = EntityUtil.filterByCondition(productCategoryMembers, EntityCondition.makeCondition(filterConditions, EntityOperator.AND));
>                       }
> -
> +
> +                    // filter out of stock products
> +                    if (filterOutOfStock) {
> +                        try {
> +                            productCategoryMembers = ProductWorker.filterOutOfStockProducts(productCategoryMembers, dispatcher, delegator);
> +                        } catch (GeneralException e) {
> +                            Debug.logWarning("Problem filtering out of stock products :"+e.getMessage(), module);
> +                        }
> +
> +                    }
>                       // filter out the view allow before getting the sublist
>                       if (UtilValidate.isNotEmpty(viewProductCategoryId)) {
>                           productCategoryMembers = CategoryWorker.filterProductsInCategory(delegator, productCategoryMembers, viewProductCategoryId);
> @@ -371,7 +399,15 @@ public class CategoryServices {
>                           lowIndex = 1;
>                           highIndex = listSize;
>                       }
> -
> +                    // filter out of stock products
> +                    if (filterOutOfStock) {
> +                        try {
> +                            productCategoryMembers = ProductWorker.filterOutOfStockProducts(productCategoryMembers, dispatcher, delegator);
> +                            listSize = productCategoryMembers.size();
> +                        } catch (GeneralException e) {
> +                            Debug.logWarning("Problem filtering out of stock products :"+e.getMessage(), module);
> +                        }
> +                    }
>                       // null safety
>                       if (productCategoryMembers == null) {
>                           productCategoryMembers = FastList.newInstance();
> @@ -399,7 +435,7 @@ public class CategoryServices {
>           if (productCategoryMembers != null) result.put("productCategoryMembers", productCategoryMembers);
>           return result;
>       }
> -
> +
>       // Please note : the structure of map in this function is according to the JSON data map of the jsTree
>       @SuppressWarnings("unchecked")
>       public static void getChildCategoryTree(HttpServletRequest request, HttpServletResponse response){
>
> Modified: ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/product/ProductWorker.java
> URL: http://svn.apache.org/viewvc/ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/product/ProductWorker.java?rev=1632760&r1=1632759&r2=1632760&view=diff
> ==============================================================================
> --- ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/product/ProductWorker.java (original)
> +++ ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/product/ProductWorker.java Sat Oct 18 11:23:45 2014
> @@ -21,6 +21,7 @@ package org.ofbiz.product.product;
>   import java.math.BigDecimal;
>   import java.math.MathContext;
>   import java.sql.Timestamp;
> +import java.util.ArrayList;
>   import java.util.LinkedHashMap;
>   import java.util.List;
>   import java.util.Locale;
> @@ -32,6 +33,7 @@ import javolution.util.FastMap;
>   import javolution.util.FastSet;
>   
>   import org.ofbiz.base.util.Debug;
> +import org.ofbiz.base.util.GeneralException;
>   import org.ofbiz.base.util.UtilDateTime;
>   import org.ofbiz.base.util.UtilMisc;
>   import org.ofbiz.base.util.UtilValidate;
> @@ -1205,4 +1207,43 @@ nextProd:
>   
>           return false;
>       }
> +
> +    // Method to filter-out out of stock products
> +    public static List<GenericValue> filterOutOfStockProducts (List<GenericValue> productsToFilter, LocalDispatcher dispatcher, Delegator delegator) throws GeneralException {
> +        ArrayList<GenericValue> productsInStock = new ArrayList<GenericValue>();
> +        if (UtilValidate.isNotEmpty(productsToFilter)) {
> +            for (GenericValue genericRecord : productsToFilter) {
> +                String productId = genericRecord.getString("productId");
> +                GenericValue product = null;
> +                product = delegator.findOne("Product", UtilMisc.toMap("productId", productId), true);
> +                Boolean isMarketingPackage = EntityTypeUtil.hasParentType(delegator, "ProductType", "productTypeId", product.getString("productTypeId"), "parentTypeId", "MARKETING_PKG");
> +
> +                if ( UtilValidate.isNotEmpty(isMarketingPackage) && isMarketingPackage) {
> +                    Map<String, Object> resultOutput = new FastMap<String, Object>();
> +                    resultOutput = dispatcher.runSync("getMktgPackagesAvailable", UtilMisc.toMap("productId" ,productId));
> +                    Debug.logWarning("Error getting available marketing package.", module);
> +
> +                    BigDecimal availableInventory = (BigDecimal) resultOutput.get("availableToPromiseTotal");
> +                    if(availableInventory.compareTo(BigDecimal.ZERO) > 0) {
> +                        productsInStock.add(genericRecord);
> +                    }
> +                } else {
> +                    List<GenericValue> facilities = delegator.findList("ProductFacility", EntityCondition.makeCondition("productId",EntityOperator.EQUALS, productId), null, null, null, false);
> +                    BigDecimal availableInventory = BigDecimal.ZERO;
> +                    if (UtilValidate.isNotEmpty(facilities)) {
> +                        for (GenericValue facility : facilities) {
> +                            BigDecimal lastInventoryCount = facility.getBigDecimal("lastInventoryCount");
> +                            if (lastInventoryCount != null) {
> +                                availableInventory = lastInventoryCount.add(availableInventory);
> +                            }
> +                        }
> +                        if (availableInventory.compareTo(BigDecimal.ZERO) > 0) {
> +                            productsInStock.add(genericRecord);
> +                        }
> +                    }
> +                }
> +            }
> +        }
> +        return productsInStock;
> +    }
>   }
>
>


-- 

<www.nereide.fr>

	Gil Portenseigne
Consultant ERP OFBiz
Société Néréide
3b Les isles
37270 Veretz
Tel : 09 74 53 46 09, puis 1, poste 61
Mob : 06 82 740 444
www.nereide.fr <http://www.nereide.fr>

Membre d'OFBiz France
www.ofbiz-fr.org <http://www.ofbiz-fr.org>


Re: svn commit: r1632760 - in /ofbiz/branches/release13.07/applications: order/webapp/ordermgr/WEB-INF/actions/entry/catalog/ order/webapp/ordermgr/entry/catalog/ product/servicedef/ product/src/org/ofbiz/product/category/ product/src/org/ofbiz/product/pro...

Posted by Ashish Vijaywargiya <vi...@gmail.com>.
I have removed the unused import in commit revision 1635489. Thanks!

--
Kind Regards,
Ashish Vijaywargiya

On Fri, Oct 24, 2014 at 1:09 AM, Ashish Vijaywargiya <
ashish.vijaywargiya@hotwaxmedia.com> wrote:

> Hello Gil,
>
> I will get back to this conversation in next week. Thanks!
>
> --
> Ashish
>
> ----- gil portenseigne <gi...@nereide.fr> wrote:
> | I ashish,
> |
> | Is there a reason to introduce these imports in : CategoryServices.java,
> | these might be remains of devel
> |
> |   import java.io.Writer;
> | +import java.math.BigDecimal;
> |   import java.sql.Timestamp;
> | +import java.util.ArrayList;
> |   import java.util.List;
> |
> | [...]
> |
> |   import org.ofbiz.entity.util.EntityListIterator;
> | +import org.ofbiz.entity.util.EntityTypeUtil;
> |   import org.ofbiz.entity.util.EntityUtil;
> | [...]
> | +import org.ofbiz.service.GenericServiceException;
> |
> | My eclipse tell me they are no use here :).
> |
> | Not so important i guess, but to have less import is better.
> |
> | Other thing is formatting where you remove an empty line for spaces :
> |
> | @@ -237,7 +245,7 @@ public class CategoryServices {
> |           }
> |
> |           Timestamp nowTimestamp = UtilDateTime.nowTimestamp();
> | -
> | +
> |           int viewIndex = 0;
> |           try {
> |
> |
> | Best Regards
> |
> | Gil
> |
> |
> | --
> |
> | <www.nereide.fr>
> |
> |       Gil Portenseigne
> | Consultant ERP OFBiz
> | Société Néréide
> | 3b Les isles
> | 37270 Veretz
> | Tel : 09 74 53 46 09, puis 1, poste 61
> | Mob : 06 82 740 444
> | www.nereide.fr <http://www.nereide.fr>
> |
> | Membre d'OFBiz France
> | www.ofbiz-fr.org <http://www.ofbiz-fr.org>
> |
>
>

Re: svn commit: r1632760 - in /ofbiz/branches/release13.07/applications: order/webapp/ordermgr/WEB-INF/actions/entry/catalog/ order/webapp/ordermgr/entry/catalog/ product/servicedef/ product/src/org/ofbiz/product/category/ product/src/org/ofbiz/product/pro...

Posted by Ashish Vijaywargiya <as...@hotwaxmedia.com>.
Hello Gil, 

I will get back to this conversation in next week. Thanks!

--
Ashish

----- gil portenseigne <gi...@nereide.fr> wrote:
| I ashish,
| 
| Is there a reason to introduce these imports in : CategoryServices.java, 
| these might be remains of devel
| 
|   import java.io.Writer;
| +import java.math.BigDecimal;
|   import java.sql.Timestamp;
| +import java.util.ArrayList;
|   import java.util.List;
| 
| [...]
| 
|   import org.ofbiz.entity.util.EntityListIterator;
| +import org.ofbiz.entity.util.EntityTypeUtil;
|   import org.ofbiz.entity.util.EntityUtil;
| [...]
| +import org.ofbiz.service.GenericServiceException;
| 
| My eclipse tell me they are no use here :).
| 
| Not so important i guess, but to have less import is better.
| 
| Other thing is formatting where you remove an empty line for spaces :
| 
| @@ -237,7 +245,7 @@ public class CategoryServices {
|           }
|   
|           Timestamp nowTimestamp = UtilDateTime.nowTimestamp();
| -
| +
|           int viewIndex = 0;
|           try {
| 
| 
| Best Regards
| 
| Gil
| 
| Le 18/10/2014 13:23, ashish@apache.org a écrit :
| > Author: ashish
| > Date: Sat Oct 18 11:23:45 2014
| > New Revision: 1632760
| >
| > URL: http://svn.apache.org/r1632760
| > Log:
| > Applied bug fix from trunk r1632750.
| > ===========================================
| > Applied patch from jira issue - OFBIZ-4528 - Out of stock products screw up the pagination during category browsing.
| > ===================================================================
| > Pagination is handled in getProductCategoryAndLimitedMembers
| > Then the out of stock filtering is done in CategoryDetail.groovy.
| > Hence the pagination is screwed up. Certain pages might show less records or no records based upon data condition.
| > ===================================================================
| > Thanks Arun for the contribution and Thanks Kiran for creating the issue.
| >
| > Modified:
| >      ofbiz/branches/release13.07/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/CategoryDetail.groovy
| >      ofbiz/branches/release13.07/applications/order/webapp/ordermgr/entry/catalog/categorydetail.ftl
| >      ofbiz/branches/release13.07/applications/product/servicedef/services_view.xml
| >      ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/category/CategoryServices.java
| >      ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/product/ProductWorker.java
| >
| > Modified: ofbiz/branches/release13.07/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/CategoryDetail.groovy
| > URL: http://svn.apache.org/viewvc/ofbiz/branches/release13.07/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/CategoryDetail.groovy?rev=1632760&r1=1632759&r2=1632760&view=diff
| > ==============================================================================
| > --- ofbiz/branches/release13.07/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/CategoryDetail.groovy (original)
| > +++ ofbiz/branches/release13.07/applications/order/webapp/ordermgr/WEB-INF/actions/entry/catalog/CategoryDetail.groovy Sat Oct 18 11:23:45 2014
| > @@ -54,52 +54,20 @@ andMap = [productCategoryId : productCat
| >           limitView : limitView];
| >   andMap.put("prodCatalogId", currentCatalogId);
| >   andMap.put("checkViewAllow", true);
| > +// Prevents out of stock product to be displayed on site
| > +productStore = ProductStoreWorker.getProductStore(request);
| > +if (productStore) {
| > +    andMap.put("productStoreId", productStore.productStoreId);
| > +}
| >   if (context.orderByFields) {
| >       andMap.put("orderByFields", context.orderByFields);
| >   } else {
| >       andMap.put("orderByFields", ["sequenceNum", "productId"]);
| >   }
| >   catResult = dispatcher.runSync("getProductCategoryAndLimitedMembers", andMap);
| > -
| >   productCategory = catResult.productCategory;
| >   productCategoryMembers = catResult.productCategoryMembers;
| > -
| > -// Prevents out of stock product to be displayed on site
| > -productStore = ProductStoreWorker.getProductStore(request);
| > -if(productStore) {
| > -    if("N".equals(productStore.showOutOfStockProducts)) {
| > -        productsInStock = [];
| > -        productCategoryMembers.each { productCategoryMember ->
| > -            product = delegator.findOne("Product", [productId : productCategoryMember.productId], true);
| > -            boolean isMarketingPackage = EntityTypeUtil.hasParentType(delegator, "ProductType", "productTypeId", product.productTypeId, "parentTypeId", "MARKETING_PKG");
| > -            context.isMarketingPackage = (isMarketingPackage? "true": "false");
| > -            if (isMarketingPackage) {
| > -                resultOutput = dispatcher.runSync("getMktgPackagesAvailable", [productId : productCategoryMember.productId]);
| > -                availableInventory = resultOutput.availableToPromiseTotal;
| > -                if(availableInventory > 0) {
| > -                    productsInStock.add(productCategoryMember);
| > -                }
| > -            } else {
| > -                facilities = delegator.findList("ProductFacility", EntityCondition.makeCondition([productId : productCategoryMember.productId]), null, null, null, false);
| > -                availableInventory = 0.0;
| > -                if (facilities) {
| > -                    facilities.each { facility ->
| > -                        lastInventoryCount = facility.lastInventoryCount;
| > -                        if (lastInventoryCount != null) {
| > -                            availableInventory += lastInventoryCount;
| > -                        }
| > -                    }
| > -                    if (availableInventory > 0) {
| > -                        productsInStock.add(productCategoryMember);
| > -                    }
| > -                }
| > -            }
| > -        }
| > -        context.productCategoryMembers = productsInStock;
| > -    } else {
| > -        context.productCategoryMembers = productCategoryMembers;
| > -    }
| > -}
| > +context.productCategoryMembers = productCategoryMembers;
| >   context.productCategory = productCategory;
| >   context.viewIndex = catResult.viewIndex;
| >   context.viewSize = catResult.viewSize;
| >
| > Modified: ofbiz/branches/release13.07/applications/order/webapp/ordermgr/entry/catalog/categorydetail.ftl
| > URL: http://svn.apache.org/viewvc/ofbiz/branches/release13.07/applications/order/webapp/ordermgr/entry/catalog/categorydetail.ftl?rev=1632760&r1=1632759&r2=1632760&view=diff
| > ==============================================================================
| > --- ofbiz/branches/release13.07/applications/order/webapp/ordermgr/entry/catalog/categorydetail.ftl (original)
| > +++ ofbiz/branches/release13.07/applications/order/webapp/ordermgr/entry/catalog/categorydetail.ftl Sat Oct 18 11:23:45 2014
| > @@ -41,14 +41,14 @@ under the License.
| >   </script>
| >   
| >   <#macro paginationControls>
| > -    <#assign viewIndexMax = Static["java.lang.Math"].ceil((listSize - 1)?double / viewSize?double)>
| > +    <#assign viewIndexMax = Static["java.lang.Math"].ceil((listSize)?double / viewSize?double)>
| >         <#if (viewIndexMax?int > 0)>
| >           <div class="product-prevnext">
| >               <select name="pageSelect" onchange="callDocumentByPaginate(this[this.selectedIndex].value);">
| >                   <option value="#">${uiLabelMap.CommonPage} ${viewIndex?int + 1} ${uiLabelMap.CommonOf} ${viewIndexMax}</option>
| >                   <#if (viewIndex?int > 1)>
| > -                    <#list 0..viewIndexMax as curViewNum>
| > -                         <option value="${productCategoryId}~${viewSize}~${curViewNum?int}">${uiLabelMap.CommonGotoPage} ${curViewNum + 1}</option>
| > +                    <#list 1..viewIndexMax as curViewNum>
| > +                         <option value="${productCategoryId}~${viewSize}~${curViewNum-1?int}">${uiLabelMap.CommonGotoPage} ${curViewNum}</option>
| >                       </#list>
| >                   </#if>
| >               </select>
| >
| > Modified: ofbiz/branches/release13.07/applications/product/servicedef/services_view.xml
| > URL: http://svn.apache.org/viewvc/ofbiz/branches/release13.07/applications/product/servicedef/services_view.xml?rev=1632760&r1=1632759&r2=1632760&view=diff
| > ==============================================================================
| > --- ofbiz/branches/release13.07/applications/product/servicedef/services_view.xml (original)
| > +++ ofbiz/branches/release13.07/applications/product/servicedef/services_view.xml Sat Oct 18 11:23:45 2014
| > @@ -152,6 +152,7 @@ under the License.
| >           <attribute name="introductionDateLimit" type="java.sql.Timestamp" mode="IN" optional="true"/>
| >           <attribute name="releaseDateLimit" type="java.sql.Timestamp" mode="IN" optional="true"/>
| >           <attribute name="orderByFields" type="List" mode="IN" optional="true"/>
| > +        <attribute name="productStoreId" mode="IN" type="String" 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 -->
| >           <attribute name="viewIndex" type="Integer" mode="OUT" optional="false"/> <!-- this is a 1 based index, ie the first results are in index 1 -->
| >
| > Modified: ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/category/CategoryServices.java
| > URL: http://svn.apache.org/viewvc/ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/category/CategoryServices.java?rev=1632760&r1=1632759&r2=1632760&view=diff
| > ==============================================================================
| > --- ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/category/CategoryServices.java (original)
| > +++ ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/category/CategoryServices.java Sat Oct 18 11:23:45 2014
| > @@ -21,7 +21,9 @@ package org.ofbiz.product.category;
| >   import java.io.IOException;
| >   import java.io.UnsupportedEncodingException;
| >   import java.io.Writer;
| > +import java.math.BigDecimal;
| >   import java.sql.Timestamp;
| > +import java.util.ArrayList;
| >   import java.util.List;
| >   import java.util.Locale;
| >   import java.util.Map;
| > @@ -35,6 +37,7 @@ import javolution.util.FastMap;
| >   import net.sf.json.JSONObject;
| >   
| >   import org.ofbiz.base.util.Debug;
| > +import org.ofbiz.base.util.GeneralException;
| >   import org.ofbiz.base.util.UtilDateTime;
| >   import org.ofbiz.base.util.UtilGenerics;
| >   import org.ofbiz.base.util.UtilMisc;
| > @@ -48,9 +51,13 @@ import org.ofbiz.entity.condition.Entity
| >   import org.ofbiz.entity.model.ModelEntity;
| >   import org.ofbiz.entity.util.EntityFindOptions;
| >   import org.ofbiz.entity.util.EntityListIterator;
| > +import org.ofbiz.entity.util.EntityTypeUtil;
| >   import org.ofbiz.entity.util.EntityUtil;
| >   import org.ofbiz.product.catalog.CatalogWorker;
| > +import org.ofbiz.product.product.ProductWorker;
| >   import org.ofbiz.service.DispatchContext;
| > +import org.ofbiz.service.GenericServiceException;
| > +import org.ofbiz.service.LocalDispatcher;
| >   import org.ofbiz.service.ServiceUtil;
| >   
| >   /**
| > @@ -212,6 +219,7 @@ public class CategoryServices {
| >   
| >       public static Map<String, Object> getProductCategoryAndLimitedMembers(DispatchContext dctx, Map<String, ? extends Object> context) {
| >           Delegator delegator = dctx.getDelegator();
| > +        LocalDispatcher dispatcher = dctx.getDispatcher();
| >           String productCategoryId = (String) context.get("productCategoryId");
| >           boolean limitView = ((Boolean) context.get("limitView")).booleanValue();
| >           int defaultViewSize = ((Integer) context.get("defaultViewSize")).intValue();
| > @@ -237,7 +245,7 @@ public class CategoryServices {
| >           }
| >   
| >           Timestamp nowTimestamp = UtilDateTime.nowTimestamp();
| > -
| > +
| >           int viewIndex = 0;
| >           try {
| >               viewIndex = Integer.valueOf((String) context.get("viewIndexString")).intValue();
| > @@ -272,7 +280,18 @@ public class CategoryServices {
| >               lowIndex = 0;
| >               highIndex = 0;
| >           }
| > -
| > +        Boolean filterOutOfStock = false ;
| > +        try {
| > +            String productStoreId = (String) context.get("productStoreId");
| > +            if (UtilValidate.isNotEmpty(productStoreId)) {
| > +                GenericValue productStore = delegator.findOne("ProductStore", UtilMisc.toMap("productStoreId", productStoreId), false);
| > +                if (productStore != null && "N".equals(productStore.getString("showOutOfStockProducts"))) {
| > +                    filterOutOfStock = true;
| > +                }
| > +            }
| > +        } catch (GenericEntityException e) {
| > +            Debug.logWarning(e.getMessage(), module);
| > +        }
| >           List<GenericValue> productCategoryMembers = null;
| >           if (productCategory != null) {
| >               try {
| > @@ -293,7 +312,16 @@ public class CategoryServices {
| >                       if (!filterConditions.isEmpty()) {
| >                           productCategoryMembers = EntityUtil.filterByCondition(productCategoryMembers, EntityCondition.makeCondition(filterConditions, EntityOperator.AND));
| >                       }
| > -
| > +
| > +                    // filter out of stock products
| > +                    if (filterOutOfStock) {
| > +                        try {
| > +                            productCategoryMembers = ProductWorker.filterOutOfStockProducts(productCategoryMembers, dispatcher, delegator);
| > +                        } catch (GeneralException e) {
| > +                            Debug.logWarning("Problem filtering out of stock products :"+e.getMessage(), module);
| > +                        }
| > +
| > +                    }
| >                       // filter out the view allow before getting the sublist
| >                       if (UtilValidate.isNotEmpty(viewProductCategoryId)) {
| >                           productCategoryMembers = CategoryWorker.filterProductsInCategory(delegator, productCategoryMembers, viewProductCategoryId);
| > @@ -371,7 +399,15 @@ public class CategoryServices {
| >                           lowIndex = 1;
| >                           highIndex = listSize;
| >                       }
| > -
| > +                    // filter out of stock products
| > +                    if (filterOutOfStock) {
| > +                        try {
| > +                            productCategoryMembers = ProductWorker.filterOutOfStockProducts(productCategoryMembers, dispatcher, delegator);
| > +                            listSize = productCategoryMembers.size();
| > +                        } catch (GeneralException e) {
| > +                            Debug.logWarning("Problem filtering out of stock products :"+e.getMessage(), module);
| > +                        }
| > +                    }
| >                       // null safety
| >                       if (productCategoryMembers == null) {
| >                           productCategoryMembers = FastList.newInstance();
| > @@ -399,7 +435,7 @@ public class CategoryServices {
| >           if (productCategoryMembers != null) result.put("productCategoryMembers", productCategoryMembers);
| >           return result;
| >       }
| > -
| > +
| >       // Please note : the structure of map in this function is according to the JSON data map of the jsTree
| >       @SuppressWarnings("unchecked")
| >       public static void getChildCategoryTree(HttpServletRequest request, HttpServletResponse response){
| >
| > Modified: ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/product/ProductWorker.java
| > URL: http://svn.apache.org/viewvc/ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/product/ProductWorker.java?rev=1632760&r1=1632759&r2=1632760&view=diff
| > ==============================================================================
| > --- ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/product/ProductWorker.java (original)
| > +++ ofbiz/branches/release13.07/applications/product/src/org/ofbiz/product/product/ProductWorker.java Sat Oct 18 11:23:45 2014
| > @@ -21,6 +21,7 @@ package org.ofbiz.product.product;
| >   import java.math.BigDecimal;
| >   import java.math.MathContext;
| >   import java.sql.Timestamp;
| > +import java.util.ArrayList;
| >   import java.util.LinkedHashMap;
| >   import java.util.List;
| >   import java.util.Locale;
| > @@ -32,6 +33,7 @@ import javolution.util.FastMap;
| >   import javolution.util.FastSet;
| >   
| >   import org.ofbiz.base.util.Debug;
| > +import org.ofbiz.base.util.GeneralException;
| >   import org.ofbiz.base.util.UtilDateTime;
| >   import org.ofbiz.base.util.UtilMisc;
| >   import org.ofbiz.base.util.UtilValidate;
| > @@ -1205,4 +1207,43 @@ nextProd:
| >   
| >           return false;
| >       }
| > +
| > +    // Method to filter-out out of stock products
| > +    public static List<GenericValue> filterOutOfStockProducts (List<GenericValue> productsToFilter, LocalDispatcher dispatcher, Delegator delegator) throws GeneralException {
| > +        ArrayList<GenericValue> productsInStock = new ArrayList<GenericValue>();
| > +        if (UtilValidate.isNotEmpty(productsToFilter)) {
| > +            for (GenericValue genericRecord : productsToFilter) {
| > +                String productId = genericRecord.getString("productId");
| > +                GenericValue product = null;
| > +                product = delegator.findOne("Product", UtilMisc.toMap("productId", productId), true);
| > +                Boolean isMarketingPackage = EntityTypeUtil.hasParentType(delegator, "ProductType", "productTypeId", product.getString("productTypeId"), "parentTypeId", "MARKETING_PKG");
| > +
| > +                if ( UtilValidate.isNotEmpty(isMarketingPackage) && isMarketingPackage) {
| > +                    Map<String, Object> resultOutput = new FastMap<String, Object>();
| > +                    resultOutput = dispatcher.runSync("getMktgPackagesAvailable", UtilMisc.toMap("productId" ,productId));
| > +                    Debug.logWarning("Error getting available marketing package.", module);
| > +
| > +                    BigDecimal availableInventory = (BigDecimal) resultOutput.get("availableToPromiseTotal");
| > +                    if(availableInventory.compareTo(BigDecimal.ZERO) > 0) {
| > +                        productsInStock.add(genericRecord);
| > +                    }
| > +                } else {
| > +                    List<GenericValue> facilities = delegator.findList("ProductFacility", EntityCondition.makeCondition("productId",EntityOperator.EQUALS, productId), null, null, null, false);
| > +                    BigDecimal availableInventory = BigDecimal.ZERO;
| > +                    if (UtilValidate.isNotEmpty(facilities)) {
| > +                        for (GenericValue facility : facilities) {
| > +                            BigDecimal lastInventoryCount = facility.getBigDecimal("lastInventoryCount");
| > +                            if (lastInventoryCount != null) {
| > +                                availableInventory = lastInventoryCount.add(availableInventory);
| > +                            }
| > +                        }
| > +                        if (availableInventory.compareTo(BigDecimal.ZERO) > 0) {
| > +                            productsInStock.add(genericRecord);
| > +                        }
| > +                    }
| > +                }
| > +            }
| > +        }
| > +        return productsInStock;
| > +    }
| >   }
| >
| >
| 
| 
| -- 
| 
| <www.nereide.fr>
| 
| 	Gil Portenseigne
| Consultant ERP OFBiz
| Société Néréide
| 3b Les isles
| 37270 Veretz
| Tel : 09 74 53 46 09, puis 1, poste 61
| Mob : 06 82 740 444
| www.nereide.fr <http://www.nereide.fr>
| 
| Membre d'OFBiz France
| www.ofbiz-fr.org <http://www.ofbiz-fr.org>
|