const totalAmountInput = document.getElementById("amount-input");
// const contributionInput = document.getElementById("contribution-input");
const monthsInput = document.getElementById("length-of-loan-input");
const familySelectInput = document.getElementById("family-status-input");
const incomeInput = document.getElementById("income-input");
const areaInput = document.getElementById("area-input");
const calculateBtn = document.getElementById("calculate-btn");
const appoitmentBox = document.getElementById("appoitment-btn");
const resultsBox = document.getElementById("results-all");
const errorBox = document.getElementById("error-box");
const resutlFirstMns = document.getElementById("resutl-first-mns");
const resutlMortgageMns = document.getElementById("resutl-interest-mns");
const resutlInstallment121 = document.getElementById("resutl-121-mns");
const resutlMortgageMnsAfter = document.getElementById(
"resutl-mortgage-mns-after"
);
const wyslijBox = document.getElementById("wyslij-button");
const myForm = document.getElementById("#myForm");
const kowtaSplatyInput = document.getElementById("kwotaDoSplaty");
const oszczednosciInput = document.getElementById("oszczednosci");
const headingOrange = document.getElementById("headingMns-years");
const resutlCostMns = document.getElementById("resutl-cost-mns");
const resutlSavings = document.getElementById("resutl-savings");
const resutlCost = document.getElementById("resutl-cost");
const resutlFirst = document.getElementById("resutl-first");
const resutlMortgage = document.getElementById("resutl-mortgage");
const resutlSummary = document.getElementById("mortgage-summary");
const wrapper = document.getElementById("general_wrapper");
document.getElementsByClassName
// const interestRateBK = 2.869;
const interestRate = 7.14;
const errorMessage = "Błąd w formularzu!";
let totalAmount = 400000;
let years = 30;
let income = 6000;
let area = 45;
let mnsFullCost;
let ordinaryCost;
let installment121 = [];
let installemnt1;
let doplataZarobki = 0;
let doplataMetraz = 0;
let aktualnaRataDoplata =0;
//Wyświetlanie wartości startowych
window.addEventListener("load", (event) => {
monthsInput.value = "30 lat";
totalAmountInput.value = "400 000 zł";
incomeInput.value = "6 000"
areaInput.value = "45 m2"
// contributionInput.value = "50 000 zł";
});
// function deleteErrorBox() {
// timeout = setTimeout(alertFunc, 3000);
// }
let kwota_objeta_doplata = 0;
let oprocentowanie_skorygowane = 0;
let limit_dochodu = 0;
let limit_metraz = 0;
let przekroczony_dochod_doplata = 0;
let przekroczony_metraz_doplata = 0;
if (familySelectInput.value == "singiel") {
kwota_objeta_doplata = 200000;
oprocentowanie_skorygowane = 1.5;
limit_dochodu = 10000;
limit_metraz = 50;
} else if (familySelectInput.value == "para") {
kwota_objeta_doplata = 400000;
oprocentowanie_skorygowane = 1.5;
limit_dochodu = 18000;
limit_metraz = 75;
} else if (familySelectInput.value == "para_1_dziecko") {
kwota_objeta_doplata = 450000;
oprocentowanie_skorygowane = 1;
limit_dochodu = 23000;
limit_metraz = 100;
} else if (familySelectInput.value == "para_2_dzieci") {
kwota_objeta_doplata = 500000;
oprocentowanie_skorygowane = 0.5;
limit_dochodu = 28000;
limit_metraz = 125;
} else if (familySelectInput.value == "para_3_dzieci") {
kwota_objeta_doplata = 600000;
oprocentowanie_skorygowane = 0;
limit_dochodu = 33000;
limit_metraz = 150;
} else if (familySelectInput.value == "para_4_dzieci") {
kwota_objeta_doplata = 700000;
oprocentowanie_skorygowane = 0;
limit_dochodu = 33000;
limit_metraz = 175;
} else if (familySelectInput.value == "para_5_dzieci") {
kwota_objeta_doplata = 800000;
oprocentowanie_skorygowane = 0;
limit_dochodu = 33000;
limit_metraz = 200;
}
przekroczony_metraz_doplata = (limit_metraz - area) < 0 ? 0 : (limit_metraz - area) * 50;
if (familySelectInput.value == "singiel"){
przekroczony_dochod_doplata = (limit_dochodu - income) < 0 ? 0 : (limit_dochodu - income) * 0.5;
} else{
przekroczony_dochod_doplata = (limit_dochodu - income) < 0 ? 0 : (limit_dochodu - income) * 0.25;
}//to można wywalić
// if (kwota_objeta_doplata < totalAmount){
// const Amount = totalAmount + kwota_objeta_doplata;
// const weightedRate1 = totalAmount / Amount * oprocentowanie_skorygowane;
// const weightedRate2 = kwota_objeta_doplata / Amount * interestRate;
// const averageRate = weightedRate1 + weightedRate2;
// oprocentowanie_skorygowane = averageRate;
// }
// const zadluzenie_bez_doplaty = totalAmount - kwota_objeta_doplata
// const kapital_bez_doplaty =
setTimeout(function () {
errorBox.style.display = "none";
}, 3000);
function calculateDecreasingLoan(months, totalAmount, interestRate) {
// Obliczanie miesięcznej stopy oprocentowania
const monthlyInterestRate = interestRate / 12 / 100;
let remainingAmount = totalAmount;
let amortizationSchedule = [];
let payed_ = 0;
// let lastElementPayed;
for (let i = 0; i < months; i++) {
// Obliczanie odsetek dla danego miesiąca
const interestAmount = remainingAmount * monthlyInterestRate;
// Obliczanie kapitału spłacanego w danym miesiącu
const principalAmount = totalAmount / months;
remainingAmount -= principalAmount;
const installment =
parseFloat(principalAmount.toFixed(2)) +
parseFloat(interestAmount.toFixed(2));
payed_ += installment;
amortizationSchedule.push({
month: i + 1,
principal: principalAmount.toFixed(2),
interest: interestAmount.toFixed(2),
remainingAmount: remainingAmount.toFixed(2),
installment: installment,
payed_: payed_,
});
// if (i === 119) {
// const newMonths = months - 120;
// const since120 = calculateFixedInstallmentsLoan(
// newMonths,
// remainingAmount,
// interestRate,
// false
// );
// lastElementPayed = since120.slice(-1)[0].payed;
// mnsFullCost = lastElementPayed + amortizationSchedule[119].payed_;
// installment121 = since120[0].installment;
// console.log(mnsFullCost)
// }
}
// console.log(amortizationSchedule)
return amortizationSchedule;
}
function calculateFixedInstallmentsLoan(months, totalAmount, interestRate, ifOrdinary) {
// Obliczanie miesięcznej stopy oprocentowania
const monthlyInterestRate = interestRate / 12 / 100;
// Obliczanie współczynnika dla równych rat
const coefficient =
(monthlyInterestRate * Math.pow(1 + monthlyInterestRate, months)) /
(Math.pow(1 + monthlyInterestRate, months) - 1);
// Obliczanie stałej raty
const monthlyPayment = totalAmount * coefficient;
let remainingAmount = totalAmount;
let amortizationSchedule = [];
let payed = 0;
for (let i = 0; i < months; i++) {
// Obliczanie odsetek dla danego miesiąca
const interestAmount = remainingAmount * monthlyInterestRate;
// Obliczanie kapitału spłacanego w danym miesiącu
const principalAmount = monthlyPayment - interestAmount;
remainingAmount -= principalAmount;
const installment =
parseFloat(principalAmount.toFixed(2)) +
parseFloat(interestAmount.toFixed(2));
payed += installment;
amortizationSchedule.push({
month: i + 1,
principal: principalAmount.toFixed(2),
interest: interestAmount.toFixed(2),
remainingAmount: remainingAmount.toFixed(2),
installment:
parseFloat(principalAmount.toFixed(2)) +
parseFloat(interestAmount.toFixed(2)),
payed: payed,
});
}
if (ifOrdinary == true){
ordinaryCost = amortizationSchedule.slice(-1)[0].payed;
}
return amortizationSchedule;
}
function numberWithSpaces(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
}
totalAmountInput.addEventListener("focus", function (e) {
totalAmountInput.value = totalAmount;
});
totalAmountInput.addEventListener("focusout", function (e) {
totalAmount = parseInt(totalAmountInput.value);
if (!totalAmount) {
totalAmount = 400000;
// }
// else if (totalAmount > 600000) {
// // totalAmount = 1000000 - contribution;
// totalAmount = 600000;
// totalAmountInput.value = totalAmount;
// errorBox.textContent =
// "Kwota kredytu zmieniona! Maksymalna kwota to 600 tys.";
// errorBox.style.display = "block";
// setTimeout(function () {
// errorBox.style.display = "none";
// }, 3000);
} else if (totalAmount < 90000) {
totalAmount = 90000;
errorBox.textContent =
"Kwota kredytu zmieniona! Minimalna kwota to 90 tys.";
errorBox.style.display = "block";
setTimeout(function () {
errorBox.style.display = "none";
}, 3000);
}
// else if (totalAmount > 600000 && contribution < totalAmount - 600000) {
// totalAmount = 600000 + contribution;
// errorBox.textContent =
// "Wartość nieruchomości zmieniona! Maksymalna wartość to 600 tys + wkład";
// errorBox.style.display = "block";
// setTimeout(function () {
// errorBox.style.display = "none";
// }, 3000);
// }
// else if (totalAmount <= contribution) {
// totalAmount = 600000 - contribution;
// errorBox.textContent =
// "Kwota kredytu zmieniona! Wkład własny większy od wartości nieruchomości";
// errorBox.style.display = "block";
// setTimeout(function () {
// errorBox.style.display = "none";
// }, 3000);
// }
else {
errorBox.style.display = "none";
}
totalAmountInput.value = numberWithSpaces(parseInt(totalAmount)) + " zł";
});
// contributionInput.addEventListener("focus", function (e) {
// contributionInput.value = contribution;
// });
// contributionInput.addEventListener("focusout", function (e) {
// contribution = parseInt(contributionInput.value);
// if (!contribution) {
// contribution = 0;
// }
// else if (totalAmount + contribution > 1000000) {
// contribution = 200000;
// errorBox.textContent =
// "Wielkość wkładu zmieniona! Maksymalna wartość to 200 tys.";
// errorBox.style.display = "block";
// setTimeout(function () {
// errorBox.style.display = "none";
// }, 3000);
// } else if (totalAmount > 600000 && contribution < totalAmount - 600000) {
// contribution = 200000 - (800000 - totalAmount);
// errorBox.textContent =
// "Wielkość wkładu zmieniona! Za duża wartość nieruchomości";
// errorBox.style.display = "block";
// setTimeout(function () {
// errorBox.style.display = "none";
// }, 3000);
// }
// else if (contribution > 200000) {
// contribution = 200000;
// errorBox.textContent =
// "Wielkość wkładu zmieniona! Maksymalna wartość to 200 tys.";
// errorBox.style.display = "block";
// setTimeout(function () {
// errorBox.style.display = "none";
// }, 3000);
// }
// else if (contribution >= totalAmount) {
// contribution = 50000;
// errorBox.textContent =
// "Wielkość wkładu zmieniona! Wkład własny większy od wartości nieruchomości";
// errorBox.style.display = "block";
// setTimeout(function () {
// errorBox.style.display = "none";
// }, 3000);
// }
// else {
// errorBox.style.display = "none";
// }
// contributionInput.value = numberWithSpaces(parseInt(contribution)) + " zł";
// });
monthsInput.addEventListener("focus", function (e) {
monthsInput.value = years;
});
monthsInput.addEventListener("focusout", function (e) {
years = parseInt(monthsInput.value);
if (!years) {
years = 30;
} else if (years > 35) {
years = 35;
errorBox.textContent = "Okres spłaty zmieniony! Maksymalny to 35 lat";
errorBox.style.display = "block";
setTimeout(function () {
errorBox.style.display = "none";
}, 3000);
} else if (years < 15) {
years = 15;
errorBox.textContent = "Okres spłaty zmieniony! Minimalny to 15 lat";
errorBox.style.display = "block";
setTimeout(function () {
errorBox.style.display = "none";
}, 3000);
} else {
errorBox.style.display = "none";
}
monthsInput.value = years + " lat";
});
incomeInput.addEventListener("focus", function (e) {
incomeInput.value = income;
});
incomeInput.addEventListener("focusout", function (e) {
income = parseInt(incomeInput.value);
if (!income) {
income = 6000;
} else {
errorBox.style.display = "none";
}
incomeInput.value = income + " zł";
});
areaInput.addEventListener("focus", function (e) {
areaInput.value = area;
});
areaInput.addEventListener("focusout", function (e) {
area = parseInt(areaInput.value);
if (!area) {
area = 45;
} else {
errorBox.style.display = "none";
}
areaInput.value = area + " m2";
});
// familySelectInput.addEventListener("focus", function (e) {
// familySelectInput.value = years;
// });
// var form = document.getElementById("myForm_");
// function handleForm(event) { event.preventDefault(); }
// form.addEventListener('submit', handleForm);
document.getElementById('myForm_').addEventListener('submit', function(e){
e.preventDefault();
myForm.style.display="none";
resultsBox.classList.remove("blur_on")
console.log("test")
})
familySelectInput.addEventListener("focusout", function (e) {
if (familySelectInput.value == "singiel") {
kwota_objeta_doplata = 200000;
oprocentowanie_skorygowane = 1.5;
limit_dochodu = 10000;
limit_metraz = 50;
} else if (familySelectInput.value == "para") {
kwota_objeta_doplata = 400000;
oprocentowanie_skorygowane = 1.5;
limit_dochodu = 18000;
limit_metraz = 75;
} else if (familySelectInput.value == "para_1_dziecko") {
kwota_objeta_doplata = 450000;
oprocentowanie_skorygowane = 1;
limit_dochodu = 23000;
limit_metraz = 100;
} else if (familySelectInput.value == "para_2_dzieci") {
kwota_objeta_doplata = 500000;
oprocentowanie_skorygowane = 0.5;
limit_dochodu = 28000;
limit_metraz = 125;
} else if (familySelectInput.value == "para_3_dzieci") {
kwota_objeta_doplata = 600000;
oprocentowanie_skorygowane = 0;
limit_dochodu = 33000;
limit_metraz = 150;
} else if (familySelectInput.value == "para_4_dzieci") {
kwota_objeta_doplata = 700000;
oprocentowanie_skorygowane = 0;
limit_dochodu = 33000;
limit_metraz = 175;
} else if (familySelectInput.value == "para_5_dzieci") {
kwota_objeta_doplata = 800000;
oprocentowanie_skorygowane = 0;
limit_dochodu = 33000;
limit_metraz = 200;
}
przekroczony_metraz_doplata = (limit_metraz - area) > 0 ? 0 : -(limit_metraz - area) * 50;
if (familySelectInput.value == "singiel"){
przekroczony_dochod_doplata = (limit_dochodu - income) > 0 ? 0 : -(limit_dochodu - income) * 0.5;
} else{
przekroczony_dochod_doplata = (limit_dochodu - income) > 0 ? 0 : -(limit_dochodu - income) * 0.25;
}// DLACZEGOTUTAJ ---- minus
// if (kwota_objeta_doplata < totalAmount){
// const Amount = totalAmount + kwota_objeta_doplata;
// const weightedRate1 = totalAmount / Amount * oprocentowanie_skorygowane;
// const weightedRate2 = kwota_objeta_doplata / Amount * interestRate;
// const averageRate = weightedRate1 + weightedRate2;
// oprocentowanie_skorygowane = averageRate;
// }
});
let first_use = true;
calculateBtn.addEventListener("click", function (e) {
if (years <= 35 && years >= 15 && totalAmount >= 90000) {
calculateMortgagePayment();
if (first_use == true){
resultsBox.classList.add("blur_on")
}
} else {
errorBox.style.display = "block";
}
let first_use = false;
});
scrollFrom.addEventListener("click", function (e) {
scrollTo.scrollIntoView({
behavior: "smooth",
block: "start",
});
});
function calculateMortgagePayment() {
const czescZDoplata = calculateDecreasingLoan(
years * 12,
kwota_objeta_doplata >= totalAmount ? totalAmount : kwota_objeta_doplata,
oprocentowanie_skorygowane
);
console.log(czescZDoplata)
let czescBezDoplaty;
if ((totalAmount - kwota_objeta_doplata) > 0){
czescBezDoplaty = calculateDecreasingLoan(
years * 12,
totalAmount - kwota_objeta_doplata,
7.14
);
} else czescBezDoplaty = 0;
const schedule1 = calculateFixedInstallmentsLoan(
years * 12,
totalAmount,
7.14,
true
// interestRate
);
const rataZwyklegoMalejaca = calculateDecreasingLoan(
years * 12,
totalAmount,
7.14,
);
let testyears = (years - 10) * 12;
let testamount = parseFloat(czescZDoplata[119].remainingAmount) + (czescBezDoplaty ? parseFloat(czescBezDoplaty[119].remainingAmount) : 0);
const schedule2 = calculateFixedInstallmentsLoan(
testyears,
testamount,
7.14
);
let doplata_do_pierwszej_raty = 0;
przekroczony_metraz_doplata = (limit_metraz - area) > 0 ? 0 : -(limit_metraz - area) * 50;
if (familySelectInput.value == "singiel"){
przekroczony_dochod_doplata = (limit_dochodu - income) > 0 ? 0 : -(limit_dochodu - income) * 0.5;
} else{
przekroczony_dochod_doplata = (limit_dochodu - income) > 0 ? 0 : -(limit_dochodu - income) * 0.25;
}
for (let i=0; i<120; i++){
aktualnaRataDoplata = rataZwyklegoMalejaca[i].installment - (czescZDoplata[i].installment + (czescBezDoplaty ? (czescBezDoplaty[i].installment) : 0))
przekroczony_dochod_doplata < aktualnaRataDoplata ? (doplataZarobki += przekroczony_dochod_doplata) : doplataZarobki += aktualnaRataDoplata;
przekroczony_metraz_doplata < aktualnaRataDoplata ? (doplataMetraz += przekroczony_metraz_doplata) : doplataMetraz += aktualnaRataDoplata;
if (i==0){
doplata_do_pierwszej_raty = doplataZarobki + doplataMetraz
}
}
console.log(doplataMetraz)
console.log(doplataZarobki)
//kredyt z dopłatami
installemnt1 = Math.round(czescZDoplata[0].installment + (czescBezDoplaty ? (czescBezDoplaty[0].installment) : 0) + doplata_do_pierwszej_raty);
// wyliczanie kosztu kredytu z dopłatami
let costMsnFull = (czescBezDoplaty ? (czescBezDoplaty[119].payed_) : 0) + czescZDoplata[119].payed_ + schedule2.slice(-1)[0].payed + doplataZarobki + doplataMetraz;
resutlFirstMns.innerHTML = `${installemnt1} zł -${
Math.round(schedule1[0].installment) - Math.round(czescZDoplata[0].installment + (czescBezDoplaty ? (czescBezDoplaty[0].installment) : 0))
} zł`;
resutlMortgageMns.textContent = oprocentowanie_skorygowane + "% + marża banku*";
resutlMortgageMnsAfter.textContent = interestRate + "%";
resutlCostMns.textContent = numberWithSpaces(Math.round(costMsnFull)) + " zł";
resutlSavings.textContent = numberWithSpaces(Math.round(ordinaryCost - costMsnFull)) + " zł";
//zwykły kredyt
resutlCost.textContent = numberWithSpaces(Math.round(ordinaryCost)) + " zł";
resutlFirst.textContent = Math.round(schedule1[0].installment) + " zł";
resutlInstallment121.textContent = Math.round(schedule2[0].installment) + " zł";
resutlMortgage.textContent = interestRate + "%";
headingOrange.textContent = `Następne ${years - 10} lat`;
calculateBtn.classList.add("form-success");
resutlSummary.textContent = `Kredyt ${
numberWithSpaces(parseInt(totalAmount)) + " zł"
} na ${years} lat`;
resultsBox.style.display = "flex";
// appoitmentBox.style.display = "flex";
resutlSummary.style.display = "block";
doplataZarobki = 0;
doplataMetraz = 0;
myForm.style.display = "block"
monthsInput.scrollIntoView({
behavior: "smooth",
block: "start",
});
}
totalAmountInput.value = numberWithSpaces(parseInt(totalAmount)) + " zł";
wyslijBox.addEventListener("click", function (e) {
kowtaSplatyInput.setAttribute('value', `
Kwota kredytu = ${totalAmount} zł,
Okres kredytowania = ${years} lat,
Dochód = ${income} zł brutto,
Kto zaciąga kredyt = ${familySelectInput.value},
Kwota do spłaty bez dopłat = ${resutlCost.textContent},
- TEGO NIE WIDZI KLIENT - Kwota do spłaty Mieszkanie na start = ${resutlCostMns.textContent},
- TEGO NIE WIDZI KLIENT - Suma oszczędności Mieszkanie na start = ${resutlSavings.textContent}
`);
// oszczednosciInput.setAttribute('value', `Suma oszczędności z dopłatami Mieszkanie na start = ${resutlCostMns}`);
});