$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 {
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];
+ }
+
}
],
'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',
]);
$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']);
}
/**