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 2008/04/23 09:02:35 UTC
svn commit: r650764 -
/ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml
Author: jacopoc
Date: Wed Apr 23 00:02:34 2008
New Revision: 650764
URL: http://svn.apache.org/viewvc?rev=650764&view=rev
Log:
Improved performance (plus other small cleanups) for the reserve algorithm: no functional changes.
Modified:
ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml
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?rev=650764&r1=650763&r2=650764&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml (original)
+++ ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml Wed Apr 23 00:02:34 2008
@@ -34,9 +34,6 @@
-->
<log level="verbose" message="Parameters : ${parameters}"/>
- <set from-field="parameters.productId" field="lookupFieldMap.productId"/>
- <set from-field="parameters.facilityId" field="lookupFieldMap.facilityId"/>
- <set from-field="parameters.containerId" field="lookupFieldMap.containerId"/>
<now-timestamp-to-env env-name="nowTimestamp"/>
<!-- check the product; make sure its a physical item -->
@@ -53,22 +50,22 @@
LIFO=last in first out, so it means order by DESCending receive or expire date
-->
<if-compare value="INVRO_GUNIT_COST" operator="equals" field-name="reserveOrderEnumId" map-name="parameters">
- <set value="unitCost DESC" field="orderByString"/>
+ <set value="-unitCost" field="orderByString"/>
<else>
<if-compare value="INVRO_LUNIT_COST" operator="equals" field-name="reserveOrderEnumId" map-name="parameters">
- <set value="unitCost ASC" field="orderByString"/>
+ <set value="+unitCost" field="orderByString"/>
<else>
<if-compare value="INVRO_FIFO_EXP" operator="equals" field-name="reserveOrderEnumId" map-name="parameters">
- <set value="expireDate ASC" field="orderByString"/>
+ <set value="+expireDate" field="orderByString"/>
<else>
<if-compare value="INVRO_LIFO_EXP" operator="equals" field-name="reserveOrderEnumId" map-name="parameters">
- <set value="expireDate DESC" field="orderByString"/>
+ <set value="-expireDate" field="orderByString"/>
<else>
<if-compare value="INVRO_LIFO_REC" operator="equals" field-name="reserveOrderEnumId" map-name="parameters">
- <set value="datetimeReceived DESC" field="orderByString"/>
+ <set value="-datetimeReceived" field="orderByString"/>
<else>
<!-- the default reserveOrderEnumId is INVRO_FIFO_REC, ie FIFO based on date received -->
- <set value="datetimeReceived ASC" field="orderByString"/>
+ <set value="+datetimeReceived" field="orderByString"/>
<set value="INVRO_FIFO_REC" field="parameters.reserveOrderEnumId"/>
</else>
</if-compare>
@@ -80,12 +77,20 @@
</if-compare>
</else>
</if-compare>
- <set field="orderByList[]" from-field="orderByString"/>
<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" use-iterator="true" order-by-list-name="orderByList"/>
+ <entity-condition entity-name="InventoryItemAndLocation" list-name="inventoryItemAndLocations">
+ <condition-list combine="and">
+ <condition-expr field-name="productId" env-name="parameters.productId"/>
+ <condition-expr field-name="facilityId" env-name="parameters.facilityId" ignore-if-null="true"/>
+ <condition-expr field-name="containerId" env-name="parameters.containerId" ignore-if-null="true"/>
+ <condition-expr field-name="quantityOnHandTotal" operator="greater" value="0.0"/>
+ <condition-expr field-name="locationTypeEnumId" operator="equals" value="FLT_PICKLOC"/>
+ </condition-list>
+ <order-by field-name="${orderByString}"/>
+ </entity-condition>
<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 -->
@@ -96,7 +101,16 @@
<!-- 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"/>
+ <entity-condition entity-name="InventoryItemAndLocation" list-name="inventoryItemAndLocations">
+ <condition-list combine="and">
+ <condition-expr field-name="productId" env-name="parameters.productId"/>
+ <condition-expr field-name="facilityId" env-name="parameters.facilityId" ignore-if-null="true"/>
+ <condition-expr field-name="containerId" env-name="parameters.containerId" ignore-if-null="true"/>
+ <condition-expr field-name="quantityOnHandTotal" operator="greater" value="0.0"/>
+ <condition-expr field-name="locationTypeEnumId" operator="equals" value="FLT_BULK"/>
+ </condition-list>
+ <order-by field-name="${orderByString}"/>
+ </entity-condition>
<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 -->
@@ -108,7 +122,16 @@
<!-- 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" use-iterator="true" order-by-list-name="orderByList"/>
+ <entity-condition entity-name="InventoryItem" list-name="inventoryItems">
+ <condition-list combine="and">
+ <condition-expr field-name="productId" env-name="parameters.productId"/>
+ <condition-expr field-name="facilityId" env-name="parameters.facilityId" ignore-if-null="true"/>
+ <condition-expr field-name="containerId" env-name="parameters.containerId" ignore-if-null="true"/>
+ <condition-expr field-name="quantityOnHandTotal" operator="greater" value="0.0"/>
+ <condition-expr field-name="locationSeqId" operator="equals" env-name="nullField"/>
+ </condition-list>
+ <order-by field-name="${orderByString}"/>
+ </entity-condition>
<iterate entry-name="inventoryItem" list-name="inventoryItems">
<if-empty field-name="inventoryItem.locationSeqId">
<call-simple-method method-name="reserveForInventoryItemInline"/>