svn commit: r832678 - /ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java

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

svn commit: r832678 - /ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java

ashish-18
Author: ashish
Date: Wed Nov  4 08:27:44 2009
New Revision: 832678

URL: http://svn.apache.org/viewvc?rev=832678&view=rev
Log:
Applied patch from jira issue - OFBIZ-3140 - Process payment notification from Google Checkout in ofbiz.
Process payment notification of Authorization, Capture and Refund from Google Checkout in ofbiz.

Thanks Pranay / Arun for the contribution.

Modified:
    ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java

Modified: ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java?rev=832678&r1=832677&r2=832678&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java (original)
+++ ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java Wed Nov  4 08:27:44 2009
@@ -137,20 +137,94 @@
     }
     
     public void processAuthNotification(AuthorizationAmountNotification info) throws GeneralException {
-        // TODO implement me (if desired)
-        return; // the notification will be accepted                        
+        String externalId = info.getGoogleOrderNumber();
+        List<GenericValue> orders = null;
+        GenericValue orderPaymentPreference = null;
+        try {
+            orders = delegator.findByAnd("OrderHeader", UtilMisc.toMap("externalId", externalId, "salesChannelEnumId", SALES_CHANNEL));
+        } catch (GenericEntityException e) {
+            Debug.logError(e, module);
+        }
+        if (UtilValidate.isNotEmpty(orders)) {
+            GenericValue order = EntityUtil.getFirst(orders);
+            List<GenericValue> orderPaymentPreferences = order.getRelated("OrderPaymentPreference");
+            if (UtilValidate.isNotEmpty(orderPaymentPreferences)) {
+                orderPaymentPreference = EntityUtil.getFirst(orderPaymentPreferences);
+                BigDecimal maxAmount = new BigDecimal(info.getAuthorizationAmount());
+                //Update orderPaymentPreference
+                Map<String, Object> paymentPrefMap = UtilMisc.toMap("orderPaymentPreferenceId", orderPaymentPreference.get("orderPaymentPreferenceId"), "maxAmount", maxAmount, "statusId", "PAYMENT_AUTHORIZED", "paymentMethodTypeId", "EXT_GOOGLE_CHECKOUT");
+                updatePaymentPreference(paymentPrefMap);
+                //Create PaymentGatewayResponse
+                Map<String, Object> newGatewayMap = UtilMisc.toMap("amount", maxAmount, "transCodeEnumId", "PGT_AUTHORIZE", "referenceNum", externalId, "gatewayAvsResult", info.getAvsResponse(), "currencyUomId", info.getCurrencyCode());
+                newGatewayMap.put("orderPaymentPreferenceId", orderPaymentPreference.get("orderPaymentPreferenceId"));
+                newGatewayMap.put("paymentMethodTypeId", orderPaymentPreference.get("paymentMethodTypeId"));
+                newGatewayMap.put("transactionDate", order.getTimestamp("orderDate"));
+                createPaymentGatewayResponse(newGatewayMap);
+            }
+        }
+        return;
     }
-    
+
     public void processChargeNotification(ChargeAmountNotification info) throws GeneralException {
-        // TODO: implement me (if desired)
-        return; // the notification will be accepted
+        String externalId = info.getGoogleOrderNumber();
+        List<GenericValue> orders = null;
+        GenericValue orderPaymentPreference = null;
+        try {
+            orders = delegator.findByAnd("OrderHeader", UtilMisc.toMap("externalId", externalId, "salesChannelEnumId", SALES_CHANNEL));
+        } catch (GenericEntityException e) {
+            Debug.logError(e, module);
+        }
+        if (UtilValidate.isNotEmpty(orders)) {
+            GenericValue order = EntityUtil.getFirst(orders);
+            List<GenericValue> orderPaymentPreferences = order.getRelated("OrderPaymentPreference");
+            if (UtilValidate.isNotEmpty(orderPaymentPreferences)) {
+                orderPaymentPreference = EntityUtil.getFirst(orderPaymentPreferences);
+                BigDecimal maxAmount = new BigDecimal(info.getTotalChargeAmount());
+                //Update orderPaymentPreference
+                Map<String, Object> paymentPrefMap = UtilMisc.toMap("orderPaymentPreferenceId", orderPaymentPreference.get("orderPaymentPreferenceId"), "maxAmount", maxAmount, "statusId", "PAYMENT_SETTLED", "paymentMethodTypeId", "EXT_GOOGLE_CHECKOUT");
+                updatePaymentPreference(paymentPrefMap);
+                //Create PaymentGatewayResponse
+                maxAmount = new BigDecimal(info.getLatestChargeAmount());
+                Map<String, Object> newGatewayMap = UtilMisc.toMap("amount", maxAmount, "transCodeEnumId", "PGT_CAPTURE", "referenceNum", externalId, "currencyUomId", info.getCurrencyCode());
+                newGatewayMap.put("orderPaymentPreferenceId", orderPaymentPreference.get("orderPaymentPreferenceId"));
+                newGatewayMap.put("paymentMethodTypeId", orderPaymentPreference.get("paymentMethodTypeId"));
+                newGatewayMap.put("transactionDate", order.getTimestamp("orderDate"));
+                createPaymentGatewayResponse(newGatewayMap);
+            }
+        }
+        return;
     }
-    
+
     public void processRefundNotification(RefundAmountNotification info) throws GeneralException {
-        // TODO: implement me (if desired)
-        return; // the notification will be accepted
+        String externalId = info.getGoogleOrderNumber();
+        List<GenericValue> orders = null;
+        GenericValue orderPaymentPreference = null;
+        try {
+            orders = delegator.findByAnd("OrderHeader", UtilMisc.toMap("externalId", externalId, "salesChannelEnumId", SALES_CHANNEL));
+        } catch (GenericEntityException e) {
+            Debug.logError(e, module);
+        }
+        if (UtilValidate.isNotEmpty(orders)) {
+            GenericValue order = EntityUtil.getFirst(orders);
+            List<GenericValue> orderPaymentPreferences = order.getRelated("OrderPaymentPreference");
+            if (UtilValidate.isNotEmpty(orderPaymentPreferences)) {
+                orderPaymentPreference = EntityUtil.getFirst(orderPaymentPreferences);
+                BigDecimal maxAmount = new BigDecimal(info.getTotalRefundAmount());
+                //Update orderPaymentPreference
+                Map<String, Object> paymentPrefMap = UtilMisc.toMap("orderPaymentPreferenceId", orderPaymentPreference.get("orderPaymentPreferenceId"), "maxAmount", maxAmount, "statusId", "PAYMENT_REFUNDED", "paymentMethodTypeId", "EXT_GOOGLE_CHECKOUT");
+                updatePaymentPreference(paymentPrefMap);
+                //Create PaymentGatewayResponse
+                maxAmount = new BigDecimal(info.getLatestRefundAmount());
+                Map<String, Object> newGatewayMap = UtilMisc.toMap("amount", maxAmount, "transCodeEnumId", "PGT_REFUND", "referenceNum", externalId, "currencyUomId", info.getCurrencyCode());
+                newGatewayMap.put("orderPaymentPreferenceId", orderPaymentPreference.get("orderPaymentPreferenceId"));
+                newGatewayMap.put("paymentMethodTypeId", orderPaymentPreference.get("paymentMethodTypeId"));
+                newGatewayMap.put("transactionDate", order.getTimestamp("orderDate"));
+                createPaymentGatewayResponse(newGatewayMap);
+            }
+        }
+        return;
     }
-    
+
     public void processChargeBackNotification(ChargebackAmountNotification info) throws GeneralException {
         // TODO: implement me (if desired)
         return; // the notification will be accepted
@@ -606,4 +680,29 @@
         }
         return UtilValidate.isNotEmpty(holdOrderNotes);
     }
+
+    protected void updatePaymentPreference(Map<String, Object> paymentPrefMap) {
+        GenericValue newPref = delegator.makeValue("OrderPaymentPreference");
+        newPref.set("orderPaymentPreferenceId", paymentPrefMap.get("orderPaymentPreferenceId"));
+        newPref.set("createdByUserLogin", system.getString("userLoginId"));
+        newPref.setNonPKFields(paymentPrefMap);
+        try {
+            delegator.store(newPref);
+        } catch (GenericEntityException e) {
+            Debug.logError(e, module);
+        }
+    }
+
+    protected void createPaymentGatewayResponse(Map<String, Object> newGatewayMap) {
+        try {
+            String responseId = delegator.getNextSeqId("PaymentGatewayResponse");
+            GenericValue response = delegator.makeValue("PaymentGatewayResponse");
+            response.set("paymentGatewayResponseId", responseId);
+            response.setNonPKFields(newGatewayMap);
+            delegator.create(response);
+        } catch (GenericEntityException e) {
+            Debug.logError(e, module);
+        }
+    }
+
 }
\ No newline at end of file