You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by si...@apache.org on 2007/12/05 21:11:47 UTC

svn commit: r601497 - /ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java

Author: sichen
Date: Wed Dec  5 12:11:47 2007
New Revision: 601497

URL: http://svn.apache.org/viewvc?rev=601497&view=rev
Log:
Fix bug in ATP minimum stock requirements where pending requirements are not counted in the shortfall correctly.

Modified:
    ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java?rev=601497&r1=601496&r2=601497&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java Wed Dec  5 12:11:47 2007
@@ -280,13 +280,8 @@
                 if (ServiceUtil.isError(results)) return results;
                 double atp = ((Double) results.get("availableToPromiseTotal")).doubleValue(); // safe since this is a required OUT param
 
-                // the minimum stock is an upper bound, therefore we either require up to the minimum stock or the input required quantity, whichever is less
-                double shortfall = minimumStock - atp;
-                double required = Math.min(ordered, shortfall);
-                if (required <= 0.0) continue;
-
                 // count all current requirements for this product
-                double requirementQty = 0.0;
+                double pendingRequirements = 0.0;
                 List conditions = UtilMisc.toList(
                         new EntityExpr("facilityId", EntityOperator.EQUALS, facilityId),
                         new EntityExpr("productId", EntityOperator.EQUALS, product.get("productId")),
@@ -297,11 +292,12 @@
                 List requirements = delegator.findByAnd("Requirement", conditions);
                 for (Iterator riter = requirements.iterator(); riter.hasNext(); ) {
                     GenericValue requirement = (GenericValue) riter.next();
-                    requirementQty += (requirement.get("quantity") == null ? 0.0 : requirement.getDouble("quantity").doubleValue());
+                    pendingRequirements += (requirement.get("quantity") == null ? 0.0 : requirement.getDouble("quantity").doubleValue());
                 }
 
-                // if we the existing requirements are not enough, then create a new requirement for the difference
-                required -= requirementQty;
+                // the minimum stock is an upper bound, therefore we either require up to the minimum stock or the input required quantity, whichever is less
+                double shortfall = minimumStock - atp - pendingRequirements;
+                double required = Math.min(ordered, shortfall);
                 if (required <= 0.0) continue;
 
                 Map input = UtilMisc.toMap("userLogin", userLogin, "facilityId", facilityId, "productId", product.get("productId"), "quantity", new Double(required), "requirementTypeId", "PRODUCT_REQUIREMENT");