From 049db8398d585e5b6acee9844a10cdd957c2b5d1 Mon Sep 17 00:00:00 2001 From: dpradeep Date: Fri, 4 Jul 2014 16:52:56 +0530 Subject: [PATCH] VAT-569 Changes for Offline Contribution with tax amount --- CRM/Contribute/Form/Contribution.php | 13 ++++++++++++- CRM/Price/BAO/PriceSet.php | 10 ++++++++++ templates/CRM/Contribute/Form/Contribution.tpl | 17 +++++++++++++++-- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/CRM/Contribute/Form/Contribution.php b/CRM/Contribute/Form/Contribution.php index 8671dc81bc..9c95678da7 100644 --- a/CRM/Contribute/Form/Contribution.php +++ b/CRM/Contribute/Form/Contribution.php @@ -397,7 +397,12 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP // fix the display of the monetary value, CRM-4038 if (isset($defaults['total_amount'])) { - $defaults['total_amount'] = CRM_Utils_Money::format($defaults['total_amount'], NULL, '%a'); + if (!empty($defaults['tax_amount'])) { + $defaults['total_amount'] = CRM_Utils_Money::format($defaults['total_amount'] - $defaults['tax_amount'], NULL, '%a'); + } + else { + $defaults['total_amount'] = CRM_Utils_Money::format($defaults['total_amount'], NULL, '%a'); + } } if (isset($defaults['non_deductible_amount'])) { @@ -503,6 +508,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $allPanes = array(); //tax rate from financialType $this->assign('taxRates', json_encode(CRM_Core_PseudoConstant::getTaxRates())); + $this->assign('currencies', json_encode(CRM_Core_OptionGroup::values('currencies_enabled'))); // build price set form. $buildPriceSet = FALSE; @@ -1094,6 +1100,11 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP if ($this->_priceSetId && CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $this->_priceSetId, 'is_quick_config')) { $lineItems[$itemId]['unit_price'] = $lineItems[$itemId]['line_total'] = CRM_Utils_Rule::cleanMoney(CRM_Utils_Array::value('total_amount', $submittedValues)); + // Update line total and total amount with tax on edit + if ($lineItems[$itemId]['tax_amount']) { + $lineItems[$itemId]['line_total'] = CRM_Utils_Rule::cleanMoney($lineItems[$itemId]['line_total'] + $lineItems[$itemId]['tax_amount']); + $submittedValues['total_amount'] = $lineItems[$itemId]['line_total']; + } } // 10117 update th line items for participants if (!empty($lineItems[$itemId]['price_field_id'])) { diff --git a/CRM/Price/BAO/PriceSet.php b/CRM/Price/BAO/PriceSet.php index 567603c4fb..faa35aa1c6 100644 --- a/CRM/Price/BAO/PriceSet.php +++ b/CRM/Price/BAO/PriceSet.php @@ -675,6 +675,16 @@ WHERE id = %1"; $lineItem = self::setLineItem($field, $lineItem, key($field['options'])); $totalTax += $field['options'][key($field['options'])]['tax_amount'] * $lineItem[key($field['options'])]['qty']; } + if (CRM_Utils_Array::value('name', $field['options'][key($field['options'])]) == 'contribution_amount') { + $taxRates = CRM_Core_PseudoConstant::getTaxRates(); + if (array_key_exists($params['financial_type_id'], $taxRates)) { + $field['options'][key($field['options'])]['tax_rate'] = $taxRates[$params['financial_type_id']]; + $taxAmount = CRM_Contribute_BAO_Contribution_Utils::calculateTaxAmount($field['options'][key($field['options'])]['amount'], $field['options'][key($field['options'])]['tax_rate']); + $field['options'][key($field['options'])]['tax_amount'] = round($taxAmount['tax_amount'],2); + $lineItem = self::setLineItem($field, $lineItem, key($field['options'])); + $totalTax += $field['options'][key($field['options'])]['tax_amount'] * $lineItem[key($field['options'])]['qty']; + } + } $totalPrice += $lineItem[key($field['options'])]['line_total']; break; diff --git a/templates/CRM/Contribute/Form/Contribution.tpl b/templates/CRM/Contribute/Form/Contribution.tpl index 3859d1eab6..633e9979e7 100644 --- a/templates/CRM/Contribute/Form/Contribution.tpl +++ b/templates/CRM/Contribute/Form/Contribution.tpl @@ -372,6 +372,7 @@ cj('.crm-ajax-accordion:not(.collapsed) .crm-accordion-header').each(function(index) { loadPanes(cj(this).attr('id')); }); + cj('#total_amount').trigger("change"); }); // load panes function calls for snippet based on id of crm-accordion-header function loadPanes( id ) { @@ -627,18 +628,30 @@ cj("#financial_type_id").on("change",function(){ cj('#total_amount').trigger("change"); }) +cj("#currency").on("change",function(){ + cj('#total_amount').trigger("change"); +}) + cj('#total_amount').on("change",function(event) { if(event.handled !== true) { var financialType = cj('#financial_type_id').val(); var taxRates = '{/literal}{$taxRates}{literal}'; var taxRates = JSON.parse(taxRates); + var currencies = '{/literal}{$currencies}{literal}'; + var currencies = JSON.parse(currencies); + var currencySelect = cj('#currency').val(); + var currencySymbol = currencies[currencySelect]; + var re= /\((.*?)\)/g; + for(m = re.exec(currencySymbol); m; m = re.exec(currencySymbol)){ + var currencySymbol = m[1]; + } var taxRate = taxRates[financialType]; if (!taxRate) { taxRate = 0; } var totalAmount = cj('#total_amount').val(); - var totalTaxAmount = Number((taxRate/100)*totalAmount)+Number(totalAmount); - cj( "#totalTaxAmount" ).html('Total Amount : '+totalTaxAmount); + var totalTaxAmount = parseFloat(Number((taxRate/100)*totalAmount)+Number(totalAmount)).toFixed(2); + cj( "#totalTaxAmount" ).html('Total Amount : '+currencySymbol+' '+totalTaxAmount); event.handled = true; } return false; -- 2.25.1