diff --git a/CRM/Contribute/BAO/Contribution/Utils.php b/CRM/Contribute/BAO/Contribution/Utils.php index b9c0864327e2..07451ee64b5b 100644 --- a/CRM/Contribute/BAO/Contribution/Utils.php +++ b/CRM/Contribute/BAO/Contribution/Utils.php @@ -852,5 +852,24 @@ static function getFirstLastDetails($contactID) { } return $_cache[$contactID]; } + + /** + * Calculate the tax amount based on given tax rate. + * + * @param float $amount amount of field. + * @param float $taxRate tax rate of selected financial account for field. + * + * @return array array of tax amount + * + * @access public + * @static + * + */ + public static function calculateTaxAmount($amount, $taxRate) { + $taxAmount = array(); + $taxAmount['tax_amount'] = ($taxRate/100) * $amount; + + return $taxAmount; + } } diff --git a/CRM/Price/BAO/PriceField.php b/CRM/Price/BAO/PriceField.php index e9a45d77a72b..4f34da3066d1 100644 --- a/CRM/Price/BAO/PriceField.php +++ b/CRM/Price/BAO/PriceField.php @@ -283,16 +283,15 @@ public static function addQuickFormElement(&$qf, //use value field. $valueFieldName = 'amount'; $seperator = '|'; - $displayOpt = CRM_Contribute_BAO_Contribution::getContributionSettings(); - $displayOpt = $displayOpt['tax_display_settings']; + $displayOpt = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME,'contribution_invoice_settings'); + $displayOpt = CRM_Utils_Array::value('tax_display_settings', $displayOpt); switch ($field->html_type) { case 'Text': $optionKey = key($customOption); $count = CRM_Utils_Array::value('count', $customOption[$optionKey], ''); $max_value = CRM_Utils_Array::value('max_value', $customOption[$optionKey], ''); - $taxAmount = 0; - if (CRM_Utils_Array::value('tax_amount', $customOption[$optionKey])) { - $taxAmount = $customOption[$optionKey]['tax_amount']; + $taxAmount = CRM_Utils_Array::value('tax_amount', $customOption[$optionKey]); + if ($taxAmount && $displayOpt) { $qf->assign('displayOpt', $displayOpt); } $priceVal = implode($seperator, array($customOption[$optionKey][$valueFieldName] + $taxAmount, $count, $max_value)); @@ -353,11 +352,10 @@ public static function addQuickFormElement(&$qf, } foreach ($customOption as $opId => $opt) { - $taxAmount = 0; + $taxAmount = CRM_Utils_Array::value('tax_amount', $opt); if ($field->is_display_amounts) { $opt['label'] = !empty($opt['label']) ? $opt['label'] : ''; - if (CRM_Utils_Array::value('tax_amount', $opt)) { - $taxAmount = $opt['tax_amount']; + if ($taxAmount) { if ($displayOpt == 'Do_not_show') { $opt['label'] = '' . CRM_Utils_Money::format($opt[$valueFieldName] + $taxAmount) . ' ' . $opt['label'] . ''; } @@ -372,6 +370,9 @@ public static function addQuickFormElement(&$qf, } else { $opt['label'] = '' . CRM_Utils_Money::format($opt[$valueFieldName]) . ' ' . $opt['label'] . ''; + if (isset($opt['tax_amount']) && $displayOpt != 'Do_not_show') { + $opt['label'] .= ''. ts(' VAT (exempt)') .''; + } } } $count = CRM_Utils_Array::value('count', $opt, ''); @@ -445,28 +446,20 @@ public static function addQuickFormElement(&$qf, $selectOption = $allowedOptions = $priceVal = array(); foreach ($customOption as $opt) { - $taxAmount = 0; + $taxAmount = CRM_Utils_Array::value('tax_amount', $opt); $count = CRM_Utils_Array::value('count', $opt, ''); $max_value = CRM_Utils_Array::value('max_value', $opt, ''); if ($field->is_display_amounts) { $opt['label'] .= ' - '; - if (CRM_Utils_Array::value('tax_amount', $opt)) { - $taxAmount = $opt['tax_amount']; - if ($displayOpt == 'Do_not_show') { - $opt['label'] .= CRM_Utils_Money::format($opt[$valueFieldName] + $taxAmount); - } - else if ($displayOpt == 'Inclusive') { - $opt['label'] .= CRM_Utils_Money::format($opt[$valueFieldName] + $taxAmount); - $opt['label'] .= ' (includes '.round($opt['tax_rate'],2).'% VAT - ' . CRM_Utils_Money::format($taxAmount) . ')'; - } - else { - $opt['label'] .= CRM_Utils_Money::format($opt[$valueFieldName]); - $opt['label'] .= ' + '.round($opt['tax_rate'],2).'% VAT - ' . CRM_Utils_Money::format($taxAmount) . ''; - } + if ($taxAmount) { + $opt['label'] .= self::getTaxLabel($opt, $valueFieldName, $displayOpt); } else { $opt['label'] .= CRM_Utils_Money::format($opt[$valueFieldName]); + if (isset($opt['tax_amount']) && $displayOpt != 'Do_not_show') { + $opt['label'] .= ''. ts(' VAT (exempt)') .''; + } } } $selectOption[$opt['id']] = $opt['label']; @@ -497,28 +490,20 @@ public static function addQuickFormElement(&$qf, $check = array(); foreach ($customOption as $opId => $opt) { - $taxAmount = 0; + $taxAmount = CRM_Utils_Array::value('tax_amount', $opt); $count = CRM_Utils_Array::value('count', $opt, ''); $max_value = CRM_Utils_Array::value('max_value', $opt, ''); if ($field->is_display_amounts) { $opt['label'] .= ' - '; - if (CRM_Utils_Array::value('tax_amount', $opt)) { - $taxAmount = $opt['tax_amount']; - if ($displayOpt == 'Do_not_show') { - $opt['label'] .= CRM_Utils_Money::format($opt[$valueFieldName] + $taxAmount); - } - else if ($displayOpt == 'Inclusive') { - $opt['label'] .= CRM_Utils_Money::format($opt[$valueFieldName] + $taxAmount); - $opt['label'] .= ' (includes '.round($opt['tax_rate'],2).'% VAT - ' . CRM_Utils_Money::format($taxAmount) . ')'; - } - else { - $opt['label'] .= CRM_Utils_Money::format($opt[$valueFieldName]); - $opt['label'] .= ' + '.round($opt['tax_rate'],2).'% VAT - ' . CRM_Utils_Money::format($taxAmount) . ''; - } + if ($taxAmount) { + $opt['label'] .= self::getTaxLabel($opt, $valueFieldName, $displayOpt); } else { $opt['label'] .= CRM_Utils_Money::format($opt[$valueFieldName]); + if (isset($opt['tax_amount']) && $displayOpt != 'Do_not_show') { + $opt['label'] .= ''. ts(' VAT (exempt)') .''; + } } } $priceVal = implode($seperator, array($opt[$valueFieldName] + $taxAmount, $count, $max_value)); @@ -571,7 +556,7 @@ public static function getOptions($fieldId, $inactiveNeeded = FALSE, $reset = FA foreach ($options[$fieldId] as $priceFieldId => $priceFieldValues) { if (array_key_exists($priceFieldValues['financial_type_id'], $taxRates)) { $options[$fieldId][$priceFieldId]['tax_rate'] = $taxRates[$priceFieldValues['financial_type_id']]; - $taxAmount = self::calculateTaxAmount($priceFieldValues['amount'], $options[$fieldId][$priceFieldId]['tax_rate']); + $taxAmount = CRM_Contribute_BAO_Contribution_Utils::calculateTaxAmount($priceFieldValues['amount'], $options[$fieldId][$priceFieldId]['tax_rate']); $options[$fieldId][$priceFieldId]['tax_amount'] = round($taxAmount['tax_amount'],2); } } @@ -750,22 +735,32 @@ public static function priceSetValidation($priceSetId, $fields, &$error, $allowN } /** - * Calculate the tax amount based on given tax rate. + * Generate the label for price fields based on tax display setting option on CiviContribute Component Settings page. * - * @param float $amount amount of field. - * @param float $taxRate tax rate of selected financial account for field. + * @param array $opt + * @param string $valueFieldName amount + * @param string $displayOpt tax display setting option * - * @return array array of tax amount + * @return string $label tax label for custom field * * @access public * @static * */ - public static function calculateTaxAmount($amount, $taxRate) { - $taxAmount = array(); - $taxAmount['tax_amount'] = ($taxRate/100) * $amount; + public static function getTaxLabel($opt, $valueFieldName, $displayOpt) { + if ($displayOpt == 'Do_not_show') { + $label = CRM_Utils_Money::format($opt[$valueFieldName] + $opt['tax_amount']); + } + else if ($displayOpt == 'Inclusive') { + $label = CRM_Utils_Money::format($opt[$valueFieldName] + $opt['tax_amount']); + $label .= ' (includes '.round($opt['tax_rate'],2).'% VAT - ' . CRM_Utils_Money::format($opt['tax_amount']) . ')'; + } + else { + $label = CRM_Utils_Money::format($opt[$valueFieldName]); + $label .= ' + '.round($opt['tax_rate'],2).'% VAT - ' . CRM_Utils_Money::format($opt['tax_amount']) . ''; + } - return $taxAmount; + return $label; } } diff --git a/templates/CRM/Price/Form/PriceSet.tpl b/templates/CRM/Price/Form/PriceSet.tpl index 3e160917db0b..ab29bb6f4f9a 100644 --- a/templates/CRM/Price/Form/PriceSet.tpl +++ b/templates/CRM/Price/Form/PriceSet.tpl @@ -84,6 +84,9 @@ {/if} {else} {$option.amount|crmMoney} + {if $option.tax_amount == "0" && $displayOpt != 'Do_not_show'} + {ts} VAT (exempt){/ts} + {/if} {/if} {/foreach}