svn commit: r796676 - in /ofbiz/trunk/applications: accounting/servicedef/ accounting/src/org/ofbiz/accounting/payment/ accounting/src/org/ofbiz/accounting/thirdparty/verisign/ order/src/org/ofbiz/order/order/

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

svn commit: r796676 - in /ofbiz/trunk/applications: accounting/servicedef/ accounting/src/org/ofbiz/accounting/payment/ accounting/src/org/ofbiz/accounting/thirdparty/verisign/ order/src/org/ofbiz/order/order/

lektran
Author: lektran
Date: Wed Jul 22 11:35:45 2009
New Revision: 796676

URL: http://svn.apache.org/viewvc?rev=796676&view=rev
Log:
Another PayPal restriction whereby you cannot do a refund transaction for more than the capture transaction being referenced.

Fixed by having refundPayment return the amount actually refunded and using that amount in the processRefundReturn service.

Modified:
    ofbiz/trunk/applications/accounting/servicedef/services_paymentmethod.xml
    ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java
    ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/verisign/PayflowPro.java
    ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java

Modified: ofbiz/trunk/applications/accounting/servicedef/services_paymentmethod.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_paymentmethod.xml?rev=796676&r1=796675&r2=796676&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/servicedef/services_paymentmethod.xml (original)
+++ ofbiz/trunk/applications/accounting/servicedef/services_paymentmethod.xml Wed Jul 22 11:35:45 2009
@@ -355,7 +355,7 @@
             location="org.ofbiz.accounting.payment.PaymentGatewayServices" invoke="refundPayment" auth="true">
         <description>Refunds A Payment</description>
         <attribute name="orderPaymentPreference" type="org.ofbiz.entity.GenericValue" mode="IN" optional="false"/>
-        <attribute name="refundAmount" type="BigDecimal" mode="IN" optional="false"/>
+        <attribute name="refundAmount" type="BigDecimal" mode="INOUT" optional="false"/>
         <attribute name="paymentId" type="String" mode="OUT" optional="false"/>
     </service>
     
@@ -434,7 +434,7 @@
         <attribute name="payFromPartyId" type="String" mode="IN" optional="true"/>
         <attribute name="payToPartyId" type="String" mode="IN" optional="true"/>
         <attribute name="invoiceId" type="String" mode="IN" optional="true"/>
-        <attribute name="refundAmount" type="BigDecimal" mode="IN" optional="false"/>
+        <attribute name="refundAmount" type="BigDecimal" mode="INOUT" optional="false"/>
         <attribute name="currencyUomId" type="String" mode="IN" optional="true"/>
         <attribute name="refundResult" type="Boolean" mode="IN" optional="false"/>
         <attribute name="refundAltRefNum" type="String" mode="IN" optional="true"/>

Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java?rev=796676&r1=796675&r2=796676&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java (original)
+++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java Wed Jul 22 11:35:45 2009
@@ -2407,10 +2407,8 @@
 
                     // The refund amount could be different from what we tell the payment gateway due to issues
                     // such as having to void the entire original auth amount and re-authorize the new order total.
-                    // However, since some legacy services might be non-compliant, so as a safety measure we will
-                    // override the original refund amount if the refund response has a positive value
                     BigDecimal actualRefundAmount = (BigDecimal) refundResponse.get("refundAmount");
-                    if (actualRefundAmount != null && actualRefundAmount.compareTo(BigDecimal.ZERO) > 0) {
+                    if (actualRefundAmount != null && actualRefundAmount.compareTo(processAmount) != 0) {
                         refundResCtx.put("refundAmount", refundResponse.get("refundAmount"));
                     }
                     refundResRes = dispatcher.runSync(model.name, refundResCtx);
@@ -2524,6 +2522,7 @@
 
             Map<String, Object> result = ServiceUtil.returnSuccess();
             result.put("paymentId", paymentId);
+            result.put("refundAmount", context.get("refundAmount"));
             return result;
         } else {
             return ServiceUtil.returnFailure("The refund failed");

Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/verisign/PayflowPro.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/verisign/PayflowPro.java?rev=796676&r1=796675&r2=796676&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/verisign/PayflowPro.java (original)
+++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/thirdparty/verisign/PayflowPro.java Wed Jul 22 11:35:45 2009
@@ -373,6 +373,9 @@
             data.put("TENDER", "P");
 
             data.put("MEMO", orderId);
+            // PayPal won't allow us to refund more than the capture amount
+            BigDecimal captureAmount = captureTrans.getBigDecimal("amount");
+            amount = amount.min(captureAmount);
         } else {
             // credit card tender
             data.put("TENDER", "C");

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java?rev=796676&r1=796675&r2=796676&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReturnServices.java Wed Jul 22 11:35:45 2009
@@ -1284,7 +1284,7 @@
                     BigDecimal orderPayPrefAvailableTotal = orderPayPrefReceivedTotal.subtract(orderPayPrefRefundedTotal);
 
                     // add the refundable amount and orderPaymentPreference to the paymentMethodTypeId map
-                    if (orderPayPrefAvailableTotal.compareTo(ZERO) == 1) {
+                    if (orderPayPrefAvailableTotal.compareTo(ZERO) > 0) {
                         Map orderPayPrefDetails = new HashMap();
                         orderPayPrefDetails.put("orderPaymentPreference", orderPayPref);
                         orderPayPrefDetails.put("availableTotal", orderPayPrefAvailableTotal);
@@ -1345,6 +1345,8 @@
 
                             // Refund up to the maxAmount for the paymentPref, or whatever is left to refund if that's less than the maxAmount
                             BigDecimal amountToRefund = orderPaymentPreferenceAvailable.min(amountLeftToRefund);
+                            // The amount actually refunded for the paymentPref, default to requested amount
+                            BigDecimal amountRefunded = amountToRefund;
 
                             String paymentId = null;
                             String returnItemStatusId = "RETURN_COMPLETED";  // generally, the return item will be considered complete after this
@@ -1358,6 +1360,7 @@
                                         continue;
                                     }
                                     paymentId = (String) serviceResult.get("paymentId");
+                                    amountRefunded = (BigDecimal) serviceResult.get("refundAmount");
                                 } catch (GenericServiceException e) {
                                     Debug.logError(e, "Problem running the refundPayment service", module);
                                     return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderProblemsWithTheRefundSeeLogs", locale));
@@ -1402,7 +1405,7 @@
                             // Fill out the data for the new ReturnItemResponse
                             Map response = FastMap.newInstance();
                             response.put("orderPaymentPreferenceId", orderPaymentPreference.getString("orderPaymentPreferenceId"));
-                            response.put("responseAmount", amountToRefund.setScale(decimals, rounding));
+                            response.put("responseAmount", amountRefunded.setScale(decimals, rounding));
                             response.put("responseDate", now);
                             response.put("userLogin", userLogin);
                             response.put("paymentId", paymentId);
@@ -1454,7 +1457,7 @@
                             }
 
                             // Update the amount necessary to refund
-                            amountLeftToRefund = amountLeftToRefund.subtract(amountToRefund);
+                            amountLeftToRefund = amountLeftToRefund.subtract(amountRefunded);
                         }
                     }
                 }