From d8494806424168caaa98a9584abe312996aa332a Mon Sep 17 00:00:00 2001 From: eileenmcnaughton Date: Wed, 16 Dec 2015 16:00:34 +0000 Subject: [PATCH] CRM-17718 update repeattransaction api action to give precedence to contribution_recur for campaign id --- CRM/Core/Payment/BaseIPN.php | 3 + api/v3/Contribution.php | 10 +++ tests/phpunit/api/v3/ContributionTest.php | 85 +++++++++++++++++++++-- 3 files changed, 92 insertions(+), 6 deletions(-) diff --git a/CRM/Core/Payment/BaseIPN.php b/CRM/Core/Payment/BaseIPN.php index fa5651d089..ff38d3413e 100644 --- a/CRM/Core/Payment/BaseIPN.php +++ b/CRM/Core/Payment/BaseIPN.php @@ -646,6 +646,9 @@ LIMIT 1;"; if (!empty($input['campaign_id'])) { $contribution->campaign_id = $input['campaign_id']; } + elseif (!empty($recurContrib->campaign_id)) { + $contribution->campaign_id = $recurContrib->campaign_id; + } } $contributionStatuses = CRM_Core_PseudoConstant::get('CRM_Contribute_DAO_Contribution', 'contribution_status_id', array( diff --git a/api/v3/Contribution.php b/api/v3/Contribution.php index 664ab8e4b6..19a915db42 100644 --- a/api/v3/Contribution.php +++ b/api/v3/Contribution.php @@ -596,6 +596,16 @@ function _civicrm_api3_contribution_repeattransaction_spec(&$params) { 'name' => 'trxn_id', 'type' => CRM_Utils_Type::T_STRING, ); + $params['campaign_id'] = array( + 'title' => 'Campaign ID', + 'name' => 'campaign_id', + 'type' => CRM_Utils_Type::T_INT, + 'pseudoconstant' => array( + 'table' => 'civicrm_campaign', + 'keyColumn' => 'id', + 'labelColumn' => 'title', + ), + ); $params['payment_processor_id'] = array( 'description' => ts('Payment processor ID, will be loaded from contribution_recur if not provided'), 'title' => 'Payment processor ID', diff --git a/tests/phpunit/api/v3/ContributionTest.php b/tests/phpunit/api/v3/ContributionTest.php index 81cef9fc56..9df3baf52b 100644 --- a/tests/phpunit/api/v3/ContributionTest.php +++ b/tests/phpunit/api/v3/ContributionTest.php @@ -1418,8 +1418,6 @@ class api_v3_ContributionTest extends CiviUnitTestCase { */ public function testRepeatTransactionAlteredAmount() { $paymentProcessorID = $this->paymentProcessorCreate(); - $campaignID = $this->campaignCreate(); - $campaignID2 = $this->campaignCreate(); $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', array( 'contact_id' => $this->_individualId, 'installments' => '12', @@ -1435,7 +1433,6 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $this->_params, array( 'contribution_recur_id' => $contributionRecur['id'], - 'campaign_id' => $campaignID, )) ); @@ -1445,7 +1442,6 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'trxn_id' => uniqid(), 'total_amount' => '400', 'fee_amount' => 50, - 'campaign_id' => $campaignID2, )); $lineItemParams = array( 'entity_id' => $originalContribution['id'], @@ -1464,7 +1460,6 @@ class api_v3_ContributionTest extends CiviUnitTestCase { ); $this->callAPISuccessGetSingle('contribution', array( 'total_amount' => 400, - 'campaign_id' => $campaignID2, 'fee_amount' => 50, 'net_amount' => 350, )); @@ -1484,8 +1479,86 @@ class api_v3_ContributionTest extends CiviUnitTestCase { unset($expectedLineItem['id'], $expectedLineItem['entity_id']); unset($lineItem2['values'][0]['id'], $lineItem2['values'][0]['entity_id']); $this->assertEquals($expectedLineItem, $lineItem2['values'][0]); + } - $this->quickCleanUpFinancialEntities(); + /** + * CRM-16397 test appropriate action if total amount has changed for single line items. + */ + public function testRepeatTransactionPassedInCampaign() { + $paymentProcessorID = $this->paymentProcessorCreate(); + $campaignID = $this->campaignCreate(); + $campaignID2 = $this->campaignCreate(); + $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', array( + 'contact_id' => $this->_individualId, + 'installments' => '12', + 'frequency_interval' => '1', + 'amount' => '100', + 'contribution_status_id' => 1, + 'start_date' => '2012-01-01 00:00:00', + 'currency' => 'USD', + 'frequency_unit' => 'month', + 'payment_processor_id' => $paymentProcessorID, + )); + $originalContribution = $this->callAPISuccess('contribution', 'create', array_merge( + $this->_params, + array( + 'contribution_recur_id' => $contributionRecur['id'], + 'campaign_id' => $campaignID, + )) + ); + + $this->callAPISuccess('contribution', 'repeattransaction', array( + 'original_contribution_id' => $originalContribution['id'], + 'contribution_status_id' => 'Completed', + 'trxn_id' => uniqid(), + 'campaign_id' => $campaignID2, + )); + + $this->callAPISuccessGetSingle('contribution', array( + 'total_amount' => 100, + 'campaign_id' => $campaignID2, + )); + } + + /** + * CRM-17718 campaign stored on contribution recur gets priority. + * + * This reflects the fact we permit people to update them. + */ + public function testRepeatTransactionUpdatedCampaign() { + $paymentProcessorID = $this->paymentProcessorCreate(); + $campaignID = $this->campaignCreate(); + $campaignID2 = $this->campaignCreate(); + $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', array( + 'contact_id' => $this->_individualId, + 'installments' => '12', + 'frequency_interval' => '1', + 'amount' => '100', + 'contribution_status_id' => 1, + 'start_date' => '2012-01-01 00:00:00', + 'currency' => 'USD', + 'frequency_unit' => 'month', + 'payment_processor_id' => $paymentProcessorID, + 'campaign_id' => $campaignID, + )); + $originalContribution = $this->callAPISuccess('contribution', 'create', array_merge( + $this->_params, + array( + 'contribution_recur_id' => $contributionRecur['id'], + 'campaign_id' => $campaignID2, + )) + ); + + $this->callAPISuccess('contribution', 'repeattransaction', array( + 'original_contribution_id' => $originalContribution['id'], + 'contribution_status_id' => 'Completed', + 'trxn_id' => uniqid(), + )); + + $this->callAPISuccessGetSingle('contribution', array( + 'total_amount' => 100, + 'campaign_id' => $campaignID, + )); } /** -- 2.25.1