Untitled
unknown
plain_text
2 years ago
14 kB
9
Indexable
<script defer>
let CreditCalc = function ($) {
'use strict';
const numberWithCommas = (x) => {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
}
let year_rate = parseFloat("{{ year_rate}}".replace(',', '.')).toFixed(1)
let tax_per_month = parseFloat("{{ tax_per_month}}".replace(',', '.')).toFixed(1);
let onetimeTax = parseFloat("{{ onetime_tax}}".replace(',', '.')).toFixed(1);
let today = new Date();
let firstPaymentDate;
let formattedDate;
let calc = function (productId, year_rate, tax_per_month, onetimeTax) {
let summFormat, comission;
let kk = 0;
let newSum = 0;
let sumMou = 0;
let cresitSummFormat = 0;
let persent = 0;
let today = new Date();
let firstPaymentDate = new Date(today.getTime() + (14 * 24 * 60 * 60 * 1000)); // Adding 14 days
let formattedDate = new Intl.DateTimeFormat('en-GB', {
day: '2-digit',
month: '2-digit',
year: 'numeric'
}).format(firstPaymentDate);
formattedDate = formattedDate.replace(/\//g, '.');
productId = Number(productId);
if (productId == 10) {
console.log(year_rate, tax_per_month, onetimeTax);
kk = 0;
newSum = 0;
sumMou = 0;
cresitSummFormat = 0;
persent = 0;
firstPaymentDate = new Date(today.getTime() + (14 * 24 * 60 * 60 * 1000)); // Adding 14 days
let summFormat = $('#summ').val();
let summ = Number.parseInt(
summFormat.replace(/\s/g, '')
);
let term = parseFloat($('#term').val()) / 2;
comission = onetimeTax / 100;
let stawkaYear = year_rate / 100;
let stawkaMou = (stawkaYear.toFixed(3) / 12) + (tax_per_month / 100);
let znam = stawkaMou * ((stawkaMou) ** term);
let chisl = ((stawkaMou) ** term);
kk = znam / chisl;
newSum = summ + summ * (onetimeTax / 100);
sumMou = ((newSum * kk) + (newSum / term));
sumMou = sumMou / 2;
cresitSummFormat = numberWithCommas(sumMou.toFixed(2));
persent = tax_per_month / 30;
} else if ([20, 19, 18, 17, 15, 14, 13, 11, 9, 8, 6].includes(productId)) {
console.log(year_rate, tax_per_month, onetimeTax);
let summ = Number.parseInt($('#summ').val().replace(/\s/g, ''));
let term = parseFloat($('#term').val());
let onetimeComission = (summ * onetimeTax) / 100;
let totalLoan = summ + onetimeComission;
let monthlyRate = (year_rate / 100) / 12;
let pvif = Math.pow(1 + monthlyRate, term);
let monthlyPayment = (monthlyRate * totalLoan * pvif) / (pvif - 1);
firstPaymentDate = new Date(today.getTime() + (30 * 24 * 60 * 60 * 1000)); // Adding 30 days
cresitSummFormat = numberWithCommas(monthlyPayment.toFixed(2));
persent = year_rate / 360;
}
formattedDate = new Intl.DateTimeFormat('en-GB', {
day: '2-digit',
month: '2-digit',
year: 'numeric'
}).format(firstPaymentDate);
formattedDate = formattedDate.replace(/\//g, '.');
$('.get__sum').text(summFormat);
$('.comission__sum').text(comission);
$('.return__sum').text(cresitSummFormat);
$('.rate__sum').text(persent.toFixed(2) + '%');
$('.first-payment-date__value').text(formattedDate);
let left__pos = term * 0.7 + '%';
let persent__block = $('.info__percent');
let day__block = $('.quantity__center');
let day__inp = term * 0.3;
let day__inner = (Math.round(day__inp));
let termo = Number($('#term').val().replace(',', ''));
let currentDate = new Date();
let termoMonths;
let returnSum = Number($('.return__sum').text().replace(',', '').replace(/\s/g, ''));
let summ = Number($('#summ').val().replace(/,/g, '').replace(/\s/g, ''));
if (productId == '10') {
termoMonths = termo / 2; // Convert twice-monthly payments to months
} else {
termoMonths = termo;
}
currentDate.setMonth(currentDate.getMonth() + termoMonths);
let data_povernennya = currentDate;
let zagalna_vartist = returnSum * termo;
let zagalni_vitrati = zagalna_vartist - summ;
let richna_stavka = (zagalni_vitrati / summ / termo) * 365;
console.log('termo:', termo); // Add this line
console.log('returnSum:', returnSum); // Add this line
console.log('summ:', summ); // Add this line
persent__block.css({
left: left__pos,
})
day__block.css({
left: left__pos,
})
if (day__inner == 3 || day__inner == 4) {
day__block.html(day__inner + ' {% trans "дня" %}');
} else {
day__block.html(day__inner + ' {% trans "дней" %}');
}
return {
suma_kredity: summ,
issue_date: new Date().toLocaleDateString(),
periodichnist: (productId == '10') ? '14 днів' : 'щомісяця',
suma_plateju: returnSum,
strok_kredity: termo,
data_povernennya: data_povernennya,
zagalna_vartist: zagalna_vartist,
zagalni_vitrati: zagalni_vitrati,
richna_stavka: richna_stavka
};
};
function updateValues(values) {
// Use the values from the calc function
$('.suma_kredity').text(values.suma_kredity);
$('.issue_date').text(values.issue_date);
$('.periodichnist').text(values.periodichnist);
$('.suma_plateju').text(values.suma_plateju);
$('.strok_kredity').text(values.strok_kredity);
$('.data_povernennya').text(new Date(values.data_povernennya).toLocaleDateString());
$('.zagalna_vartist').text(values.zagalna_vartist.toFixed(2));
$('.zagalni_vitrati').text(values.zagalni_vitrati.toFixed(2));
$('.richna_stavka').text(values.richna_stavka.toFixed(2) + '%');
}
let slide = function (obj) {
let input = obj.find('input'),
k = parseInt(input.attr('data-k')),
min = parseFloat(input.attr('data-min')) * k,
max = parseFloat(input.attr('data-max')) * k,
step = parseFloat(input.attr('data-step')) * k,
val = parseFloat(input.val()) * k,
minEvemt = input.attr('data-min-event');
input.val(numberWithCommas(input.val()));
input.keyup(function () {
var val = $(this).val();
val = val.replace(/\s+/g, "");
val = val.replace(/,/g, ".");
$(this).val(numberWithCommas(val));
if (val == '')
val = 0;
else
val = parseFloat(val) * k;
$(this).closest('.range').find('.slider').slider({ value: val });
});
obj.find(".slider").slider({
min: min,
max: max,
step: step,
range: "min",
value: val,
slide: function (event, ui) {
var k = parseInt(input.attr('data-k'));
var val = parseFloat(ui.value) / k;
if (minEvemt && ui.value < minEvemt)
return false;
if (val)
input.val(numberWithCommas(val));
if (input.attr('id') === 'summ') { // Check if the 'summ' slider is being moved
$('.get__sum').text(numberWithCommas(val) + ' грн'); // Update the sum display
}
},
change: function (event, ui) {
let productId = $('#product').val();
let values = calc(productId, year_rate, tax_per_month, onetimeTax);
updateValues(values);
var k = parseInt(input.attr('data-k'));
var val = parseFloat(ui.value) / k;
if (input.attr('id') === 'summ') { // Check if the 'summ' slider is being moved
$('.get__sum').text(numberWithCommas(val) + ' грн'); // Update the sum display
}
}
});
}
let initialisation = function () {
$('.range').each(function (obj, i) {
slide($(this));
});
$('.range').on('input', function() {
// Update the value of suma_kredity
var suma_kredity = parseFloat($('#summ').val().replace(/,/g, '').replace(/\s/g, ''));
$('.suma_kredity').text(suma_kredity);
// Get the current product ID
let productId = $('#product').val();
// Call the calc function to update the values
let values = calc(productId, year_rate, tax_per_month, onetimeTax);
updateValues(values);
});
// Handle product selection change
$('#product').change(function() {
let productId = $(this).val();
// Make an AJAX request to the server to get the product data
$.get('/product_data/' + productId + '/', function(data) {
console.log(data);
// Update the calculator variables with the data returned from the server
year_rate = parseFloat(data.year_rate)
tax_per_month = parseFloat(data.tax_per_month)
onetimeTax = parseFloat(data.onetime_tax)
console.log('robert', year_rate, tax_per_month, onetimeTax);
// Modify term values for productId == 10
if (productId == '10') {
data.term_min_value *= 2;
data.term_max_value *= 2;
}
// Update the data-min and data-max attributes
$('#summ').attr('data-min', data.summ_min_value);
$('#summ').attr('data-max', data.summ_max_value);
$('#term').attr('data-min', data.term_min_value);
$('#term').attr('data-max', data.term_max_value);
$('.quantity__left').html(data.term_min_value + ' <span>платежу</span>');
$('.quantity__right').html(data.term_max_value + ' <span>платежів</span>');
$('.sum_left').html(data.summ_min_value + ' <span>грн</span>');
$('.sum_right').html(data.summ_max_value + ' <span>грн</span>');
if (productId == '10') {
$('.periodicity__value').text('14 днів');
} else {
$('.periodicity__value').text('щомісяця');
}
// Update the slider
slide($('#summ').closest('.range'));
slide($('#term').closest('.range'));
// Show the modal when the details button is clicked
$('#details-button').on('click', function() {
$('#calcDetailsModalLongTerm, #modal-background').css('display', 'block');
$('body').css('overflow', 'hidden');
});
// Close the modal when the close button is clicked
$('.close').on('click', function() {
$('#calcDetailsModalLongTerm, #modal-background').css('display', 'none');
$('body').css('overflow', 'auto');
});
// Close the modal when the user clicks outside of it
$(window).on('click', function(event) {
if ($(event.target).is('#calcDetailsModalLongTerm')) {
$('#calcDetailsModalLongTerm, #modal-background').css('display', 'none');
$('body').css('overflow', 'auto');
}
});
// Recalculate the values
let values = calc(productId, year_rate, tax_per_month, onetimeTax);
updateValues(values);
});
});
$('#product').trigger('change');
};
return {
init: function () {
initialisation();
},
}
}(jQuery);
jQuery(document).ready(function ($) {
CreditCalc.init();
});Editor is loading...
Leave a Comment