[OFBiz] SVN: r4686 - in trunk/applications/product:
script/org/ofbiz/shipment/picklist servicedef
webapp/facility/facility
jonesde at svn.ofbiz.org
jonesde at svn.ofbiz.org
Fri Mar 18 08:23:00 EST 2005
Author: jonesde
Date: 2005-03-18 07:22:51 -0600 (Fri, 18 Mar 2005)
New Revision: 4686
Modified:
trunk/applications/product/script/org/ofbiz/shipment/picklist/PicklistServices.xml
trunk/applications/product/servicedef/services_picklist.xml
trunk/applications/product/webapp/facility/facility/Picklist.fo.ftl
trunk/applications/product/webapp/facility/facility/PicklistManage.ftl
Log:
A bunch of improvements to the picklist management and pick/pack report
Modified: trunk/applications/product/script/org/ofbiz/shipment/picklist/PicklistServices.xml
===================================================================
--- trunk/applications/product/script/org/ofbiz/shipment/picklist/PicklistServices.xml 2005-03-18 02:45:34 UTC (rev 4685)
+++ trunk/applications/product/script/org/ofbiz/shipment/picklist/PicklistServices.xml 2005-03-18 13:22:51 UTC (rev 4686)
@@ -224,49 +224,6 @@
<field-to-result field-name="pickMoveByShipmentMethodInfoList"/>
</simple-method>
- <simple-method method-name="getPicklistData" short-description="Get Picklist Data">
- <!--
- Parameters:
- facilityId
- shipmentMethodTypeId
- maxNumberOfOrders
- Returns:
- facilityLocationInfoList: List of Maps with facilityLocation, productInfoList, being a List of Maps with product, quantity, inventoryItemList, orderItemList
- inventoryItemInfoList: List of Maps with inventoryItem, facilityLocation, orderItems, product, statusItem, quantity
- orderHeaderInfoList: List of Maps with orderHeader, orderItemShipGroup and orderItemInfoList which is List of Maps with orderItem, product and orderItemShipGrpInvResList
- wrongQuantityReservedList: List of Maps with reservedQuantity and orderItem
- insufficientQohList: List of Maps with inventoryItem and quantityNeeded
- -->
-
- <check-permission permission="FACILITY" action="_VIEW">
- <fail-message message="Security Error: to run getPicklistData you must have the FACILITY_VIEW or FACILITY_ADMIN permission"/>
- </check-permission>
- <check-permission permission="FACILITY" action="_UPDATE">
- <fail-message message="Security Error: to run getPicklistData you must have the FACILITY_UPDATE or FACILITY_ADMIN permission"/>
- </check-permission>
- <check-errors/>
-
- <now-timestamp-to-env env-name="nowTimestamp"/>
-
- <set-service-fields map-name="parameters" service-name="findOrdersToPickMove" to-map-name="findOrdersToPickMoveMap"/>
- <call-service service-name="findOrdersToPickMove" in-map-name="findOrdersToPickMoveMap">
- <result-to-field result-name="pickMoveByShipmentMethodInfoList"/>
- </call-service>
-
- <!-- This creates orderHeaderInfoList, wrongQuantityReservedList, insufficientQohList and inventoryItems, inventoryItemOrderItems, inventoryItemQuantities -->
- <call-simple-method method-name="assembleOrderHeaderInfoInline"/>
-
- <!-- This creates facilityLocationInfoList and inventoryItemInfoList -->
- <call-simple-method method-name="assembleFacilityLocationInfoInline"/>
-
- <field-to-result field-name="orderHeaderInfoList"/>
- <field-to-result field-name="wrongQuantityReservedList"/>
- <field-to-result field-name="insufficientQohList"/>
-
- <field-to-result field-name="facilityLocationInfoList"/>
- <field-to-result field-name="inventoryItemInfoList"/>
- </simple-method>
-
<simple-method method-name="assembleOrderHeaderInfoInline" short-description="assembleOrderHeaderInfoInline">
<!-- This uses pickMoveByShipmentMethodInfoList from the findOrdersToPickMove -->
<!-- This creates orderHeaderInfoList, wrongQuantityReservedList, insufficientQohList and inventoryItems, inventoryItemOrderItems, inventoryItemQuantities -->
@@ -419,102 +376,6 @@
</iterate-map>
</simple-method>
- <simple-method method-name="assembleFacilityLocationInfoInline" short-description="assembleFacilityLocationInfoInline">
- <!-- This uses inventoryItems, inventoryItemOrderItems, inventoryItemQuantities -->
- <!-- This creates facilityLocationInfoList and inventoryItemInfoList (and for internal use facilityLocationMap) -->
-
- <!-- go through all quantities and get inventoryItem and facilityLocation -->
- <iterate-map key-name="inventoryItemId" value-name="quantityNeeded" map-name="inventoryItemQuantities">
- <env-to-env env-name="inventoryItems.${inventoryItemId}" to-env-name="inventoryItem"/>
-
- <!-- create a list of locations, then sort it, will have to create a reverse Map to go from location to inventory item -->
- <clear-field field-name="facilityLocation"/>
- <get-related-one value-name="inventoryItem" relation-name="FacilityLocation" to-value-name="facilityLocation"/>
- <if-not-empty field-name="facilityLocation">
- <env-to-env env-name="facilityLocation" to-env-name="facilityLocationMap.${facilityLocation.locationSeqId}"/>
- <!-- support multiple invnetoryItemIds per facilityLocation.locationSeqId -->
- <clear-field field-name="inventoryItemIdList"/>
- <env-to-env env-name="inventoryItemsByLocation.${facilityLocation.locationSeqId}" to-env-name="inventoryItemIdList"/>
- <field-to-list field-name="inventoryItemId" list-name="inventoryItemIdList"/>
- <env-to-env env-name="inventoryItemIdList" to-env-name="inventoryItemsByLocation.${facilityLocation.locationSeqId}"/>
- <else>
- <field-to-list field-name="inventoryItemId" list-name="noLocationInventoryItemIds"/>
- </else>
- </if-not-empty>
- </iterate-map>
-
- <!-- make a facilityLocations List from the facilityLocationMap, which was used to guarantee uniqueness -->
- <iterate-map map-name="facilityLocationMap" key-name="locationSeqId" value-name="facilityLocation">
- <field-to-list field-name="facilityLocation" list-name="facilityLocations"/>
- </iterate-map>
-
- <!-- order the facilityLocations -->
- <string-to-list string="+areaId" list-name="facilityLocsOrdLst"/>
- <string-to-list string="+aisleId" list-name="facilityLocsOrdLst"/>
- <string-to-list string="+sectionId" list-name="facilityLocsOrdLst"/>
- <string-to-list string="+levelId" list-name="facilityLocsOrdLst"/>
- <string-to-list string="+positionId" list-name="facilityLocsOrdLst"/>
- <order-value-list list-name="facilityLocations" order-by-list-name="facilityLocsOrdLst"/>
-
- <!-- for each facility location add an entry to the inventoryItemInfoList -->
- <iterate entry-name="facilityLocation" list-name="facilityLocations">
- <!-- facilityLocationInfoList: facilityLocation, productInfoList (product, quantity, inventoryItemList, orderItemList) -->
- <clear-field field-name="facilityLocationInfo"/>
- <env-to-field env-name="facilityLocation" map-name="facilityLocationInfo"/>
-
- <!-- inventoryItemInfoList: facilityLocation, inventoryItem, orderItems, quantity, product, statusItems -->
- <env-to-env env-name="inventoryItemsByLocation.${facilityLocation.locationSeqId}" to-env-name="inventoryItemIdList"/>
- <iterate entry-name="inventoryItemId" list-name="inventoryItemIdList">
- <clear-field field-name="inventoryItemInfo"/>
- <env-to-field env-name="facilityLocation" map-name="inventoryItemInfo"/>
- <field-to-field field-name="inventoryItems.${inventoryItemId}" to-field-name="inventoryItemInfo.inventoryItem"/>
- <field-to-field field-name="inventoryItemOrderItems.${inventoryItemId}" to-field-name="inventoryItemInfo.orderItems"/>
- <field-to-field field-name="inventoryItemQuantities.${inventoryItemId}" to-field-name="inventoryItemInfo.quantity"/>
- <get-related-one value-name="inventoryItemInfo.inventoryItem" relation-name="Product" to-value-name="inventoryItemInfo.product"/>
- <get-related-one value-name="inventoryItemInfo.inventoryItem" relation-name="StatusItem" to-value-name="inventoryItemInfo.statusItem"/>
-
- <field-to-list field-name="inventoryItemInfo" list-name="inventoryItemInfoList"/>
-
- <!-- before destroying inventoryItemInfo, add info to the productInfoMap -->
- <env-to-env env-name="inventoryItemInfo.product" to-env-name="productInfoMap.${inventoryItemInfo.product.productId}.product"/>
- <calculate field-name="productInfoMap.${inventoryItemInfo.product.productId}.quantity" type="Double">
- <calcop field-name="productInfoMap.${inventoryItemInfo.product.productId}.quantity" operator="get"/>
- <calcop field-name="inventoryItemInfo.quantity" operator="get"/>
- </calculate>
- <field-to-list field-name="inventoryItemInfo.inventoryItem" list-name="productInfoMap.${inventoryItemInfo.product.productId}.inventoryItemList"/>
- <!-- put orderItems in Map by orderId:orderItemSeqId to make sure they are unique -->
- <iterate entry-name="orderItem" list-name="inventoryItemInfo.orderItems">
- <env-to-env env-name="orderItem" to-env-name="orderItemMap.${orderItem.orderId}:${orderItem.orderItemSeqId}"/>
- </iterate>
- </iterate>
-
- <iterate-map key-name="orderItemCompositeId" value-name="orderItem" map-name="orderItemMap">
- <field-to-list field-name="orderItem" list-name="productInfoMap.${orderItem.productId}.orderItemList"/>
- </iterate-map>
-
- <!-- move all values from productInfoMap to facilityLocationInfo.productInfoList -->
- <iterate-map key-name="productId" value-name="productInfo" map-name="productInfoMap">
- <field-to-list field-name="productInfo" list-name="facilityLocationInfo.productInfoList"/>
- </iterate-map>
-
- <field-to-list field-name="facilityLocationInfo" list-name="facilityLocationInfoList"/>
- <clear-field field-name="orderItemMap"/>
- <clear-field field-name="productInfoMap"/>
- </iterate>
-
- <!-- add all noLocationInventoryItemIds to inventoryItemInfoList with all entries except facilityLocation -->
- <iterate entry-name="inventoryItemId" list-name="noLocationInventoryItemIds">
- <field-to-field field-name="${inventoryItemId}" map-name="inventoryItems" to-field-name="inventoryItem" to-map-name="inventoryItemInfo"/>
- <field-to-field field-name="${inventoryItemId}" map-name="inventoryItemOrderItems" to-field-name="orderItems" to-map-name="inventoryItemInfo"/>
- <field-to-field field-name="${inventoryItemId}" map-name="inventoryItemQuantities" to-field-name="quantity" to-map-name="inventoryItemInfo"/>
- <get-related-one value-name="inventoryItemInfo.inventoryItem" relation-name="Product" to-value-name="inventoryItemInfo.product"/>
- <get-related-one value-name="inventoryItemInfo.inventoryItem" relation-name="StatusItem" to-value-name="inventoryItemInfo.statusItem"/>
-
- <field-to-list field-name="inventoryItemInfo" list-name="inventoryItemInfoList"/>
- <clear-field field-name="inventoryItemInfo"/>
- </iterate>
- </simple-method>
-
<!-- ========================================================= -->
<!-- ======= Persisted Picklist Maintenance Services ========= -->
<!-- ========================================================= -->
@@ -806,8 +667,8 @@
<!--
Creates:
1. Standard picklistInfo Map from the getPicklistSingleInfoInline simple-method (see comment there for details)
- 2. facilityLocationInfoList (facilityLocation, picklistItemInfoList (picklistItem, orderItem, product, inventoryItemAndLocation, orderItemShipGrpInvRes, itemIssuanceList))
- 3. noLocationProductInfoList (product, picklistItemInfoList (picklistItem, orderItem, product, inventoryItemAndLocation, orderItemShipGrpInvRes, itemIssuanceList))
+ 2. facilityLocationInfoList (facilityLocation, product, pickQuantity, picklistBinInfoList (picklistBin, quantity), picklistItemInfoList (picklistItem, picklistBin, orderItem, product, inventoryItemAndLocation, orderItemShipGrpInvRes, itemIssuanceList))
+ 3. noLocationProductInfoList (product, pickQuantity, picklistBinInfoList (picklistBin, quantity), picklistItemInfoList (picklistItem, picklistBin, orderItem, product, inventoryItemAndLocation, orderItemShipGrpInvRes, itemIssuanceList))
-->
<check-permission permission="FACILITY" action="_VIEW">
<fail-message message="Security Error: to run getPickAndPackReportInfo you must have the FACILITY_VIEW or FACILITY_ADMIN permission"/>
@@ -821,6 +682,8 @@
<!-- Assemble the information per facility location for the pick sheet -->
<iterate entry-name="picklistBinInfo" list-name="picklistInfo.picklistBinInfoList">
+ <env-to-env env-name="picklistBinInfo.picklistBin" to-env-name="picklistBinByIdMap.${picklistBinInfo.picklistBin.picklistBinId}"/>
+
<iterate entry-name="picklistItemInfo" list-name="picklistBinInfo.picklistItemInfoList">
<!--
In this iteration through the items we want 2 things:
@@ -879,6 +742,41 @@
<clear-field field-name="facilityLocationInfo"/>
<env-to-env env-name="facilityLocation" to-env-name="facilityLocationInfo.facilityLocation"/>
<env-to-env env-name="picklistItemInfoListByLocationSeqIdMap.${facilityLocation.locationSeqId}" to-env-name="facilityLocationInfo.picklistItemInfoList"/>
+
+ <!-- make the pickQuantity and quantityByPicklistBinIdMap -->
+ <iterate entry-name="picklistItemInfo" list-name="facilityLocationInfo.picklistItemInfoList">
+ <calculate field-name="facilityLocationInfo.pickQuantity" type="Double">
+ <calcop field-name="facilityLocationInfo.pickQuantity" operator="add">
+ <calcop field-name="picklistItemInfo.picklistItem.quantity" operator="get"/>
+ </calcop>
+ </calculate>
+
+ <calculate field-name="facilityLocationInfo.quantityByPicklistBinIdMap.${picklistItemInfo.picklistBin.picklistBinId}" type="Double">
+ <calcop field-name="facilityLocationInfo.quantityByPicklistBinIdMap.${picklistItemInfo.picklistBin.picklistBinId}" operator="add">
+ <calcop field-name="picklistItemInfo.picklistItem.quantity" operator="get"/>
+ </calcop>
+ </calculate>
+
+ <!-- also put the product record in place -->
+ <if-empty field-name="facilityLocationInfo.product">
+ <env-to-env env-name="picklistItemInfo.product" to-env-name="facilityLocationInfo.product"/>
+ <else>
+ <if-compare-field field-name="facilityLocationInfo.product.productId" operator="not-equals" to-field-name="picklistItemInfo.product.productId">
+ <!-- Uh oh, have different products in the same location... what to do about this? -->
+ <log level="error" message="When creating picklist report found in the same location [${facilityLocation.locationSeqId}] two different products: ${facilityLocationInfo.product.productId} and ${picklistItemInfo.product.productId}"/>
+ </if-compare-field>
+ </else>
+ </if-empty>
+ </iterate>
+
+ <!-- create the picklistBinInfoList from the quantityByPicklistBinIdMap -->
+ <iterate-map key-name="picklistBinId" value-name="quantity" map-name="facilityLocationInfo.quantityByPicklistBinIdMap">
+ <clear-field field-name="picklistBinInfo"/>
+ <env-to-env env-name="picklistBinByIdMap.${picklistBinId}" to-env-name="picklistBinInfo.picklistBin"/>
+ <env-to-env env-name="quantity" to-env-name="picklistBinInfo.quantity"/>
+ <env-to-env env-name="picklistBinInfo" to-env-name="facilityLocationInfo.picklistBinInfoList[]"/>
+ </iterate-map>
+
<env-to-env env-name="facilityLocationInfo" to-env-name="facilityLocationInfoList[]"/>
</iterate>
@@ -895,6 +793,30 @@
<clear-field field-name="productInfo"/>
<env-to-env env-name="product" to-env-name="productInfo.product"/>
<env-to-env env-name="picklistItemInfoListByProductIdMap.${product.productId}" to-env-name="productInfo.picklistItemInfoList"/>
+
+ <!-- make the pickQuantity and quantityByPicklistBinIdMap -->
+ <iterate entry-name="picklistItemInfo" list-name="productInfo.picklistItemInfoList">
+ <calculate field-name="productInfo.pickQuantity" type="Double">
+ <calcop field-name="productInfo.pickQuantity" operator="add">
+ <calcop field-name="picklistItemInfo.picklistItem.quantity" operator="get"/>
+ </calcop>
+ </calculate>
+
+ <calculate field-name="productInfo.quantityByPicklistBinIdMap.${picklistItemInfo.picklistBin.picklistBinId}" type="Double">
+ <calcop field-name="productInfo.quantityByPicklistBinIdMap.${picklistItemInfo.picklistBin.picklistBinId}" operator="add">
+ <calcop field-name="picklistItemInfo.picklistItem.quantity" operator="get"/>
+ </calcop>
+ </calculate>
+ </iterate>
+
+ <!-- create the picklistBinInfoList from the quantityByPicklistBinIdMap -->
+ <iterate-map key-name="picklistBinId" value-name="quantity" map-name="productInfo.quantityByPicklistBinIdMap">
+ <clear-field field-name="picklistBinInfo"/>
+ <env-to-env env-name="picklistBinByIdMap.${picklistBinId}" to-env-name="picklistBinInfo.picklistBin"/>
+ <env-to-env env-name="quantity" to-env-name="picklistBinInfo.quantity"/>
+ <env-to-env env-name="picklistBinInfo" to-env-name="productInfo.picklistBinInfoList[]"/>
+ </iterate-map>
+
<env-to-env env-name="productInfo" to-env-name="noLocationProductInfoList[]"/>
</iterate>
@@ -916,7 +838,7 @@
- picklistBin
- primaryOrderHeader
- primaryOrderItemShipGroup
- - picklistItemInfoList (picklistItem, orderItem, product, inventoryItemAndLocation, orderItemShipGrpInvRes, itemIssuanceList)
+ - picklistItemInfoList (picklistItem, picklistBin, orderItem, product, inventoryItemAndLocation, orderItemShipGrpInvRes, itemIssuanceList)
-->
<!-- expects a picklist GenericValue to be in the context, and creates a picklistInfo Map -->
<clear-field field-name="picklistRoleInfoList"/>
@@ -956,6 +878,7 @@
<get-related-one value-name="picklistItem" relation-name="OrderItemShipGrpInvRes" to-value-name="picklistItemInfo.orderItemShipGrpInvRes"/>
<get-related value-name="picklistItem" relation-name="ItemIssuance" list-name="picklistItemInfo.itemIssuanceList"/>
<env-to-env env-name="picklistItem" to-env-name="picklistItemInfo.picklistItem"/>
+ <env-to-env env-name="picklistBin" to-env-name="picklistItemInfo.picklistBin"/>
<field-to-list field-name="picklistItemInfo" list-name="picklistItemInfoList"/>
</iterate>
<env-to-env env-name="picklistItemInfoList" to-env-name="picklistBinInfo.picklistItemInfoList"/>
@@ -975,4 +898,148 @@
<get-related-one value-name="picklist" relation-name="ShipmentMethodType" to-value-name="picklistInfo.shipmentMethodType" use-cache="true"/>
<get-related value-name="picklist" relation-name="StatusValidChangeToDetail" list-name="picklistInfo.statusValidChangeToDetailList"/>
</simple-method>
+
+
+<!-- ================================================== -->
+<!-- ================================================== -->
+<!-- DEJ20050317 These methods are no longer used, but are here temporarily for reference. -->
+<!-- ================================================== -->
+<!-- ================================================== -->
+ <simple-method method-name="getPicklistData" short-description="Get Picklist Data">
+ <!--
+ Parameters:
+ facilityId
+ shipmentMethodTypeId
+ maxNumberOfOrders
+ Returns:
+ facilityLocationInfoList: List of Maps with facilityLocation, productInfoList, being a List of Maps with product, quantity, inventoryItemList, orderItemList
+ inventoryItemInfoList: List of Maps with inventoryItem, facilityLocation, orderItems, product, statusItem, quantity
+ orderHeaderInfoList: List of Maps with orderHeader, orderItemShipGroup and orderItemInfoList which is List of Maps with orderItem, product and orderItemShipGrpInvResList
+ wrongQuantityReservedList: List of Maps with reservedQuantity and orderItem
+ insufficientQohList: List of Maps with inventoryItem and quantityNeeded
+ -->
+
+ <check-permission permission="FACILITY" action="_VIEW">
+ <fail-message message="Security Error: to run getPicklistData you must have the FACILITY_VIEW or FACILITY_ADMIN permission"/>
+ </check-permission>
+ <check-permission permission="FACILITY" action="_UPDATE">
+ <fail-message message="Security Error: to run getPicklistData you must have the FACILITY_UPDATE or FACILITY_ADMIN permission"/>
+ </check-permission>
+ <check-errors/>
+
+ <now-timestamp-to-env env-name="nowTimestamp"/>
+
+ <set-service-fields map-name="parameters" service-name="findOrdersToPickMove" to-map-name="findOrdersToPickMoveMap"/>
+ <call-service service-name="findOrdersToPickMove" in-map-name="findOrdersToPickMoveMap">
+ <result-to-field result-name="pickMoveByShipmentMethodInfoList"/>
+ </call-service>
+
+ <!-- This creates orderHeaderInfoList, wrongQuantityReservedList, insufficientQohList and inventoryItems, inventoryItemOrderItems, inventoryItemQuantities -->
+ <call-simple-method method-name="assembleOrderHeaderInfoInline"/>
+
+ <!-- This creates facilityLocationInfoList and inventoryItemInfoList -->
+ <call-simple-method method-name="assembleFacilityLocationInfoInline"/>
+
+ <field-to-result field-name="orderHeaderInfoList"/>
+ <field-to-result field-name="wrongQuantityReservedList"/>
+ <field-to-result field-name="insufficientQohList"/>
+
+ <field-to-result field-name="facilityLocationInfoList"/>
+ <field-to-result field-name="inventoryItemInfoList"/>
+ </simple-method>
+ <simple-method method-name="assembleFacilityLocationInfoInline" short-description="assembleFacilityLocationInfoInline">
+ <!-- This uses inventoryItems, inventoryItemOrderItems, inventoryItemQuantities -->
+ <!-- This creates facilityLocationInfoList and inventoryItemInfoList (and for internal use facilityLocationMap) -->
+
+ <!-- go through all quantities and get inventoryItem and facilityLocation -->
+ <iterate-map key-name="inventoryItemId" value-name="quantityNeeded" map-name="inventoryItemQuantities">
+ <env-to-env env-name="inventoryItems.${inventoryItemId}" to-env-name="inventoryItem"/>
+
+ <!-- create a list of locations, then sort it, will have to create a reverse Map to go from location to inventory item -->
+ <clear-field field-name="facilityLocation"/>
+ <get-related-one value-name="inventoryItem" relation-name="FacilityLocation" to-value-name="facilityLocation"/>
+ <if-not-empty field-name="facilityLocation">
+ <env-to-env env-name="facilityLocation" to-env-name="facilityLocationMap.${facilityLocation.locationSeqId}"/>
+ <!-- support multiple invnetoryItemIds per facilityLocation.locationSeqId -->
+ <clear-field field-name="inventoryItemIdList"/>
+ <env-to-env env-name="inventoryItemsByLocation.${facilityLocation.locationSeqId}" to-env-name="inventoryItemIdList"/>
+ <field-to-list field-name="inventoryItemId" list-name="inventoryItemIdList"/>
+ <env-to-env env-name="inventoryItemIdList" to-env-name="inventoryItemsByLocation.${facilityLocation.locationSeqId}"/>
+ <else>
+ <field-to-list field-name="inventoryItemId" list-name="noLocationInventoryItemIds"/>
+ </else>
+ </if-not-empty>
+ </iterate-map>
+
+ <!-- make a facilityLocations List from the facilityLocationMap, which was used to guarantee uniqueness -->
+ <iterate-map map-name="facilityLocationMap" key-name="locationSeqId" value-name="facilityLocation">
+ <field-to-list field-name="facilityLocation" list-name="facilityLocations"/>
+ </iterate-map>
+
+ <!-- order the facilityLocations -->
+ <string-to-list string="+areaId" list-name="facilityLocsOrdLst"/>
+ <string-to-list string="+aisleId" list-name="facilityLocsOrdLst"/>
+ <string-to-list string="+sectionId" list-name="facilityLocsOrdLst"/>
+ <string-to-list string="+levelId" list-name="facilityLocsOrdLst"/>
+ <string-to-list string="+positionId" list-name="facilityLocsOrdLst"/>
+ <order-value-list list-name="facilityLocations" order-by-list-name="facilityLocsOrdLst"/>
+
+ <!-- for each facility location add an entry to the inventoryItemInfoList -->
+ <iterate entry-name="facilityLocation" list-name="facilityLocations">
+ <!-- facilityLocationInfoList: facilityLocation, productInfoList (product, quantity, inventoryItemList, orderItemList) -->
+ <clear-field field-name="facilityLocationInfo"/>
+ <env-to-field env-name="facilityLocation" map-name="facilityLocationInfo"/>
+
+ <!-- inventoryItemInfoList: facilityLocation, inventoryItem, orderItems, quantity, product, statusItems -->
+ <env-to-env env-name="inventoryItemsByLocation.${facilityLocation.locationSeqId}" to-env-name="inventoryItemIdList"/>
+ <iterate entry-name="inventoryItemId" list-name="inventoryItemIdList">
+ <clear-field field-name="inventoryItemInfo"/>
+ <env-to-field env-name="facilityLocation" map-name="inventoryItemInfo"/>
+ <field-to-field field-name="inventoryItems.${inventoryItemId}" to-field-name="inventoryItemInfo.inventoryItem"/>
+ <field-to-field field-name="inventoryItemOrderItems.${inventoryItemId}" to-field-name="inventoryItemInfo.orderItems"/>
+ <field-to-field field-name="inventoryItemQuantities.${inventoryItemId}" to-field-name="inventoryItemInfo.quantity"/>
+ <get-related-one value-name="inventoryItemInfo.inventoryItem" relation-name="Product" to-value-name="inventoryItemInfo.product"/>
+ <get-related-one value-name="inventoryItemInfo.inventoryItem" relation-name="StatusItem" to-value-name="inventoryItemInfo.statusItem"/>
+
+ <field-to-list field-name="inventoryItemInfo" list-name="inventoryItemInfoList"/>
+
+ <!-- before destroying inventoryItemInfo, add info to the productInfoMap -->
+ <env-to-env env-name="inventoryItemInfo.product" to-env-name="productInfoMap.${inventoryItemInfo.product.productId}.product"/>
+ <calculate field-name="productInfoMap.${inventoryItemInfo.product.productId}.quantity" type="Double">
+ <calcop field-name="productInfoMap.${inventoryItemInfo.product.productId}.quantity" operator="get"/>
+ <calcop field-name="inventoryItemInfo.quantity" operator="get"/>
+ </calculate>
+ <field-to-list field-name="inventoryItemInfo.inventoryItem" list-name="productInfoMap.${inventoryItemInfo.product.productId}.inventoryItemList"/>
+ <!-- put orderItems in Map by orderId:orderItemSeqId to make sure they are unique -->
+ <iterate entry-name="orderItem" list-name="inventoryItemInfo.orderItems">
+ <env-to-env env-name="orderItem" to-env-name="orderItemMap.${orderItem.orderId}:${orderItem.orderItemSeqId}"/>
+ </iterate>
+ </iterate>
+
+ <iterate-map key-name="orderItemCompositeId" value-name="orderItem" map-name="orderItemMap">
+ <field-to-list field-name="orderItem" list-name="productInfoMap.${orderItem.productId}.orderItemList"/>
+ </iterate-map>
+
+ <!-- move all values from productInfoMap to facilityLocationInfo.productInfoList -->
+ <iterate-map key-name="productId" value-name="productInfo" map-name="productInfoMap">
+ <field-to-list field-name="productInfo" list-name="facilityLocationInfo.productInfoList"/>
+ </iterate-map>
+
+ <field-to-list field-name="facilityLocationInfo" list-name="facilityLocationInfoList"/>
+ <clear-field field-name="orderItemMap"/>
+ <clear-field field-name="productInfoMap"/>
+ </iterate>
+
+ <!-- add all noLocationInventoryItemIds to inventoryItemInfoList with all entries except facilityLocation -->
+ <iterate entry-name="inventoryItemId" list-name="noLocationInventoryItemIds">
+ <field-to-field field-name="${inventoryItemId}" map-name="inventoryItems" to-field-name="inventoryItem" to-map-name="inventoryItemInfo"/>
+ <field-to-field field-name="${inventoryItemId}" map-name="inventoryItemOrderItems" to-field-name="orderItems" to-map-name="inventoryItemInfo"/>
+ <field-to-field field-name="${inventoryItemId}" map-name="inventoryItemQuantities" to-field-name="quantity" to-map-name="inventoryItemInfo"/>
+ <get-related-one value-name="inventoryItemInfo.inventoryItem" relation-name="Product" to-value-name="inventoryItemInfo.product"/>
+ <get-related-one value-name="inventoryItemInfo.inventoryItem" relation-name="StatusItem" to-value-name="inventoryItemInfo.statusItem"/>
+
+ <field-to-list field-name="inventoryItemInfo" list-name="inventoryItemInfoList"/>
+ <clear-field field-name="inventoryItemInfo"/>
+ </iterate>
+ </simple-method>
</simple-methods>
Modified: trunk/applications/product/servicedef/services_picklist.xml
===================================================================
--- trunk/applications/product/servicedef/services_picklist.xml 2005-03-18 02:45:34 UTC (rev 4685)
+++ trunk/applications/product/servicedef/services_picklist.xml 2005-03-18 13:22:51 UTC (rev 4686)
@@ -36,21 +36,6 @@
<attribute name="pickMoveByShipmentMethodInfoList" type="List" mode="OUT" optional="true"/>
</service>
- <!-- this old service definition is for one that used to get data for the picklist report
- <service name="getPicklistData" engine="simple"
- location="org/ofbiz/shipment/picklist/PicklistServices.xml" invoke="getPicklistData">
- <description>Gets Picklist Data</description>
- <attribute name="facilityId" type="String" mode="IN" optional="false"/>
- <attribute name="shipmentMethodTypeId" type="String" mode="IN" optional="true"/>
- <attribute name="maxNumberOfOrders" type="Long" mode="IN" optional="true"/>
- <attribute name="facilityLocationInfoList" type="List" mode="OUT" optional="true"/>
- <attribute name="inventoryItemInfoList" type="List" mode="OUT" optional="true"/>
- <attribute name="orderHeaderInfoList" type="List" mode="OUT" optional="true"/>
- <attribute name="wrongQuantityReservedList" type="List" mode="OUT" optional="true"/>
- <attribute name="insufficientQohList" type="List" mode="OUT" optional="true"/>
- </service>
- -->
-
<!-- Persisted Picklist Services -->
<service name="createPicklistFromOrders" engine="simple"
location="org/ofbiz/shipment/picklist/PicklistServices.xml" invoke="createPicklistFromOrders">
Modified: trunk/applications/product/webapp/facility/facility/Picklist.fo.ftl
===================================================================
--- trunk/applications/product/webapp/facility/facility/Picklist.fo.ftl 2005-03-18 02:45:34 UTC (rev 4685)
+++ trunk/applications/product/webapp/facility/facility/Picklist.fo.ftl 2005-03-18 13:22:51 UTC (rev 4686)
@@ -28,6 +28,39 @@
*@since 3.0
-->
+<#macro pickInfoDetail pickQuantity picklistBinInfoList product facilityLocation>
+ <fo:table-row>
+ <fo:table-cell padding="2pt" background-color="${rowColor}">
+ <#if facilityLocation?has_content>
+ <fo:block>${facilityLocation.areaId?if_exists}-${facilityLocation.aisleId?if_exists}-${facilityLocation.sectionId?if_exists}-${facilityLocation.levelId?if_exists}-${facilityLocation.positionId?if_exists}</fo:block>
+ <#else>
+ <fo:block>[${uiLabelMap.ProductNoLocation}]</fo:block>
+ </#if>
+ </fo:table-cell>
+ <fo:table-cell padding="2pt" background-color="${rowColor}">
+ <#if product?has_content>
+ <fo:block>${product.internalName} [${product.productId}]</fo:block>
+ <#else>
+ <fo:block> </fo:block>
+ </#if>
+ </fo:table-cell>
+ <fo:table-cell padding="2pt" background-color="${rowColor}">
+ <fo:block>${pickQuantity}</fo:block>
+ </fo:table-cell>
+ <fo:table-cell padding="2pt" background-color="${rowColor}">
+ <#list picklistBinInfoList as picklistBinInfo>
+ <fo:block>${picklistBinInfo.quantity} to #${picklistBinInfo.picklistBin.binLocationNumber}</fo:block>
+ </#list>
+ </fo:table-cell>
+ </fo:table-row>
+ <#-- toggle the row color -->
+ <#if rowColor == "white">
+ <#assign rowColor = "#D4D0C8">
+ <#else>
+ <#assign rowColor = "white">
+ </#if>
+</#macro>
+
<#macro picklistItemInfoDetail picklistItemInfo product facilityLocation>
<#local picklistItem = picklistItemInfo.picklistItem>
<#local orderItem = picklistItemInfo.orderItem>
@@ -35,8 +68,6 @@
<fo:table-cell padding="2pt" background-color="${rowColor}">
<#if facilityLocation?has_content>
<fo:block>${facilityLocation.areaId?if_exists}-${facilityLocation.aisleId?if_exists}-${facilityLocation.sectionId?if_exists}-${facilityLocation.levelId?if_exists}-${facilityLocation.positionId?if_exists}</fo:block>
- <#elseif product?has_content>
- <fo:block>[${uiLabelMap.ProductNoLocation}:${product.productId}]</fo:block>
<#else>
<fo:block>[${uiLabelMap.ProductNoLocation}]</fo:block>
</#if>
@@ -52,7 +83,7 @@
<fo:block>${picklistItem.quantity}</fo:block>
</fo:table-cell>
<fo:table-cell padding="2pt" background-color="${rowColor}">
- <fo:block>${orderItem.orderId}:${orderItem.orderItemSeqId} [of total: ${orderItem.quantity}]</fo:block>
+ <fo:block>${orderItemShipGrpInvRes.orderId}:${orderItem.orderItemSeqId}</fo:block>
</fo:table-cell>
<fo:table-cell padding="2pt" background-color="${rowColor}">
<fo:block>
@@ -79,7 +110,7 @@
- picklistBin
- primaryOrderHeader
- primaryOrderItemShipGroup
- - picklistItemInfoList (picklistItem, orderItem, product, inventoryItemAndLocation, orderItemShipGrpInvRes, itemIssuanceList)
+ - picklistItemInfoList (picklistItem, picklistBin, orderItem, product, inventoryItemAndLocation, orderItemShipGrpInvRes, itemIssuanceList)
-->
<fo:layout-master-set>
<fo:simple-page-master master-name="main" page-height="11in" page-width="8.5in"
@@ -96,49 +127,57 @@
<#if security.hasEntityPermission("FACILITY", "_VIEW", session)>
<#if picklistInfo?has_content>
- <fo:block font-size="14pt">Items to Pick in Facility ${picklistInfo.facility.facilityName} <fo:inline font-size="8pt">[${picklistInfo.facility.facilityId}]</fo:inline></fo:block>
+ <fo:block font-size="12pt">Picklist ${picklistInfo.picklist.picklistId} in Facility ${picklistInfo.facility.facilityName} <fo:inline font-size="8pt">[${picklistInfo.facility.facilityId}]</fo:inline></fo:block>
+ <#if picklistInfo.shipmentMethodType?has_content>
+ <fo:block font-size="10pt">for Shipment Method Type ${picklistInfo.shipmentMethodType.description?default(picklistInfo.shipmentMethodType.shipmentMethodTypeId)}</fo:block>
+ </#if>
</#if>
<fo:block space-after.optimum="10pt" font-size="10pt">
<fo:table>
- <fo:table-column column-width="80pt"/>
- <fo:table-column column-width="180pt"/>
+ <fo:table-column column-width="90pt"/>
+ <fo:table-column column-width="220pt"/>
<fo:table-column column-width="50pt"/>
- <fo:table-column column-width="60pt"/>
<fo:table-column column-width="80pt"/>
<fo:table-header>
<fo:table-row font-weight="bold">
<fo:table-cell border-bottom="thin solid grey"><fo:block>${uiLabelMap.ProductLocation}</fo:block></fo:table-cell>
<fo:table-cell border-bottom="thin solid grey"><fo:block>${uiLabelMap.ProductProductId}</fo:block></fo:table-cell>
<fo:table-cell border-bottom="thin solid grey"><fo:block>${uiLabelMap.ProductToPick}</fo:block></fo:table-cell>
+ <fo:table-cell border-bottom="thin solid grey"><fo:block>Quantity to Bin#</fo:block></fo:table-cell>
+
+ <#-- Not display details here, just the summary info for the bins
<fo:table-cell border-bottom="thin solid grey"><fo:block>${uiLabelMap.OrderOrderItems}</fo:block></fo:table-cell>
<fo:table-cell border-bottom="thin solid grey"><fo:block>${uiLabelMap.ProductInventoryItems}</fo:block></fo:table-cell>
+ -->
</fo:table-row>
</fo:table-header>
<fo:table-body>
+ <#--
+ 2. facilityLocationInfoList (facilityLocation, product, pickQuantity, picklistBinInfoList (picklistBin, quantity), picklistItemInfoList (picklistItem, picklistBin, orderItem, product, inventoryItemAndLocation, orderItemShipGrpInvRes, itemIssuanceList))
+ 3. noLocationProductInfoList (product, pickQuantity, picklistBinInfoList (picklistBin, quantity), picklistItemInfoList (picklistItem, picklistBin, orderItem, product, inventoryItemAndLocation, orderItemShipGrpInvRes, itemIssuanceList))
+ -->
<#if facilityLocationInfoList?has_content || noLocationProductInfoList?has_content>
<#assign rowColor = "white">
- <#-- facilityLocationInfoList: facilityLocation, picklistItemInfoList (picklistItem, orderItem, product, inventoryItemAndLocation, orderItemShipGrpInvRes, itemIssuanceList) -->
<#if facilityLocationInfoList?has_content>
<#list facilityLocationInfoList as facilityLocationInfo>
- <#assign facilityLocation = facilityLocationInfo.facilityLocation>
- <#assign picklistItemInfoList = facilityLocationInfo.picklistItemInfoList>
- <#list picklistItemInfoList as picklistItemInfo>
- <#assign product = picklistItemInfo.product/>
- <@picklistItemInfoDetail picklistItemInfo=picklistItemInfo product=product facilityLocation=facilityLocation/>
+ <@pickInfoDetail pickQuantity=facilityLocationInfo.pickQuantity picklistBinInfoList=facilityLocationInfo.picklistBinInfoList product=facilityLocationInfo.product facilityLocation=facilityLocationInfo.facilityLocation/>
+ <#-- Not display details here, just the summary info for the bins
+ <#list facilityLocationInfo.picklistItemInfoList as picklistItemInfo>
+ <@picklistItemInfoDetail picklistItemInfo=picklistItemInfo product=picklistItemInfo.product facilityLocation=facilityLocationInfo.facilityLocation/>
</#list>
+ -->
</#list>
</#if>
- <#-- noLocationProductInfoList: product, picklistItemInfoList (picklistItem, orderItem, product, inventoryItemAndLocation, orderItemShipGrpInvRes, itemIssuanceList) -->
+
<#if noLocationProductInfoList?has_content>
<#list noLocationProductInfoList as noLocationProductInfo>
- <#if !noLocationProductInfo.facilityLocation?exists>
- <#assign product = noLocationProductInfo.product>
- <#assign picklistItemInfoList = noLocationProductInfo.picklistItemInfoList>
- <#list picklistItemInfoList as picklistItemInfo>
- <@picklistItemInfoDetail picklistItemInfo=picklistItemInfo product=product facilityLocation=null/>
- </#list>
- </#if>
+ <@pickInfoDetail pickQuantity=noLocationProductInfo.pickQuantity picklistBinInfoList=noLocationProductInfo.picklistBinInfoList product=noLocationProductInfo.product facilityLocation=null/>
+ <#-- Not display details here, just the summary info for the bins
+ <#list noLocationProductInfo.picklistItemInfoList as picklistItemInfo>
+ <@picklistItemInfoDetail picklistItemInfo=picklistItemInfo product=noLocationProductInfo.product facilityLocation=null/>
+ </#list>
+ -->
</#list>
</#if>
<#else>
@@ -159,7 +198,7 @@
<#assign picklistItemInfoList = picklistBinInfo.picklistItemInfoList>
<fo:page-sequence master-reference="main">
<fo:flow flow-name="xsl-region-body" font-family="Helvetica">
- <fo:block font-size="14pt">Order ${picklistBinInfo_index+1} to Pack, ID: ${picklistBinInfo.primaryOrderHeader.orderId}, Ship Group ID: ${picklistBinInfo.primaryOrderItemShipGroup.shipGroupSeqId}</fo:block>
+ <fo:block font-size="14pt">Bin ${picklistBin.binLocationNumber} to Pack, Order ID: ${picklistBinInfo.primaryOrderHeader.orderId}, Ship Group ID: ${picklistBinInfo.primaryOrderItemShipGroup.shipGroupSeqId}</fo:block>
<fo:block space-after.optimum="10pt" font-size="10pt">
<fo:table>
<fo:table-column column-width="60pt"/>
@@ -182,7 +221,7 @@
<#assign orderItemShipGrpInvRes = picklistItemInfo.orderItemShipGrpInvRes>
<fo:table-row>
<fo:table-cell padding="2pt" background-color="${rowColor}">
- <fo:block>${picklistItem.orderId}:${picklistItem.shipGroupSeqId}:${picklistItem.orderItemSeqId}</fo:block>
+ <fo:block><#--${picklistItem.orderId}:${picklistItem.shipGroupSeqId}:-->${picklistItem.orderItemSeqId}</fo:block>
</fo:table-cell>
<fo:table-cell padding="2pt" background-color="${rowColor}">
<#if product?has_content>
@@ -192,7 +231,7 @@
</#if>
</fo:table-cell>
<fo:table-cell padding="2pt" background-color="${rowColor}">
- <fo:block>${picklistItem.quantity} of ${orderItem.quantity}</fo:block>
+ <fo:block>${picklistItem.quantity}</fo:block>
</fo:table-cell>
<fo:table-cell padding="2pt" background-color="${rowColor}">
<fo:block>${orderItemShipGrpInvRes.inventoryItemId}:${orderItemShipGrpInvRes.quantity}:${orderItemShipGrpInvRes.quantityNotAvailable?if_exists}</fo:block>
Modified: trunk/applications/product/webapp/facility/facility/PicklistManage.ftl
===================================================================
--- trunk/applications/product/webapp/facility/facility/PicklistManage.ftl 2005-03-18 02:45:34 UTC (rev 4685)
+++ trunk/applications/product/webapp/facility/facility/PicklistManage.ftl 2005-03-18 13:22:51 UTC (rev 4686)
@@ -55,8 +55,13 @@
<input type="submit" value="${uiLabelMap.CommonUpdate}" class="smallSubmit"/>
</form>
<b>created/modified by</b> ${picklist.createdByUserLogin}/${picklist.lastModifiedByUserLogin}
- <a href="<@ofbizUrl>PicklistReport.pdf?picklistId=${picklist.picklistId}</@ofbizUrl>" class="buttontext" target="_blank">[Pick/Pack Report]</a>
+ <a href="<@ofbizUrl>PicklistReport.pdf?picklistId=${picklist.picklistId}</@ofbizUrl>" class="buttontext">[Pick/Pack Report]</a>
</div>
+ <#if picklistInfo.shipmentMethodType?has_content>
+ <div class="tabletext" style="margin-left: 15px;">
+ <b>for Shipment Method Type</b> ${picklistInfo.shipmentMethodType.description?default(picklistInfo.shipmentMethodType.shipmentMethodTypeId)}
+ </div>
+ </#if>
<#-- PicklistRole -->
<#list picklistInfo.picklistRoleInfoList?if_exists as picklistRoleInfo>
@@ -98,16 +103,19 @@
<b>Bin</b> ${picklistBinInfo.picklistBin.binLocationNumber}
<#if picklistBinInfo.primaryOrderHeader?exists><b>Primary Order</b> ${picklistBinInfo.primaryOrderHeader.orderId}</#if>
<#if picklistBinInfo.primaryOrderItemShipGroup?exists><b>Primary Ship Group</b> ${picklistBinInfo.primaryOrderItemShipGroup.shipGroupSeqId}</#if>
- <b>Move Bin to Picklist: </b>
+ </div>
+ <div class="tabletext" style="margin-left: 30px;">
+ <b>Update Bin:</b>
<form method="POST" action="<@ofbizUrl>updatePicklistBin</@ofbizUrl>" style="display: inline;">
<input type="hidden" name="facilityId" value="${facilityId}"/>
<input type="hidden" name="picklistBinId" value="${picklistBinInfo.picklistBin.picklistBinId}"/>
+ Location#:
+ <input type"text" size="2" name="binLocationNumber" value="${picklistBinInfo.picklistBin.binLocationNumber}"/>
+ Picklist:
<select name="picklistId" class="smallSelect">
<#list picklistActiveList as picklistActive>
- <#if picklistActive.picklistId != picklist.picklistId>
<#assign picklistActiveStatusItem = picklistActive.getRelatedOneCache("StatusItem")>
- <option value="${picklistActive.picklistId}">${picklistActive.picklistId} [Date:${picklistActive.picklistDate},Status:${picklistActiveStatusItem.description}]</option>
- </#if>
+ <option value="${picklistActive.picklistId}"<#if picklistActive.picklistId != picklist.picklistId> selected</#if>>${picklistActive.picklistId} [Date:${picklistActive.picklistDate},Status:${picklistActiveStatusItem.description}]</option>
</#list>
</select>
<input type="submit" value="${uiLabelMap.CommonUpdate}" class="smallSubmit"/>
@@ -121,7 +129,7 @@
<b>Product</b> ${picklistItemInfo.orderItem.productId}
<b>Inventory Item</b> ${inventoryItemAndLocation.inventoryItemId}
<b>Location</b> ${inventoryItemAndLocation.areaId?if_exists}-${inventoryItemAndLocation.aisleId?if_exists}-${inventoryItemAndLocation.sectionId?if_exists}-${inventoryItemAndLocation.levelId?if_exists}-${inventoryItemAndLocation.positionId?if_exists}
- <b>Quantity</b> ${picklistItem.quantity} of ${picklistItemInfo.orderItem.quantity}
+ <b>Quantity</b> ${picklistItem.quantity}<#-- of ${picklistItemInfo.orderItem.quantity}-->
</div>
<#-- picklistItem.orderItemShipGrpInvRes (do we want to display any of this info?) -->
<#-- picklistItemInfo.itemIssuanceList -->
More information about the Svn
mailing list