From: Pradeep Nayak Date: Thu, 22 Dec 2016 15:24:04 +0000 (+0530) Subject: CRM-19585, created unction to calculate financial item amount when contribution is... X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=d9553c2ef6336c9d42a249696546d154ed1bcadb;p=civicrm-core.git CRM-19585, created unction to calculate financial item amount when contribution is updated Added test ---------------------------------------- * CRM-19585: Sales tax issue https://issues.civicrm.org/jira/browse/CRM-19585 --- diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index d1cbe5b895..bb4e453faf 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -5336,4 +5336,35 @@ LEFT JOIN civicrm_contribution on (civicrm_contribution.contact_id = civicrm_co $trxnParams['from_financial_account_id'] = $params['to_financial_account_id']; } + /** + * Calculate financial item amount when contribution is updated. + * + * @param array $params + * contribution params + * @param array $amountParams + * + * @param string $context + * + * @return float + */ + public static function calculateFinancialItemAmount($params, $amountParams, $context) { + if (!empty($params['is_quick_config'])) { + $amount = $amountParams['item_amount']; + if (!$amount) { + $amount = $params['total_amount']; + if ($context === NULL) { + $amount -= CRM_Utils_Array::value('tax_amount', $params, 0); + } + } + } + else { + $amount = $amountParams['line_total']; + if ($context == 'changedAmount') { + $amount -= $amountParams['previous_line_total']; + } + $amount *= $amountParams['diff']; + } + return $amount; + } + } diff --git a/tests/phpunit/CRM/Contribute/BAO/ContributionTest.php b/tests/phpunit/CRM/Contribute/BAO/ContributionTest.php index 532cb98af6..b03ab25496 100644 --- a/tests/phpunit/CRM/Contribute/BAO/ContributionTest.php +++ b/tests/phpunit/CRM/Contribute/BAO/ContributionTest.php @@ -937,4 +937,72 @@ WHERE eft.entity_id = %1 AND ft.to_financial_account_id <> %2"; $this->assertFalse($allowUpdate); } + /** + * Test calculateFinancialItemAmount(). + */ + public function testcalculateFinancialItemAmount() { + $testParams = array( + array( + 'params' => array(), + 'amountParams' => array( + 'line_total' => 100, + 'previous_line_total' => 300, + 'diff' => 1, + ), + 'context' => 'changedAmount', + 'expectedItemAmount' => -200, + ), + array( + 'params' => array(), + 'amountParams' => array( + 'line_total' => 100, + 'previous_line_total' => 100, + 'diff' => -1, + ), + 'context' => 'changePaymentInstrument', + 'expectedItemAmount' => -100, + ), + array( + 'params' => array( + 'is_quick_config' => TRUE, + 'total_amount' => 110, + 'tax_amount' => 10, + ), + 'amountParams' => array( + 'item_amount' => 100, + ), + 'context' => 'changedAmount', + 'expectedItemAmount' => 100, + ), + array( + 'params' => array( + 'is_quick_config' => TRUE, + 'total_amount' => 110, + 'tax_amount' => 10, + ), + 'amountParams' => array( + 'item_amount' => NULL, + ), + 'context' => 'changedAmount', + 'expectedItemAmount' => 110, + ), + array( + 'params' => array( + 'is_quick_config' => TRUE, + 'total_amount' => 110, + 'tax_amount' => 10, + ), + 'amountParams' => array( + 'item_amount' => NULL, + ), + 'context' => NULL, + 'expectedItemAmount' => 100, + ), + ); + foreach ($testParams as $params) { + $itemAmount = CRM_Contribute_BAO_Contribution::calculateFinancialItemAmount($params['params'], $params['amountParams'], $params['context']); + $this->assertEquals($itemAmount, $params['expectedItemAmount'], 'Invalid Financial Item amount.'); + } + } + }