Merge pull request #17981 from eileenmcnaughton/merge_form
[civicrm-core.git] / CRM / Financial / BAO / Payment.php
index 1101aab35ed3d9242f0cdaf1f536e5eebf9397a9..f841363f141ff6c8979f67f86e37fb8a99146c80 100644 (file)
@@ -79,6 +79,21 @@ class CRM_Financial_BAO_Payment {
       $paymentTrxnParams['status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Refunded');
     }
 
+    //If Payment is recorded on Failed contribution, update it to Pending.
+    if ($contributionStatus === 'Failed' && $params['total_amount'] > 0) {
+      //Enter a financial trxn to record a payment in receivable account
+      //as failed transaction does not insert any trxn values. Hence, if Payment is
+      //recorded on a failed contribution, the transition happens from Failed -> Pending -> Completed.
+      $ftParams = array_merge($paymentTrxnParams, [
+        'from_financial_account_id' => NULL,
+        'to_financial_account_id' => $accountsReceivableAccount,
+        'is_payment' => 0,
+        'status_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending'),
+      ]);
+      CRM_Core_BAO_FinancialTrxn::create($ftParams);
+      $contributionStatus = 'Pending';
+      self::updateContributionStatus($contribution['id'], $contributionStatus);
+    }
     $trxn = CRM_Core_BAO_FinancialTrxn::create($paymentTrxnParams);
 
     if ($params['total_amount'] < 0 && !empty($params['cancelled_payment_id'])) {