*/
public static function calculateTaxAmount($amount, $taxRate) {
$taxAmount = array();
- $taxAmount['tax_amount'] = round(($taxRate / 100) * CRM_Utils_Rule::cleanMoney($amount), 2);
+ // There can not be any rounding at this stage - as this is prior to quantity multiplication
+ $taxAmount['tax_amount'] = ($taxRate / 100) * CRM_Utils_Rule::cleanMoney($amount);
return $taxAmount;
}
'membership_num_terms' => $dao->membership_num_terms,
'tax_amount' => $dao->tax_amount,
);
- $lineItems[$dao->id]['tax_rate'] = CRM_Price_BAO_LineItem::calculateTaxRate($lineItems[$dao->id]);
+ $taxRates = CRM_Core_PseudoConstant::getTaxRates();
+ if (isset($lineItems[$dao->id]['financial_type_id']) && array_key_exists($lineItems[$dao->id]['financial_type_id'], $taxRates)) {
+ // We are close to output/display here - so apply some rounding at output/display level - to not show Tax Rate in it's full 8 decimals
+ $lineItems[$dao->id]['tax_rate'] = round($taxRates[$lineItems[$dao->id]['financial_type_id']], 3);
+ }
+ else {
+ // There is no Tax Rate associated with this Financial Type
+ $lineItems[$dao->id]['tax_rate'] = FALSE;
+ }
$lineItems[$dao->id]['subTotal'] = $lineItems[$dao->id]['qty'] * $lineItems[$dao->id]['unit_price'];
if ($lineItems[$dao->id]['tax_amount'] != '') {
$getTaxDetails = TRUE;
}
}
- /**
- * Calculate tax rate in percentage.
- *
- * @param array $lineItemId
- * An assoc array of lineItem.
- *
- * @return int|void
- * tax rate
- */
- public static function calculateTaxRate($lineItemId) {
- if ($lineItemId['unit_price'] == 0) {
- return FALSE;
- }
- if ($lineItemId['html_type'] == 'Text') {
- $tax = round($lineItemId['tax_amount'] / ($lineItemId['unit_price'] * $lineItemId['qty']) * 100, 2);
- }
- else {
- $tax = round(($lineItemId['tax_amount'] / $lineItemId['unit_price']) * 100, 2);
- }
- return $tax;
- }
-
}
* @return array
*/
public static function setLineItem($field, $lineItem, $optionValueId) {
+ // Here we round - i.e. after multiplying by quantity
if ($field['html_type'] == 'Text') {
- $taxAmount = $field['options'][$optionValueId]['tax_amount'] * $lineItem[$optionValueId]['qty'];
+ $taxAmount = round($field['options'][$optionValueId]['tax_amount'] * $lineItem[$optionValueId]['qty'], 2);
}
else {
- $taxAmount = $field['options'][$optionValueId]['tax_amount'];
+ $taxAmount = round($field['options'][$optionValueId]['tax_amount'], 2);
}
$taxRate = $field['options'][$optionValueId]['tax_rate'];
$lineItem[$optionValueId]['tax_amount'] = $taxAmount;
{if $getTaxDetails}
<td class="right">{$line.line_total|crmMoney}</td>
{if $line.tax_rate != "" || $line.tax_amount != ""}
- <td class="right">{$taxTerm} ({$line.tax_rate|string_format:"%.2f"}%)</td>
+ <td class="right">{$taxTerm} ({$line.tax_rate|string_format:"%.3f"}%)</td>
<td class="right">{$line.tax_amount|crmMoney}</td>
{else}
<td></td>