- if (array_key_exists('payment_instrument_id', $params)) {
- $params['trxnParams']['total_amount'] = -$trxnParams['total_amount'];
- if (CRM_Utils_System::isNull($params['prevContribution']->payment_instrument_id) &&
- !CRM_Utils_System::isNull($params['contribution']->payment_instrument_id)
- ) {
- //check if status is changed from Pending to Completed
- // do not update payment instrument changes for Pending to Completed
- if (!($params['contribution']->contribution_status_id == array_search('Completed', $contributionStatuses) &&
- in_array($params['prevContribution']->contribution_status_id, $pendingStatus))
- ) {
- // for all other statuses create new financial records
- self::updateFinancialAccounts($params, 'changePaymentInstrument');
- $params['total_amount'] = $params['trxnParams']['total_amount'] = $trxnParams['total_amount'];
- self::updateFinancialAccounts($params, 'changePaymentInstrument');
- $updated = TRUE;
- }
- }
- elseif ((!CRM_Utils_System::isNull($params['contribution']->payment_instrument_id) ||
- !CRM_Utils_System::isNull($params['prevContribution']->payment_instrument_id)) &&
- $params['contribution']->payment_instrument_id != $params['prevContribution']->payment_instrument_id
- ) {
- // for any other payment instrument changes create new financial records
- self::updateFinancialAccounts($params, 'changePaymentInstrument');
- $params['total_amount'] = $params['trxnParams']['total_amount'] = $trxnParams['total_amount'];
- self::updateFinancialAccounts($params, 'changePaymentInstrument');
- $updated = TRUE;
- }
- elseif (!CRM_Utils_System::isNull($params['contribution']->check_number) &&
- $params['contribution']->check_number != $params['prevContribution']->check_number
- ) {
- // another special case when check number is changed, create new financial records
- // create financial trxn with negative amount
- $params['trxnParams']['check_number'] = $params['prevContribution']->check_number;
- self::updateFinancialAccounts($params, 'changePaymentInstrument');
- // create financial trxn with positive amount
- $params['trxnParams']['check_number'] = $params['contribution']->check_number;
- $params['total_amount'] = $params['trxnParams']['total_amount'] = $trxnParams['total_amount'];
- self::updateFinancialAccounts($params, 'changePaymentInstrument');
- $updated = TRUE;
- }