1function checkCameraSupport(context) { 2 if (!app.device.desktop) { 3 context.resolve(); 4 } 5 6 if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) { 7 // Firefox 38+ seems having support of enumerateDevices 8 navigator.enumerateDevices = function (callback) { 9 navigator.mediaDevices.enumerateDevices().then(callback); 10 }; 11 } 12 13 var MediaDevices = []; 14 var isHTTPs = location.protocol === 'https:'; 15 var canEnumerate = false; 16 17 if (typeof MediaStreamTrack !== 'undefined' && 'getSources' in MediaStreamTrack) { 18 canEnumerate = true; 19 } else if (navigator.mediaDevices && !!navigator.mediaDevices.enumerateDevices) { 20 canEnumerate = true; 21 } 22 23 var hasMicrophone = false; 24 var hasSpeakers = false; 25 var hasWebcam = false; 26 27 var isMicrophoneAlreadyCaptured = false; 28 var isWebcamAlreadyCaptured = false; 29 30 function checkDeviceSupport(callback) { 31 if (!canEnumerate) { 32 return; 33 } 34 35 if (!navigator.enumerateDevices && window.MediaStreamTrack && window.MediaStreamTrack.getSources) { 36 navigator.enumerateDevices = window.MediaStreamTrack.getSources.bind(window.MediaStreamTrack); 37 } 38 39 if (!navigator.enumerateDevices && navigator.enumerateDevices) { 40 navigator.enumerateDevices = navigator.enumerateDevices.bind(navigator); 41 } 42 43 if (!navigator.enumerateDevices) { 44 if (callback) { 45 callback(); 46 } 47 return; 48 } 49 50 MediaDevices = []; 51 navigator.enumerateDevices(function (devices) { 52 devices.forEach(function (_device) { 53 var device = {}; 54 for (var d in _device) { 55 device[d] = _device[d]; 56 } 57 58 if (device.kind === 'audio') { 59 device.kind = 'audioinput'; 60 } 61 62 if (device.kind === 'video') { 63 device.kind = 'videoinput'; 64 } 65 66 var skip; 67 MediaDevices.forEach(function (d) { 68 if (d.id === device.id && d.kind === device.kind) { 69 skip = true; 70 } 71 }); 72 73 if (skip) { 74 return; 75 } 76 77 if (!device.deviceId) { 78 device.deviceId = device.id; 79 } 80 81 if (!device.id) { 82 device.id = device.deviceId; 83 } 84 85 if (!device.label) { 86 device.label = 'Please invoke getUserMedia once.'; 87 if (!isHTTPs) { 88 device.label = 'HTTPs is required to get label of this ' + device.kind + ' device.'; 89 } 90 } else { 91 if (device.kind === 'videoinput' && !isWebcamAlreadyCaptured) { 92 isWebcamAlreadyCaptured = true; 93 } 94 95 if (device.kind === 'audioinput' && !isMicrophoneAlreadyCaptured) { 96 isMicrophoneAlreadyCaptured = true; 97 } 98 } 99 100 if (device.kind === 'audioinput') { 101 hasMicrophone = true; 102 } 103 104 if (device.kind === 'audiooutput') { 105 hasSpeakers = true; 106 } 107 108 if (device.kind === 'videoinput') { 109 hasWebcam = true; 110 } 111 112 // there is no 'videoouput' in the spec. 113 114 MediaDevices.push(device); 115 }); 116 117 if (callback) { 118 callback(); 119 } 120 }); 121 } 122 123 // check for microphone/camera support! 124 checkDeviceSupport(function () { 125 if (hasWebcam && hasMicrophone) { 126 context.resolve(); 127 } else { 128 let alert; 129 let initialUrl = mainView.router.initialUrl; 130 131 if (!hasWebcam && !hasMicrophone) { 132 alert = 'Device does not support camera and microphone'; 133 } else if (!hasWebcam) { 134 alert = 'Device does not support camera'; 135 } else if (!hasMicrophone) { 136 alert = 'Device does not support microphone'; 137 } 138 139 app.dialog.alert(alert, function () { 140 context.reject(); 141 142 if (initialUrl.indexOf('registration') >= 0) { 143 mainView.router.navigate('/home'); 144 } 145 }); 146 } 147 }); 148} 149 150function checkiOS(context) { 151 if (app.device.ios) { 152 context.reject(); 153 window.open(DATA.appstore_url, '_blank'); 154 } else { 155 context.resolve(); 156 } 157} 158 159function checkReload() { 160 let path = getCurrentRoute('path'); 161 let pathRegistration = path.indexOf('registration') >= 0; 162 163 if ((pathRegistration || isApp()) && !isLocal()) { 164 return 'Are you sure?'; 165 } 166} 167 168function createAutoCompleteLocation(autocompleteId, setAutoComplete) { 169 return app.autocomplete.create({ 170 openIn: 'popup', 171 openerEl: '#' + autocompleteId, 172 limit: 50, 173 searchbarPlaceholder: 'Ketik nama kelurahan / kode pos..', 174 notFoundText: 'Kelurahan / kode pos tidak ditemukan', 175 closeOnSelect: true, 176 autoFocus: true, 177 source: function (query, render) { 178 let results = []; 179 let location = store.state.registration.location; 180 181 if (location) { 182 handleRender(location); 183 } else { 184 app.request({ 185 url: 'app/json/location.json', 186 method: 'GET', 187 dataType: 'json', 188 data: { 189 query: query 190 }, 191 success: function (data) { 192 store.state.registration.location = data; 193 handleRender(data); 194 } 195 }); 196 } 197 198 function handleRender(data) { 199 for (var i = 0; i < data.length; i++) { 200 let summary = data[i].summary; 201 202 if (summary.toLowerCase().indexOf(query.toLowerCase()) >= 0) { 203 results.push(summary); 204 } 205 206 if (results.length == 50) break; 207 } 208 209 // if (results.length == 0 && query != '') { 210 // results.push(query); 211 // } 212 213 render(results); 214 } 215 }, 216 on: { 217 change: function (value) { 218 setAutoComplete(value[0]); 219 } 220 } 221 }); 222} 223 224function formatBytes(bytes, decimals = 2) { 225 if (bytes === 0) return '0 Bytes'; 226
227 const k = 1024; 228 const dm = decimals < 0 ? 0 : decimals; 229 const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; 230 231 const i = Math.floor(Math.log(bytes) / Math.log(k)); 232 233 return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; 234} 235 236async function getCameraDevice(type) { 237 return await navigator.mediaDevices.enumerateDevices() 238 .then((devices) => { 239 let deviceIds = {}; 240 241 for (const device of devices) { 242 if (device.kind == 'videoinput') { 243 deviceIds[device.label] = device.deviceId; 244 } 245 } 246 247 if (type == 'back') { 248 return deviceIds['camera2 0, facing back']; 249 } else { 250 return deviceIds['camera2 1, facing front']; 251 } 252 }); 253} 254 255function handleRegResponse(res) { 256 let data = res.data || res; 257 258 // console.log('res: ', data); 259 app.dialog.close(); 260 261 if (data.status == 'OK') { 262 let regid = data['reg-id']; 263 let levelid = data['level-id']; 264 let sessionid = data['sessionid'] 265 266 if (levelid) store.state.registration.levelid = levelid; 267 if (regid) store.state.registration.regid = regid; 268 if (sessionid) store.state.registration.sessionid = sessionid; 269 270 return data; 271 } else { 272 let errcode = data.errcode; 273 274 // console.log('errcode: ', errcode); 275 276 switch (errcode) { 277 case 'ACCESS-TIMEOUT': 278 case 'ERR-SYS': 279 case 'SESSION-INVALID': 280 app.dialog.alert(data.message, errcode, function () { 281 mainView.router.navigate('/home', { 282 clearPreviousHistory: true 283 }); 284 }); 285 break; 286 default: 287 return data; 288 } 289 } 290} 291 292function navigateReg(route) { 293 if (isLocal() && false) { 294 mainView.router.navigate(route); 295 } else { 296 let data = getRegData(); 297 298 postReg('/update_data', data) 299 .then((res) => { 300 mainView.router.navigate(route); 301 }); 302 } 303} 304 305function navigateOpeningAccount() { 306 setTimeout(() => { 307 let path = getCurrentRoute('path'); 308 309 if (path == '/home') { 310 scrollToElement('#section-opening-account'); 311 } else { 312 mainView.router.navigate('/home'); 313 314 setTimeout(() => { 315 scrollToElement('#section-opening-account'); 316 }, 300); 317 } 318 }, 300); 319} 320 321async function postReg(path, data = {}, headers, json = true) { 322 const pageName = getCurrentRoute('name'); 323 const registration = store.state.registration; 324 const { 325 levelid, regid, sessionid 326 } = registration; 327 const tokenId = registration.data.phone; 328 const url = (path == '/hello_ipot' ? DATA.registration_url : registration.url) + path; 329 330 app.dialog.preloader(); 331 332 if (json) { 333 app.utils.extend(data, { 334 'level-id': levelid, 335 'pageName': pageName, 336 'reg-id': regid, 337 'token-id': tokenId, 338 'sessionid': sessionid 339 }); 340 341 return await app.request.postJSON(url, data) 342 .then((res) => { 343 return handleRegResponse(res); 344 }) 345 .catch((err) => { 346 app.dialog.close(); 347 }); 348 } else { 349 app.utils.extend(headers, { 350 'level-id': levelid, 351 'pageName': pageName, 352 'reg-id': regid, 353 'token-id': tokenId, 354 'sessionid': sessionid 355 }); 356 357 return await app.request({ 358 url, 359 method: 'POST', 360 dataType: 'json', 361 headers, 362 processData: false, 363 contentType: 'application/octet-stream', 364 data, 365 error: function (xhr, status, message) { 366 app.dialog.close(); 367 app.dialog.alert('Gagal'); 368 }, 369 success: async function (res, status, xhr) {
370 return await handleRegResponse(res); 371 } 372 }); 373 } 374} 375 376function preventDirectURL(context) { 377 const router = this; 378 379 if (Object.keys(context.from).length == 0) { 380 context.reject(); 381 this.navigate('/registration', { 382 clearPreviousHistory: true 383 }); 384 } else { 385 if (context.from.name == 'Finish') { 386 context.reject(); 387 this.navigate('/home'); 388 } else { 389 context.resolve(); 390 } 391 } 392} 393 394async function createBlob(src) { 395 return await fetch(src) // Retrieve its body as ReadableStream 396 .then(response => { 397 var reader = response.body.getReader(); 398 return new ReadableStream({ 399 start(controller) { 400 return pump(); 401 function pump() { 402 return reader.read().then(({ done, value }) => { 403 // When no more data needs to be consumed, close the stream 404 if (done) { 405 controller.close(); 406 return; 407 } 408 // Enqueue the next data chunk into our target stream 409 controller.enqueue(value); 410 return pump(); 411 }); 412 } 413 } 414 }) 415 }) 416 .then(stream => new Response(stream)) 417 .then(response => response.blob()) 418 .then(blob => { 419 return blob; 420 }); 421} 422 423function getRegistrationRoute(res, route) { 424 switch (res.message) { 425 case 'goto_bank': 426 return '/registration/data-tambahan-a'; 427 case 'goto_selfie': 428 return '/registration/take-picture'; 429 case 'goto_ktp': 430 return '/registration/take-ektp'; 431 case 'goto_ttd': 432 return '/registration/take-specimen'; 433 case 'goto_video': 434 return '/registration/take-video?name=' + res.data.user_name; 435 case 'goto_info': 436 return '/registration/finish/?info=' + res.data.info + '&status=' + res.data.oastatus + 437 '&userid=' + res.data.user_id + '&username=' + res.data.user_name; 438 default: 439 return route; 440 } 441} 442 443function getRegData() { 444 const reg = store.state.registration; 445 446 let data = {}; 447 448 data['reg-id'] = reg.regid || ''; 449 data['token-id'] = reg.data.phone || ''; 450 data['OneSignalID'] = ''; 451 452 data['Sumber Kekayaan Warisan'] = 'false'; 453 data['Sumber Kekayaan Tabungan'] = 'false'; 454 data['Sumber Kekayaan Hasil Usaha'] = 'false'; 455 data['Sumber Kekayaan Hibah'] = 'false'; 456 data['Sumber Kekayaan Gaji'] = 'false'; 457 data['Sumber Kekayaan Lainnya'] = ''; 458 459 data['Email'] = reg.data.email || ''; 460 data['Handphone'] = reg.data.phone || ''; 461 462 if (reg.data.nik) { 463 data['EKTP'] = reg.data.nik.replace(/-/g, '') || ''; 464 } else { 465 data['EKTP'] = reg.data.nik || ''; 466 } 467 468 data['nama'] = reg.data.name || ''; 469 470 data['SumberDana'] = reg.data.fund || ''; 471 472 switch (reg.data.fund) { 473 case 'Orang Tua': 474 data['Sumber Kekayaan Warisan'] = 'true'; 475 data['Pekerjaan'] = 'Pelajar/Mahasiswa'; 476 data['Jabatan'] = 'Pelajar'; 477 data['Bidang Usaha'] = 'Pendidikan'; 478 data['Nama Sekolah'] = reg.data['school-name'] || ''; 479 data['Telp Sekolah'] = reg.data['school-phone'] || ''; 480 data['Alamat Sekolah'] = reg.data['school-address'] || ''; 481 data['KodePos Sekolah'] = reg.data['school-postal-code'] || ''; 482 483 data['BO'] = { 484 'Nama': reg.data.funder || '', 485 'Pekerjaan': reg.data.job || '', 486 'Jabatan': reg.data.title || 'Pemilik', 487 'Nama Perusahaan': reg.data['company-name'] || '', 488 'Telp Kantor ': reg.data['company-phone'] || '', 489 'Bidang Usaha': reg.data['company-sector'] || '', 490 'Alamat Kantor': reg.data['company-address'] || '', 491 'KodePos Kantor': reg.data['company-postal-code'] || '', 492 'Penghasilan': reg.data.income || '' 493 }; 494 495 // data['Nama OrangTua'] = reg.data.funder || ''; 496 // data['Pekerjaan OrangTua'] = reg.data.job || ''; 497 // data['Jabatan OrangTua'] = reg.data.title || ''; 498 // data['Nama Perusahaan OrangTua'] = reg.data['company-name'] || ''; 499 // data['Telp Kantor OrangTua'] = reg.data['company-phone'] || ''; 500 // data['Bidang Usaha OrangTua'] = reg.data['company-sector'] || ''; 501 // data['Alamat Kantor OrangTua'] = reg.data['company-address'] || ''; 502 // data['KodePos Kantor OrangTua'] = reg.data['company-postal-code'] || ''; 503 // data['Penghasilan OrangTua'] = reg.data.income || ''; 504 505 break; 506 case 'Pasangan': 507 data['Sumber Kekayaan Tabungan'] = 'true'; 508 data['Pekerjaan'] = 'Ibu Rumah Tangga'; 509 data['Jabatan'] = 'Ibu/Bapak Rumah Tangga';
510 data['Nama Perusahaan'] = 'Rumah Tangga'; 511 data['Bidang Usaha'] = 'Lainnya'; 512 data['Telp Kantor'] = '02112345678'; 513 data['Alamat Kantor'] = 'Jalan'; 514 data['KodePos Kantor'] = reg.data['company-postal-code'] || '10210'; 515 516 data['BO'] = { 517 'Nama': reg.data.funder || '', 518 'Pekerjaan': reg.data.job || '', 519 'Jabatan': reg.data.title || 'Pemilik', 520 'Nama Perusahaan': reg.data['company-name'] || '', 521 'Telp Kantor ': reg.data['company-phone'] || '', 522 'Bidang Usaha': reg.data['company-sector'] || '', 523 'Alamat Kantor': reg.data['company-address'] || '', 524 'KodePos Kantor': reg.data['company-postal-code'] || '', 525 'Penghasilan': reg.data.income || '' 526 }; 527 528 // data['Nama Pasangan'] = reg.data.funder || ''; 529 // data['Pekerjaan Pasangan'] = reg.data.job || ''; 530 // data['Jabatan Pasangan'] = reg.data.title || ''; 531 // data['Nama Perusahaan Pasangan'] = reg.data['company-name'] || ''; 532 // data['Telp Kantor Pasangan'] = reg.data['company-phone'] || ''; 533 // data['Bidang Usaha Pasangan'] = reg.data['company-sector'] || ''; 534 // data['Alamat Kantor Pasangan'] = reg.data['company-address'] || ''; 535 // data['KodePos Kantor Pasangan'] = reg.data['company-postal-code'] || ''; 536 // data['Penghasilan Pasangan'] = reg.data.income || ''; 537 538 break; 539 default: 540 data['Pekerjaan'] = reg.data.job || ''; 541 data['Jabatan'] = reg.data.title || ''; 542 data['Nama Perusahaan'] = reg.data['company-name'] || ''; 543 data['Telp Kantor'] = reg.data['company-phone'] || ''; 544 data['Bidang Usaha'] = reg.data['company-sector'] || ''; 545 data['Alamat Kantor'] = reg.data['company-address'] || ''; 546 data['KodePos Kantor'] = reg.data['company-postal-code'] || ''; 547 data['Penghasilan'] = reg.data.income || ''; 548 549 if (reg.data.fund == 'Gaji') { 550 data['Sumber Kekayaan Gaji'] = 'true'; 551 } else if (reg.data.fund == 'Hasil Usaha') { 552 data['Sumber Kekayaan Hasil Usaha'] = 'true'; 553 } else if (reg.data.fund == 'Dana Pensiun') { 554 data['Sumber Kekayaan Tabungan'] = 'true'; 555 } 556 557 break; 558 } 559 560 if (reg.data.npwp) { 561 data['NPWP'] = reg.data.npwp.replace(/-/g, '').replace(/\./g, '') || ''; 562 } else { 563 data['NPWP'] = reg.data.npwp || ''; 564 } 565 566 data['Tujuan BukaRekening'] = reg.data.goal || ''; 567 568 if (reg.data.fatca) { 569 data['Facta'] = reg.data.fatca[0] == 'on' ? 'true' : 'false'; 570 } else { 571 data['Facta'] = 'false'; 572 } 573 574 if (reg.data.correspondence == 'Lainnya') { 575 data['Alamat Korespondensi'] = reg.data['correspondence-address'] || ''; 576 data['KodePos Korespondensi'] = reg.data['correspondence-postal-code'] || ''; 577 } else { 578 data['Korespondensi'] = reg.data.correspondence || ''; 579 } 580 581 data['Nama Bank Pribadi'] = reg.data['account-name'] || ''; 582 data['No Rekening Pribadi'] = reg.data['account-number'] || ''; 583 data['Ibu Kandung'] = reg.data['mother-maiden-name'] || ''; 584 data['Lama Tinggal Di Alamat Terakhir'] = reg.data.year || ''; 585 586 if (reg.data['radio-other-account-name'] == 'Y') { 587 data['Pemilikan Rekening Bank Lain'] = 'true'; 588 data['Nama Bank Lainnya'] = reg.data['other-account-name'] || ''; 589 data['Lama Kepemilikan Rekening Bank Lain'] = reg.data['other-account-name-year'] || ''; 590 } else { 591 data['Pemilikan Rekening Bank Lain'] = 'false'; 592 } 593 594 if (reg.data['radio-country'] == 'Y') { 595 data['Hubungan Usaha Di Luar Negeri'] = 'true'; 596 data['Negara Tempat Usaha'] = reg.data.country || ''; 597 } else { 598 data['Hubungan Usaha Di Luar Negeri'] = 'false'; 599 } 600 601 data['Username'] = reg.data.username || ''; 602 603 data['Syariah'] = 'false'; 604 data['data_version'] = '4';
605 data['indopremieraggreementinfo'] = 'INDOPREMIER-IPOT_V1.0_20260121'; 606 data['rdnbankagreementinfo'] = '15-aggreement-rdn-non-bca.html'; 607 608 return data; 609} 610 611async function requestSheetDisagree(title) { 612 return await app.request.get('app/ipot_oa/template/sheet_disagree.html') 613 .then((res) => { 614 let content = res.data; 615 616 return app.sheet.create({ 617 content, 618 swipeToClose: true, 619 backdrop: true, 620 on: { 621 open: function (sheet) { 622 $$('#account-type').text(title); 623 624 if (app.width < 768) { 625 $$('#button-disagree').addClass('margin-bottom-half'); 626 } 627 628 $$('#button-disagree').on('click', function (e) { 629 sheet.disagree = true; 630 }); 631 }, 632 closed: function (sheet) { 633 if (sheet.disagree) { 634 mainView.router.navigate('/home/', { 635 clearPreviousHistory: true 636 }); 637 } 638 } 639 } 640 }); 641 }); 642} 643 644function setOcrData(OCR, custom) { 645 // console.log('setOcrData: ', [OCR, custom]); 646 647 if (custom) { 648 if (custom.customBirthDate) OCR.TGL_LHR = custom.customBirthDate; 649 if (custom.customJob) OCR.JENIS_PKRJN = custom.customJob; 650 } 651 652 let { 653 PROP_NAME, 654 KAB_NAME, 655 NIK, 656 NAMA_LGKP, 657 TMPT_LHR, 658 TGL_LHR, 659 JENIS_KLMIN, 660 GOL_DARAH, 661 ALAMAT, 662 NO_RT, 663 NO_RW, 664 KEL_NAME, 665 KEC_NAME, 666 AGAMA, 667 STATUS_KAWIN, 668 JENIS_PKRJN, 669 KEWARGANEGARAAN, 670 BERLAKU_HGA, 671 NAMA_LGKP_IBU 672 } = OCR; 673 674 app.request({ 675 url: 'app/json/job.json', 676 method: 'GET', 677 dataType: 'json', 678 success: function (data) { 679 let key = 'karyawan swasta'; 680 681 if (JENIS_PKRJN) { 682 key = JENIS_PKRJN.toLowerCase(); 683 } 684 685 if (!data[key]) { 686 data[key] = { 687 bidang_usaha: '', fund: 'Gaji', job: 'Karyawan Swasta', jabatan: '' 688 }; 689 } 690 691 // console.log('job: ', key); 692 // console.log('job data: ', data[key]); 693 const { 694 bidang_usaha, fund, job, jabatan 695 } = data[key]; 696 let age; 697 698 if (TGL_LHR) { 699 age = _calculateAge(new Date(TGL_LHR)); 700 } else { 701 age = 35; 702 } 703 704 if (age) { 705 let penghasilan; 706 707 if (age < 26) { 708 penghasilan = 'Lebih besar 50 Juta dan kurang atau sama dengan 100 Juta'; 709 } else if (age >= 26 && age < 31) { 710 penghasilan = 'Lebih besar 100 Juta dan kurang atau sama dengan 250 Juta'; 711 } else if (age >= 31 && age < 41) { 712 penghasilan = 'Lebih besar 250 Juta dan kurang atau sama dengan 400 Juta'; 713 } else if (age >= 41 && age < 51) { 714 penghasilan = 'Lebih besar 400 Juta dan kurang atau sama dengan 500 Juta'; 715 } else { 716 penghasilan = 'Lebih besar 500 Juta dan kurang atau sama dengan 1 Milyar'; 717 } 718 719 let dataPenghasilan = app.form.getFormData('form-income'); 720 721 if (dataPenghasilan) { 722 dataPenghasilan.income = penghasilan; 723 app.form.storeFormData('form-income', dataPenghasilan); 724 app.utils.extend(app.store.state.registration.data, dataPenghasilan); 725 } else { 726 const data = { 727 income: penghasilan 728 }; 729 app.form.storeFormData('form-income', data); 730 app.utils.extend(app.store.state.registration.data, data); 731 } 732 } 733 734 if (jabatan) { 735 const data = { 736 title: jabatan 737 }; 738 app.form.storeFormData('form-title', data); 739 app.utils.extend(app.store.state.registration.data, data); 740 } else { 741 let jbt; 742 743 switch (job) { 744 case 'Karyawan Swasta': 745 if (age < 31) { 746 jbt = 'Staff'; 747 } else { 748 jbt = 'Manajer'; 749 } 750 break; 751 case 'Pegawai BUMN/BUMD': 752 if (age < 31) { 753 jbt = 'Staff'; 754 } else { 755 jbt = 'Manajer'; 756 } 757 break; 758 case 'PNS': 759 if (age < 26) { 760 jbt = 'PNS Esselon 4'; 761 } else if (age >= 31 && age < 41) { 762 jbt = 'PNS Esselon 3'; 763 } else { 764 jbt = 'PNS Esselon 2'; 765 } 766 break; 767 case 'TNI / Polri': 768 if (age < 41) { 769 jbt = 'Staff Polsek/Polres'; 770 } else { 771 jbt = 'Perwira Tinggi'; 772 } 773 break; 774 default: 775 break; 776 } 777 778 if (jbt) { 779 const data = { 780 title: jbt 781 }; 782 app.form.storeFormData('form-title', data); 783 app.utils.extend(app.store.state.registration.data, data); 784 } 785 } 786 787 app.form.storeFormData('form-job', { 788 job 789 }); 790 791 app.form.storeFormData('form-fund', { 792 fund 793 }); 794 795 app.form.storeFormData('form-fund-awal', { 796 fund 797 }); 798 799 let data1 = { 800 job, fund 801 }; 802 app.utils.extend(app.store.state.registration.data, data1); 803 804 if (bidang_usaha && fund != 'Gaji' && fund != 'Orang Tua') { 805 const data = { 806 'company-sector': bidang_usaha 807 }; 808 809 app.form.storeFormData('form-company', data); 810 app.utils.extend(app.store.state.registration.data, data); 811 } 812 813 if (fund == 'Dana Pensiun') { 814 const data = { 815 title: 'Pensiun PNS Esselon 1/2' 816 }; 817 818 app.form.storeFormData('form-title', data); 819 app.utils.extend(app.store.state.registration.data, data); 820 } 821 } 822 }); 823} 824 825function _calculateAge(birthday) { 826 var ageDifMs = Date.now() - birthday.getTime(); 827 var ageDate = new Date(ageDifMs); 828 return Math.abs(ageDate.getUTCFullYear() - 1970); 829}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.