Skip to content

Commit

Permalink
Merge pull request #18271 from eileenmcnaughton/tax529
Browse files Browse the repository at this point in the history
dev/core#1972 Fix tax_amount calclation on renewal form
  • Loading branch information
seamuslee001 authored Aug 28, 2020
2 parents 1b314d7 + dd118b1 commit 85381a5
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 5 deletions.
20 changes: 17 additions & 3 deletions CRM/Financial/BAO/Order.php
Original file line number Diff line number Diff line change
Expand Up @@ -236,18 +236,17 @@ protected function calculateLineItems(): array {
$lineItems[$valueID] = CRM_Price_BAO_PriceSet::getLine($params, $throwAwayArray, $this->getPriceSetID(), $this->getPriceFieldSpec($fieldID), $fieldID, 0)[1][$valueID];
}

$taxRates = CRM_Core_PseudoConstant::getTaxRates();
foreach ($lineItems as &$lineItem) {
// Set any pre-calculation to zero as we will calculate.
$lineItem['tax_amount'] = 0;
if ($this->getOverrideFinancialTypeID() !== FALSE) {
$lineItem['financial_type_id'] = $this->getOverrideFinancialTypeID();
}
$taxRate = $taxRates[$lineItem['financial_type_id']] ?? 0;
$taxRate = $this->getTaxRate((int) $lineItem['financial_type_id']);
if ($this->getOverrideTotalAmount() !== FALSE) {
if ($taxRate) {
// Total is tax inclusive.
$lineItem['tax_amount'] = ($taxRate / 100) * $this->getOverrideTotalAmount();
$lineItem['tax_amount'] = ($taxRate / 100) * $this->getOverrideTotalAmount() / (1 + ($taxRate / 100));
$lineItem['line_total'] = $lineItem['unit_price'] = $this->getOverrideTotalAmount() - $lineItem['tax_amount'];
}
else {
Expand Down Expand Up @@ -276,4 +275,19 @@ public function getTotalTaxAmount() :float {
return $amount;
}

/**
* Get the tax rate for the given financial type.
*
* @param int $financialTypeID
*
* @return float
*/
public function getTaxRate(int $financialTypeID) {
$taxRates = CRM_Core_PseudoConstant::getTaxRates();
if (!isset($taxRates[$financialTypeID])) {
return 0;
}
return $taxRates[$financialTypeID];
}

}
4 changes: 2 additions & 2 deletions tests/phpunit/CRM/Member/Form/MembershipRenewalTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ public function testSubmitWithTax() {
],
'credit_card_type' => 'Visa',
'billing_first_name' => 'Test',
'billing_middlename' => 'Last',
'billing_middle_name' => 'Last',
'billing_street_address-5' => '10 Test St',
'billing_city-5' => 'Test',
'billing_state_province_id-5' => '1003',
Expand All @@ -250,7 +250,7 @@ public function testSubmitWithTax() {
]);
$contribution = $this->callAPISuccessGetSingle('Contribution', ['contact_id' => $this->_individualId, 'is_test' => TRUE, 'return' => ['total_amount', 'tax_amount']]);
$this->assertEquals(50, $contribution['total_amount']);
$this->assertEquals(5, $contribution['tax_amount']);
$this->assertEquals(4.55, $contribution['tax_amount']);
}

/**
Expand Down

0 comments on commit 85381a5

Please sign in to comment.