Author: jaz
Date: Tue Jan 16 09:19:48 2007
New Revision: 496778

URL: http://svn.apache.org/viewvc?view=rev&rev=496778
Log:
updated picklist services; now will auto complete picklists when all items on 
the pick list are marked as complete

Modified:
    
ofbiz/trunk/applications/product/script/org/ofbiz/shipment/picklist/PicklistServices.xml

Modified: 
ofbiz/trunk/applications/product/script/org/ofbiz/shipment/picklist/PicklistServices.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/shipment/picklist/PicklistServices.xml?view=diff&rev=496778&r1=496777&r2=496778
==============================================================================
--- 
ofbiz/trunk/applications/product/script/org/ofbiz/shipment/picklist/PicklistServices.xml
 (original)
+++ 
ofbiz/trunk/applications/product/script/org/ofbiz/shipment/picklist/PicklistServices.xml
 Tue Jan 16 09:19:48 2007
@@ -125,11 +125,17 @@
                         <set value="Y" field="pickThisOrder"/>
                         <set value="N" field="needsStockMove"/>
                         <set value="Y" field="allPickStarted"/>
+                        <set value="N" field="hasStockToPick"/>
                         <iterate entry-name="orderItemShipGrpInvRes" 
list-name="orderItemShipGrpInvResList">
+                            <get-related-one 
value-name="orderItemShipGrpInvRes" relation-name="OrderItem" 
to-value-name="orderItem"/>
+                            <if-compare field-name="orderItem.statusId" 
value="ITEM_APPROVED" operator="not-equals">
+                                <set value="N" field="pickThisOrder"/>
+                            </if-compare>
+
                             <if-compare field-name="pickThisOrder" 
operator="equals" value="Y">
                                 <get-related-one 
value-name="orderItemShipGrpInvRes" relation-name="InventoryItem" 
to-value-name="inventoryItem"/>
                                 <!-- Look for other picklists which might 
include this order item ship group inventory reservation.  If it is on another 
picklist, then
-                                    we should not include it again.  We screen 
out picklists which are either cancelled or already picked or packed, so that 
we can re-pick items if 
+                                    we should not include it again.  We screen 
out picklists which are either cancelled or already picked or packed, so that 
we can re-pick items if
                                     (1) the previous picklist was cancelled, or
                                     (2) the previous picklist was picked or 
packed, and there is still an OrderItemShipGrpInvRes, which means that some of 
the order item must not
                                     have shipped yet.  (OrderItemShipGrpInvRes 
is removed when an order item has been fully shipped.
@@ -140,9 +146,8 @@
                                         <condition-expr 
field-name="shipGroupSeqId" env-name="orderItemShipGrpInvRes.shipGroupSeqId"/>
                                         <condition-expr 
field-name="orderItemSeqId" env-name="orderItemShipGrpInvRes.orderItemSeqId"/>
                                         <condition-expr 
field-name="inventoryItemId" env-name="orderItemShipGrpInvRes.inventoryItemId"/>
-                                        <condition-expr field-name="statusId" 
operator="not-equals" value="PICKLIST_PACKED"/>
-                                        <condition-expr field-name="statusId" 
operator="not-equals" value="PICKLIST_PICKED"/>
                                         <condition-expr field-name="statusId" 
operator="not-equals" value="PICKLIST_CANCELLED"/>
+                                        <condition-expr 
field-name="itemStatusId" operator="not-equals" value="PICKITEM_CANCELLED"/>
                                     </condition-list>
                                 </entity-condition>
                                 <log level="info" message="Pick list ITEMS - 
${picklistItemList}"/>
@@ -169,6 +174,21 @@
                                             <set value="N" 
field="pickThisOrder"/>
                                         </then>
                                         <else>
+                                            <log level="info" message="Found 
item to pick: ${orderItemShipGrpInvRes}"/>
+                                            <!-- see if there is stock to pick 
-->
+                                            <if>
+                                                <condition>
+                                                    <or>
+                                                        <if-empty 
field-name="orderItemShipGrpInvRes.quantityNotAvailable"/>
+                                                        <if-compare 
field-name="orderItemShipGrpInvRes.quantityNotAvailable" operator="equals" 
value="0" type="Double"/>
+                                                    </or>
+                                                </condition>
+                                                <then>
+                                                    <log level="info" 
message="Item has stock; flagging order (${orderItemShipGrpInvRes.orderId}) as 
OK"/>
+                                                    <set value="Y" 
field="hasStockToPick"/>
+                                                </then>
+                                            </if>
+
                                             <!-- check 
InventoryItem->FacilityLocation (if exists), if it is of type FLT_BULK set 
needs stock move to true -->
                                             <get-related-one 
value-name="inventoryItem" relation-name="FacilityLocation" 
to-value-name="facilityLocation"/>
                                             <if-not-empty 
field-name="facilityLocation">
@@ -189,6 +209,11 @@
                             </if-compare>
                         </iterate>
 
+                        <!-- another check to see if we should pick this order 
-->
+                        <if-compare field-name="hasStockToPick" 
operator="equals" value="N">
+                            <set value="N" field="pickThisOrder"/>
+                        </if-compare>
+
                         <if>
                             <condition>
                                 <and>
@@ -476,15 +501,54 @@
                 </call-service>
 
                 <calculate field-name="binLocationNumber" type="Long"><calcop 
field-name="binLocationNumber" operator="add"/><number value="1"/></calculate>
+                <set field="itemsInBin" type="Long" value="0"/>
 
                 <iterate entry-name="orderItemInfo" 
list-name="orderHeaderInfo.orderItemInfoList">
                     <iterate entry-name="orderItemShipGrpInvRes" 
list-name="orderItemInfo.orderItemShipGrpInvResList">
-                        <clear-field field-name="createPicklistItemMap"/>
-                        <set from-field="picklistBinId" 
field="createPicklistItemMap.picklistBinId"/>
-                        <set-service-fields service-name="createPicklistItem" 
map-name="orderItemShipGrpInvRes" to-map-name="createPicklistItemMap"/>
-                        <call-service service-name="createPicklistItem" 
in-map-name="createPicklistItemMap"/>
+                        <log level="info" message="Getting pick quantity : 
${orderItemShipGrpInvRes.quantity} - 
${orderItemShipGrpInvRes.quantityNotAvailable}"/>
+                        <set field="quantityToPick" 
from-field="orderItemShipGrpInvRes.quantity"/>
+                        <if>
+                            <condition>
+                                <and>
+                                    <not><if-empty 
field-name="orderItemShipGrpInvRes.quantityNotAvailable"/></not>
+                                    <if-compare 
field-name="orderItemShipGrpInvRes.quantityNotAvailable" value="0" 
operator="greater"/>
+                                </and>
+                            </condition>
+                            <then>
+                                <set field="quantityToSubtract" 
from-field="orderItemShipGrpInvRes.quantityNotAvailable"/>
+                                <log level="info" message="Subtracting 
${quantityToSubtract} from ${quantityToPick}"/>
+                                <calculate field-name="quantityToPick" 
type="Double">
+                                    <calcop field-name="quantityToPick" 
operator="subtract">
+                                        <calcop 
field-name="quantityToSubtract" operator="get"/>
+                                    </calcop>
+                                </calculate>
+                            </then>
+                        </if>
+
+                        <log level="info" message="Order 
#${orderItemShipGrpInvRes.orderId} / ${orderItemShipGrpInvRes.orderItemSeqId} - 
${quantityToPick}"/>
+                        <if-compare field-name="quantityToPick" value="0" 
operator="greater" type="Double">
+                            <clear-field field-name="createPicklistItemMap"/>
+                            <set from-field="picklistBinId" 
field="createPicklistItemMap.picklistBinId"/>
+                            <set field="createPicklistItemMap.itemStatusId" 
value="PICKITEM_PENDING"/>
+                            <set-service-fields 
service-name="createPicklistItem" map-name="orderItemShipGrpInvRes" 
to-map-name="createPicklistItemMap"/>
+                            <set field="createPicklistItemMap.quantity" 
from-field="quantityToPick"/>
+                            <call-service service-name="createPicklistItem" 
in-map-name="createPicklistItemMap"/>
+                            <calculate field-name="itemsInBin">
+                                <calcop operator="add"/>
+                                <number value="1"/>
+                            </calculate>
+                        </if-compare>
+                        <clear-field field-name="quantityToPick"/>
                     </iterate>
                 </iterate>
+
+                <!-- if we put nothing into this bin, delete the bin -->
+                <if-compare field-name="itemsInBin" value="0" 
operator="equals">
+                    <entity-one entity-name="PicklistBin" 
value-name="binToRemove">
+                        <field-map field-name="picklistBinId" 
env-name="picklistBinId"/>
+                    </entity-one>
+                    <remove-value value-name="binToRemove"/>
+                </if-compare>
             </iterate>
         <else>
             <log level="info" message="Not Creating Picklist with ID, nothing 
to process."/>
@@ -635,8 +699,30 @@
         <make-value value-name="lookupPKMap" entity-name="PicklistItem"/>
         <set-pk-fields map-name="parameters" value-name="lookupPKMap"/>
         <find-by-primary-key map-name="lookupPKMap" 
value-name="lookedUpValue"/>
+
+        <if-not-empty field-name="parameters.itemStatusId">
+            <if-compare-field field-name="parameters.itemStatusId" 
operator="not-equals" to-field-name="lookedUpValue.itemStatusId">
+                <!-- make sure a StatusValidChange record exists, if not 
return error -->
+                <entity-one entity-name="StatusValidChange" 
value-name="checkStatusValidChange" auto-field-map="false">
+                    <field-map env-name="lookedUpValue.itemStatusId" 
field-name="statusId"/>
+                    <field-map env-name="parameters.itemStatusId" 
field-name="statusIdTo"/>
+                </entity-one>
+                <if-empty field-name="checkStatusValidChange">
+                    <set value="ERROR: Changing the status from 
${lookedUpValue.itemStatusId} to ${parameters.itemStatusId} is not allowed." 
field="error_list[]"/>
+                </if-empty>
+            </if-compare-field>
+        </if-not-empty>
+
+        <!-- now finally check for errors -->
+        <check-errors/>
+
+        <!-- finally before setting nonpk fields, set the oldItemStatusId -->
+        <field-to-result field-name="lookedUpValue.itemStatusId" 
result-name="oldItemStatusId"/>
+
+        <!-- now that all changes have been checked, set the nonpks -->
         <set-nonpk-fields map-name="parameters" value-name="lookedUpValue"/>
 
+        <!-- store the changes -->
         <store-value value-name="lookedUpValue"/>
     </simple-method>
     <simple-method method-name="deletePicklistItem" short-description="Delete 
PicklistItem">
@@ -650,6 +736,15 @@
         <find-by-primary-key map-name="lookupPKMap" 
value-name="lookedUpValue"/>
         <remove-value value-name="lookedUpValue"/>
     </simple-method>
+    <simple-method method-name="setPicklistItemToComplete" 
short-description="Set the status of a pick list item to completed">
+        <check-permission permission="FACILITY" action="_UPDATE">
+            <fail-message message="Security Error: to run 
setPicklistItemToComplete you must have the FACILITY_UPDATE or FACILITY_ADMIN 
permission"/>
+        </check-permission>
+
+        <set-service-fields service-name="updatePicklistItem" 
map-name="parameters" to-map-name="serviceCtx"/>
+        <set field="serviceCtx.itemStatusId" value="PICKITEM_COMPLETED"/>
+        <call-service service-name="updatePicklistItem" 
in-map-name="serviceCtx" include-user-login="true"/>
+    </simple-method>
 
     <!-- PicklistRole -->
     <simple-method method-name="createPicklistRole" short-description="Create 
PicklistRole">
@@ -704,7 +799,7 @@
         <entity-condition entity-name="Picklist" list-name="picklistList">
             <condition-list combine="and">
                 <condition-expr field-name="facilityId" operator="equals" 
env-name="parameters.facilityId"/>
-                <condition-expr field-name="statusId" operator="not-equals" 
value="PICKLIST_PACKED"/>
+                <condition-expr field-name="statusId" operator="not-equals" 
value="PICKLIST_PICKED"/>
                 <condition-expr field-name="statusId" operator="not-equals" 
value="PICKLIST_CANCELLED"/>
             </condition-list>
             <order-by field-name="picklistDate"/>
@@ -967,10 +1062,11 @@
         <set from-field="picklistRoleInfoList" 
field="picklistInfo.picklistRoleInfoList"/>
         <set from-field="picklistStatusHistoryInfoList" 
field="picklistInfo.picklistStatusHistoryInfoList"/>
         <set from-field="picklistBinInfoList" 
field="picklistInfo.picklistBinInfoList"/>
+        <string-to-list string="sequenceId" list-name="orderBy"/>
         <get-related-one value-name="picklist" relation-name="StatusItem" 
to-value-name="picklistInfo.statusItem" use-cache="true"/>
         <get-related-one value-name="picklist" relation-name="Facility" 
to-value-name="picklistInfo.facility" use-cache="true"/>
         <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"/>
+        <get-related value-name="picklist" 
relation-name="StatusValidChangeToDetail" order-by-list-name="orderBy" 
list-name="picklistInfo.statusValidChangeToDetailList"/>
     </simple-method>
 
 
@@ -1115,5 +1211,59 @@
             <set from-field="inventoryItemInfo" 
field="inventoryItemInfoList[]"/>
             <clear-field field-name="inventoryItemInfo"/>
         </iterate>
+    </simple-method>
+
+    <!-- special method to check update the picklist status from the item 
status -->
+    <simple-method method-name="checkPicklistBinItemStatuses" 
short-description="Checks the item status and updates the pick list status">
+        <check-permission permission="FACILITY" action="_UPDATE">
+            <fail-message message="Security Error: to run 
checkPicklistItemStatus you must have the FACILITY_UPDATE or FACILITY_ADMIN 
permission"/>
+        </check-permission>
+
+        <!-- find the picklist bin -->
+        <make-value value-name="binLookup" entity-name="PicklistBin"/>
+        <set-pk-fields map-name="parameters" value-name="binLookup"/>
+        <find-by-primary-key map-name="binLookup" value-name="picklistBin"/>
+
+        <!-- find the pick list -->
+        <make-value value-name="plLookup" entity-name="Picklist"/>
+        <set-pk-fields map-name="picklistBin" value-name="plLookup"/>
+        <find-by-primary-key map-name="plLookup" value-name="picklist"/>
+
+        <!-- find all related picklist items -->
+        <entity-and entity-name="PicklistItemAndBin" list-name="picklistItem">
+            <field-map field-name="picklistId" env-name="picklist.picklistId"/>
+        </entity-and>
+
+        <set field="allCompleteOrCancelled" type="Boolean" value="true"/>
+        <set field="allCancelled" type="Boolean" value="true"/>
+
+        <!-- determine if all the items are completed and/or cancelled -->
+        <iterate entry-name="item" list-name="picklistItem">
+            <log level="info" message="checking status for item: ${item}"/>
+            <if-compare field-name="item.itemStatusId" 
value="PICKITEM_CANCELLED" operator="not-equals">
+                <log level="info" message="item is not cancelled; all 
cancelled set to false"/>
+                <set field="allCancelled" type="Boolean" value="false"/>
+
+                <if-compare field-name="item.itemStatusId" 
value="PICKITEM_COMPLETED" operator="not-equals">
+                    <log level="info" message="item is not completed; all 
completed set to false"/>
+                    <set field="allCompleteOrCancelled" type="Boolean" 
value="false"/>
+                </if-compare>
+            </if-compare>
+        </iterate>
+
+        <!-- update the picklist status -->
+        <if-compare field-name="allCancelled" value="true" type="Boolean" 
operator="equals">
+            <log level="info" message="Setting picklist 
#${picklist.picklistId} to cancelled"/>
+            <set field="picklist.statusId" value="PICKLIST_CANCELLED"/>
+            <store-value value-name="picklist"/>
+        <else>
+            <log level="info" message="Not all items were cancelled; now check 
if we can complete the picklist : ${allCompleteOrCancelled}"/>
+            <if-compare field-name="allCompleteOrCancelled" value="true" 
type="Boolean" operator="equals">
+                <log level="info" message="Setting picklist 
#${picklist.picklistId} to completed"/>
+                <set field="picklist.statusId" value="PICKLIST_PICKED"/>
+                <store-value value-name="picklist"/>
+            </if-compare>
+        </else>
+        </if-compare>
     </simple-method>
 </simple-methods>


Reply via email to