Author: jacopoc
Date: Mon Jul 24 09:39:12 2017
New Revision: 1802773

URL: http://svn.apache.org/viewvc?rev=1802773&view=rev
Log:
Applied fix from trunk for revision: 1802766 
===

Fixed: MRP generates duplicate requirements when items are initially under 
minimum quantity and have with pending approved purchase orders.
(OFBIZ-9526)

With this change the requirements to replenish the inventory up to the minimum 
stock quantity is generated, if needed, only when the first demand event is 
processed or at the end.

Thanks: Amit Gadaley for the help in recreating the issue and testing the fix.


Modified:
    ofbiz/branches/release16.11/   (props changed)
    
ofbiz/branches/release16.11/applications/manufacturing/src/main/java/org/apache/ofbiz/manufacturing/mrp/MrpServices.java

Propchange: ofbiz/branches/release16.11/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jul 24 09:39:12 2017
@@ -10,5 +10,5 @@
 /ofbiz/branches/json-integration-refactoring:1634077-1635900
 /ofbiz/branches/multitenant20100310:921280-927264
 /ofbiz/branches/release13.07:1547657
-/ofbiz/ofbiz-framework/trunk:1783202,1783388,1784549,1784558,1784708,1785882,1785925,1786079,1786214,1786525,1787047,1787133,1787176,1787535,1787906-1787911,1787949,1789665,1789863,1789874,1790396,1790810,1791277,1791288,1791342,1791346,1791490,1791496,1791625,1791634,1791791,1791804,1792270,1792272,1792275,1792432,1792609,1792638,1794008,1794132,1796047,1796262,1797733,1798668,1798682,1798796,1798803,1798808,1799088,1799183,1799327,1799417,1799687,1799767,1799793,1799859,1800250,1800780,1800832,1800853,1801094,1801262-1801263,1801273-1801274,1801303,1801318-1801319,1801336,1801340,1801346,1801359,1801742,1802657
+/ofbiz/ofbiz-framework/trunk:1783202,1783388,1784549,1784558,1784708,1785882,1785925,1786079,1786214,1786525,1787047,1787133,1787176,1787535,1787906-1787911,1787949,1789665,1789863,1789874,1790396,1790810,1791277,1791288,1791342,1791346,1791490,1791496,1791625,1791634,1791791,1791804,1792270,1792272,1792275,1792432,1792609,1792638,1794008,1794132,1796047,1796262,1797733,1798668,1798682,1798796,1798803,1798808,1799088,1799183,1799327,1799417,1799687,1799767,1799793,1799859,1800250,1800780,1800832,1800853,1801094,1801262-1801263,1801273-1801274,1801303,1801318-1801319,1801336,1801340,1801346,1801359,1801742,1802657,1802766
 
/ofbiz/trunk:1770481,1770490,1770540,1771440,1771448,1771516,1771935,1772346,1772880,1774772,1775441,1779724,1780659,1781109,1781125,1781979,1782498,1782520

Modified: 
ofbiz/branches/release16.11/applications/manufacturing/src/main/java/org/apache/ofbiz/manufacturing/mrp/MrpServices.java
URL: 
http://svn.apache.org/viewvc/ofbiz/branches/release16.11/applications/manufacturing/src/main/java/org/apache/ofbiz/manufacturing/mrp/MrpServices.java?rev=1802773&r1=1802772&r2=1802773&view=diff
==============================================================================
--- 
ofbiz/branches/release16.11/applications/manufacturing/src/main/java/org/apache/ofbiz/manufacturing/mrp/MrpServices.java
 (original)
+++ 
ofbiz/branches/release16.11/applications/manufacturing/src/main/java/org/apache/ofbiz/manufacturing/mrp/MrpServices.java
 Mon Jul 24 09:39:12 2017
@@ -687,8 +687,12 @@ public class MrpServices {
                 bomLevelWithNoEvent = 0;
 
                 oldProductId = "";
+                int eventCount = 0;
                 for (GenericValue inventoryEventForMRP : 
listInventoryEventForMRP) {
+                    eventCount++;
+
                     productId = inventoryEventForMRP.getString("productId");
+                    boolean isLastEvent = (eventCount == 
listInventoryEventForMRP.size() || 
!productId.equals(listInventoryEventForMRP.get(eventCount).getString("productId")));
                     eventQuantity = 
inventoryEventForMRP.getBigDecimal("quantity");
 
                     if (!productId.equals(oldProductId)) {
@@ -745,7 +749,7 @@ public class MrpServices {
                     }
 
                     stockTmp = stockTmp.add(eventQuantity);
-                    if (stockTmp.compareTo(minimumStock) < 0) {
+                    if (stockTmp.compareTo(minimumStock) < 0 && 
(eventQuantity.compareTo(BigDecimal.ZERO) < 0 || isLastEvent)) { // No need to 
create a supply event/requirement if the current event is not a demand and 
there are other events to process
                         BigDecimal qtyToStock = 
minimumStock.subtract(stockTmp);
                         //need to buy or build the product as we have not 
enough stock
                         eventDate = 
inventoryEventForMRP.getTimestamp("eventDate");


Reply via email to