[OFBiz] SVN: r6066 - in trunk/applications: order/config order/webapp/ordermgr/WEB-INF/actions/order order/webapp/ordermgr/order product/script/org/ofbiz/shipment/shipment product/servicedef product/webapp/facility/WEB-INF

sichen at svn.ofbiz.org sichen at svn.ofbiz.org
Thu Nov 3 13:22:40 EST 2005


Author: sichen
Date: 2005-11-03 12:22:28 -0600 (Thu, 03 Nov 2005)
New Revision: 6066

Modified:
   trunk/applications/order/config/OrderUiLabels.properties
   trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/orderview.bsh
   trunk/applications/order/webapp/ordermgr/order/orderheader.ftl
   trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml
   trunk/applications/product/servicedef/services_shipment.xml
   trunk/applications/product/webapp/facility/WEB-INF/controller.xml
Log:
New feature which automatically creates a shipment of all purchase order items and takes the user directly to the receive items screen in facility manager.  Involved a re-factoring of code from quickShipEntireOrder to new sub-methods

Modified: trunk/applications/order/config/OrderUiLabels.properties
===================================================================
--- trunk/applications/order/config/OrderUiLabels.properties	2005-11-03 06:02:39 UTC (rev 6065)
+++ trunk/applications/order/config/OrderUiLabels.properties	2005-11-03 18:22:28 UTC (rev 6066)
@@ -211,6 +211,7 @@
 OrderQuickAddOrderItem=Order Item Quick Add
 OrderQuickFinalizeOrder=Quick Finalize Order
 OrderQuickLookup=Quick Lookup
+OrderQuickReceivePurchaseOrder = Quick Receive Purchase Order
 OrderQuickRefundEntireOrder = Quick Refund Entire Order
 OrderQuickShipEntireOrder = Quick Ship Entire Order
 OrderRecalculateOrder = Recalculate Order

Modified: trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/orderview.bsh
===================================================================
--- trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/orderview.bsh	2005-11-03 06:02:39 UTC (rev 6065)
+++ trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/orderview.bsh	2005-11-03 18:22:28 UTC (rev 6066)
@@ -226,6 +226,11 @@
     inventorySummary = dispatcher.runSync("getProductInventorySummaryForItems", UtilMisc.toMap("orderItems", orderItems));
     context.put("availableToPromiseMap", inventorySummary.get("availableToPromiseMap"));
     context.put("quantityOnHandMap", inventorySummary.get("availableToPromiseMap"));
+
+    // get a list of facilities for purchase orders to receive against
+    if ("PURCHASE_ORDER".equals(orderType)) {
+        context.put("facilities", delegator.findAllCache("Facility"));
+    }
 }
 
 paramString = "";

Modified: trunk/applications/order/webapp/ordermgr/order/orderheader.ftl
===================================================================
--- trunk/applications/order/webapp/ordermgr/order/orderheader.ftl	2005-11-03 06:02:39 UTC (rev 6065)
+++ trunk/applications/order/webapp/ordermgr/order/orderheader.ftl	2005-11-03 18:22:28 UTC (rev 6066)
@@ -756,34 +756,66 @@
                     </td>
                   </tr>
                </#if>
-               <#if security.hasEntityPermission("ORDERMGR", "_UPDATE", session)>
-                 <#if orderHeader.statusId == "ORDER_APPROVED" || orderHeader.statusId == "ORDER_SENT">
-                   <tr><td colspan="7"><hr class="sepbar"></td></tr>
-                   <tr>
-                     <td align="right" valign="top" width="15%">
-                       <div class="tabletext">&nbsp;</div>
-                     </td>
-                     <td width="5">&nbsp;</td>
-                     <td align="left" valign="top" width="80%">
-                       <div class="tabletext"><a href="/facility/control/PackOrder?facilityId=${orderHeader.originFacilityId?if_exists}&orderId=${orderId}&shipGroupSeqId=${shipGroup.shipGroupSeqId}&externalLoginKey=${externalLoginKey}" class="buttontext">Pack Shipment For Ship Group [${shipGroup.shipGroupSeqId}]</a></div>
-                       <div class="tabletext"><a href="/facility/control/EditShipment?primaryOrderId=${orderId}&primaryShipGroupSeqId=${shipGroup.shipGroupSeqId}&externalLoginKey=${externalLoginKey}" class="buttontext">New Shipment For Ship Group [${shipGroup.shipGroupSeqId}]</a></div>
-                     </td>
-                   </tr>
-                 </#if>
+
+               <#-- shipment actions -->
+               <#if security.hasEntityPermission("ORDERMGR", "_UPDATE", session) && ((orderHeader.statusId == "ORDER_APPROVED") || (orderHeader.statusId == "ORDER_SENT"))>
+
+                 <#-- Special shipment options -->
+                 <tr><td colspan="7"><hr class="sepbar"></td></tr>
+                 <tr>
+                   <td align="right" valign="top" width="15%">
+                     <div class="tabletext">&nbsp;<#if orderHeader.orderTypeId == "PURCHASE_ORDER"><b>${uiLabelMap.ProductDestinationFacility}</b></#if></div>
+                   </td>
+                   <td width="5">&nbsp;</td>
+                   <td align="left" valign="top" width="80%">
+                     <div class="tabletext">
+                       <#if orderHeader.orderTypeId == "SALES_ORDER">
+                         <a href="<@ofbizUrl>quickShipOrder?orderId=${orderId}&${paramString}</@ofbizUrl>" class="buttontext">Quick-Ship Entire Order</a>
+                       <#else> <#-- PURCHASE_ORDER -->
+                         <form action="/facility/control/quickShipPurchaseOrder">
+                           <input type="hidden" name="initialSelected" value="Y"/>
+                           <input type="hidden" name="orderId" value="${orderId}"/>
+                           <#-- destination form (/facility/control/ReceiveInventory) wants purchaseOrderId instead of orderId, so we set it here as a workaround -->
+                           <input type="hidden" name="purchaseOrderId" value="${orderId}"/>
+                           <select name="facilityId" class="selectBox">
+                             <#list facilities as facility>
+                               <option value="${facility.facilityId}">${facility.facilityName}</option>
+                             </#list>
+                           </select>
+                           <input type="submit" class="smallSubmit" value="${uiLabelMap.OrderQuickReceivePurchaseOrder}">
+                         </form>
+                       </#if>
+                     </div>
+                   </td>
+                 </tr>
+
+                 <#-- Manual shipment options -->
+                 <tr><td colspan="7"><hr class="sepbar"></td></tr>
+                 <tr>
+                   <td align="right" valign="top" width="15%">
+                     <div class="tabletext">&nbsp;</div>
+                   </td>
+                   <td width="5">&nbsp;</td>
+                   <td align="left" valign="top" width="80%">
+                     <div class="tabletext"><a href="/facility/control/PackOrder?facilityId=${orderHeader.originFacilityId?if_exists}&orderId=${orderId}&shipGroupSeqId=${shipGroup.shipGroupSeqId}&externalLoginKey=${externalLoginKey}" class="buttontext">Pack Shipment For Ship Group [${shipGroup.shipGroupSeqId}]</a></div>
+                     <div class="tabletext"><a href="/facility/control/EditShipment?primaryOrderId=${orderId}&primaryShipGroupSeqId=${shipGroup.shipGroupSeqId}&externalLoginKey=${externalLoginKey}" class="buttontext">New Shipment For Ship Group [${shipGroup.shipGroupSeqId}]</a></div>
+                   </td>
+                 </tr>
+
                </#if>
 
+               <#-- Refunds/Returns for Sales Orders and Delivery Schedules -->
                <#if !shipGroup_has_next>
                  <tr><td colspan="7"><hr class="sepbar"></td></tr>
                  <tr>
                    <td align="right" valign="top" width="15%">
-                     <div class="tabletext">&nbsp;</div>
+                     <div class="tabletext">
+                       &nbsp;
+                     </div>
                    </td>
                    <td width="5">&nbsp;</td>
                    <td align="left" valign="top" width="80%">
                      <#if security.hasEntityPermission("ORDERMGR", "_UPDATE", session)>
-                       <#if (orderHeader.orderTypeId == "SALES_ORDER") && ((orderHeader.statusId == "ORDER_APPROVED") || (orderHeader.statusId == "ORDER_SENT"))>
-                         <div class="tabletext"><a href="<@ofbizUrl>quickShipOrder?orderId=${orderId}&${paramString}</@ofbizUrl>" class="buttontext">Quick-Ship Entire Order</a></div>
-                       </#if>
                        <#if orderHeader.statusId != "ORDER_COMPLETED" && orderHeader.statusId != "ORDER_CANCELLED">
                          <div class="tabletext"><a href="<@ofbizUrl>OrderDeliveryScheduleInfo?orderId=${orderId}</@ofbizUrl>" class="buttontext">View/Edit Delivery Schedule Info</a></div>
                          <div class="tabletext"><a href="<@ofbizUrl>OrderDeliveryScheduleInfo?orderId=${orderId}</@ofbizUrl>" class="buttontext">${uiLabelMap.OrderViewEditDelivery}</a></div>
@@ -796,6 +828,7 @@
                    </td>
                  </tr>
                </#if>
+
               </table>
             </div>
         </div>

Modified: trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml
===================================================================
--- trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml	2005-11-03 06:02:39 UTC (rev 6065)
+++ trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml	2005-11-03 18:22:28 UTC (rev 6066)
@@ -1074,6 +1074,39 @@
             </if>
         </iterate>
 
+        <call-simple-method method-name="getOrderItemShipGroupLists"/>
+
+        <!-- traverse facilities, instantiate shipment for each -->
+        <iterate list-name="orderItemShipGrpInvResFacilityIds" entry-name="orderItemShipGrpInvResFacilityId">
+            <!-- sanity check for valid facility -->
+            <entity-one entity-name="Facility" value-name="facility">
+                <field-map field-name="facilityId" env-name="orderItemShipGrpInvResFacilityId"/>
+            </entity-one>
+            <!-- should never be empty - referential integrity enforced -->
+
+            <call-simple-method method-name="createShipmentForFacilityAndShipGroup"/>
+        </iterate>
+
+        <log level="info" message="Finished quickShipEntireOrder:\nshipmentShipGroupFacilityList=${shipmentShipGroupFacilityList}\nsuccessMessageList=${successMessageList}"/>
+        <field-to-result field-name="shipmentShipGroupFacilityList"/>
+        <field-to-result field-name="successMessageList"/>
+
+        <if-empty field-name="shipmentShipGroupFacilityList">
+            <add-error><fail-message message="Warning: no shipments created; could not find anything ready and needing to be shipped."/></add-error>
+        </if-empty>
+        <check-errors/>
+    </simple-method>
+
+    <simple-method method-name="quickShipPurchaseOrder" short-description="Quick ships an entire purchase order to a facility">
+        <entity-one entity-name="OrderHeader" value-name="orderHeader"/>
+        <call-simple-method method-name="getOrderItemShipGroupLists"/>
+        <call-simple-method method-name="createShipmentForFacilityAndShipGroup"/>
+        <log level="info" message="Finished quickShipPurchaseOrder for orderId ${orderId} and destination facilityId ${facilityId}"/>
+    </simple-method>
+
+    <simple-method method-name="getOrderItemShipGroupLists" 
+        short-description="Sub-method used by quickShip methods to get a list of OrderItemAndShipGroupAssoc and a Map of shipGroupId -> OrderItemAndShipGroupAssoc">
+
         <!-- lookup all the approved items, doing by item because the item must be approved before shipping -->
         <entity-and entity-name="OrderItemAndShipGroupAssoc" list-name="orderItemAndShipGroupAssocList">
             <field-map field-name="orderId" env-name="orderHeader.orderId"/>
@@ -1086,82 +1119,106 @@
             <check-errors/>
         </if-empty>
 
-        <!-- group orderItems (actually OrderItemAndShipGroupAssocs) by shipGroupSeqId in a Map with List values -->
+        <get-related relation-name="OrderItemShipGroup" value-name="orderHeader" list-name="orderItemShipGroupList"/>
+
+        <!-- group orderItems (actually OrderItemAndShipGroupAssocs) by shipGroupSeqId in a Map with List values 
+             This Map is actually used only for sales orders' shipments right now.  -->
         <iterate list-name="orderItemAndShipGroupAssocList" entry-name="orderItemAndShipGroupAssoc">
             <field-to-list field-name="orderItemAndShipGroupAssoc" list-name="orderItemListByShGrpMap.${orderItemAndShipGroupAssoc.shipGroupSeqId}"/>
         </iterate>
+    </simple-method>
 
-        <get-related relation-name="OrderItemShipGroup" value-name="orderHeader" list-name="orderItemShipGroupList"/>
+    <simple-method method-name="createShipmentForFacilityAndShipGroup" short-description="Sub-method used by quickShip methods to create a shipment">
 
-        <!-- traverse facilities, instantiate shipment for each -->
-        <iterate list-name="orderItemShipGrpInvResFacilityIds" entry-name="orderItemShipGrpInvResFacilityId">
-            <!-- sanity check for valid facility -->
-            <entity-one entity-name="Facility" value-name="facility">
-                <field-map field-name="facilityId" env-name="orderItemShipGrpInvResFacilityId"/>
-            </entity-one>
-            <!-- should never be empty - referential integrity enforced -->
+        <!-- for OrderItemShipGroup need to split all OISGIRs into their ship groups and create a shipment for each -->
+        <iterate list-name="orderItemShipGroupList" entry-name="orderItemShipGroup">
+            <!-- lookup all the approved items -->
+            <entity-and entity-name="OrderItemAndShipGroupAssoc" list-name="orderItems">
+                <field-map field-name="orderId" env-name="orderHeader.orderId"/>
+                <field-map field-name="shipGroupSeqId" env-name="orderItemShipGroup.shipGroupSeqId"/>
+                <field-map field-name="statusId" value="ITEM_APPROVED"/>
+            </entity-and>
 
-            <!-- for OrderItemShipGroup need to split all OISGIRs into their ship groups and create a shipment for each -->
-            <iterate list-name="orderItemShipGroupList" entry-name="orderItemShipGroup">
-                <!-- lookup all the approved items -->
-                <entity-and entity-name="OrderItemAndShipGroupAssoc" list-name="orderItems">
-                    <field-map field-name="orderId" env-name="orderHeader.orderId"/>
-                    <field-map field-name="shipGroupSeqId" env-name="orderItemShipGroup.shipGroupSeqId"/>
-                    <field-map field-name="statusId" value="ITEM_APPROVED"/>
-                </entity-and>
+            <set from-field="orderItemListByShGrpMap.${orderItemShipGroup.shipGroupSeqId}" field="perShipGroupItemList"/>
 
-                <set from-field="orderItemListByShGrpMap.${orderItemShipGroup.shipGroupSeqId}" field="perShipGroupItemList"/>
-
-                <!-- make sure we have something to ship -->
-                <if-empty field-name="perShipGroupItemList">
-                    <string-to-list string="No items available to ship at this time for ship group ID [${orderItemShipGroup.shipGroupSeqId}]" list-name="successMessageList"/>
-                <else>
-                    <!-- create the shipment for this facility and ship group combination -->
-                    <set from-field="orderHeader.orderId" field="shipmentContext.primaryOrderId"/>
-                    <set from-field="orderItemShipGroup.shipGroupSeqId" field="shipmentContext.primaryShipGroupSeqId"/>
+            <!-- make sure we have something to ship -->
+            <if-empty field-name="perShipGroupItemList">
+                <string-to-list string="No items available to ship at this time for ship group ID [${orderItemShipGroup.shipGroupSeqId}]" list-name="successMessageList"/>
+            <else>
+                <!-- create the shipment for this facility and ship group combination -->
+                <set from-field="orderHeader.orderId" field="shipmentContext.primaryOrderId"/>
+                <set from-field="orderItemShipGroup.shipGroupSeqId" field="shipmentContext.primaryShipGroupSeqId"/>
+                <!-- for Sales Shipment, order items' reservation facilityId is the originFacilityId, and the initial status is "INPUT"
+                     for Purchase Shipment, the facilityId parameter is the destinationFacilityId, and the initial status is "CREATED" -->
+                <if><condition><if-compare field-name="orderHeader.orderTypeId" operator="equals" value="SALES_ORDER"/></condition>
+                  <then>
                     <set from-field="orderItemShipGrpInvResFacilityId" field="shipmentContext.originFacilityId"/>
                     <set value="SHIPMENT_INPUT" field="shipmentContext.statusId"/>
-                    <call-service service-name="createShipment" in-map-name="shipmentContext">
-                        <result-to-field result-name="shipmentId" field-name="shipmentLookupMap.shipmentId"/>
-                    </call-service>
-                    <find-by-primary-key entity-name="Shipment" map-name="shipmentLookupMap" value-name="shipment"/>
+                  </then>
+                  <else>
+                    <set from-field="facilityId" field="shipmentContext.destinationFacilityId"/>
+                    <set value="PURCH_SHIP_CREATED" field="shipmentContext.statusId"/>
+                  </else>
+                </if>
+                <call-service service-name="createShipment" in-map-name="shipmentContext">
+                    <result-to-field result-name="shipmentId" field-name="shipmentLookupMap.shipmentId"/>
+                </call-service>
+                <find-by-primary-key entity-name="Shipment" map-name="shipmentLookupMap" value-name="shipment"/>
 
+                <if><condition><if-compare field-name="orderHeader.orderTypeId" operator="equals" value="SALES_ORDER"/></condition>
+                  <then>
                     <iterate list-name="perShipGroupItemList" entry-name="orderItemAndShipGroupAssoc">
-                        <!-- just get the OrderItemShipGrpInvResAndItem records for this facility and this ship group, since that is what this shipment is for -->
-                        <clear-field field-name="itemResFindMap"/>
-                        <set from-field="orderItemShipGrpInvResFacilityId" field="itemResFindMap.facilityId"/>
-                        <get-related value-name="orderItemAndShipGroupAssoc" relation-name="OrderItemShipGrpInvResAndItem" map-name="itemResFindMap" list-name="itemResList"/>
-                        <iterate list-name="itemResList" entry-name="itemRes">
-                            <set from-field="shipment.shipmentId" field="issueContext.shipmentId"/>
-                            <set from-field="itemRes.orderId" field="issueContext.orderId"/>
-                            <set from-field="itemRes.orderItemSeqId" field="issueContext.orderItemSeqId"/>
-                            <set from-field="itemRes.shipGroupSeqId" field="issueContext.shipGroupSeqId"/>
-                            <set from-field="itemRes.inventoryItemId" field="issueContext.inventoryItemId"/>
-                            <set from-field="itemRes.quantity" field="issueContext.quantity"/>
-                            <call-service service-name="issueOrderItemShipGrpInvResToShipment" in-map-name="issueContext"/>
-                        </iterate>
+                      <!-- just get the OrderItemShipGrpInvResAndItem records for this facility and this ship group, since that is what this shipment is for -->
+                      <clear-field field-name="itemResFindMap"/>
+                      <set from-field="orderItemShipGrpInvResFacilityId" field="itemResFindMap.facilityId"/>
+                      <get-related value-name="orderItemAndShipGroupAssoc" relation-name="OrderItemShipGrpInvResAndItem" map-name="itemResFindMap" list-name="itemResList"/>
+                      <iterate list-name="itemResList" entry-name="itemRes">
+                        <set from-field="shipment.shipmentId" field="issueContext.shipmentId"/>
+                        <set from-field="itemRes.orderId" field="issueContext.orderId"/>
+                        <set from-field="itemRes.orderItemSeqId" field="issueContext.orderItemSeqId"/>
+                        <set from-field="itemRes.shipGroupSeqId" field="issueContext.shipGroupSeqId"/>
+                        <set from-field="itemRes.inventoryItemId" field="issueContext.inventoryItemId"/>
+                        <set from-field="itemRes.quantity" field="issueContext.quantity"/>
+                        <call-service service-name="issueOrderItemShipGrpInvResToShipment" in-map-name="issueContext"/>
+                      </iterate>
                     </iterate>
+                  </then>
+                  <else> <!-- Issue all purchase order items -->
+                    <clear-field field-name="itemResFindMap"/>
+                    <set from-field="facilityId" field="itemResFindMap.facilityId"/>
+                    <iterate list-name="orderItemAndShipGroupAssocList" entry-name="item">
+                      <set from-field="shipment.shipmentId" field="issueContext.shipmentId"/>
+                      <set from-field="item.orderId" field="issueContext.orderId"/>
+                      <set from-field="item.orderItemSeqId" field="issueContext.orderItemSeqId"/>
+                      <set from-field="item.shipGroupSeqId" field="issueContext.shipGroupSeqId"/>
+                      <set from-field="item.quantity" field="issueContext.quantity"/>
+                      <call-service service-name="issueOrderItemToShipment" in-map-name="issueContext"/>
+                    </iterate>
+                  </else>
+                </if>
 
-                    <!-- place all issued items into a single package -->
-                    <entity-and entity-name="ItemIssuance" list-name="itemIssuances">
-                        <field-map field-name="orderId" env-name="orderHeader.orderId"/>
-                        <field-map field-name="shipGroupSeqId" env-name="orderItemShipGroup.shipGroupSeqId"/>
-                        <field-map field-name="shipmentId" env-name="shipment.shipmentId"/>
-                    </entity-and>
+                <!-- place all issued items into a single package -->
+                <entity-and entity-name="ItemIssuance" list-name="itemIssuances">
+                    <field-map field-name="orderId" env-name="orderHeader.orderId"/>
+                    <field-map field-name="shipGroupSeqId" env-name="orderItemShipGroup.shipGroupSeqId"/>
+                    <field-map field-name="shipmentId" env-name="shipment.shipmentId"/>
+                </entity-and>
 
-                    <set value="New" field="shipmentPackageSeqId"/>
-                    <iterate list-name="itemIssuances" entry-name="itemIssuance">
-                        <log level="verbose" message="In quick ship adding item to package: ${shipmentPackageSeqId}"/>
-                        <clear-field field-name="shipItemContext"/>
-                        <set from-field="itemIssuance.shipmentId" field="shipItemContext.shipmentId"/>
-                        <set from-field="itemIssuance.shipmentItemSeqId" field="shipItemContext.shipmentItemSeqId"/>
-                        <set from-field="itemIssuance.quantity" field="shipItemContext.quantity"/>
-                        <set from-field="shipmentPackageSeqId" field="shipItemContext.shipmentPackageSeqId"/>
-                        <call-service service-name="addShipmentContentToPackage" in-map-name="shipItemContext">
-                            <result-to-field result-name="shipmentPackageSeqId" field-name="shipmentPackageSeqId"/>
-                        </call-service>
-                    </iterate>
+                <set value="New" field="shipmentPackageSeqId"/>
+                <iterate list-name="itemIssuances" entry-name="itemIssuance">
+                    <log level="verbose" message="In quick ship adding item to package: ${shipmentPackageSeqId}"/>
+                    <clear-field field-name="shipItemContext"/>
+                    <set from-field="itemIssuance.shipmentId" field="shipItemContext.shipmentId"/>
+                    <set from-field="itemIssuance.shipmentItemSeqId" field="shipItemContext.shipmentItemSeqId"/>
+                    <set from-field="itemIssuance.quantity" field="shipItemContext.quantity"/>
+                    <set from-field="shipmentPackageSeqId" field="shipItemContext.shipmentPackageSeqId"/>
+                    <call-service service-name="addShipmentContentToPackage" in-map-name="shipItemContext">
+                        <result-to-field result-name="shipmentPackageSeqId" field-name="shipmentPackageSeqId"/>
+                    </call-service>
+                </iterate>
 
+                <if><condition><if-compare field-name="orderHeader.orderTypeId" operator="equals" value="SALES_ORDER"/></condition>
+                  <then>
                     <!-- update the shipment status to packed -->
                     <set from-field="shipment.shipmentId" field="packedContext.shipmentId"/>
                     <set value="SHIPMENT_PACKED" field="packedContext.statusId"/>
@@ -1170,26 +1227,24 @@
                     <set from-field="shipment.shipmentId" field="packedContext.shipmentId"/>
                     <set value="SHIPMENT_SHIPPED" field="packedContext.statusId"/>
                     <call-service service-name="updateShipment" in-map-name="packedContext"/>
+                  </then>
+                  <else> <!-- PURCHASE_ORDER -->
+                    <!-- update the shipment status to shipped -->
+                    <set from-field="shipment.shipmentId" field="packedContext.shipmentId"/>
+                    <set value="PURCH_SHIP_SHIPPED" field="packedContext.statusId"/>
+                    <call-service service-name="updateShipment" in-map-name="packedContext"/>
+                  </else>
+                </if>
 
-                    <set from-field="shipment.shipmentId" field="shipmentShipGroupFacility.shipmentId"/>
-                    <set from-field="facility.facilityId" field="shipmentShipGroupFacility.facilityId"/>
-                    <set from-field="orderItemShipGroup.shipGroupSeqId" field="shipmentShipGroupFacility.shipGroupSeqId"/>
-                    <field-to-list field-name="shipmentShipGroupFacility" list-name="shipmentShipGroupFacilityList"/>
-                    <string-to-list string="Created shipment with ID [${shipmentShipGroupFacility.shipmentId}] for ship group ID [${shipmentShipGroupFacility.shipGroupSeqId}] for facility ID [${shipmentShipGroupFacility.facilityId}]" list-name="successMessageList"/>
-                    <clear-field field-name="shipmentShipGroupFacility"/>
-                </else>
-                </if-empty>
-            </iterate>
+                <set from-field="shipment.shipmentId" field="shipmentShipGroupFacility.shipmentId"/>
+                <set from-field="facility.facilityId" field="shipmentShipGroupFacility.facilityId"/>
+                <set from-field="orderItemShipGroup.shipGroupSeqId" field="shipmentShipGroupFacility.shipGroupSeqId"/>
+                <field-to-list field-name="shipmentShipGroupFacility" list-name="shipmentShipGroupFacilityList"/>
+                <string-to-list string="Created shipment with ID [${shipmentShipGroupFacility.shipmentId}] for ship group ID [${shipmentShipGroupFacility.shipGroupSeqId}] for facility ID [${shipmentShipGroupFacility.facilityId}]" list-name="successMessageList"/>
+                <clear-field field-name="shipmentShipGroupFacility"/>
+            </else>
+            </if-empty>
         </iterate>
-
-        <log level="info" message="Finished quickShipEntireOrder:\nshipmentShipGroupFacilityList=${shipmentShipGroupFacilityList}\nsuccessMessageList=${successMessageList}"/>
-        <field-to-result field-name="shipmentShipGroupFacilityList"/>
-        <field-to-result field-name="successMessageList"/>
-
-        <if-empty field-name="shipmentShipGroupFacilityList">
-            <add-error><fail-message message="Warning: no shipments created; could not find anything ready and needing to be shipped."/></add-error>
-        </if-empty>
-        <check-errors/>
     </simple-method>
 
     <simple-method method-name="quickShipOrderByItem" short-description="Quick ships order based on item list">

Modified: trunk/applications/product/servicedef/services_shipment.xml
===================================================================
--- trunk/applications/product/servicedef/services_shipment.xml	2005-11-03 06:02:39 UTC (rev 6065)
+++ trunk/applications/product/servicedef/services_shipment.xml	2005-11-03 18:22:28 UTC (rev 6066)
@@ -55,7 +55,10 @@
 
     <service name="quickShipEntireOrder" engine="simple"
             location="org/ofbiz/shipment/shipment/ShipmentServices.xml" invoke="quickShipEntireOrder" auth="true">
-        <description>Quick Ships An Entire Order Creating One Package Per Facility</description>
+        <description>Quick Ships An Entire Order Creating One Shipment Per Facility and Ship Group.  All approved order items are
+          automatically issued in full and put into one package.  The shipment is created in the INPUT status and then updated to
+          PACKED and SHIPPED.
+        </description>
         <attribute name="orderId" type="String" mode="IN" optional="false"/>
         <attribute name="originFacilityId" type="String" mode="IN" optional="true"/>
         <attribute name="setPackedOnly" type="String" mode="IN" optional="true"/>
@@ -72,6 +75,16 @@
         <attribute name="setPackedOnly" type="String" mode="IN" optional="true"/>
         <attribute name="shipmentId" type="String" mode="OUT" optional="false"/>
     </service>
+    <service name="quickShipPurchaseOrder" engine="simple"
+            location="org/ofbiz/shipment/shipment/ShipmentServices.xml" invoke="quickShipPurchaseOrder" auth="true">
+        <description>The mirror of quickShipEntireOrder, this service automatically creates shipments for an entire purchase order.  
+          All order items on each ship group is created as a Shipment.  All items on a Shipment are automatically issued to a Package.
+          The shipment's status is first set to CREATED and then set as SHIPPED.  The facilityId is used to set the destinationFacilityId 
+          of the Shipment.
+        </description>
+        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
+    </service>
 
     <service name="prepareShipmentStaging" engine="java"
             location="org.ofbiz.shipment.shipment.ShipmentServices" invoke="fillShipmentStagingTables" auth="true">

Modified: trunk/applications/product/webapp/facility/WEB-INF/controller.xml
===================================================================
--- trunk/applications/product/webapp/facility/WEB-INF/controller.xml	2005-11-03 06:02:39 UTC (rev 6065)
+++ trunk/applications/product/webapp/facility/WEB-INF/controller.xml	2005-11-03 18:22:28 UTC (rev 6066)
@@ -629,6 +629,12 @@
         <security https="true" auth="true"/>
         <response name="success" type="view" value="QuickShipOrder"/>
     </request-map>
+    <request-map uri="quickShipPurchaseOrder">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="quickShipPurchaseOrder"/>
+        <response name="success" type="view" value="ReceiveInventory"/>
+        <response name="error" type="view" value="ReceiveInventory"/>
+    </request-map>
     <request-map uri="createQuickShipment">
         <security https="true" auth="true"/>
         <event type="service" invoke="quickShipEntireOrder"/>



More information about the Svn mailing list