Current Path : /home/bitrix/ext_www/vebeng.yacl.site/js/ |
Current File : /home/bitrix/ext_www/vebeng.yacl.site/js/bim_calc.js |
$(function () { function futureValue(rate, nper, pmt, pv, type) { if (!pv) pv = 0; if (!type) type = 0; var pow = Math.pow(1 + rate, nper), fv; if (rate) { fv = (pmt * (1 + rate * type) * (1 - pow) / rate) - pv * pow; } else { fv = -1 * (pv + pmt * nper); } return fv.toFixed(2); } var inputData = { 'capital_year': '12', 'duration_month': '36', 'duration_year': '3', 'budget': '2000', 'PIR_percentage': '10', 'SMR_percentage': '60', }; var getRealData = function(inputData) { var result = inputData; for (var code in inputData) { var realData = $('.calc_' + code).val(); if (!!realData) result[code] = parseInt(realData); } // result.duration_month = parseInt($('.calc_duration_year').val()) * 12; return result; } var setCalculatedValues = function(calculatedData) { calculatedData.capital_month = calculatedData.capital_month.toFixed(2); calculatedData.payment_monthly = calculatedData.payment_monthly.toFixed(2); calculatedData.SMR_new_percent = calculatedData.SMR_new_percent.toFixed(1); calculatedData.SMR_new_value = calculatedData.SMR_new_value.toFixed(1); calculatedData.PIR_new_percent = calculatedData.PIR_new_percent.toFixed(1); calculatedData.PIR_new_value = calculatedData.PIR_new_value.toFixed(1); calculatedData.budget_effect_percent = calculatedData.budget_effect_percent.toFixed(1); calculatedData.budget_effect_value = calculatedData.budget_effect_value.toFixed(1); calculatedData.budget_new = calculatedData.budget_new.toFixed(1); for (var code in calculatedData) { if (calculatedData[code] == 'Infinity' || calculatedData[code] == 'NaN') { calculatedData[code] = 'невозможно определить'; } $('.calc_result_' + code).html(calculatedData[code]); } } var calculateBim = function(inputData) { inputData = getRealData(inputData); var calculatedData = inputData; calculatedData.capital_month = (Math.pow((100 + parseInt(inputData.capital_year))/100, 1/12) - 1) * 100; calculatedData.payment_monthly = inputData.budget / inputData.duration_month; calculatedData.equipment_percentage = 100 - (parseInt(inputData.PIR_percentage) + parseInt(inputData.SMR_percentage)); calculatedData.PIR_new_percent = 25; calculatedData.PIR_new_value = inputData.PIR_percentage / 100 * inputData.budget * calculatedData.PIR_new_percent / 100; calculatedData.SMR_new_percent = -23; calculatedData.SMR_new_value = inputData.SMR_percentage / 100 * inputData.budget * calculatedData.SMR_new_percent / 100; calculatedData.budget_effect_value = calculatedData.SMR_new_value + calculatedData.PIR_new_value; calculatedData.budget_effect_percent = calculatedData.budget_effect_value / inputData.budget * 100; calculatedData.budget_new = calculatedData.budget_effect_value + parseInt(inputData.budget); calculatedData.duration_effect_percent = -19; calculatedData.duration_effect_value = inputData.duration_month * calculatedData.duration_effect_percent / 100 ; calculatedData.future_investment_without_bim = - futureValue(calculatedData.capital_month / 100, inputData.duration_month, calculatedData.payment_monthly); calculatedData.future_investment_bim = - futureValue(calculatedData.capital_month / 100, parseFloat(inputData.duration_month) + parseFloat(calculatedData.duration_effect_value), calculatedData.budget_new / (parseFloat(inputData.duration_month) + parseFloat(calculatedData.duration_effect_value))); calculatedData.final_effect = (calculatedData.future_investment_without_bim - calculatedData.future_investment_bim).toFixed(1); calculatedData.duration_effect_budget = (parseFloat(calculatedData.final_effect) + parseFloat(calculatedData.SMR_new_value)).toFixed(1); setCalculatedValues(calculatedData); return calculatedData; } if ($('.calculator-slider-item').length) { $('.slider').each(function() { var input = $(this).closest('.slider-holder').next('.form-field').find('input'); var data = $(this).data(); var justInput = $(this).closest('form').find('.just_input'); var slider = $(this).slider({ min: data.min, max: data.max, range: false, value: data.value, step: data.step, slide: function( event, ui ) { input.val(ui.value); calculateBim(inputData); } }); input.on('keyup', function() { var value = $(this).val(); if (value > data.max) { value = data.max; } if (value < data.min) { value = data.min; } $(this).val(value); calculateBim(inputData); slider.slider('value', value); }); justInput.on('keyup', function() { calculateBim(inputData); }); }); } calculateBim(inputData); });