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 2006/08/30 01:19:16 UTC

svn commit: r438286 - in /incubator/ofbiz/trunk/applications/product: servicedef/services_facility.xml src/org/ofbiz/product/inventory/InventoryServices.java

Author: sichen
Date: Tue Aug 29 16:19:16 2006
New Revision: 438286

URL: http://svn.apache.org/viewvc?rev=438286&view=rev
Log:
Turned off transactions for all the getInventory_ services -- they do not store anything and should not require them.  Also added marketing package ATP/QOH to the getProductInventorySummaryForItems service which searches across all facilities

Modified:
    incubator/ofbiz/trunk/applications/product/servicedef/services_facility.xml
    incubator/ofbiz/trunk/applications/product/src/org/ofbiz/product/inventory/InventoryServices.java

Modified: incubator/ofbiz/trunk/applications/product/servicedef/services_facility.xml
URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/applications/product/servicedef/services_facility.xml?rev=438286&r1=438285&r2=438286&view=diff
==============================================================================
--- incubator/ofbiz/trunk/applications/product/servicedef/services_facility.xml (original)
+++ incubator/ofbiz/trunk/applications/product/servicedef/services_facility.xml Tue Aug 29 16:19:16 2006
@@ -103,7 +103,7 @@
     </service>
 
     <service name="getMktgPackagesAvailable" engine="simple"
-                location="org/ofbiz/product/inventory/InventoryServices.xml" invoke="getMktgPackagesAvailable" auth="false">
+                location="org/ofbiz/product/inventory/InventoryServices.xml" invoke="getMktgPackagesAvailable" auth="false" use-transaction="false">
         <description>Get Marketing Packages Available From Components In Inventory</description>
         <attribute name="productId" type="String" mode="IN" optional="false"/>
         <attribute name="facilityId" type="String" mode="IN" optional="true"/>
@@ -111,14 +111,14 @@
         <attribute name="availableToPromiseTotal" type="Double" mode="OUT" optional="false"/>
     </service>
     <service name="getProductInventoryAvailable" engine="simple"
-                location="org/ofbiz/product/inventory/InventoryServices.xml" invoke="getProductInventoryAvailable" auth="false">
+                location="org/ofbiz/product/inventory/InventoryServices.xml" invoke="getProductInventoryAvailable" auth="false" use-transaction="false">
         <description>Get Inventory Availability for a Product</description>
         <attribute name="productId" type="String" mode="IN" optional="false"/>
         <attribute name="quantityOnHandTotal" type="Double" mode="OUT" optional="false"/>
         <attribute name="availableToPromiseTotal" type="Double" mode="OUT" optional="false"/>
     </service>
     <service name="getInventoryAvailableByFacility" engine="simple"
-                location="org/ofbiz/product/inventory/InventoryServices.xml" invoke="getProductInventoryAvailable" auth="false">
+                location="org/ofbiz/product/inventory/InventoryServices.xml" invoke="getProductInventoryAvailable" auth="false" use-transaction="false">
         <description>Get Inventory Availability for a Product constrained by a facilityId</description>
         <attribute name="productId" type="String" mode="IN" optional="false"/>
         <attribute name="facilityId" type="String" mode="IN" optional="false"/>
@@ -135,7 +135,7 @@
         <attribute name="availableToPromiseTotal" type="Double" mode="OUT" optional="false"/>
     </service>
     <service name="getInventoryAvailableByContainer" engine="simple"
-                location="org/ofbiz/product/inventory/InventoryServices.xml" invoke="getProductInventoryAvailable" auth="false">
+                location="org/ofbiz/product/inventory/InventoryServices.xml" invoke="getProductInventoryAvailable" auth="false" use-transaction="false">
         <description>Get Inventory Availability for a Product constrained by a containerId</description>
         <attribute name="productId" type="String" mode="IN" optional="false"/>
         <attribute name="containerId" type="String" mode="IN" optional="false"/>
@@ -143,14 +143,14 @@
         <attribute name="availableToPromiseTotal" type="Double" mode="OUT" optional="false"/>
     </service>
     <service name="getInventoryAvailableByItem" engine="simple"
-                location="org/ofbiz/product/inventory/InventoryServices.xml" invoke="getProductInventoryAvailable" auth="false">
+             location="org/ofbiz/product/inventory/InventoryServices.xml" invoke="getProductInventoryAvailable" auth="false" use-transaction="false">
         <description>Get Inventory Availability for an InventoryItem</description>
         <attribute name="inventoryItemId" type="String" mode="IN" optional="false"/>
         <attribute name="quantityOnHandTotal" type="Double" mode="OUT" optional="false"/>
         <attribute name="availableToPromiseTotal" type="Double" mode="OUT" optional="false"/>
     </service>
     <service name="getProductInventoryAvailableFromAssocProducts" engine="java"
-                location="org.ofbiz.product.inventory.InventoryServices" invoke="getProductInventoryAvailableFromAssocProducts" auth="false">
+             location="org.ofbiz.product.inventory.InventoryServices" invoke="getProductInventoryAvailableFromAssocProducts" auth="false" use-transaction="false">
         <description>
             Get Inventory Availability for a product based on List of associated products,
             usually marketing package components.
@@ -161,11 +161,14 @@
         <attribute name="availableToPromiseTotal" type="Double" mode="OUT" optional="false"/>
     </service>
     <service name="getProductInventorySummaryForItems" engine="java"
-                location="org.ofbiz.product.inventory.InventoryServices" invoke="getProductInventorySummaryForItems" auth="false">
-        <description>Get Inventory Availability for a list of OrderItems.</description>
+                location="org.ofbiz.product.inventory.InventoryServices" invoke="getProductInventorySummaryForItems" auth="false" use-transaction="false">
+        <description>Get ATP/QOH Availability for a list of OrderItems by summing over all facilities.  If the item is a MARKETING_PKG_AUTO, then put its quantity available from components
+            in the mktgPkgATPMap and mktgPkgQOHMap.</description>
         <attribute name="orderItems" type="List" mode="IN" optional="false"/>
         <attribute name="quantityOnHandMap" type="Map" mode="OUT" optional="false"/>
         <attribute name="availableToPromiseMap" type="Map" mode="OUT" optional="false"/>
+        <attribute name="mktgPkgQOHMap" type="Map" mode="OUT" optional="false"/>
+        <attribute name="mktgPkgATPMap" type="Map" mode="OUT" optional="false"/>
     </service>
 
     <service name="checkInventoryAvailability" engine="java"

Modified: incubator/ofbiz/trunk/applications/product/src/org/ofbiz/product/inventory/InventoryServices.java
URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/applications/product/src/org/ofbiz/product/inventory/InventoryServices.java?rev=438286&r1=438285&r2=438286&view=diff
==============================================================================
--- incubator/ofbiz/trunk/applications/product/src/org/ofbiz/product/inventory/InventoryServices.java (original)
+++ incubator/ofbiz/trunk/applications/product/src/org/ofbiz/product/inventory/InventoryServices.java Tue Aug 29 16:19:16 2006
@@ -699,21 +699,19 @@
         result.put("quantityOnHandTotal", quantityOnHandTotal);
         return result;
     }
-    
-    /**
-     * Given a set of order items, returns a hashmap with the ATP and QOH for each product. The default method is to sum
-     * inventories over all Facilities.
-     */
+
+
     public static Map getProductInventorySummaryForItems(DispatchContext dctx, Map context) {
         GenericDelegator delegator = dctx.getDelegator();
         LocalDispatcher dispatcher = dctx.getDispatcher();
         List orderItems = (List) context.get("orderItems");
         Map atpMap = new HashMap();
         Map qohMap = new HashMap();
+        Map mktgPkgAtpMap = new HashMap();
+        Map mktgPkgQohMap = new HashMap();
         Map results = ServiceUtil.returnSuccess();
-        results.put("availableToPromiseMap", atpMap);
-        results.put("quantityOnHandMap", qohMap);
 
+        // get a list of all available facilities for looping
         List facilities = null;
         try {
             facilities = delegator.findAll("Facility");
@@ -722,16 +720,17 @@
             return ServiceUtil.returnError("Unable to locate facilities.");
         }
 
+        // loop through all the order items
         Iterator iter = orderItems.iterator();
         while (iter.hasNext()) {
             GenericValue orderItem = (GenericValue) iter.next();
             String productId = orderItem.getString("productId");
 
             if ((productId == null) || productId.equals("")) continue;
-            
+
             GenericValue product = null;
             try {
-                product = orderItem.getRelatedOne("Product");
+                product = orderItem.getRelatedOneCache("Product");
             } catch (GenericEntityException e) {
                 Debug.logError(e, "Couldn't get product.", module);
                 return ServiceUtil.returnError("Unable to retrive product with id [" + productId + "]");
@@ -739,30 +738,53 @@
 
             double atp = 0.0;
             double qoh = 0.0;
+            double mktgPkgAtp = 0.0;
+            double mktgPkgQoh = 0.0;
             Iterator facilityIter = facilities.iterator();
+
+            // loop through all the facilities
             while (facilityIter.hasNext()) {
                 GenericValue facility = (GenericValue) facilityIter.next();
-                Map params = UtilMisc.toMap("productId", productId, "facilityId", facility.getString("facilityId"));
                 Map invResult = null;
+                Map mktgPkgInvResult = null;
+
+                // get both the real ATP/QOH available and the quantities available from marketing packages
                 try {
                     if ("MARKETING_PKG_AUTO".equals(product.getString("productTypeId"))) {
-                        invResult = dispatcher.runSync("getMktgPackagesAvailable", params);
-                    } else {
-                        invResult = dispatcher.runSync("getInventoryAvailableByFacility", params);
-                    }
+                        mktgPkgInvResult = dispatcher.runSync("getMktgPackagesAvailable", UtilMisc.toMap("productId", productId, "facilityId", facility.getString("facilityId")));
+                    } 
+                    invResult = dispatcher.runSync("getInventoryAvailableByFacility", UtilMisc.toMap("productId", productId, "facilityId", facility.getString("facilityId")));
                 } catch (GenericServiceException e) {
                     String msg = "Could not find inventory for facility [" + facility.getString("facilityId") + "]";
                     Debug.logError(e, msg, module);
                     return ServiceUtil.returnError(msg);
                 }
-                Double fatp = (Double) invResult.get("availableToPromiseTotal");
-                Double fqoh = (Double) invResult.get("quantityOnHandTotal");
-                if (fatp != null) atp += fatp.doubleValue();
-                if (fqoh != null) qoh += fqoh.doubleValue();
+
+                // add the results for this facility to the ATP/QOH counter for all facilities
+                if (!ServiceUtil.isError(invResult)) {
+                    Double fatp = (Double) invResult.get("availableToPromiseTotal");
+                    Double fqoh = (Double) invResult.get("quantityOnHandTotal");
+                    if (fatp != null) atp += fatp.doubleValue();
+                    if (fqoh != null) qoh += fqoh.doubleValue();
+                }
+                if (("MARKETING_PKG_AUTO".equals(product.getString("productTypeId"))) && (!ServiceUtil.isError(mktgPkgInvResult))) {
+                    Double fatp = (Double) mktgPkgInvResult.get("availableToPromiseTotal");
+                    Double fqoh = (Double) mktgPkgInvResult.get("quantityOnHandTotal");
+                    if (fatp != null) mktgPkgAtp += fatp.doubleValue();
+                    if (fqoh != null) mktgPkgQoh += fqoh.doubleValue();
+                }
             }
+
             atpMap.put(productId, new Double(atp));
             qohMap.put(productId, new Double(qoh));
+            mktgPkgAtpMap.put(productId, new Double(mktgPkgAtp));
+            mktgPkgQohMap.put(productId, new Double(mktgPkgQoh));
         }
+
+        results.put("availableToPromiseMap", atpMap);
+        results.put("quantityOnHandMap", qohMap);
+        results.put("mktgPkgATPMap", mktgPkgAtpMap);
+        results.put("mktgPkgQOHMap", mktgPkgQohMap);
         return results;
     }
 }