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}