From 19893cf20443b9696f2eaa28df4e53fa3df1b60a Mon Sep 17 00:00:00 2001 From: Seamus Lee Date: Sun, 11 Jun 2017 14:12:09 +1000 Subject: [PATCH] CRM-20678 Fix issue where repeattransaction was creating transactions in incorrect currency --- CRM/Contribute/BAO/Contribution.php | 6 ++++++ tests/phpunit/api/v3/ContributionTest.php | 26 +++++++++++++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index 7e4cc23a42..c201c5aec1 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -4531,6 +4531,12 @@ WHERE eft.financial_trxn_id IN ({$trxnId}, {$baseTrxnId['financialTrxnId']}) 'source' => self::getRecurringContributionDescription($contribution, $event), ), array_intersect_key($input, array_fill_keys($inputContributionWhiteList, 1) )); + + // CRM-20678 Ensure that the currency is correct in subseqent transcations. + if (empty($contributionParams['currency']) && isset($objects['first_contribution']->currency)) { + $contributionParams['currency'] = $objects['first_contribution']->currency; + } + $contributionParams['payment_processor'] = $input['payment_processor'] = $paymentProcessorId; // If paymentProcessor is not set then the payment_instrument_id would not be correct. diff --git a/tests/phpunit/api/v3/ContributionTest.php b/tests/phpunit/api/v3/ContributionTest.php index 4fa292cbe5..7d81aac3af 100644 --- a/tests/phpunit/api/v3/ContributionTest.php +++ b/tests/phpunit/api/v3/ContributionTest.php @@ -3462,7 +3462,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { * * @return array */ - protected function setUpRepeatTransaction($recurParams = array(), $flag) { + protected function setUpRepeatTransaction($recurParams = array(), $flag, $contributionParams = array()) { $paymentProcessorID = $this->paymentProcessorCreate(); $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', array_merge(array( 'contact_id' => $this->_individualId, @@ -3479,8 +3479,9 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $originalContribution = ''; if ($flag == 'multiple') { // CRM-19309 create a contribution + also add in line_items (plural): + $params = array_merge($this->_params, $contributionParams); $originalContribution = $this->callAPISuccess('contribution', 'create', array_merge( - $this->_params, + $params, array( 'contribution_recur_id' => $contributionRecur['id'], 'skipLineItem' => 1, @@ -3505,10 +3506,9 @@ class api_v3_ContributionTest extends CiviUnitTestCase { ); } elseif ($flag == 'single') { - $originalContribution = $this->callAPISuccess('contribution', 'create', array_merge( - $this->_params, - array('contribution_recur_id' => $contributionRecur['id'])) - ); + $params = array_merge($this->_params, array('contribution_recur_id' => $contributionRecur['id'])); + $params = array_merge($params, $contributionParams); + $originalContribution = $this->callAPISuccess('contribution', 'create', $params); } $originalContribution['payment_processor_id'] = $paymentProcessorID; return $originalContribution; @@ -3796,4 +3796,18 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $this->assertEquals(CRM_Utils_Array::value('pan_truncation', $financialTrxn), 2345); } + /** + * Test repeat contribution uses non default currency + * @see https://issues.civicrm.org/jira/projects/CRM/issues/CRM-20678 + */ + public function testRepeatTransactionWithDifferenceCurrency() { + $originalContribution = $this->setUpRepeatTransaction(array('currency' => 'AUD'), 'single', array('currency' => 'AUD')); + $contribution = $this->callAPISuccess('contribution', 'repeattransaction', array( + 'original_contribution_id' => $originalContribution['id'], + 'contribution_status_id' => 'Completed', + 'trxn_id' => uniqid(), + )); + $this->assertEquals('AUD', $contribution['values'][$contribution['id']]['currency']); + } + } -- 2.25.1