CRM-16926 complete recurring transactions when payment_status_id = 1,
authorEileen McNaughton <eileen@fuzion.co.nz>
Tue, 28 Jul 2015 21:21:50 +0000 (09:21 +1200)
committerEileen McNaughton <eileen@fuzion.co.nz>
Tue, 28 Jul 2015 21:21:50 +0000 (09:21 +1200)
 carefully to grandfather in

CRM/Contribute/BAO/Contribution/Utils.php
api/v3/Contribution.php

index 174e12218128529a888914148a5e1c8ace66c7bf..8b390fab83b6c95c8c93e8d1893d1ceb77d17e42 100644 (file)
@@ -345,9 +345,24 @@ class CRM_Contribute_BAO_Contribution_Utils {
       return $membershipResult;
     }
 
-    //Do not send an email if Recurring contribution is done via Direct Mode
-    //We will send email once the IPN is received.
+    //  Email is done when the payment is completed (now or later)
+    // by completetransaction, rather than the form.
+    // We are moving towards it being done for all payment methods in completetransaction.
     if (!empty($paymentParams['is_recur']) && $form->_contributeMode == 'direct') {
+      if (CRM_Utils_Array::value('payment_status_id', $result) == 1) {
+        try {
+          civicrm_api3('contribution', 'completetransaction', array(
+            'id' => $contribution->id,
+            'trxn_id' => CRM_Utils_Array::value('trxn_id', $result),
+            'is_transactional' => FALSE,
+          ));
+        }
+        catch (CiviCRM_API3_Exception $e) {
+          if ($e->getErrorCode() != 'contribution_completed') {
+            throw new CRM_Core_Exception('Failed to update contribution in database');
+          }
+        }
+      }
       return TRUE;
     }
 
index b19302837e08137739c1af25341a03fa272f1b6f..8d1df05359b2bb13a6b625b74d73d6aaf4ebb5f1 100644 (file)
@@ -423,19 +423,16 @@ function civicrm_api3_contribution_completetransaction(&$params) {
   if (!$contribution->id == $params['id']) {
     throw new API_Exception('A valid contribution ID is required', 'invalid_data');
   }
-  try {
-    if (!$contribution->loadRelatedObjects($input, $ids, FALSE, TRUE)) {
-      throw new API_Exception('failed to load related objects');
-    }
-    elseif ($contribution->contribution_status_id == CRM_Core_OptionGroup::getValue('contribution_status', 'Completed', 'name')) {
-      throw new API_Exception(ts('Contribution already completed'));
-    }
-    $input['trxn_id'] = !empty($params['trxn_id']) ? $params['trxn_id'] : $contribution->trxn_id;
-    $params = _ipn_process_transaction($params, $contribution, $input, $ids);
+
+  if (!$contribution->loadRelatedObjects($input, $ids, FALSE, TRUE)) {
+    throw new API_Exception('failed to load related objects');
   }
-  catch(Exception $e) {
-    throw new API_Exception('failed to load related objects' . $e->getMessage() . "\n" . $e->getTraceAsString());
+  elseif ($contribution->contribution_status_id == CRM_Core_OptionGroup::getValue('contribution_status', 'Completed', 'name')) {
+    throw new API_Exception(ts('Contribution already completed'), 'contribution_completed');
   }
+  $input['trxn_id'] = !empty($params['trxn_id']) ? $params['trxn_id'] : $contribution->trxn_id;
+  $params = _ipn_process_transaction($params, $contribution, $input, $ids);
+
 }
 
 /**