You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by si...@apache.org on 2007/03/15 18:36:50 UTC

svn commit: r518702 - in /ofbiz/trunk/applications/order: script/org/ofbiz/order/order/ servicedef/ src/org/ofbiz/order/order/ webapp/ordermgr/WEB-INF/ webapp/ordermgr/order/

Author: sichen
Date: Thu Mar 15 10:36:49 2007
New Revision: 518702

URL: http://svn.apache.org/viewvc?view=rev&rev=518702
Log:
Improvements to add/remove payment methods in order view.  The payment amount field defaults to the open order amount, which is a new method in Order Read Helper.  Replaced minilang service updateOrderPaymentPreference with an improved java version.  Changed the requests to request-redirect to avoid adding the payment method again if user hits refresh.

Modified:
    ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml
    ofbiz/trunk/applications/order/servicedef/services.xml
    ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
    ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
    ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
    ofbiz/trunk/applications/order/webapp/ordermgr/order/orderpaymentinfo.ftl

Modified: ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml?view=diff&rev=518702&r1=518701&r2=518702
==============================================================================
--- ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml (original)
+++ ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml Thu Mar 15 10:36:49 2007
@@ -491,54 +491,6 @@
         <set-nonpk-fields value-name="orderHeader" map-name="parameters"/>
         <store-value value-name="orderHeader"/>  
     </simple-method>
-    <simple-method method-name="updateOrderPaymentPreference" short-description="Update an order payment preference record">
-        <check-permission permission="ORDERMGR" action="_UPDATE">
-            <fail-message message="ERROR: Not enough permissions to update this record."/>
-        </check-permission>
-        <check-errors/>
-
-        <entity-one entity-name="OrderPaymentPreference" value-name="opp">
-            <field-map field-name="orderPaymentPreferenceId" env-name="parameters.orderPaymentPreferenceId"/>
-        </entity-one>
-
-        <log level="always" message="Parameters - ${parameters}"/>
-        <if-not-empty field-name="checkOutPaymentId" map-name="parameters">
-            <if-regexp map-name="parameters" field-name="checkOutPaymentId" expr="\d+">
-                <log level="info" message="PaymentMethod found: ${parameters.checkOutPaymentId}"/>
-                <set field="parameters.paymentMethodId" from-field="parameters.checkOutPaymentId"/>
-                <entity-one entity-name="PaymentMethod" value-name="paymentMethod">
-                    <field-map field-name="paymentMethodId" env-name="parameters.checkOutPaymentId"/>
-                </entity-one>
-                <set field="parameters.paymentMethodTypeId" from-field="paymentMethod.paymentMethodTypeId"/>
-            <else>
-                <log level="info" message="PaymentMethodType found: ${parameters.checkOutPaymentId}"/>
-                <set field="parameters.paymentMethodTypeId" from-field="parameters.checkOutPaymentId"/>
-            </else>
-            </if-regexp>
-        </if-not-empty>
-
-        <if-compare field-name="parameters.cancelThis" operator="not-equals" value="true">
-            <log level="always" message="Cancel not set; updating..."/>
-            <clone-value value-name="opp" new-value-name="newOpp"/>
-            <set field="opp.statusId" value="PAYMENT_CANCELLED"/>
-            <store-value value-name="opp"/>
-
-            <sequenced-id-to-env sequence-name="OrderPaymentPreference" env-name="payPrefId"/>
-            <set field="newOpp.orderPaymentPreferenceId" from-field="payPrefId"/>
-            <set field="newOpp.paymentMethodTypeId" set-if-null="true"/>
-            <set field="newOpp.paymentMethodId" set-if-null="true"/>
-            <set field="newOpp.createdByUserLogin" from-field="userLogin.userLoginId"/>
-            <set-nonpk-fields value-name="newOpp" map-name="parameters"/>
-            <create-value value-name="newOpp"/>
-            <field-to-result field-name="orderPaymentPreferenceId" map-name="newOpp" result-name="orderPaymentPreferenceId"/>
-        <else>
-            <log level="always" message="Cancel set; not updating..."/>
-            <set field="opp.statusId" value="PAYMENT_CANCELLED"/>
-            <store-value value-name="opp"/>
-            <field-to-result field-name="orderPaymentPreferenceId" map-name="opp" result-name="orderPaymentPreferenceId"/>
-        </else>
-        </if-compare>
-    </simple-method>
 
     <simple-method method-name="recreateOrderAdjustments" short-description="Auto create OrderAdjustments">
         <check-permission permission="ORDERMGR" action="_CREATE">

Modified: ofbiz/trunk/applications/order/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/services.xml?view=diff&rev=518702&r1=518701&r2=518702
==============================================================================
--- ofbiz/trunk/applications/order/servicedef/services.xml (original)
+++ ofbiz/trunk/applications/order/servicedef/services.xml Thu Mar 15 10:36:49 2007
@@ -294,8 +294,8 @@
         <attribute name="orderId" type="String" mode="IN" optional="false"/>
     </service>
 
-    <service name="updateOrderPaymentPreference" engine="simple" auth="true" default-entity-name="OrderPaymentPreference"
-            location="org/ofbiz/order/order/OrderServices.xml" invoke="updateOrderPaymentPreference">
+    <service name="updateOrderPaymentPreference" engine="java" auth="true" default-entity-name="OrderPaymentPreference"
+            location="org.ofbiz.order.order.OrderServices" invoke="updateOrderPaymentPreference">
         <auto-attributes mode="INOUT" include="pk" optional="false"/>
         <auto-attributes mode="IN" include="nonpk" optional="true"/>
         <attribute name="checkOutPaymentId" type="String" mode="IN" optional="true"/>

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java?view=diff&rev=518702&r1=518701&r2=518702
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java Thu Mar 15 10:36:49 2007
@@ -1280,6 +1280,42 @@
         return getOrderGrandTotalBd().doubleValue();
     }
 
+    /**
+     * Gets the amount open on the order that is not covered by the relevant OrderPaymentPreferences.
+     * This works by adding up the amount allocated to each unprocessed OrderPaymentPreference and the
+     * amounts received as payments for the settled ones.
+     */
+    public double getOrderOpenAmount() throws GenericEntityException {
+        GenericDelegator delegator = orderHeader.getDelegator();
+        double total = getOrderGrandTotal();
+        double openAmount = 0;
+        List prefs = getPaymentPreferences();
+
+        // add up the covered amount, but skip preferences which are declined or cancelled
+        for (Iterator iter = prefs.iterator(); iter.hasNext(); ) {
+            GenericValue pref = (GenericValue) iter.next();
+            if ("PAYMENT_CANCELLED".equals(pref.get("statusId")) || "PAYMENT_DECLINED".equals(pref.get("statusId"))) {
+                continue;
+            } else if ("PAYMENT_SETTLED".equals(pref.get("statusId"))) {
+                List responses = pref.getRelatedByAnd("PaymentGatewayResponse", UtilMisc.toMap("transCodeEnumId", "PGT_CAPTURE"));
+                for (Iterator respIter = responses.iterator(); respIter.hasNext(); ) {
+                    GenericValue response = (GenericValue) respIter.next();
+                    Double amount = response.getDouble("amount");
+                    if (amount != null) {
+                        openAmount += amount.doubleValue();
+                    }
+                }
+            } else {
+                // all others are currently "unprocessed" payment preferences
+                Double maxAmount = pref.getDouble("maxAmount");
+                if (maxAmount != null) {
+                    openAmount += maxAmount.doubleValue();
+                }
+            }
+        }
+        return total - openAmount;
+    }
+
     public List getOrderHeaderAdjustments() {
         return getOrderHeaderAdjustments(getAdjustments(), null);
     }

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java?view=diff&rev=518702&r1=518701&r2=518702
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java Thu Mar 15 10:36:49 2007
@@ -3706,4 +3706,60 @@
         return ServiceUtil.returnSuccess();
     }
 
+    public static Map updateOrderPaymentPreference(DispatchContext dctx, Map context) {
+        GenericDelegator delegator = dctx.getDelegator();
+        LocalDispatcher dispatcher = dctx.getDispatcher();
+        GenericValue userLogin = (GenericValue) context.get("userLogin");
+
+        String orderPaymentPreferenceId = (String) context.get("orderPaymentPreferenceId");
+        String checkOutPaymentId = (String) context.get("checkOutPaymentId");
+        boolean cancelThis = ("true".equals((String) context.get("cancelThis")));
+        try {
+            GenericValue opp = delegator.findByPrimaryKey("OrderPaymentPreference", UtilMisc.toMap("orderPaymentPreferenceId", orderPaymentPreferenceId));
+            String paymentMethodId = null;
+            String paymentMethodTypeId = null;
+
+            // The checkOutPaymentId is either a paymentMethodId or paymentMethodTypeId
+            // the original method did a "\d+" regexp to decide which is the case, this version is more explicit with its lookup of PaymentMethodType
+            if (checkOutPaymentId != null) {
+                List paymentMethodTypes = delegator.findAllCache("PaymentMethodType");
+                for (Iterator iter = paymentMethodTypes.iterator(); iter.hasNext(); ) {
+                    GenericValue type = (GenericValue) iter.next();
+                    if (type.get("paymentMethodTypeId").equals(checkOutPaymentId)) {
+                        paymentMethodTypeId = (String) type.get("paymentMethodTypeId");
+                        break;
+                    }
+                }
+                if (paymentMethodTypeId == null) {
+                    GenericValue method = delegator.findByPrimaryKey("PaymentMethod", UtilMisc.toMap("paymentMethodTypeId", paymentMethodTypeId));
+                    paymentMethodId = checkOutPaymentId;
+                    paymentMethodTypeId = (String) method.get("paymentMethodTypeId");
+                }
+            }
+
+            Map results = ServiceUtil.returnSuccess();
+            if (cancelThis) {
+                opp.set("statusId", "PAYMENT_CANCELLED");
+                opp.store();
+                results.put("orderPaymentPreferenceId", opp.get("orderPaymentPreferenceId"));
+            } else {
+                GenericValue newOpp = (GenericValue) opp.clone(); 
+                opp.set("statusId", "PAYMENT_CANCELLED");
+                opp.store();
+
+                newOpp.set("orderPaymentPreferenceId", delegator.getNextSeqId("OrderPaymentPreference"));
+                newOpp.set("paymentMethodId", paymentMethodId);
+                newOpp.set("paymentMethodTypeId", paymentMethodTypeId);
+                newOpp.setNonPKFields(context);
+                newOpp.create();
+                results.put("orderPaymentPreferenceId", newOpp.get("orderPaymentPreferenceId"));
+            }
+
+            return results;
+        } catch (GenericEntityException e) {
+            Debug.logError(e, module);
+            return ServiceUtil.returnError(e.getMessage());
+        }
+    }
+
 }

Modified: ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml?view=diff&rev=518702&r1=518701&r2=518702
==============================================================================
--- ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml Thu Mar 15 10:36:49 2007
@@ -1401,14 +1401,14 @@
     <request-map uri="authOrderPayment">
         <security https="true" auth="true"/>
         <event type="service" path="" invoke="authOrderPaymentPreference"/>
-        <response name="success" type="view" value="orderview"/>
+        <response name="success" type="request-redirect" value="orderview"/>
     </request-map>
     
     <request-map uri="updateOrderPaymentPreference">
         <security https="true" auth="true"/>
         <event type="service" invoke="updateOrderPaymentPreference"/>
-        <response name="success" type="view" value="orderview"/>
-        <response name="error" type="view" value="orderview"/>
+        <response name="success" type="request-redirect" value="orderview"/>
+        <response name="error" type="request-redirect" value="orderview"/>
     </request-map>
     
     <!-- Lookup request mappings -->

Modified: ofbiz/trunk/applications/order/webapp/ordermgr/order/orderpaymentinfo.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/order/orderpaymentinfo.ftl?view=diff&rev=518702&r1=518701&r2=518702
==============================================================================
--- ofbiz/trunk/applications/order/webapp/ordermgr/order/orderpaymentinfo.ftl (original)
+++ ofbiz/trunk/applications/order/webapp/ordermgr/order/orderpaymentinfo.ftl Thu Mar 15 10:36:49 2007
@@ -340,11 +340,12 @@
          </select>
       </td>
    </tr>                    
+   <#assign openAmount = orderReadHelper.getOrderOpenAmount()>
    <tr>
       <td width="20%" align="right"><div class="tableheadtext">${uiLabelMap.AccountingAmount} </div></td>
       <td width="2%">&nbsp;</td>
       <td nowrap>
-         <input type="text" class="inputBox" name="maxAmount"/>
+         <input type="text" class="inputBox" name="maxAmount" value="${openAmount}"/>
       </td>
    </tr>
    <tr>