{"version":3,"sources":["loan.js"],"names":["_defineProperty","obj","key","value","Object","defineProperty","enumerable","configurable","writable","_Vue","Vue","createApp","ref","defineProps","computed","watch","nextTick","onMounted","numeral","register","delimiters","thousands","decimal","currency","symbol","locale","app","setup","termFee","registrationFee","establishmentFee","carPriceMax","repaymentPeriodMax","grade1NominalInterestRate","grade2NominalInterestRate","grade3NominalInterestRate","repaymentPeriod","carPrice","equity","carDecided","carRegistrationNumber","finnCode","car","year","brand","model","regnumber","clientName","clientDateOfBirth","clientEmail","clientPhone","clientAmcarMember","clientMemberId","clientColoaner","coloanerName","coloanerDateOfBirth","coloanerEmail","coloanerPhone","carPriceInput","carPriceSlider","equityInput","equitySlider","repaymentPeriodInput","repaymentPeriodSlider","currentStep","showCarPriceInput","showEquityInput","showRepaymentPeriodInput","carDetailsError","carPriceSliderInstance","equitySliderInstance","repaymentPeriodSliderInstance","nominalInterestRate","percentageEquity","interestRate","getPaymentPlan","loan","effectiveInterestRate","repaymentPeriodInMonths","Number","loanTotal","result","isNaN","toFixed","sumPerMonth","data","Math","abs","round","plan","sumPayment","isStep1Valid","length","isStep2Valid","ekGrade1ni","ekGrade2ni","ekGrade3ni","initCarPriceSlider","initEquitySlider","initRepaymentPeriodSlider","destroy","noUiSlider","create","start","step","connect","format","to","noUiToValueFormatter","from","noUiFromValueFormatter","range","min","max","on","val","set","getInterestRateFactory","showAndFocusCarPriceInput","async","focus","showAndFocusEquityInput","showAndFocusRepaymentPeriodInput","onCarPriceInput","e","replace","onEquityInput","onRepaymentPeriodInput","displayPrice","arguments","undefined","Infinity","getVehicleData","response","axios","get","registeredDate","Date","parse","getFullYear","err","sendApplication","_data","post","console","log","mount","effectiveInterestRateResult","iteration","oldInterestRate","difference","positive","negative","loanAmount","paymentYear","installmentsPerYear","estabFee","mortLoanFee","resultArray","calculationArray","initialRateOnePaymentPeriod","calculationYear","calculationPeriod","annuity","i","n","p","pow","getAnnuity","parseFloat","_i","getInterestRate","paymentArray","nvp","calcArray","floor","ceil"],"mappings":"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","file":"loan.js","sourcesContent":["'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _Vue = Vue,\n createApp = _Vue.createApp,\n ref = _Vue.ref,\n defineProps = _Vue.defineProps,\n computed = _Vue.computed,\n watch = _Vue.watch,\n nextTick = _Vue.nextTick,\n onMounted = _Vue.onMounted;\n\n\nnumeral.register('locale', 'no', {\n delimiters: {\n thousands: ' ',\n decimal: ','\n },\n currency: {\n symbol: ''\n }\n});\n\nnumeral.locale('no');\n\nvar app = createApp({\n setup: function setup() {\n\n // statics\n var termFee = ref(95);\n var registrationFee = ref(1280);\n var establishmentFee = ref(2990);\n var carPriceMax = ref(2000000);\n var repaymentPeriodMax = ref(7);\n var grade1NominalInterestRate = ref(0);\n var grade2NominalInterestRate = ref(0);\n var grade3NominalInterestRate = ref(0);\n\n // inputs\n var repaymentPeriod = ref(3);\n var carPrice = ref(200000);\n var equity = ref(0);\n var carDecided = ref(null);\n var carRegistrationNumber = ref('');\n var finnCode = ref('');\n var car = ref({\n year: '',\n brand: '',\n model: '',\n regnumber: ''\n });\n\n var clientName = ref('');\n var clientDateOfBirth = ref('');\n var clientEmail = ref('');\n var clientPhone = ref('');\n var clientAmcarMember = ref(false);\n var clientMemberId = ref('');\n var clientColoaner = ref(false);\n var coloanerName = ref('');\n var coloanerDateOfBirth = ref('');\n var coloanerEmail = ref('');\n var coloanerPhone = ref('');\n\n // element refs\n var carPriceInput = ref(null);\n var carPriceSlider = ref(null);\n var equityInput = ref(null);\n var equitySlider = ref(null);\n var repaymentPeriodInput = ref(null);\n var repaymentPeriodSlider = ref(null);\n\n // state\n var currentStep = ref(1);\n var showCarPriceInput = ref(false);\n var showEquityInput = ref(false);\n var showRepaymentPeriodInput = ref(false);\n var carDetailsError = ref(false);\n\n // sliders\n var carPriceSliderInstance = ref(null);\n var equitySliderInstance = ref(null);\n var repaymentPeriodSliderInstance = ref(null);\n\n // computed\n var nominalInterestRate = computed(function () {\n if (percentageEquity.value < 20) {\n return grade1NominalInterestRate.value;\n }\n\n if (percentageEquity.value >= 20 && percentageEquity.value < 35) {\n return grade2NominalInterestRate.value;\n }\n\n if (percentageEquity.value >= 35) {\n return grade3NominalInterestRate.value;\n }\n });\n\n var interestRate = computed(function () {\n var plan = getPaymentPlan(loan.value, repaymentPeriod.value, 12, establishmentFee.value, registrationFee.value, termFee.value, nominalInterestRate.value);\n return plan.effectiveInterestRate;\n });\n var repaymentPeriodInMonths = computed(function () {\n return repaymentPeriod.value * 12;\n });\n var loan = computed(function () {\n return Number(carPrice.value) - Number(equity.value);\n });\n var loanTotal = computed(function () {\n return loan.value + establishmentFee.value + registrationFee.value;\n });\n var percentageEquity = computed(function () {\n var result = equity.value / carPrice.value * 100;\n\n if (isNaN(result)) {\n return 0;\n }\n\n return result.toFixed();\n });\n\n var sumPerMonth = computed(function () {\n if (!repaymentPeriod.value) {\n return 0;\n }\n\n var data = getPaymentPlan(loanTotal.value, repaymentPeriod.value, 12, establishmentFee.value, registrationFee.value, termFee.value, nominalInterestRate.value);\n return Math.abs(Math.round(data.plan[1].sumPayment));\n });\n\n var isStep1Valid = computed(function () {\n if (carDecided.value === false) {\n return true;\n }\n\n if (carRegistrationNumber.value.length && carRegistrationNumber.value !== car.value.regnumber) {\n return false;\n }\n\n return carDecided.value === true && (finnCode.value.length || carRegistrationNumber.value.length);\n });\n\n var isStep2Valid = computed(function () {\n if (!clientName.value.length || !clientDateOfBirth.value.length || !clientEmail.value.length || !clientPhone.value.length) {\n return false;\n }\n\n if (clientColoaner.value === true && (!coloanerName.value.length || !coloanerDateOfBirth.value.length || !coloanerEmail.value.length || !coloanerPhone.value.length)) {\n return false;\n }\n\n if (clientAmcarMember.value === true && !clientMemberId.value.length) {\n return false;\n }\n\n return true;\n });\n\n onMounted(function () {\n grade1NominalInterestRate.value = ekGrade1ni;\n grade2NominalInterestRate.value = ekGrade2ni;\n grade3NominalInterestRate.value = ekGrade3ni;\n\n initCarPriceSlider();\n initEquitySlider();\n initRepaymentPeriodSlider();\n });\n\n // methods\n var initCarPriceSlider = function initCarPriceSlider() {\n\n if (carPriceSliderInstance.value) {\n carPriceSliderInstance.value.destroy();\n }\n\n carPriceSliderInstance.value = noUiSlider.create(carPriceSlider.value, {\n start: 0,\n step: 10000,\n connect: [true, false],\n format: {\n to: noUiToValueFormatter,\n from: noUiFromValueFormatter\n },\n range: {\n 'min': 0,\n 'max': carPriceMax.value\n }\n });\n\n carPriceSliderInstance.value.on('slide', function (val) {\n return carPrice.value = Number(val[0]);\n });\n carPriceSliderInstance.value.on('end', function (val) {\n var value = Number(val[0]);\n\n if (equity.value > value) {\n equity.value = value;\n }\n\n initEquitySlider();\n });\n };\n\n var initEquitySlider = function initEquitySlider() {\n\n if (equitySliderInstance.value) {\n equitySliderInstance.value.destroy();\n }\n\n equitySliderInstance.value = noUiSlider.create(equitySlider.value, {\n start: 0,\n step: 10000,\n connect: [true, false],\n format: {\n to: noUiToValueFormatter,\n from: noUiFromValueFormatter\n },\n range: {\n 'min': 0,\n 'max': carPrice.value || carPriceMax.value\n }\n });\n\n equitySliderInstance.value.set(equity.value);\n equitySliderInstance.value.on('slide', function (val) {\n return equity.value = Number(val[0]);\n });\n };\n\n var initRepaymentPeriodSlider = function initRepaymentPeriodSlider() {\n\n if (repaymentPeriodSliderInstance.value) {\n repaymentPeriodSliderInstance.value.destroy();\n }\n\n repaymentPeriodSliderInstance.value = noUiSlider.create(repaymentPeriodSlider.value, {\n start: 1,\n step: 1,\n connect: [true, false],\n format: {\n to: noUiToValueFormatter,\n from: noUiFromValueFormatter\n },\n range: {\n 'min': 0,\n 'max': repaymentPeriodMax.value\n }\n });\n\n repaymentPeriodSliderInstance.value.set(repaymentPeriod.value);\n repaymentPeriodSliderInstance.value.on('slide', function (val) {\n return repaymentPeriod.value = Number(val[0]);\n });\n };\n\n var showAndFocusCarPriceInput = async function showAndFocusCarPriceInput() {\n showCarPriceInput.value = true;\n await nextTick();\n carPriceInput.value.focus();\n };\n\n var showAndFocusEquityInput = async function showAndFocusEquityInput() {\n showEquityInput.value = true;\n await nextTick();\n equityInput.value.focus();\n };\n\n var showAndFocusRepaymentPeriodInput = async function showAndFocusRepaymentPeriodInput() {\n showRepaymentPeriodInput.value = true;\n await nextTick();\n repaymentPeriodInput.value.focus();\n };\n\n var onCarPriceInput = function onCarPriceInput(e) {\n var val = Number(carPrice.value.replace(/[^\\d]/g, function () {\n return '';\n }));\n\n if (val > carPriceMax.value) {\n val = carPriceMax.value;\n }\n\n carPrice.value = val;\n carPriceSliderInstance.value.set(val);\n };\n\n var onEquityInput = function onEquityInput(e) {\n var value = Number(equity.value.replace(/[^\\d]/g, function () {\n return '';\n }));\n\n if (value > carPrice.value) {\n value = carPrice.value;\n }\n\n equity.value = value;\n equitySliderInstance.value.set(val);\n };\n\n var onRepaymentPeriodInput = function onRepaymentPeriodInput(e) {\n var value = isNaN(e.data) ? 1 : Number(e.data);\n\n if (value > repaymentPeriodMax.value) {\n value = repaymentPeriodMax.value;\n }\n\n if (value < 1) {\n value = 1;\n }\n\n repaymentPeriod.value = value;\n repaymentPeriodSliderInstance.value.set(value);\n };\n\n var noUiToValueFormatter = function noUiToValueFormatter(value) {\n return Number(value).toFixed();\n };\n\n var noUiFromValueFormatter = function noUiFromValueFormatter(value) {\n return value;\n };\n\n var displayPrice = function displayPrice(value) {\n var round = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (isNaN(value) || value === Infinity) {\n return '-';\n }\n\n if (round) {\n value = Math.round(value);\n }\n\n return numeral(value).format('0,0[.]00 $');\n };\n\n var getVehicleData = async function getVehicleData() {\n if (carRegistrationNumber.length < 4) {\n return;\n }\n\n carDetailsError.value = false;\n\n try {\n var response = await axios.get('/finansiering/bilinfo?regNr=' + carRegistrationNumber.value);\n\n var registeredDate = new Date(Date.parse(response.data.registeredDate));\n\n car.value.model = response.data.model;\n car.value.brand = response.data.brand;\n car.value.year = registeredDate.getFullYear();\n car.value.regnumber = carRegistrationNumber.value;\n } catch (err) {\n car.value.model = '';\n car.value.brand = '';\n car.value.year = '';\n car.value.regnumber = '';\n\n carDetailsError.value = true;\n }\n };\n\n var getPaymentPlan = getInterestRateFactory();\n\n var sendApplication = async function sendApplication() {\n var _data;\n\n var data = (_data = {\n repaymentPeriod: repaymentPeriod.value,\n carPrice: carPrice.value,\n equity: equity.value,\n carDecided: carDecided.value,\n carRegistrationNumber: carRegistrationNumber.value,\n finnCode: finnCode.value,\n car: car.value,\n clientColoaner: clientColoaner.value,\n clientName: clientName.value,\n clientDateOfBirth: clientDateOfBirth.value,\n clientEmail: clientEmail.value,\n clientPhone: clientPhone.value,\n clientAmcarMember: clientAmcarMember.value,\n clientMemberId: clientMemberId.value\n }, _defineProperty(_data, 'clientColoaner', clientColoaner.value), _defineProperty(_data, 'coloanerName', coloanerName.value), _defineProperty(_data, 'coloanerDateOfBirth', coloanerDateOfBirth.value), _defineProperty(_data, 'coloanerEmail', coloanerEmail.value), _defineProperty(_data, 'coloanerPhone', coloanerPhone.value), _defineProperty(_data, 'loanAmount', loan.value), _data);\n\n try {\n var response = await axios.post('/finansiering/billan', data);\n\n currentStep.value++;\n } catch (err) {\n console.log(err);\n }\n };\n\n // return values to template\n return {\n // statics\n termFee: termFee,\n registrationFee: registrationFee,\n establishmentFee: establishmentFee,\n carPriceMax: carPriceMax,\n repaymentPeriodMax: repaymentPeriodMax,\n\n // inputs\n repaymentPeriod: repaymentPeriod,\n carPrice: carPrice,\n equity: equity,\n carDecided: carDecided,\n carRegistrationNumber: carRegistrationNumber,\n finnCode: finnCode,\n car: car,\n clientColoaner: clientColoaner,\n clientName: clientName,\n clientDateOfBirth: clientDateOfBirth,\n clientEmail: clientEmail,\n clientPhone: clientPhone,\n clientAmcarMember: clientAmcarMember,\n clientMemberId: clientMemberId,\n coloanerName: coloanerName,\n coloanerDateOfBirth: coloanerDateOfBirth,\n coloanerEmail: coloanerEmail,\n coloanerPhone: coloanerPhone,\n\n // element refs\n carPriceInput: carPriceInput,\n carPriceSlider: carPriceSlider,\n equityInput: equityInput,\n equitySlider: equitySlider,\n repaymentPeriodInput: repaymentPeriodInput,\n repaymentPeriodSlider: repaymentPeriodSlider,\n\n // state\n currentStep: currentStep,\n showCarPriceInput: showCarPriceInput,\n showEquityInput: showEquityInput,\n showRepaymentPeriodInput: showRepaymentPeriodInput,\n carDetailsError: carDetailsError,\n\n // sliders\n carPriceSliderInstance: carPriceSliderInstance,\n equitySliderInstance: equitySliderInstance,\n repaymentPeriodSliderInstance: repaymentPeriodSliderInstance,\n\n // computed\n nominalInterestRate: nominalInterestRate,\n interestRate: interestRate,\n repaymentPeriodInMonths: repaymentPeriodInMonths,\n loan: loan,\n loanTotal: loanTotal,\n percentageEquity: percentageEquity,\n sumPerMonth: sumPerMonth,\n isStep1Valid: isStep1Valid,\n isStep2Valid: isStep2Valid,\n\n // methods\n showAndFocusCarPriceInput: showAndFocusCarPriceInput,\n showAndFocusEquityInput: showAndFocusEquityInput,\n showAndFocusRepaymentPeriodInput: showAndFocusRepaymentPeriodInput,\n onCarPriceInput: onCarPriceInput,\n onEquityInput: onEquityInput,\n onRepaymentPeriodInput: onRepaymentPeriodInput,\n displayPrice: displayPrice,\n getVehicleData: getVehicleData,\n sendApplication: sendApplication,\n\n grade1NominalInterestRate: grade1NominalInterestRate,\n grade2NominalInterestRate: grade2NominalInterestRate,\n grade3NominalInterestRate: grade3NominalInterestRate\n };\n }\n}).mount('#car-loan-app');\n\nfunction getInterestRateFactory() {\n var effectiveInterestRateResult = 0;\n var iteration = 0;\n var oldInterestRate = 0;\n var difference = 0;\n var positive = 0;\n var negative = 0;\n\n var getInterestRate = function getInterestRate(paymentArray, interestRate) {\n iteration++;\n\n var nvp = 0;\n var calcArray = interestRate / 100;\n\n if (iteration > 200) {\n return false;\n }\n\n nvp = paymentArray[0];\n\n for (i = 1; i < paymentArray.length; i++) {\n nvp += paymentArray[i] / Math.pow(1 + calcArray, i);\n }\n\n if (positive === 0 || negative === 0) {\n if (nvp < 0) {\n negative++;\n oldInterestRate = interestRate;\n interestRate += 1;\n } else {\n positive++;\n oldInterestRate = interestRate;\n interestRate -= 1;\n }\n\n getInterestRate(paymentArray, interestRate);\n } else {\n difference = Math.abs(oldInterestRate - interestRate);\n\n oldInterestRate = interestRate;\n\n if (Math.floor(nvp) == 0 || Math.ceil(nvp) == 0) {\n calcArray = calcArray * 100;\n calcArray = calcArray * 100 / 100;\n effectiveInterestRateResult = calcArray;\n } else if (nvp > 0) {\n interestRate -= difference / 2;\n getInterestRate(paymentArray, interestRate);\n } else {\n interestRate += difference / 2;\n getInterestRate(paymentArray, interestRate);\n }\n }\n };\n\n var getAnnuity = function getAnnuity(i, n, p) {\n return i * p * Math.pow(1 + i, n) / (1 - Math.pow(1 + i, n));\n };\n\n return function getResult(loanAmount, paymentYear, installmentsPerYear, estabFee, mortLoanFee, termFee, interestRate) {\n var sumPayment = [];\n var resultArray = [];\n var calculationArray = [];\n var effectiveInterestRate = 0;\n var initialRateOnePaymentPeriod = interestRate / installmentsPerYear;\n var calculationYear = 1;\n var calculationPeriod = 1;\n\n effectiveInterestRateResult = 0;\n iteration = 0;\n oldInterestRate = 0;\n difference = 0;\n positive = 0;\n negative = 0;\n\n var annuity = getAnnuity(interestRate / installmentsPerYear / 100, installmentsPerYear * paymentYear, loanAmount);\n\n calculationArray[\"year\"] = 1;\n calculationArray[\"period\"] = 0;\n calculationArray[\"installment\"] = loanAmount;\n calculationArray[\"fees\"] = parseFloat(\"-\" + (estabFee + mortLoanFee));\n calculationArray[\"interest\"] = 0;\n calculationArray[\"sumPayment\"] = calculationArray[\"installment\"] + calculationArray[\"interest\"] + calculationArray[\"fees\"];\n calculationArray[\"remainingDebt\"] = parseFloat(\"-\" + loanAmount);\n resultArray[0] = calculationArray;\n\n for (var _i = 1; _i <= installmentsPerYear * paymentYear; _i++) {\n calculationArray = [];\n calculationArray[\"year\"] = calculationYear;\n calculationArray[\"period\"] = calculationPeriod;\n\n if (calculationPeriod == installmentsPerYear) {\n calculationYear++;\n calculationPeriod = 1;\n } else {\n calculationPeriod++;\n }\n\n calculationArray[\"interest\"] = resultArray[_i - 1][\"remainingDebt\"] * initialRateOnePaymentPeriod / 100;\n calculationArray[\"installment\"] = annuity - calculationArray[\"interest\"];\n calculationArray[\"fees\"] = parseFloat(\"-\" + termFee);\n calculationArray[\"sumPayment\"] = calculationArray[\"installment\"] + calculationArray[\"interest\"] + calculationArray[\"fees\"];\n calculationArray[\"remainingDebt\"] = (resultArray[_i - 1][\"remainingDebt\"] - calculationArray[\"installment\"]).toFixed(10);\n\n resultArray[_i] = calculationArray;\n }\n\n for (i = 0; i < resultArray.length; i++) {\n sumPayment[i] = resultArray[i][\"sumPayment\"];\n }\n\n getInterestRate(sumPayment, 1);\n\n effectiveInterestRateResult = effectiveInterestRateResult / 100;\n\n effectiveInterestRate = (Math.pow(1 + effectiveInterestRateResult, installmentsPerYear) - 1) * 100;\n effectiveInterestRate = Math.round(effectiveInterestRate * 100) / 100;\n\n return {\n effectiveInterestRate: effectiveInterestRate,\n plan: resultArray\n };\n };\n}"]}