X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FFinancial%2FBAO%2FPayment.php;h=d08e9c827df1d388fe61780ce9a4fb1ced10bb3b;hb=fbc5b5bff9259dc481009153492476922802f49d;hp=e743d2d796851b6e7983565a65cb1345fdc4b371;hpb=144dacf19067161923f93ddd7178bb938b04c969;p=civicrm-core.git diff --git a/CRM/Financial/BAO/Payment.php b/CRM/Financial/BAO/Payment.php index e743d2d796..d08e9c827d 100644 --- a/CRM/Financial/BAO/Payment.php +++ b/CRM/Financial/BAO/Payment.php @@ -51,6 +51,7 @@ class CRM_Financial_BAO_Payment { * * @throws \API_Exception * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public static function create($params) { $contribution = civicrm_api3('Contribution', 'getsingle', ['id' => $params['contribution_id']]); @@ -104,11 +105,24 @@ class CRM_Financial_BAO_Payment { } if ($isPaymentCompletesContribution) { - civicrm_api3('Contribution', 'completetransaction', ['id' => $contribution['id']]); - // Get the trxn - $trxnId = CRM_Core_BAO_FinancialTrxn::getFinancialTrxnId($contribution['id'], 'DESC'); - $ftParams = ['id' => $trxnId['financialTrxnId']]; - $trxn = CRM_Core_BAO_FinancialTrxn::retrieve($ftParams, CRM_Core_DAO::$_nullArray); + if ($contributionStatus == 'Pending refund') { + // Ideally we could still call completetransaction as non-payment related actions should + // be outside this class. However, for now we just update the contribution here. + // Unit test cover in CRM_Event_BAO_AdditionalPaymentTest::testTransactionInfo. + civicrm_api3('Contribution', 'create', + [ + 'id' => $contribution['id'], + 'contribution_status_id' => 'Completed', + ] + ); + } + else { + civicrm_api3('Contribution', 'completetransaction', ['id' => $contribution['id']]); + // Get the trxn + $trxnId = CRM_Core_BAO_FinancialTrxn::getFinancialTrxnId($contribution['id'], 'DESC'); + $ftParams = ['id' => $trxnId['financialTrxnId']]; + $trxn = CRM_Core_BAO_FinancialTrxn::retrieve($ftParams, CRM_Core_DAO::$_nullArray); + } } elseif ($contributionStatus === 'Pending') { civicrm_api3('Contribution', 'create', @@ -118,7 +132,7 @@ class CRM_Financial_BAO_Payment { ] ); } - + CRM_Contribute_BAO_Contribution::recordPaymentActivity($params['contribution_id'], CRM_Utils_Array::value('participant_id', $params), $params['total_amount'], $trxn->currency, $trxn->trxn_date); return $trxn; } @@ -305,7 +319,7 @@ class CRM_Financial_BAO_Payment { * * @return CRM_Financial_DAO_FinancialTrxn */ - public static function recordRefundPayment($contributionId, $trxnData, $updateStatus) { + protected static function recordRefundPayment($contributionId, $trxnData, $updateStatus) { list($contributionDAO, $params) = self::getContributionAndParamsInFormatForRecordFinancialTransaction($contributionId); $params['payment_instrument_id'] = CRM_Utils_Array::value('payment_instrument_id', $trxnData, CRM_Utils_Array::value('payment_instrument_id', $params)); @@ -335,7 +349,10 @@ class CRM_Financial_BAO_Payment { if ($lineItemValue['qty'] == 0) { continue; } - $paid = $lineItemValue['line_total'] * ($financialTrxn->total_amount / $contributionDAO->total_amount); + $paid = $financialTrxn->total_amount; + if (!empty(floatval($contributionDAO->total_amount))) { + $paid = $lineItemValue['line_total'] * ($financialTrxn->total_amount / $contributionDAO->total_amount); + } $addFinancialEntry = [ 'transaction_date' => $financialTrxn->trxn_date, 'contact_id' => $contributionDAO->contact_id,