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/22 17:31:43 UTC

svn commit: r531204 - /ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml

Author: jaz
Date: Sun Apr 22 08:31:42 2007
New Revision: 531204

URL: http://svn.apache.org/viewvc?view=rev&rev=531204
Log:
added check for isPhysical before doing inventory reservations

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?view=diff&rev=531204&r1=531203&r2=531204
==============================================================================
--- ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml (original)
+++ ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml Sun Apr 22 08:31:42 2007
@@ -39,187 +39,195 @@
         <set from-field="parameters.containerId" field="lookupFieldMap.containerId"/>
         <now-timestamp-to-env env-name="nowTimestamp"/>
 
-        <entity-one entity-name="OrderHeader" value-name="orderHeader"/>
-
-        <!-- before we do the find, put together the orderBy list based on which reserveOrderEnumId is specified -->
-        <!-- FIFO=first in first out, so it should be order by ASCending receive or expire date
-             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"/>
-        <else>
-            <if-compare value="INVRO_LUNIT_COST" operator="equals" field-name="reserveOrderEnumId" map-name="parameters">
-                <set value="unitCost ASC" field="orderByString"/>
+        <!-- check the product; make sure its a physical item -->
+        <entity-one entity-name="Product" value-name="product"/>
+        <get-related-one value-name="product" relation-name="ProductType" to-value-name="productType"/>
+        <if-compare field-name="productType.isPhysical" operator="equals" value="N">
+            <set field="parameters.quantityNotReserved" value="0" type="Double"/>
             <else>
-                <if-compare value="INVRO_FIFO_EXP" operator="equals" field-name="reserveOrderEnumId" map-name="parameters">
-                    <set value="expireDate ASC" field="orderByString"/>
+                <entity-one entity-name="OrderHeader" value-name="orderHeader"/>
+
+                <!-- before we do the find, put together the orderBy list based on which reserveOrderEnumId is specified -->
+                <!-- FIFO=first in first out, so it should be order by ASCending receive or expire date
+                     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"/>
                 <else>
-                    <if-compare value="INVRO_LIFO_EXP" operator="equals" field-name="reserveOrderEnumId" map-name="parameters">
-                        <set value="expireDate DESC" field="orderByString"/>
+                    <if-compare value="INVRO_LUNIT_COST" operator="equals" field-name="reserveOrderEnumId" map-name="parameters">
+                        <set value="unitCost ASC" field="orderByString"/>
                     <else>
-                        <if-compare value="INVRO_LIFO_REC" operator="equals" field-name="reserveOrderEnumId" map-name="parameters">
-                            <set value="datetimeReceived DESC" field="orderByString"/>
+                        <if-compare value="INVRO_FIFO_EXP" operator="equals" field-name="reserveOrderEnumId" map-name="parameters">
+                            <set value="expireDate ASC" field="orderByString"/>
                         <else>
-                            <!-- the default reserveOrderEnumId is INVRO_FIFO_REC, ie FIFO based on date received -->
-                            <set value="datetimeReceived ASC" field="orderByString"/>
-                            <set value="INVRO_FIFO_REC" field="parameters.reserveOrderEnumId"/>
+                            <if-compare value="INVRO_LIFO_EXP" operator="equals" field-name="reserveOrderEnumId" map-name="parameters">
+                                <set value="expireDate DESC" field="orderByString"/>
+                            <else>
+                                <if-compare value="INVRO_LIFO_REC" operator="equals" field-name="reserveOrderEnumId" map-name="parameters">
+                                    <set value="datetimeReceived DESC" field="orderByString"/>
+                                <else>
+                                    <!-- the default reserveOrderEnumId is INVRO_FIFO_REC, ie FIFO based on date received -->
+                                    <set value="datetimeReceived ASC" field="orderByString"/>
+                                    <set value="INVRO_FIFO_REC" field="parameters.reserveOrderEnumId"/>
+                                </else>
+                                </if-compare>
+                            </else>
+                            </if-compare>
                         </else>
                         </if-compare>
                     </else>
                     </if-compare>
                 </else>
                 </if-compare>
-            </else>
-            </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"/>
-        <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 -->
-                <make-value entity-name="InventoryItem" map-name="inventoryItemAndLocation" value-name="inventoryItem"/>
-                <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 -->
-                    <make-value entity-name="InventoryItem" map-name="inventoryItemAndLocation" value-name="inventoryItem"/>
-                    <call-simple-method method-name="reserveForInventoryItemInline"/>
+                <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"/>
+                <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 -->
+                        <make-value entity-name="InventoryItem" map-name="inventoryItemAndLocation" value-name="inventoryItem"/>
+                        <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 -->
+                            <make-value entity-name="InventoryItem" map-name="inventoryItemAndLocation" value-name="inventoryItem"/>
+                            <call-simple-method method-name="reserveForInventoryItemInline"/>
+                        </if-compare>
+                    </iterate>
                 </if-compare>
-            </iterate>
-        </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" 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"/>
-                </if-empty>
-            </iterate>
-        </if-compare>
-
-        <!--
-            if inventory is not required for purchase and quantityNotReserved != 0:
-                - subtract the remaining quantityNotReserved from the availableToPromise of the last non-serialized inventory item
-                - or if none was found create a non-ser InventoryItem with availableToPromise = -quantityNotReserved
-        -->
-        <if-compare field-name="parameters.quantityNotReserved" operator="not-equals" value="0" type="Double">
-            <if-compare field-name="parameters.requireInventory" operator="equals" value="Y">
-                <!-- use this else pattern to accomplish the anything but Y logic, ie if not specified default to inventory NOT required -->
-            <else>
-                <if-not-empty field-name="lastNonSerInventoryItem">
-                    <!-- subtract from quantityNotReserved from the availableToPromise of existing inventory item -->
-                    <!-- instead of updating InventoryItem, add an InventoryItemDetail -->
-                    <set from-field="lastNonSerInventoryItem.inventoryItemId" field="createDetailMap.inventoryItemId"/>
-                    <set from-field="parameters.orderId" field="createDetailMap.orderId"/>
-                    <set from-field="parameters.orderItemSeqId" field="createDetailMap.orderItemSeqId"/>
-                    <set from-field="parameters.shipGroupSeqId" field="createDetailMap.shipGroupSeqId"/>
-                    <calculate field-name="createDetailMap.availableToPromiseDiff" type="Double">
-                        <calcop field-name="parameters.quantityNotReserved" operator="negative"/>
-                    </calculate>
-                    <call-service service-name="createInventoryItemDetail" in-map-name="createDetailMap"/>
-                    <clear-field field-name="createDetailMap"/>
-
-                    <!-- get the promiseDatetime -->
-                    <get-related-one value-name="lastNonSerInventoryItem" relation-name="ProductFacility" to-value-name="productFacility"/>
-                    <set field="daysToShip" from-field="productFacility.daysToShip"/>
-                    <if-empty field-name="daysToShip">
-                        <set field="daysToShip" value="30" type="Long"/>
-                    </if-empty>
-                    <call-bsh><![CDATA[
-                    java.sql.Timestamp orderDate = orderHeader.getTimestamp("orderDate");
-                    java.util.Calendar cal = java.util.Calendar.getInstance();
-                    cal.setTimeInMillis(orderDate.getTime());
-                    cal.add(java.util.Calendar.DAY_OF_YEAR, daysToShip.intValue());
-                    return org.ofbiz.base.util.UtilMisc.toMap("promisedDatetime", new java.sql.Timestamp(cal.getTimeInMillis()));
-                    ]]></call-bsh>
-
-                    <!-- create or update OrderItemShipGrpInvRes record -->
-                    <set from-field="parameters.orderId" field="reserveOisgirMap.orderId"/>
-                    <set from-field="parameters.orderItemSeqId" field="reserveOisgirMap.orderItemSeqId"/>
-                    <set from-field="parameters.shipGroupSeqId" field="reserveOisgirMap.shipGroupSeqId"/>
-                    <set from-field="lastNonSerInventoryItem.inventoryItemId" field="reserveOisgirMap.inventoryItemId"/>
-                    <set from-field="parameters.reserveOrderEnumId" field="reserveOisgirMap.reserveOrderEnumId"/>
-                    <set from-field="parameters.quantityNotReserved" field="reserveOisgirMap.quantity"/>
-                    <set from-field="parameters.quantityNotReserved" field="reserveOisgirMap.quantityNotAvailable"/>
-                    <set from-field="parameters.reservedDatetime" field="reserveOisgirMap.reservedDatetime"/>
-                    <set from-field="promisedDatetime" field="reserveOisgirMap.promisedDatetime"/>
-                    <call-service service-name="reserveOrderItemInventory" in-map-name="reserveOisgirMap"/>
-                    <clear-field field-name="reserveOisgirMap"/>
-                <else>
-                    <!-- no non-ser inv item, create a non-ser InventoryItem with availableToPromise = -quantityNotReserved -->
-                    <clear-field field-name="createInventoryItemInMap"/>
-                    <clear-field field-name="createInventoryItemOutMap"/>
-                    <!-- the createInventoryItem service is run by the the system user here -->
-                    <entity-one entity-name="UserLogin" value-name="permUserLogin">
-                        <field-map field-name="userLoginId" value="system"/>
-                    </entity-one>
-                    <set from-field="parameters.productId" field="createInventoryItemInMap.productId"/>
-                    <set from-field="parameters.facilityId" field="createInventoryItemInMap.facilityId"/>
-                    <set from-field="parameters.containerId" field="createInventoryItemInMap.containerId"/>
-                    <set value="NON_SERIAL_INV_ITEM" field="createInventoryItemInMap.inventoryItemTypeId"/>
-                    <set from-field="permUserLogin" field="createInventoryItemInMap.userLogin"/>
-                    <call-service service-name="createInventoryItem" in-map-name="createInventoryItemInMap" include-user-login="false">
-                        <result-to-field result-name="inventoryItemId" field-name="createInventoryItemOutMap.inventoryItemId"/>
-                    </call-service>
-                    <entity-one entity-name="InventoryItem" value-name="newNonSerInventoryItem">
-                        <field-map field-name="inventoryItemId" env-name="createInventoryItemOutMap.inventoryItemId"/>
-                    </entity-one>
-
-                    <!-- also create a detail record with the quantities -->
-                    <set from-field="newNonSerInventoryItem.inventoryItemId" field="createDetailMap.inventoryItemId"/>
-                    <set from-field="parameters.orderId" field="createDetailMap.orderId"/>
-                    <set from-field="parameters.orderItemSeqId" field="createDetailMap.orderItemSeqId"/>
-                    <set from-field="parameters.shipGroupSeqId" field="createDetailMap.shipGroupSeqId"/>
-                    <calculate field-name="createDetailMap.availableToPromiseDiff" type="Double">
-                        <calcop field-name="parameters.quantityNotReserved" operator="negative"/>
-                    </calculate>
-                    <call-service service-name="createInventoryItemDetail" in-map-name="createDetailMap"/>
-                    <clear-field field-name="createDetailMap"/>
-
-                    <!-- get the promiseDatetime -->
-                    <get-related-one value-name="newNonSerInventoryItem" relation-name="ProductFacility" to-value-name="productFacility"/>
-                    <set field="daysToShip" from-field="productFacility.daysToShip"/>
-                    <if-empty field-name="daysToShip">
-                        <set field="daysToShip" value="30" type="Long"/>
-                    </if-empty>
-                    <call-bsh><![CDATA[
-                    java.sql.Timestamp orderDate = orderHeader.getTimestamp("orderDate");
-                    java.util.Calendar cal = java.util.Calendar.getInstance();
-                    cal.setTimeInMillis(orderDate.getTime());
-                    cal.add(java.util.Calendar.DAY_OF_YEAR, daysToShip.intValue());
-                    return org.ofbiz.base.util.UtilMisc.toMap("promisedDatetime", new java.sql.Timestamp(cal.getTimeInMillis()));
-                    ]]></call-bsh>
-
-                    <!-- create OrderItemShipGrpInvRes record -->
-                    <set from-field="parameters.orderId" field="reserveOisgirMap.orderId"/>
-                    <set from-field="parameters.orderItemSeqId" field="reserveOisgirMap.orderItemSeqId"/>
-                    <set from-field="parameters.shipGroupSeqId" field="reserveOisgirMap.shipGroupSeqId"/>
-                    <set from-field="newNonSerInventoryItem.inventoryItemId" field="reserveOisgirMap.inventoryItemId"/>
-                    <set from-field="parameters.reserveOrderEnumId" field="reserveOisgirMap.reserveOrderEnumId"/>
-                    <set from-field="parameters.quantityNotReserved" field="reserveOisgirMap.quantity"/>
-                    <set from-field="parameters.quantityNotReserved" field="reserveOisgirMap.quantityNotAvailable"/>
-                    <set from-field="parameters.reservedDatetime" field="reserveOisgirMap.reservedDatetime"/>
-                    <set from-field="parameters.promisedDatetime" field="reserveOisgirMap.promisedDatetime"/>
-                    <call-service service-name="reserveOrderItemInventory" in-map-name="reserveOisgirMap"/>
-                    <clear-field field-name="reserveOisgirMap"/>
-                </else>
-                </if-not-empty>
+                <!-- 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"/>
+                    <iterate entry-name="inventoryItem" list-name="inventoryItems">
+                        <if-empty field-name="inventoryItem.locationSeqId">
+                            <call-simple-method method-name="reserveForInventoryItemInline"/>
+                        </if-empty>
+                    </iterate>
+                </if-compare>
 
-                <set field="parameters.quantityNotReserved" value="0" type="Double"/>
+                <!--
+                    if inventory is not required for purchase and quantityNotReserved != 0:
+                        - subtract the remaining quantityNotReserved from the availableToPromise of the last non-serialized inventory item
+                        - or if none was found create a non-ser InventoryItem with availableToPromise = -quantityNotReserved
+                -->
+                <if-compare field-name="parameters.quantityNotReserved" operator="not-equals" value="0" type="Double">
+                    <if-compare field-name="parameters.requireInventory" operator="equals" value="Y">
+                        <!-- use this else pattern to accomplish the anything but Y logic, ie if not specified default to inventory NOT required -->
+                    <else>
+                        <if-not-empty field-name="lastNonSerInventoryItem">
+                            <!-- subtract from quantityNotReserved from the availableToPromise of existing inventory item -->
+                            <!-- instead of updating InventoryItem, add an InventoryItemDetail -->
+                            <set from-field="lastNonSerInventoryItem.inventoryItemId" field="createDetailMap.inventoryItemId"/>
+                            <set from-field="parameters.orderId" field="createDetailMap.orderId"/>
+                            <set from-field="parameters.orderItemSeqId" field="createDetailMap.orderItemSeqId"/>
+                            <set from-field="parameters.shipGroupSeqId" field="createDetailMap.shipGroupSeqId"/>
+                            <calculate field-name="createDetailMap.availableToPromiseDiff" type="Double">
+                                <calcop field-name="parameters.quantityNotReserved" operator="negative"/>
+                            </calculate>
+                            <call-service service-name="createInventoryItemDetail" in-map-name="createDetailMap"/>
+                            <clear-field field-name="createDetailMap"/>
+
+                            <!-- get the promiseDatetime -->
+                            <get-related-one value-name="lastNonSerInventoryItem" relation-name="ProductFacility" to-value-name="productFacility"/>
+                            <set field="daysToShip" from-field="productFacility.daysToShip"/>
+                            <if-empty field-name="daysToShip">
+                                <set field="daysToShip" value="30" type="Long"/>
+                            </if-empty>
+                            <call-bsh><![CDATA[
+                            java.sql.Timestamp orderDate = orderHeader.getTimestamp("orderDate");
+                            java.util.Calendar cal = java.util.Calendar.getInstance();
+                            cal.setTimeInMillis(orderDate.getTime());
+                            cal.add(java.util.Calendar.DAY_OF_YEAR, daysToShip.intValue());
+                            return org.ofbiz.base.util.UtilMisc.toMap("promisedDatetime", new java.sql.Timestamp(cal.getTimeInMillis()));
+                            ]]></call-bsh>
+
+                            <!-- create or update OrderItemShipGrpInvRes record -->
+                            <set from-field="parameters.orderId" field="reserveOisgirMap.orderId"/>
+                            <set from-field="parameters.orderItemSeqId" field="reserveOisgirMap.orderItemSeqId"/>
+                            <set from-field="parameters.shipGroupSeqId" field="reserveOisgirMap.shipGroupSeqId"/>
+                            <set from-field="lastNonSerInventoryItem.inventoryItemId" field="reserveOisgirMap.inventoryItemId"/>
+                            <set from-field="parameters.reserveOrderEnumId" field="reserveOisgirMap.reserveOrderEnumId"/>
+                            <set from-field="parameters.quantityNotReserved" field="reserveOisgirMap.quantity"/>
+                            <set from-field="parameters.quantityNotReserved" field="reserveOisgirMap.quantityNotAvailable"/>
+                            <set from-field="parameters.reservedDatetime" field="reserveOisgirMap.reservedDatetime"/>
+                            <set from-field="promisedDatetime" field="reserveOisgirMap.promisedDatetime"/>
+                            <call-service service-name="reserveOrderItemInventory" in-map-name="reserveOisgirMap"/>
+                            <clear-field field-name="reserveOisgirMap"/>
+                        <else>
+                            <!-- no non-ser inv item, create a non-ser InventoryItem with availableToPromise = -quantityNotReserved -->
+                            <clear-field field-name="createInventoryItemInMap"/>
+                            <clear-field field-name="createInventoryItemOutMap"/>
+                            <!-- the createInventoryItem service is run by the the system user here -->
+                            <entity-one entity-name="UserLogin" value-name="permUserLogin">
+                                <field-map field-name="userLoginId" value="system"/>
+                            </entity-one>
+                            <set from-field="parameters.productId" field="createInventoryItemInMap.productId"/>
+                            <set from-field="parameters.facilityId" field="createInventoryItemInMap.facilityId"/>
+                            <set from-field="parameters.containerId" field="createInventoryItemInMap.containerId"/>
+                            <set value="NON_SERIAL_INV_ITEM" field="createInventoryItemInMap.inventoryItemTypeId"/>
+                            <set from-field="permUserLogin" field="createInventoryItemInMap.userLogin"/>
+                            <call-service service-name="createInventoryItem" in-map-name="createInventoryItemInMap" include-user-login="false">
+                                <result-to-field result-name="inventoryItemId" field-name="createInventoryItemOutMap.inventoryItemId"/>
+                            </call-service>
+                            <entity-one entity-name="InventoryItem" value-name="newNonSerInventoryItem">
+                                <field-map field-name="inventoryItemId" env-name="createInventoryItemOutMap.inventoryItemId"/>
+                            </entity-one>
+
+                            <!-- also create a detail record with the quantities -->
+                            <set from-field="newNonSerInventoryItem.inventoryItemId" field="createDetailMap.inventoryItemId"/>
+                            <set from-field="parameters.orderId" field="createDetailMap.orderId"/>
+                            <set from-field="parameters.orderItemSeqId" field="createDetailMap.orderItemSeqId"/>
+                            <set from-field="parameters.shipGroupSeqId" field="createDetailMap.shipGroupSeqId"/>
+                            <calculate field-name="createDetailMap.availableToPromiseDiff" type="Double">
+                                <calcop field-name="parameters.quantityNotReserved" operator="negative"/>
+                            </calculate>
+                            <call-service service-name="createInventoryItemDetail" in-map-name="createDetailMap"/>
+                            <clear-field field-name="createDetailMap"/>
+
+                            <!-- get the promiseDatetime -->
+                            <get-related-one value-name="newNonSerInventoryItem" relation-name="ProductFacility" to-value-name="productFacility"/>
+                            <set field="daysToShip" from-field="productFacility.daysToShip"/>
+                            <if-empty field-name="daysToShip">
+                                <set field="daysToShip" value="30" type="Long"/>
+                            </if-empty>
+                            <call-bsh><![CDATA[
+                            java.sql.Timestamp orderDate = orderHeader.getTimestamp("orderDate");
+                            java.util.Calendar cal = java.util.Calendar.getInstance();
+                            cal.setTimeInMillis(orderDate.getTime());
+                            cal.add(java.util.Calendar.DAY_OF_YEAR, daysToShip.intValue());
+                            return org.ofbiz.base.util.UtilMisc.toMap("promisedDatetime", new java.sql.Timestamp(cal.getTimeInMillis()));
+                            ]]></call-bsh>
+
+                            <!-- create OrderItemShipGrpInvRes record -->
+                            <set from-field="parameters.orderId" field="reserveOisgirMap.orderId"/>
+                            <set from-field="parameters.orderItemSeqId" field="reserveOisgirMap.orderItemSeqId"/>
+                            <set from-field="parameters.shipGroupSeqId" field="reserveOisgirMap.shipGroupSeqId"/>
+                            <set from-field="newNonSerInventoryItem.inventoryItemId" field="reserveOisgirMap.inventoryItemId"/>
+                            <set from-field="parameters.reserveOrderEnumId" field="reserveOisgirMap.reserveOrderEnumId"/>
+                            <set from-field="parameters.quantityNotReserved" field="reserveOisgirMap.quantity"/>
+                            <set from-field="parameters.quantityNotReserved" field="reserveOisgirMap.quantityNotAvailable"/>
+                            <set from-field="parameters.reservedDatetime" field="reserveOisgirMap.reservedDatetime"/>
+                            <set from-field="parameters.promisedDatetime" field="reserveOisgirMap.promisedDatetime"/>
+                            <call-service service-name="reserveOrderItemInventory" in-map-name="reserveOisgirMap"/>
+                            <clear-field field-name="reserveOisgirMap"/>
+                        </else>
+                        </if-not-empty>
+
+                        <set field="parameters.quantityNotReserved" value="0" type="Double"/>
+                    </else>
+                    </if-compare>
+                </if-compare>
             </else>
-            </if-compare>
         </if-compare>
 
         <field-to-result field-name="quantityNotReserved" map-name="parameters"/>