[OFBiz] SVN: r7561 - in trunk/applications/order: script/org/ofbiz/order/order servicedef src/org/ofbiz/order/shoppingcart

jacopo@svn.ofbiz.org jacopo at svn.ofbiz.org
Thu May 11 07:13:00 CDT 2006


Author: jacopo
Date: 2006-05-11 07:12:44 -0500 (Thu, 11 May 2006)
New Revision: 7561

Modified:
   trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml
   trunk/applications/order/servicedef/services.xml
   trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutEvents.java
Log:
Implemented new service "recreateOrderAdjustments" that can be used to recreate the auto order adjustments of an already created order; this service is now run after an orderItem is cancelled to fix the bug reported in OFBIZ-844.


Modified: trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml
===================================================================
--- trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml	2006-05-11 09:57:03 UTC (rev 7560)
+++ trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml	2006-05-11 12:12:44 UTC (rev 7561)
@@ -437,5 +437,73 @@
         </else>
         </if-compare>
     </simple-method>
+
+    <simple-method method-name="recreateOrderAdjustments" short-description="Auto create OrderAdjustments">
+        <check-permission permission="ORDERMGR" action="_CREATE">
+            <fail-property resource="OrderErrorUiLabels" property="OrderSecurityErrorToRunAutoCreateOrderAdjustments"/>
+        </check-permission>
+        <check-errors/>
+        <entity-one entity-name="OrderHeader" value-name="order" auto-field-map="true"/>
+        <!-- all existing promo order items are cancelled -->
+        <get-related value-name="order" relation-name="OrderItem" list-name="orderItems"/>
+        <iterate list-name="orderItems" entry-name="orderItem">
+            <if-compare field-name="orderItem.isPromo" value="Y" operator="equals">
+                <clear-field field-name="cancelOrderItemInMap"/>
+                <set-service-fields service-name="cancelOrderItem" to-map-name="cancelOrderItemInMap" map-name="parameters"/>
+                <set from-field="orderItem.orderItemSeqId" field="cancelOrderItemInMap.orderItemSeqId"/>
+                <call-service service-name="cancelOrderItem" in-map-name="cancelOrderItemInMap"/>
+            </if-compare>
+        </iterate>
+        <!-- all existing auto order adjustments are removed -->
+        <get-related value-name="order" relation-name="OrderAdjustment" list-name="orderAdjustments"/>
+        <iterate list-name="orderAdjustments" entry-name="orderAdjustment">
+            <!-- make sure this is not a manual adjustments -->
+            <if-not-empty field-name="orderAdjustment.productPromoId">
+                <remove-value value-name="orderAdjustment"/>
+            </if-not-empty>
+        </iterate>
+        <set-service-fields service-name="loadCartFromOrder" to-map-name="loadCartFromOrderInMap" map-name="parameters"/>
+        <!--<set value="false" field="loadCartFromOrderInMap.applyOrderAdjustments"/>-->
+        <call-service service-name="loadCartFromOrder" in-map-name="loadCartFromOrderInMap">
+            <result-to-field result-name="shoppingCart" field-name="cart"/>
+        </call-service>
+        <call-object-method obj-field-name="cart" method-name="items" ret-field-name="items"/>
+        <iterate list-name="items" entry-name="item">
+            <call-object-method obj-field-name="item" method-name="getOrderItemSeqId" ret-field-name="orderItemSeqId"/>
+            <if-empty field-name="orderItemSeqId">
+                <!-- this is a new (promo) item -->
+                <!-- a new order item is created -->
+                <make-value value-name="newOrderItem" entity-name="OrderItem"/>
+                <set field="newOrderItem.orderId" from-field="parameters.orderId"/>
+                <call-object-method obj-field-name="item" method-name="getItemType" ret-field-name="newOrderItem.orderItemTypeId"/>
+                <call-object-method obj-field-name="item" method-name="getSelectedAmount" ret-field-name="newOrderItem.selectedAmount"/>
+                <call-object-method obj-field-name="item" method-name="getBasePrice" ret-field-name="newOrderItem.unitPrice"/>
+                <call-object-method obj-field-name="item" method-name="getListPrice" ret-field-name="newOrderItem.unitListPrice"/>
+                <call-object-method obj-field-name="item" method-name="getName" ret-field-name="newOrderItem.itemDescription"/>
+                <call-object-method obj-field-name="item" method-name="getStatusId" ret-field-name="newOrderItem.statusId"/>
+                <call-object-method obj-field-name="item" method-name="getProductId" ret-field-name="newOrderItem.productId"/>
+                <call-object-method obj-field-name="item" method-name="getQuantity" ret-field-name="newOrderItem.quantity"/>
+                <set field="newOrderItem.isModifiedPrice" value="N"/>
+                <set field="newOrderItem.isPromo" value="Y"/>
+                <if-empty field-name="newOrderItem.statusId">
+                    <set field="newOrderItem.statusId" value="ITEM_CREATED"/>
+                </if-empty>
+                <make-next-seq-id value-name="newOrderItem" seq-field-name="orderItemSeqId"/>
+                <set from-field="orderItemSeqId" field="newOrderItem.orderItemSeqId"/>
+                <create-value value-name="newOrderItem"/>
+                <!-- and the orderItemSeqId is assigned to the shopping cart item-->
+                <call-object-method obj-field-name="item" method-name="setOrderItemSeqId">
+                    <field field-name="newOrderItem.orderItemSeqId" type="String"/>
+                </call-object-method>
+                <call-object-method obj-field-name="item" method-name="getOrderItemSeqId" ret-field-name="newOrderItemSeqId"/>
+            </if-empty>
+        </iterate>
+        <call-object-method obj-field-name="cart" method-name="makeAllAdjustments" ret-field-name="adjustments"/>
+        <iterate list-name="adjustments" entry-name="adjustment">
+            <set from-field="parameters.orderId" field="adjustment.orderId"/>
+            <sequenced-id-to-env sequence-name="OrderAdjustment" env-name="adjustment.orderAdjustmentId"/>
+            <create-value value-name="adjustment"/>
+        </iterate>
+    </simple-method>
 </simple-methods>
 

Modified: trunk/applications/order/servicedef/services.xml
===================================================================
--- trunk/applications/order/servicedef/services.xml	2006-05-11 09:57:03 UTC (rev 7560)
+++ trunk/applications/order/servicedef/services.xml	2006-05-11 12:12:44 UTC (rev 7561)
@@ -255,6 +255,12 @@
         <attribute name="shoppingCart" type="org.ofbiz.order.shoppingcart.ShoppingCart" mode="OUT" optional="false"/>
     </service>
 
+    <service name="recreateOrderAdjustments" engine="simple" auth="true"
+            location="org/ofbiz/order/order/OrderServices.xml" invoke="recreateOrderAdjustments">
+        <description>Remove all existing order adjustments, recalc them and persist in OrderAdjustment.</description>
+        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+    </service>
+
     <service name="processOrderPayments" engine="java" auth="true"
             location="org.ofbiz.order.order.OrderServices" invoke="processOrderPayments">
         <description>Process payments for an order</description>

Modified: trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutEvents.java
===================================================================
--- trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutEvents.java	2006-05-11 09:57:03 UTC (rev 7560)
+++ trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutEvents.java	2006-05-11 12:12:44 UTC (rev 7561)
@@ -104,11 +104,23 @@
             request.setAttribute("_ERROR_MESSAGE_", errMsg);
             return "error";
         }
-
         if (result.containsKey(ModelService.ERROR_MESSAGE)) {
             request.setAttribute("_ERROR_MESSAGE_", result.get(ModelService.ERROR_MESSAGE));
             return "error";
         }
+ 
+        try {
+            result = dispatcher.runSync("recreateOrderAdjustments", UtilMisc.toMap("userLogin", userLogin, "orderId", orderId));
+        } catch (GenericServiceException e) {
+            Debug.logError(e, module);
+            errMsg = UtilProperties.getMessage(resource, "checkevents.cannot_recalc_adjustments", locale);
+            request.setAttribute("_ERROR_MESSAGE_", errMsg);
+            return "error";
+        }
+        if (result.containsKey(ModelService.ERROR_MESSAGE)) {
+            request.setAttribute("_ERROR_MESSAGE_", result.get(ModelService.ERROR_MESSAGE));
+            return "error";
+        }
 
         return "success";
     }



More information about the Svn mailing list