Author: jleroux
Date: Sat Jan 12 12:57:57 2019
New Revision: 1851164

URL: http://svn.apache.org/viewvc?rev=1851164&view=rev
Log:
"Applied fix from trunk for revision: 1850914" 
------------------------------------------------------------------------
r1850914 | paulfoxworthy | 2019-01-10 04:32:33 +0100 (jeu. 10 janv. 2019) | 7 
lignes

Fixed: In packing, only use reservations with stock on hand
(OFBIZ-9677)

During packing, OFBiz looks for reservations (OrderItemShipGrpInvRes)
for the order item. Some reservations are for back ordered items not on hand.
These reservations should not be used during packing, but they are.

------------------------------------------------------------------------

Modified:
    ofbiz/ofbiz-framework/branches/release17.12/   (props changed)
    
ofbiz/ofbiz-framework/branches/release17.12/applications/product/src/main/java/org/apache/ofbiz/shipment/packing/PackingSession.java

Propchange: ofbiz/ofbiz-framework/branches/release17.12/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Jan 12 12:57:57 2019
@@ -10,4 +10,4 @@
 /ofbiz/branches/json-integration-refactoring:1634077-1635900
 /ofbiz/branches/multitenant20100310:921280-927264
 /ofbiz/branches/release13.07:1547657
-/ofbiz/ofbiz-framework/trunk:1819499,1819598,1819800,1819805,1819811,1819947,1820038,1820262,1820374-1820375,1820441,1820457,1820644,1820658,1820790,1820823,1820949,1820966,1821012,1821036,1821112,1821115,1821144,1821186,1821219,1821226,1821230,1821386,1821613,1821628,1821965,1822125,1822310,1822377,1822383,1822393,1823467,1823562,1823876,1824314,1824316,1824732,1824803,1824847,1824855,1825192,1825211,1825216,1825233,1825450,1826374,1826502,1826592,1826671,1826674,1826780,1826805,1826938,1826997,1827439,1828255,1828316,1828346,1828424,1828512,1828514,1829690,1830936,1831074,1831078,1831234,1831608,1831831,1832577,1832662,1832756,1832800,1832944,1833173,1833211,1834181,1834191,1834736,1835235,1835887,1835891,1835953,1835964,1836144,1836871,1837857,1838032,1838256,1838381,1840189,1840199,1840828,1841657,1841662,1842372,1842921,1843225,1843893,1844943,1845418,1845420,1845466,1845544,1845552,1845558,1845933,1845995,1846097,1846107,1846214,1846594,1846632,1847398,1847478,1847670,1847715,
 
1847890,1848263,1848336,1848386,1848398,1848441,1848444,1848447,1848449,1848467,1848469,1848745,1848849-1848850,1849021,1849191,1849193,1849275,1849467,1849528,1849540,1849567,1849693,1850015,1850023,1850530,1850647,1850685,1850694,1850918,1850948,1850953,1851006,1851068,1851074,1851130,1851158
+/ofbiz/ofbiz-framework/trunk:1819499,1819598,1819800,1819805,1819811,1819947,1820038,1820262,1820374-1820375,1820441,1820457,1820644,1820658,1820790,1820823,1820949,1820966,1821012,1821036,1821112,1821115,1821144,1821186,1821219,1821226,1821230,1821386,1821613,1821628,1821965,1822125,1822310,1822377,1822383,1822393,1823467,1823562,1823876,1824314,1824316,1824732,1824803,1824847,1824855,1825192,1825211,1825216,1825233,1825450,1826374,1826502,1826592,1826671,1826674,1826780,1826805,1826938,1826997,1827439,1828255,1828316,1828346,1828424,1828512,1828514,1829690,1830936,1831074,1831078,1831234,1831608,1831831,1832577,1832662,1832756,1832800,1832944,1833173,1833211,1834181,1834191,1834736,1835235,1835887,1835891,1835953,1835964,1836144,1836871,1837857,1838032,1838256,1838381,1840189,1840199,1840828,1841657,1841662,1842372,1842921,1843225,1843893,1844943,1845418,1845420,1845466,1845544,1845552,1845558,1845933,1845995,1846097,1846107,1846214,1846594,1846632,1847398,1847478,1847670,1847715,
 
1847890,1848263,1848336,1848386,1848398,1848441,1848444,1848447,1848449,1848467,1848469,1848745,1848849-1848850,1849021,1849191,1849193,1849275,1849467,1849528,1849540,1849567,1849693,1850015,1850023,1850530,1850647,1850685,1850694,1850914,1850918,1850948,1850953,1851006,1851068,1851074,1851130,1851158,1851163

Modified: 
ofbiz/ofbiz-framework/branches/release17.12/applications/product/src/main/java/org/apache/ofbiz/shipment/packing/PackingSession.java
URL: 
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/branches/release17.12/applications/product/src/main/java/org/apache/ofbiz/shipment/packing/PackingSession.java?rev=1851164&r1=1851163&r2=1851164&view=diff
==============================================================================
--- 
ofbiz/ofbiz-framework/branches/release17.12/applications/product/src/main/java/org/apache/ofbiz/shipment/packing/PackingSession.java
 (original)
+++ 
ofbiz/ofbiz-framework/branches/release17.12/applications/product/src/main/java/org/apache/ofbiz/shipment/packing/PackingSession.java
 Sat Jan 12 12:57:57 2019
@@ -144,8 +144,12 @@ public class PackingSession implements j
         // find the inventoryItemId to use
         if (reservations.size() == 1) {
             GenericValue res = EntityUtil.getFirst(reservations);
-            int checkCode = this.checkLineForAdd(res, orderId, orderItemSeqId, 
shipGroupSeqId, productId, quantity, packageSeqId, update);
-            this.createPackLineItem(checkCode, res, orderId, orderItemSeqId, 
shipGroupSeqId, productId, quantity, weight, packageSeqId);
+            BigDecimal resQty = numAvailableItems(res);
+
+            if (resQty.compareTo(quantity) > 0) {
+                int checkCode = this.checkLineForAdd(res, orderId, 
orderItemSeqId, shipGroupSeqId, productId, quantity, packageSeqId, update);
+                this.createPackLineItem(checkCode, res, orderId, 
orderItemSeqId, shipGroupSeqId, productId, quantity, weight, packageSeqId);
+            }
         } else {
             // more than one reservation found
             Map<GenericValue, BigDecimal> toCreateMap = new 
HashMap<GenericValue, BigDecimal>();
@@ -160,33 +164,36 @@ public class PackingSession implements j
                     continue;
                 }
 
-                BigDecimal resQty = res.getBigDecimal("quantity");
-                BigDecimal resPackedQty = this.getPackedQuantity(orderId, 
orderItemSeqId, shipGroupSeqId, productId, res.getString("inventoryItemId"), 
-1);
-                if (resPackedQty.compareTo(resQty) >= 0) {
-                    continue;
-                } else if (!update) {
-                    resQty = resQty.subtract(resPackedQty);
-                }
-
-                BigDecimal thisQty = resQty.compareTo(qtyRemain) > 0 ? 
qtyRemain : resQty;
+                BigDecimal resQty = numAvailableItems(res);
 
-                int thisCheck = this.checkLineForAdd(res, orderId, 
orderItemSeqId, shipGroupSeqId, productId, thisQty, packageSeqId, update);
-                switch (thisCheck) {
-                    case 2:
-                        Debug.logInfo("Packing check returned '2' - new pack 
line will be created!", module);
-                        toCreateMap.put(res, thisQty);
-                        qtyRemain = qtyRemain.subtract(thisQty);
-                        break;
-                    case 1:
-                        Debug.logInfo("Packing check returned '1' - existing 
pack line has been updated!", module);
-                        qtyRemain = qtyRemain.subtract(thisQty);
-                        break;
-                    case 0:
-                        Debug.logInfo("Packing check returned '0' - doing 
nothing.", module);
-                        break;
-                default:
-                    Debug.logInfo("Packing check returned '> 2' or '< 0'", 
module);
-                    break;
+                if (resQty.compareTo(BigDecimal.ZERO) > 0) {
+                    BigDecimal resPackedQty = this.getPackedQuantity(orderId, 
orderItemSeqId, shipGroupSeqId, productId, res.getString("inventoryItemId"), 
-1);
+                    if (resPackedQty.compareTo(resQty) >= 0) {
+                        continue;
+                    } else if (!update) {
+                        resQty = resQty.subtract(resPackedQty);
+                    }
+
+                    BigDecimal thisQty = resQty.compareTo(qtyRemain) > 0 ? 
qtyRemain : resQty;
+
+                    int thisCheck = this.checkLineForAdd(res, orderId, 
orderItemSeqId, shipGroupSeqId, productId, thisQty, packageSeqId, update);
+                    switch (thisCheck) {
+                        case 2:
+                            Debug.logInfo("Packing check returned '2' - new 
pack line will be created!", module);
+                            toCreateMap.put(res, thisQty);
+                            qtyRemain = qtyRemain.subtract(thisQty);
+                            break;
+                        case 1:
+                            Debug.logInfo("Packing check returned '1' - 
existing pack line has been updated!", module);
+                            qtyRemain = qtyRemain.subtract(thisQty);
+                            break;
+                        case 0:
+                            Debug.logInfo("Packing check returned '0' - doing 
nothing.", module);
+                            break;
+                        default:
+                            Debug.logInfo("Packing check returned '> 2' or '< 
0'", module);
+                            break;
+                    }
                 }
             }
 
@@ -205,6 +212,20 @@ public class PackingSession implements j
         this.runEvents(PackingEvent.EVENT_CODE_ADD);
     }
 
+    private BigDecimal numAvailableItems(GenericValue res) {
+        // In simple situations, the reserved quantity will match the quantity 
from the order item.
+        // If there is a back order, quantity from order may exceed quantity 
currently reserved and on hand.
+        // resQty should never exceed the quantity from the order item, 
because that quantity was the quantity reserved in the first place.
+        BigDecimal notAvailable = res.getBigDecimal("quantityNotAvailable");
+        BigDecimal resQty = res.getBigDecimal("quantity");
+
+        if (notAvailable != null) {
+            resQty = resQty.subtract(notAvailable);
+        }
+
+        return resQty;
+    }
+
     public void addOrIncreaseLine(String orderId, String orderItemSeqId, 
String shipGroupSeqId, BigDecimal quantity, int packageSeqId) throws 
GeneralException {
         this.addOrIncreaseLine(orderId, orderItemSeqId, shipGroupSeqId, null, 
quantity, packageSeqId, BigDecimal.ZERO, false);
     }


Reply via email to