From b6f6536288acc3ece5ea7baafe07e74e5f7a9268 Mon Sep 17 00:00:00 2001 From: dpradeep Date: Tue, 19 Aug 2014 16:22:49 +0530 Subject: [PATCH] Freeze fields on update of contribution related to membership and participant. --- CRM/Contribute/Form/Contribution.php | 15 ++++- .../CRM/Contribute/Form/Contribution.tpl | 66 +++++++++++-------- 2 files changed, 54 insertions(+), 27 deletions(-) diff --git a/CRM/Contribute/Form/Contribution.php b/CRM/Contribute/Form/Contribution.php index 2c5e91cd05..6ee24a2f50 100644 --- a/CRM/Contribute/Form/Contribution.php +++ b/CRM/Contribute/Form/Contribution.php @@ -398,7 +398,10 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP // fix the display of the monetary value, CRM-4038 if (isset($defaults['total_amount'])) { if (!empty($defaults['tax_amount'])) { - $defaults['total_amount'] = CRM_Utils_Money::format($defaults['total_amount'] - $defaults['tax_amount'], NULL, '%a'); + $componentDetails = CRM_Contribute_BAO_Contribution::getComponentDetails($this->_id); + if (!(CRM_Utils_Array::value('membership', $componentDetails) || CRM_Utils_Array::value('participant', $componentDetails))) { + $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'); @@ -933,6 +936,16 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $this->addFormRule(array('CRM_Contribute_Form_Contribution', 'formRule'), $this); + // if contribution is related to membership or participant freeze Financial Type, Amount + if ($this->_id && isset($this->_values['tax_amount'])) { + $componentDetails = CRM_Contribute_BAO_Contribution::getComponentDetails($this->_id); + if (CRM_Utils_Array::value('membership', $componentDetails) || CRM_Utils_Array::value('participant', $componentDetails)) { + $financialType->freeze(); + $totalAmount->freeze(); + $this->assign('freezeFinancialType', TRUE); + } + } + if ($this->_action & CRM_Core_Action::VIEW) { $this->freeze(); } diff --git a/templates/CRM/Contribute/Form/Contribution.tpl b/templates/CRM/Contribute/Form/Contribution.tpl index 48caae26b1..e2d14afd6c 100644 --- a/templates/CRM/Contribute/Form/Contribution.tpl +++ b/templates/CRM/Contribute/Form/Contribution.tpl @@ -637,33 +637,37 @@ cj("#currency").on("change",function(){ CRM.$(function($) { $('#total_amount').on("change",function(event) { if (event.handled !== true) { - var financialType = $('#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 = $('#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 = $('#total_amount').val(); - var totalTaxAmount = '{/literal}{$totalTaxAmount}{literal}'; - var taxAmount = (taxRate/100)*totalAmount.replace(/,/g,''); - taxAmount = isNaN (taxAmount) ? 0:taxAmount; - if (totalTaxAmount) { - var totalTaxAmount = (parseFloat(Number(totalTaxAmount) + Number(totalAmount.replace(/,/g,''))).toFixed(2)).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,"); - } - else { - var totalTaxAmount = (parseFloat(taxAmount + Number(totalAmount.replace(/,/g,''))).toFixed(2)).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,"); + var freezeFinancialType = '{/literal}{$freezeFinancialType}{literal}'; + if (!freezeFinancialType) { + var financialType = $('#financial_type_id').val(); + var taxRates = '{/literal}{$taxRates}{literal}'; + taxRates = JSON.parse(taxRates); + var currencies = '{/literal}{$currencies}{literal}'; + currencies = JSON.parse(currencies); + var currencySelect = $('#currency').val(); + var currencySymbol = currencies[currencySelect]; + var re= /\((.*?)\)/g; + for(m = re.exec(currencySymbol); m; m = re.exec(currencySymbol)){ + currencySymbol = m[1]; + } + var taxRate = taxRates[financialType]; + if (!taxRate) { + taxRate = 0; + } + var totalAmount = $('#total_amount').val(); + var thousandMarker = '{/literal}{$config->monetaryThousandSeparator}{literal}'; + var seperator = '{/literal}{$config->monetaryDecimalPoint}{literal}'; + // replace all thousandMarker and change the seperator to a dot + totalAmount = totalAmount.replace(thousandMarker,'').replace(seperator,'.'); + + var totalTaxAmount = '{/literal}{$totalTaxAmount}{literal}'; + var taxAmount = (taxRate/100)*totalAmount; + taxAmount = isNaN (taxAmount) ? 0:taxAmount; + var totalTaxAmount = taxAmount + Number(totalAmount); + totalTaxAmount = formatMoney( totalTaxAmount, 2, seperator, thousandMarker ); + + $("#totalTaxAmount" ).html('Amount with tax : ' + currencySymbol + ' '+ totalTaxAmount); } - - $("#totalTaxAmount" ).html('Amount with tax : ' + currencySymbol + ' '+ totalTaxAmount); event.handled = true; } return false; @@ -683,5 +687,15 @@ CRM.$(function($) { } }); }); + +function formatMoney (amount, c, d, t){ + var n = amount, + c = isNaN(c = Math.abs(c)) ? 2 : c, + d = d == undefined ? "," : d, + t = t == undefined ? "." : t, s = n < 0 ? "-" : "", + i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", + j = (j = i.length) > 3 ? j % 3 : 0; +return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ""); +}; {/literal} -- 2.25.1