[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"> </div>
- </td>
- <td width="5"> </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"> <#if orderHeader.orderTypeId == "PURCHASE_ORDER"><b>${uiLabelMap.ProductDestinationFacility}</b></#if></div>
+ </td>
+ <td width="5"> </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"> </div>
+ </td>
+ <td width="5"> </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"> </div>
+ <div class="tabletext">
+
+ </div>
</td>
<td width="5"> </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