svn commit: r569751 - in /ofbiz/trunk/applications/product: script/org/ofbiz/shipment/shipment/ShipmentServices.xml servicedef/services_shipment.xml

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r569751 - in /ofbiz/trunk/applications/product: script/org/ofbiz/shipment/shipment/ShipmentServices.xml servicedef/services_shipment.xml

jonesde
Author: jonesde
Date: Sat Aug 25 18:07:36 2007
New Revision: 569751

URL: http://svn.apache.org/viewvc?rev=569751&view=rev
Log:
Added a service to split a ShipmentItem for a given quantity; also splits OrderShipment record(s)

Modified:
    ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml
    ofbiz/trunk/applications/product/servicedef/services_shipment.xml

Modified: ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml?rev=569751&r1=569750&r2=569751&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml (original)
+++ ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml Sat Aug 25 18:07:36 2007
@@ -248,6 +248,7 @@
         <entity-one entity-name="Shipment" value-name="lookedUpValue"/>
         <remove-value value-name="lookedUpValue"/>
     </simple-method>
+    
     <simple-method method-name="createShipmentForReturn" short-description="Create Shipment based on ReturnHeader">
         <entity-one entity-name="ReturnHeader" value-name="returnHeader">
             <field-map field-name="returnId" env-name="parameters.returnId"/>
@@ -527,6 +528,7 @@
         <set-service-fields service-name="updateShipment" map-name="shipment" to-map-name="shipmentUpdateMap"/>
         <call-service service-name="updateShipment" in-map-name="shipmentUpdateMap"/>
     </simple-method>
+    
     <simple-method method-name="setShipmentSettingsFromFacilities" short-description="Set Shipment Settings From Facilities">
         <check-permission permission="FACILITY" action="_CREATE">
             <fail-message message="Security Error: to run setShipmentSettingsFromFacilities you must have the FACILITY_CREATE or FACILITY_ADMIN permission"/>
@@ -585,6 +587,7 @@
             <call-service service-name="updateShipment" in-map-name="shipmentUpdateMap"/>
         </if-compare-field>
     </simple-method>
+    
     <simple-method method-name="sendShipmentScheduledNotification" short-description="Send Shipment Scheduled Notification">
         <check-permission permission="FACILITY" action="_CREATE">
             <alt-permission permission="FACILITY" action="_UPDATE"/>
@@ -727,6 +730,86 @@
         <set-pk-fields map-name="parameters" value-name="lookupPKMap"/>
         <find-by-primary-key entity-name="ShipmentItem" map-name="lookupPKMap" value-name="lookedUpValue"/>
         <remove-value value-name="lookedUpValue"/>
+    </simple-method>
+    
+    <simple-method method-name="splitShipmentItemByQuantity" short-description="splitShipmentItemByQuantity">
+        <entity-one entity-name="ShipmentItem" value-name="originalShipmentItem"/>
+        
+        <!-- create new ShipmentItem -->
+        <clear-field field-name="inputMap"/>
+        <set field="inputMap.shipmentId" from-field="originalShipmentItem.shipmentId"/>
+        <set field="inputMap.productId" from-field="originalShipmentItem.productId"/>
+        <set field="inputMap.quantity" from-field="parameters.newItemQuantity"/>
+        <call-service service-name="createShipmentItem" in-map-name="inputMap">
+            <result-to-field result-name="shipmentItemSeqId" field-name="newShipmentItemSeqId"/>
+        </call-service>
+        
+        <!-- reduce the originalShipmentItem.quantity  -->
+        <calculate field-name="originalShipmentItem.quantity" type="Double">
+            <calcop operator="add" field-name="originalShipmentItem.quantity">
+                <calcop operator="negative" field-name="parameters.newItemQuantity"/>
+            </calcop>
+        </calculate>
+        <!-- update the original ShipmentItem -->
+        <set-service-fields service-name="updateShipmentItem" map-name="originalShipmentItem" to-map-name="updateOriginalShipmentItemMap"/>
+        <call-service service-name="updateShipmentItem" in-map-name="updateOriginalShipmentItemMap"/>
+        
+        <!-- split the OrderShipment record(s) as well for the new quantities,
+            from originalShipmentItem.shipmentItemSeqId to newShipmentItemSeqId -->
+        <entity-and entity-name="OrderShipment" list-name="itemOrderShipmentList">
+            <field-map field-name="shipmentId" env-name="originalShipmentItem.shipmentId"/>
+            <field-map field-name="shipmentItemSeqId" env-name="originalShipmentItem.shipmentItemSeqId"/>
+        </entity-and>
+        
+        <set field="orderShipmentQuantityLeft" from-field="parameters.newItemQuantity"/>
+        <iterate entry-name="itemOrderShipment" list-name="itemOrderShipmentList">
+            <if-compare field-name="orderShipmentQuantityLeft" operator="greater" value="0" type="Double">
+                <if-compare-field field-name="itemOrderShipment.quantity" operator="greater" to-field-name="orderShipmentQuantityLeft" type="Double">
+                    <!-- there is enough in this OrderShipment record, so just adjust it and move on -->
+                    <clear-field field-name="updateOrderShipmentMap"/>
+                    <set-service-fields service-name="updateOrderShipment" map-name="itemOrderShipment" to-map-name="updateOrderShipmentMap"/>
+                    <calculate field-name="updateOrderShipmentMap.quantity" type="Double">
+                        <calcop operator="add" field-name="itemOrderShipment.quantity">
+                            <calcop operator="negative" field-name="orderShipmentQuantityLeft"/>
+                        </calcop>
+                    </calculate>
+                    <call-service service-name="updateOrderShipment" in-map-name="updateOrderShipmentMap"/>
+                    
+                    <clear-field field-name="createOrderShipmentMap"/>
+                    <set field="createOrderShipmentMap.orderId" from-field="itemOrderShipment.orderId"/>
+                    <set field="createOrderShipmentMap.orderItemSeqId" from-field="itemOrderShipment.orderItemSeqId"/>
+                    <set field="createOrderShipmentMap.shipmentId" from-field="itemOrderShipment.shipmentId"/>
+                    <set field="createOrderShipmentMap.shipmentItemSeqId" from-field="newShipmentItemSeqId"/>
+                    <set field="createOrderShipmentMap.quantity" from-field="orderShipmentQuantityLeft"/>
+                    <call-service service-name="createOrderShipment" in-map-name="createOrderShipmentMap"/>
+                    
+                    <set field="orderShipmentQuantityLeft" value="0" type="Double"/>
+                    
+                    <else>
+                        <!-- not enough on this one, create a new one for the new item and delete this one -->
+                        <clear-field field-name="deleteOrderShipmentMap"/>
+                        <set-service-fields service-name="deleteOrderShipment" map-name="itemOrderShipment" to-map-name="deleteOrderShipmentMap"/>
+                        <call-service service-name="deleteOrderShipment" in-map-name="deleteOrderShipmentMap"/>
+                        
+                        <clear-field field-name="createOrderShipmentMap"/>
+                        <set field="createOrderShipmentMap.orderId" from-field="itemOrderShipment.orderId"/>
+                        <set field="createOrderShipmentMap.orderItemSeqId" from-field="itemOrderShipment.orderItemSeqId"/>
+                        <set field="createOrderShipmentMap.shipmentId" from-field="itemOrderShipment.shipmentId"/>
+                        <set field="createOrderShipmentMap.shipmentItemSeqId" from-field="newShipmentItemSeqId"/>
+                        <set field="createOrderShipmentMap.quantity" from-field="itemOrderShipment.quantity"/>
+                        <call-service service-name="createOrderShipment" in-map-name="createOrderShipmentMap"/>
+                        
+                        <calculate field-name="orderShipmentQuantityLeft" type="Double">
+                            <calcop operator="add" field-name="orderShipmentQuantityLeft">
+                                <calcop operator="negative" field-name="itemOrderShipment.quantity"></calcop>
+                            </calcop>
+                        </calculate>
+                    </else>
+                </if-compare-field>
+            </if-compare>
+        </iterate>
+        
+        <field-to-result field-name="newShipmentItemSeqId"/>
     </simple-method>
 
     <!-- ShipmentPackage services -->

Modified: ofbiz/trunk/applications/product/servicedef/services_shipment.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services_shipment.xml?rev=569751&r1=569750&r2=569751&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/servicedef/services_shipment.xml (original)
+++ ofbiz/trunk/applications/product/servicedef/services_shipment.xml Sat Aug 25 18:07:36 2007
@@ -194,6 +194,16 @@
         <description>Delete ShipmentItem</description>
         <auto-attributes include="pk" mode="IN" optional="false"/>
     </service>
+    
+    <service name="splitShipmentItemByQuantity" engine="simple"
+        location="org/ofbiz/shipment/shipment/ShipmentServices.xml" invoke="splitShipmentItemByQuantity">
+        <description>Splits the specified ShipmentItem creating a new ShipmentItem with the given newItemQuantity.
+            NOTE that this does manage OrderShipment records, but NOTHING else, so it is only to be used for Shipment
+            Plan stuff BEFORE the items are issued, shipment packed, etc.</description>
+        <auto-attributes entity-name="ShipmentItem" include="pk" mode="IN" optional="false"/>
+        <attribute name="newItemQuantity" type="Double" mode="IN" optional="false"/>
+        <attribute name="newShipmentItemSeqId" type="String" mode="OUT" optional="true"/>
+    </service>
 
     <!-- ShipmentPackage Services -->
     <service name="createShipmentPackage" default-entity-name="ShipmentPackage" engine="simple"