<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.4 |
+ | CiviCRM version 4.5 |
+--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2013 |
+ | Copyright CiviCRM LLC (c) 2004-2014 |
+--------------------------------------------------------------------+
| This file is a part of CiviCRM. |
| |
/**
*
* @package CRM
- * @copyright CiviCRM LLC (c) 2004-2013
+ * @copyright CiviCRM LLC (c) 2004-2014
* $Id$
*
*/
* price field object. the params array could contain additional unused name/value
* pairs
*
- * @param array $params (reference ) an assoc array of name/value pairs
- * @param array $ids the array that holds all the db ids
+ * @param array $params (reference ) an assoc array of name/value pairs
+ *
+ * @internal param array $ids the array that holds all the db ids
*
* @return object CRM_Price_BAO_PriceField object
* @access public
/**
* This function for building custom fields
*
- * @param object $qf form object (reference)
- * @param string $elementName name of the custom field
+ * @param object $qf form object (reference)
+ * @param string $elementName name of the custom field
+ * @param $fieldId
* @param boolean $inactiveNeeded
- * @param boolean $useRequired true if required else false
- * @param boolean $search true if used for search else false
- * @param string $label label for custom field
+ * @param boolean $useRequired true if required else false
+ * @param string $label label for custom field
+ *
+ * @param null $fieldOptions
+ * @param array $feezeOptions
*
+ * @return null
+ * @internal param bool $search true if used for search else false
* @access public
* @static
*/
//use value field.
$valueFieldName = 'amount';
$seperator = '|';
+ $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], '');
- $priceVal = implode($seperator, array($customOption[$optionKey][$valueFieldName], $count, $max_value));
+ $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));
$extra = array();
if (!empty($qf->_quickConfig) && !empty($qf->_contributionAmount)) {
$extra = array('onclick' => 'useAmountOther();');
}
- // if seperate membership payment is used with quick config priceset then change the other amount label
if (!empty($qf->_membershipBlock) && !empty($qf->_quickConfig) && $field->name == 'other_amount' && empty($qf->_contributionAmount)) {
- $label = ts('Additional Contribution');
$useRequired = 0;
}
elseif (!empty($fieldOptions[$optionKey]['label'])) { //check for label.
}
foreach ($customOption as $opId => $opt) {
+ $taxAmount = CRM_Utils_Array::value('tax_amount', $opt);
if ($field->is_display_amounts) {
$opt['label'] = !empty($opt['label']) ? $opt['label'] : '';
- $opt['label'] = '<span class="crm-price-amount-amount">' . CRM_Utils_Money::format($opt[$valueFieldName]) . '</span> <span class="crm-price-amount-label">' . $opt['label'] . '</span>';
+ if ($taxAmount) {
+ if ($displayOpt == 'Do_not_show') {
+ $opt['label'] = '<span class="crm-price-amount-amount">' . CRM_Utils_Money::format($opt[$valueFieldName] + $taxAmount) . '</span> <span class="crm-price-amount-label">' . $opt['label'] . '</span>';
+ }
+ else if ($displayOpt == 'Inclusive') {
+ $opt['label'] = '<span class="crm-price-amount-amount">' . CRM_Utils_Money::format($opt[$valueFieldName] + $taxAmount) . '</span> <span class="crm-price-amount-label">' . $opt['label'] . '</span>';
+ $opt['label'] .= '<span class="crm-price-amount-label"> (includes '.round($opt['tax_rate'],2).'% VAT - ' . CRM_Utils_Money::format($taxAmount) . ')</span>';
+ }
+ else {
+ $opt['label'] = '<span class="crm-price-amount-amount">' . CRM_Utils_Money::format($opt[$valueFieldName]) . '</span> <span class="crm-price-amount-label">' . $opt['label'] . '</span>';
+ $opt['label'] .= '<span class="crm-price-amount-label"> + '.round($opt['tax_rate'],2).'% VAT - ' . CRM_Utils_Money::format($taxAmount) . '</span>';
+ }
+ }
+ else {
+ $opt['label'] = '<span class="crm-price-amount-amount">' . CRM_Utils_Money::format($opt[$valueFieldName]) . '</span> <span class="crm-price-amount-label">' . $opt['label'] . '</span>';
+ if (isset($opt['tax_amount']) && $displayOpt != 'Do_not_show') {
+ $opt['label'] .= '<span class="crm-price-amount-label">'. ts(' VAT (exempt)') .'</span>';
+ }
+ }
}
$count = CRM_Utils_Array::value('count', $opt, '');
$max_value = CRM_Utils_Array::value('max_value', $opt, '');
- $priceVal = implode($seperator, array($opt[$valueFieldName], $count, $max_value));
+ $priceVal = implode($seperator, array($opt[$valueFieldName] + $taxAmount, $count, $max_value));
$extra = array('price' => json_encode(array($elementName, $priceVal)),
'data-amount' => $opt[$valueFieldName],
'data-currency' => $currencyName,
$selectOption = $allowedOptions = $priceVal = array();
foreach ($customOption as $opt) {
+ $taxAmount = CRM_Utils_Array::value('tax_amount', $opt);
$count = CRM_Utils_Array::value('count', $opt, '');
$max_value = CRM_Utils_Array::value('max_value', $opt, '');
- $priceVal[$opt['id']] = implode($seperator, array($opt[$valueFieldName], $count, $max_value));
if ($field->is_display_amounts) {
$opt['label'] .= ' - ';
- $opt['label'] .= CRM_Utils_Money::format($opt[$valueFieldName]);
+ 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'] .= '<span class="crm-price-amount-label">'. ts(' VAT (exempt)') .'</span>';
+ }
+ }
}
$selectOption[$opt['id']] = $opt['label'];
+ $priceVal[$opt['id']] = implode($seperator, array($opt[$valueFieldName] + $taxAmount, $count, $max_value));
if (!in_array($opt['id'], $feezeOptions)) {
$allowedOptions[] = $opt['id'];
$check = array();
foreach ($customOption as $opId => $opt) {
+ $taxAmount = CRM_Utils_Array::value('tax_amount', $opt);
$count = CRM_Utils_Array::value('count', $opt, '');
$max_value = CRM_Utils_Array::value('max_value', $opt, '');
- $priceVal = implode($seperator, array($opt[$valueFieldName], $count, $max_value));
if ($field->is_display_amounts) {
$opt['label'] .= ' - ';
- $opt['label'] .= CRM_Utils_Money::format($opt[$valueFieldName]);
+ 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'] .= '<span class="crm-price-amount-label">'. ts(' VAT (exempt)') .'</span>';
+ }
+ }
}
+ $priceVal = implode($seperator, array($opt[$valueFieldName] + $taxAmount, $count, $max_value));
$check[$opId] = &$qf->createElement('checkbox', $opt['id'], NULL, $opt['label'],
array('price' => json_encode(array($opt['id'], $priceVal)),
'data-amount' => $opt[$valueFieldName],
$values = array();
CRM_Price_BAO_PriceFieldValue::getValues($fieldId, $values, 'weight', !$inactiveNeeded);
$options[$fieldId] = $values;
+ $taxRates = CRM_Core_PseudoConstant::getTaxRates();
+
+ // ToDo - Code for Hook Invoke
+
+ 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 = CRM_Contribute_BAO_Contribution_Utils::calculateTaxAmount($priceFieldValues['amount'], $options[$fieldId][$priceFieldId]['tax_rate']);
+ $options[$fieldId][$priceFieldId]['tax_amount'] = round($taxAmount['tax_amount'],2);
+ }
+ }
}
return $options[$fieldId];
/**
* Validate the priceset
*
- * @param int $priceSetId, array $fields
+ * @param int $priceSetId , array $fields
*
* retrun the error string
*
+ * @param $fields
+ * @param $error
+ * @param bool $allowNoneSelection
+ *
* @access public
* @static
- *
*/
public static function priceSetValidation($priceSetId, $fields, &$error, $allowNoneSelection = FALSE) {
}
}
}
+
+ /**
+ * Generate the label for price fields based on tax display setting option on CiviContribute Component Settings page.
+ *
+ * @param array $opt
+ * @param string $valueFieldName amount
+ * @param string $displayOpt tax display setting option
+ *
+ * @return string $label tax label for custom field
+ *
+ * @access public
+ * @static
+ *
+ */
+ 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 .= '<span class="crm-price-amount-label"> (includes '.round($opt['tax_rate'],2).'% VAT - ' . CRM_Utils_Money::format($opt['tax_amount']) . ')</span>';
+ }
+ else {
+ $label = CRM_Utils_Money::format($opt[$valueFieldName]);
+ $label .= '<span class="crm-price-amount-label"> + '.round($opt['tax_rate'],2).'% VAT - ' . CRM_Utils_Money::format($opt['tax_amount']) . '</span>';
+ }
+
+ return $label;
+ }
}