You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ja...@apache.org on 2007/04/03 22:30:57 UTC

svn commit: r525264 - in /ofbiz/trunk/applications/product: entitydef/eecas.xml script/org/ofbiz/product/inventory/InventoryReserveServices.xml script/org/ofbiz/product/inventory/InventoryServices.xml servicedef/services_facility.xml

Author: jaz
Date: Tue Apr  3 13:30:56 2007
New Revision: 525264

URL: http://svn.apache.org/viewvc?view=rev&rev=525264
Log:
few changes to use entity list iterators when doing inventory lookups; added code to get totals from serialized inventory records; next to add view to get totals (instead of doing math in simple methods)

Modified:
    ofbiz/trunk/applications/product/entitydef/eecas.xml
    ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml
    ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryServices.xml
    ofbiz/trunk/applications/product/servicedef/services_facility.xml

Modified: ofbiz/trunk/applications/product/entitydef/eecas.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/entitydef/eecas.xml?view=diff&rev=525264&r1=525263&r2=525264
==============================================================================
--- ofbiz/trunk/applications/product/entitydef/eecas.xml (original)
+++ ofbiz/trunk/applications/product/entitydef/eecas.xml Tue Apr  3 13:30:56 2007
@@ -34,13 +34,18 @@
     <eca entity="ProductContent" operation="create-store" event="return">
         <action service="indexProductKeywords" mode="sync"/>
     </eca>
-    
+
+    <!-- inventory related ECAs -->
     <eca entity="InventoryItem" operation="create-store" event="return">
         <condition field-name="productId" operator="is-not-empty"/>
         <condition field-name="availableToPromiseTotal" operator="is-not-empty"/>
         <condition field-name="availableToPromiseTotal" operator="less-equals" value="0" type="Double"/>
         <action service="checkProductInventoryDiscontinuation" mode="async"/>
     </eca>
+    <!-- update the totals for serialized inventory items -->
+    <eca entity="InventoryItem" operation="create-store" event="return">           
+        <action service="updateSerializedInventoryTotals" mode="sync"/> 
+    </eca>    
     <!-- Just in case an InventoryItem is ever created with ATP/QOH values, catch and handle that -->
     <eca entity="InventoryItem" operation="create" event="return">
         <action service="createInventoryItemCheckSetAtpQoh" mode="sync"/>

Modified: ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml?view=diff&rev=525264&r1=525263&r2=525264
==============================================================================
--- ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml (original)
+++ ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml Tue Apr  3 13:30:56 2007
@@ -78,7 +78,7 @@
         <set from-field="parameters.quantity" field="parameters.quantityNotReserved"/>
 
         <!-- first reserve against InventoryItems in FLT_PICKLOC type locations, then FLT_BULK locations, then InventoryItems with no locations -->
-        <find-by-and entity-name="InventoryItemAndLocation" map-name="lookupFieldMap" list-name="inventoryItemAndLocations" order-by-list-name="orderByList"/>
+        <find-by-and entity-name="InventoryItemAndLocation" map-name="lookupFieldMap" list-name="inventoryItemAndLocations" use-iterator="true" order-by-list-name="orderByList"/>
         <iterate entry-name="inventoryItemAndLocation" list-name="inventoryItemAndLocations">
             <if-compare field-name="inventoryItemAndLocation.locationTypeEnumId" operator="equals" value="FLT_PICKLOC">
                 <!-- this is a little trick to get the InventoryItem value object without doing a query, possible since all fields on InventoryItem are also on InventoryItemAndLocation with the same names -->
@@ -86,8 +86,10 @@
                 <call-simple-method method-name="reserveForInventoryItemInline"/>
             </if-compare>
         </iterate>
+
         <!-- still some left? try the FLT_BULK locations -->
         <if-compare field-name="parameters.quantityNotReserved" operator="greater" value="0" type="Double">
+            <find-by-and entity-name="InventoryItemAndLocation" map-name="lookupFieldMap" list-name="inventoryItemAndLocations" use-iterator="true" order-by-list-name="orderByList"/>
             <iterate entry-name="inventoryItemAndLocation" list-name="inventoryItemAndLocations">
                 <if-compare field-name="inventoryItemAndLocation.locationTypeEnumId" operator="equals" value="FLT_BULK">
                     <!-- this is a little trick to get the InventoryItem value object without doing a query, possible since all fields on InventoryItem are also on InventoryItemAndLocation with the same names -->
@@ -98,8 +100,8 @@
         </if-compare>
 
         <!-- last of all try reserving in InventoryItems that have no locationSeqId, ie are not in any particular location -->
-        <if-compare field-name="parameters.quantityNotReserved" operator="greater" value="0" type="Double">
-            <find-by-and entity-name="InventoryItem" map-name="lookupFieldMap" list-name="inventoryItems" order-by-list-name="orderByList"/>
+        <if-compare field-name="parameters.quantityNotReserved" operator="greater" value="0" type="Double">            
+            <find-by-and entity-name="InventoryItem" map-name="lookupFieldMap" list-name="inventoryItems" use-iterator="true" order-by-list-name="orderByList"/>
             <iterate entry-name="inventoryItem" list-name="inventoryItems">
                 <if-empty field-name="inventoryItem.locationSeqId">
                     <call-simple-method method-name="reserveForInventoryItemInline"/>

Modified: ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryServices.xml?view=diff&rev=525264&r1=525263&r2=525264
==============================================================================
--- ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryServices.xml (original)
+++ ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryServices.xml Tue Apr  3 13:30:56 2007
@@ -185,6 +185,68 @@
         <set field="inventoryItem.quantityOnHandTotal" from-field="inventoryItemDetailSummary.quantityOnHandTotal"/>
         <store-value value-name="inventoryItem"/>
     </simple-method>
+    <simple-method method-name="updateSerializedInventoryTotals" short-description="Update the totals on serialized inventory">
+        <entity-one entity-name="InventoryItem" value-name="inventoryItem"/>
+        <if-compare field-name="inventoryItem.inventoryItemTypeId" value="SERIALIZED_INV_ITEM" operator="equals">
+            <if>
+                <!-- available -->
+                <condition>
+                    <and>
+                        <if-compare field-name="inventoryItem.statusId" value="INV_AVAILABLE" operator="equals"/>
+                        <or>
+                            <if-compare field-name="inventoryItem.availableToPromiseTotal" value="1" operator="not-equals" type="Double"/>
+                            <if-compare field-name="inventoryItem.quantityOnHandTotal" value="1" operator="not-equals" type="Double"/>
+                        </or>
+                    </and>
+                </condition>
+                <then>
+                    <set field="inventoryItem.availableToPromiseTotal" value="1" type="Double"/>
+                    <set field="inventoryItem.quantityOnHandTotal" value="1" type="Double"/>
+                    <log level="always" message="Storing totals [${inventoryItem.inventoryItemId}] for INV_AVAIABLE [1/1]"/>
+                    <store-value value-name="inventoryItem"/>
+                </then>
+
+                <!-- delivered -->
+                <else-if>
+                    <condition>
+                        <and>
+                            <if-compare field-name="inventoryItem.statusId" value="INV_DELIVERED" operator="equals"/>
+                            <or>
+                                <if-compare field-name="inventoryItem.availableToPromiseTotal" value="0" operator="not-equals" type="Double"/>
+                                <if-compare field-name="inventoryItem.quantityOnHandTotal" value="0" operator="not-equals" type="Double"/>
+                            </or>
+                        </and>
+                    </condition>
+                    <then>
+                        <set field="inventoryItem.availableToPromiseTotal" value="0" type="Double"/>
+                        <set field="inventoryItem.quantityOnHandTotal" value="0" type="Double"/>
+                        <log level="always" message="Storing totals [${inventoryItem.inventoryItemId}] for INV_DELIVERED [0/0]"/>
+                        <store-value value-name="inventoryItem"/>
+                    </then>
+                </else-if>
+
+                <!-- any promised; or on-hand but not available status -->
+                <else-if>
+                    <condition>
+                        <and>
+                            <if-compare field-name="inventoryItem.statusId" value="INV_AVAILABLE" operator="not-equals"/>
+                            <if-compare field-name="inventoryItem.statusId" value="INV_DELIVERED" operator="not-equals"/>
+                            <or>
+                                <if-compare field-name="inventoryItem.availableToPromiseTotal" value="0" operator="not-equals" type="Double"/>
+                                <if-compare field-name="inventoryItem.quantityOnHandTotal" value="1" operator="not-equals" type="Double"/>
+                            </or>
+                        </and>
+                    </condition>
+                    <then>
+                        <set field="inventoryItem.availableToPromiseTotal" value="0" type="Double"/>
+                        <set field="inventoryItem.quantityOnHandTotal" value="1" type="Double"/>
+                        <log level="always" message="Storing totals [${inventoryItem.inventoryItemId}] for other status [1/0]"/>
+                        <store-value value-name="inventoryItem"/>
+                    </then>
+                </else-if>
+            </if>
+        </if-compare>
+    </simple-method>
     <simple-method method-name="updateOldInventoryToDetailAll" short-description="Update Old Inventory To Detail All">
         <!-- find all InventoryItem records where oldQuantityOnHand or oldAvailableToPromise are not null -->
         <entity-condition entity-name="InventoryItem" list-name="inventoryItemList">
@@ -219,6 +281,7 @@
         <if>
             <condition>
                 <and>
+                    <not><if-empty field-name="product"/></not>
                     <if-compare field-name="product.salesDiscWhenNotAvail" operator="equals" value="Y"/>
                     <or>
                         <if-empty field-name="product.salesDiscontinuationDate"/>
@@ -418,9 +481,9 @@
 
         <!-- we might get away with a cache here since real serious errors will occur during the reservation service... but only if we need the speed -->
         <if-compare field-name="parameters.useCache" operator="equals" value="true" type="Boolean">
-            <find-by-and entity-name="InventoryItem" map-name="lookupFieldMap" list-name="inventoryItems" use-cache="true"/>
+            <find-by-and entity-name="InventoryItem" map-name="lookupFieldMap" list-name="inventoryItems" use-iterator="true" use-cache="true"/>
             <else>
-                <find-by-and entity-name="InventoryItem" map-name="lookupFieldMap" list-name="inventoryItems" use-cache="false"/>
+                <find-by-and entity-name="InventoryItem" map-name="lookupFieldMap" list-name="inventoryItems" use-iterator="true" use-cache="false"/>
             </else>
         </if-compare>
         

Modified: ofbiz/trunk/applications/product/servicedef/services_facility.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services_facility.xml?view=diff&rev=525264&r1=525263&r2=525264
==============================================================================
--- ofbiz/trunk/applications/product/servicedef/services_facility.xml (original)
+++ ofbiz/trunk/applications/product/servicedef/services_facility.xml Tue Apr  3 13:30:56 2007
@@ -83,6 +83,11 @@
         </description>
         <attribute name="inventoryItemId" type="String" mode="IN" optional="false"/>
     </service>
+    <service name="updateSerializedInventoryTotals" default-entity-name="InventoryItem" engine="simple"
+                location="org/ofbiz/product/inventory/InventoryServices.xml" invoke="updateSerializedInventoryTotals" auth="false">
+        <description>Sets the ATP/QOH totals for serialized inventory items</description>                    
+        <attribute name="inventoryItemId" type="String" mode="IN" optional="false"/>
+    </service>
 
     <service name="createInventoryItemVariance" default-entity-name="InventoryItemVariance" engine="simple"
                 location="org/ofbiz/product/inventory/InventoryServices.xml" invoke="createInventoryItemVariance" auth="true">