diff --git a/app/Http/Controllers/CustomersController.php b/app/Http/Controllers/CustomersController.php index 10b5c78..7b8f14c 100644 --- a/app/Http/Controllers/CustomersController.php +++ b/app/Http/Controllers/CustomersController.php @@ -173,6 +173,18 @@ class CustomersController extends Controller $no_pelanggan = $request->bangsa . substr($request->noic,6,2).'-'.$count; $detail_poskod = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/poskod/' . $request->poskod)->json(); + if(empty($detail_poskod)){ + + $detail_poskod = Http::withOptions(['verify' => config('app.api_verify')]) + ->post(config('api.url') . '/api/poskod', [ + 'poskod' => $request->poskod, + 'koddaerah' => $request->koddaerah, + 'kodnegeri' => $request->kodnegeri, + 'user' => auth()->user(), + ])->json(); + + } + $customer_info = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/customers/create/'. $auth_user['cawangan'],[ 'kodcaw' => $auth_user['cawangan'], 'nopelanggan' => $no_pelanggan, diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index cda0864..795194a 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -31,6 +31,7 @@ class HomeController extends Controller $auth_user = Auth::user(); $api_url = config('api.url'); + if(session()->has('iklan') && session()->get('iklan') == 0) { session()->put('iklan', 1); @@ -40,6 +41,7 @@ class HomeController extends Controller } } + if($auth_user['roles'] == 'teller'){ if($auth_user['role_harian'] == 'teller'){ $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json(); @@ -55,13 +57,14 @@ class HomeController extends Controller } } elseif($auth_user['roles'] == 'pc' || $auth_user['roles'] == 'ppc'){ + $countkhazanah = 0; $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json(); $gadai = Http::withOptions(['verify' => config('app.api_verify')])->get( config('api.url') .'/api/gadai/serah_marhun/khazanah/'. $auth_user['cawangan'])->json(); $listserah = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/listSerahMarhunController/'.$auth_user['cawangan'])->json(); $countkhazanah = sizeof($gadai) + sizeof($listserah); - + return view('homepage.khazanah.home',compact('cawangan_info','api_url','countkhazanah')); } else{ diff --git a/app/Http/Middleware/NoHttpCache.php b/app/Http/Middleware/NoHttpCache.php index d76a5eb..21392d2 100644 --- a/app/Http/Middleware/NoHttpCache.php +++ b/app/Http/Middleware/NoHttpCache.php @@ -31,10 +31,10 @@ class NoHttpCache /** * @var $headers \Symfony\Component\HttpFoundation\HeaderBag */ - $response->header('Pragma', 'no-cache'); - $response->header('Expires', 'Fri, 01 Jan 1990 00:00:00 GMT'); - $response->header('Cache-Control', 'no-cache, must-revalidate, no-store, max-age=0, private'); + $response->headers->set('Pragma', 'no-cache'); + $response->headers->set('Expires', 'Fri, 01 Jan 1990 00:00:00 GMT'); + $response->headers->set('Cache-Control', 'no-cache, must-revalidate, no-store, max-age=0, private'); return $response; } -} \ No newline at end of file +} diff --git a/config/filesystems.php b/config/filesystems.php index 94c8112..6298208 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -48,6 +48,11 @@ return [ 'root' => storage_path('app'), ], + 'supports' => [ + 'driver' => 'local', + 'root' => storage_path('drivers'), + ], + 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), diff --git a/public/js/iris-mykad-websocket-client-api.js b/public/js/iris-mykad-websocket-client-api.js index 6101f3d..a8af13b 100644 --- a/public/js/iris-mykad-websocket-client-api.js +++ b/public/js/iris-mykad-websocket-client-api.js @@ -1,258 +1,294 @@ -WebSocketManager = { - url:"", +WebSocketManager = { + url:"", init: function(url) { WebSocketManager.url = url; - }, - open: function(callback, slot) { + }, + open: function(callback, slot) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { - wsocket.send('{"Cmd":"OPEN","Slot":"'+ slot +'"}'); - }; + wsocket.send('{"Cmd":"OPEN","Slot":"'+ slot +'"}'); + }; wsocket.onmessage = function (evt) { var obj = JSON.parse(evt.data); wsocket.close(); callback(obj); - }; - - }, - listReader: function(callback) { + }; + + }, + listReader: function(callback) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { - wsocket.send('{"Cmd":"LIST_READER"}'); - }; + wsocket.send('{"Cmd":"LIST_READER"}'); + }; wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - var data = JSON.parse(obj.RespMessage); + var obj = JSON.parse(evt.data); + var data = JSON.parse(obj.RespMessage); wsocket.close(); callback(data, obj.RespCode); - }; - - }, + }; + + wsocket.onerror = evt => { + let hideLoader = () => { + let pageLoader = document.getElementById('page_loader'); + pageLoader.removeAttribute('class'); + }; + + hideLoader(); + wsocket.close(); + Swal.fire({ + icon: 'error', + title: 'MyKad driver/services tidak dapat dikesan, sila pasang driver', + html: ` +
+
+
+
+ `, + showCancelButton: false, + showConfirmButton: false, + willOpen: () => { + const yes = document.querySelector('button.btn-yes') + const download_driver = document.querySelector('button.btn-download-driver') + + yes.addEventListener('click', () => { + swal.close(); + }) + + download_driver.addEventListener('click', () => { + window.location.href = mykad_reader_driver_endpoint; + }) + } + }); + + }; + }, close: function(callback) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { wsocket.send('{"Cmd":"CLOSE"}'); - }; + }; wsocket.onmessage = function (evt) { var obj = JSON.parse(evt.data); wsocket.close(); callback(obj); }; - }, - verifyFPTemplate: function(callback, ThumbCode, Bas64FPLeft, Bas64FPRight) { + }, + verifyFPTemplate: function(callback, ThumbCode, Bas64FPLeft, Bas64FPRight) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { - wsocket.send('{"Cmd":"VERIFY_FP_TEMPLATE","ThumbCode":"'+ ThumbCode +'","Bas64FPLeft":"'+ Bas64FPLeft +'","Bas64FPRight":"'+ Bas64FPRight +'"}'); - }; + wsocket.send('{"Cmd":"VERIFY_FP_TEMPLATE","ThumbCode":"'+ ThumbCode +'","Bas64FPLeft":"'+ Bas64FPLeft +'","Bas64FPRight":"'+ Bas64FPRight +'"}'); + }; wsocket.onmessage = function (evt) { var obj = JSON.parse(evt.data); wsocket.close(); - callback(obj.RespCode, obj.RespMessage); - }; - + callback(obj.RespCode, obj.RespMessage); + }; + }, - readMyKad: function (callback) { + readMyKad: function (callback) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { - wsocket.send('{"Cmd":"READ_MYKAD"}'); - }; + wsocket.send('{"Cmd":"READ_MYKAD"}'); + }; wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - var data = JSON.parse(obj.RespMessage); - wsocket.close(); - callback(data, obj.RespCode, obj.RespSW12AndApiName); - }; - }, - readAllText: function (callback) { - wsocket = new WebSocket(WebSocketManager.url); - wsocket.onopen = function () { - wsocket.send('{"Cmd":"READ_ALL_TEXT"}'); - }; - wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - var data = JSON.parse(obj.RespMessage); - wsocket.close(); - callback(data, obj.RespCode, obj.RespSW12AndApiName); - }; - }, - readPhoto: function (callback) { - wsocket = new WebSocket(WebSocketManager.url); - wsocket.onopen = function () { - wsocket.send('{"Cmd":"READ_PHOTO"}'); - }; - wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - var data = JSON.parse(obj.RespMessage); - wsocket.close(); - callback(data, obj.RespCode, obj.RespSW12AndApiName); - }; - }, - readBio: function (callback) { - wsocket = new WebSocket(WebSocketManager.url); - wsocket.onopen = function () { - wsocket.send('{"Cmd":"READ_BIO"}'); - }; - wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - var data = JSON.parse(obj.RespMessage); - wsocket.close(); - callback(data, obj.RespCode, obj.RespSW12AndApiName); - }; - }, - readMyKid: function (callback) { - wsocket = new WebSocket(WebSocketManager.url); - wsocket.onopen = function () { - wsocket.send('{"Cmd":"READ_MYKID"}'); - }; - wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - var data = JSON.parse(obj.RespMessage); - wsocket.close(); - callback(data, obj.RespCode, obj.RespSW12AndApiName); - }; - }, - FPBioEnrol: function (callback) { - wsocket = new WebSocket(WebSocketManager.url); - wsocket.onopen = function () { - wsocket.send('{"Cmd":"FP_BIO_ENROL"}'); - }; - wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - //var data = JSON.parse(obj.RespMessage); - wsocket.close(); - callback(obj); - }; - }, - getThumbImage: function (callback) { - wsocket = new WebSocket(WebSocketManager.url); - wsocket.onopen = function () { - wsocket.send('{"Cmd":"GET_MYKAD_THUMB_IMAGE"}'); - }; - wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); + var obj = JSON.parse(evt.data); var data = JSON.parse(obj.RespMessage); wsocket.close(); callback(data, obj.RespCode, obj.RespSW12AndApiName); - }; - }, - getThumbBin1: function (callback) { + }; + }, + readAllText: function (callback) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { - wsocket.send('{"Cmd":"GET_THUMB_BIN1"}'); - }; + wsocket.send('{"Cmd":"READ_ALL_TEXT"}'); + }; wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - var data = JSON.parse(obj.RespMessage); + var obj = JSON.parse(evt.data); + var data = JSON.parse(obj.RespMessage); wsocket.close(); callback(data, obj.RespCode, obj.RespSW12AndApiName); - }; - }, - getThumbBin2: function (callback) { + }; + }, + readPhoto: function (callback) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { - wsocket.send('{"Cmd":"GET_THUMB_BIN2"}'); - }; + wsocket.send('{"Cmd":"READ_PHOTO"}'); + }; wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - var data = JSON.parse(obj.RespMessage); + var obj = JSON.parse(evt.data); + var data = JSON.parse(obj.RespMessage); wsocket.close(); callback(data, obj.RespCode, obj.RespSW12AndApiName); - }; - }, - FPBioEnrolBin1: function (callback) { + }; + }, + readBio: function (callback) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { - wsocket.send('{"Cmd":"FP_BIO_ENROL_BIN1"}'); - }; + wsocket.send('{"Cmd":"READ_BIO"}'); + }; wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); + var obj = JSON.parse(evt.data); + var data = JSON.parse(obj.RespMessage); + wsocket.close(); + callback(data, obj.RespCode, obj.RespSW12AndApiName); + }; + }, + readMyKid: function (callback) { + wsocket = new WebSocket(WebSocketManager.url); + wsocket.onopen = function () { + wsocket.send('{"Cmd":"READ_MYKID"}'); + }; + wsocket.onmessage = function (evt) { + var obj = JSON.parse(evt.data); + var data = JSON.parse(obj.RespMessage); + wsocket.close(); + callback(data, obj.RespCode, obj.RespSW12AndApiName); + }; + }, + FPBioEnrol: function (callback) { + wsocket = new WebSocket(WebSocketManager.url); + wsocket.onopen = function () { + wsocket.send('{"Cmd":"FP_BIO_ENROL"}'); + }; + wsocket.onmessage = function (evt) { + var obj = JSON.parse(evt.data); //var data = JSON.parse(obj.RespMessage); wsocket.close(); callback(obj); - }; - }, - FPBioEnrolBin2: function (callback) { + }; + }, + getThumbImage: function (callback) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { - wsocket.send('{"Cmd":"FP_BIO_ENROL_BIN2"}'); - }; + wsocket.send('{"Cmd":"GET_MYKAD_THUMB_IMAGE"}'); + }; wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); + var obj = JSON.parse(evt.data); + var data = JSON.parse(obj.RespMessage); + wsocket.close(); + callback(data, obj.RespCode, obj.RespSW12AndApiName); + }; + }, + getThumbBin1: function (callback) { + wsocket = new WebSocket(WebSocketManager.url); + wsocket.onopen = function () { + wsocket.send('{"Cmd":"GET_THUMB_BIN1"}'); + }; + wsocket.onmessage = function (evt) { + var obj = JSON.parse(evt.data); + var data = JSON.parse(obj.RespMessage); + wsocket.close(); + callback(data, obj.RespCode, obj.RespSW12AndApiName); + }; + }, + getThumbBin2: function (callback) { + wsocket = new WebSocket(WebSocketManager.url); + wsocket.onopen = function () { + wsocket.send('{"Cmd":"GET_THUMB_BIN2"}'); + }; + wsocket.onmessage = function (evt) { + var obj = JSON.parse(evt.data); + var data = JSON.parse(obj.RespMessage); + wsocket.close(); + callback(data, obj.RespCode, obj.RespSW12AndApiName); + }; + }, + FPBioEnrolBin1: function (callback) { + wsocket = new WebSocket(WebSocketManager.url); + wsocket.onopen = function () { + wsocket.send('{"Cmd":"FP_BIO_ENROL_BIN1"}'); + }; + wsocket.onmessage = function (evt) { + var obj = JSON.parse(evt.data); //var data = JSON.parse(obj.RespMessage); wsocket.close(); callback(obj); - }; - }, - FPBioVerify: function (callback) { + }; + }, + FPBioEnrolBin2: function (callback) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { - wsocket.send('{"Cmd":"FP_BIO_VERIFY"}'); - }; + wsocket.send('{"Cmd":"FP_BIO_ENROL_BIN2"}'); + }; wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - var data = JSON.parse(obj.RespMessage); + var obj = JSON.parse(evt.data); + //var data = JSON.parse(obj.RespMessage); wsocket.close(); - callback(data, obj.RespCode, obj.RespSW12AndApiName); - }; - }, - FPBioVerifyBin: function (callback) { + callback(obj); + }; + }, + FPBioVerify: function (callback) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { - wsocket.send('{"Cmd":"FP_BIO_VERIFY_BIN"}'); - }; + wsocket.send('{"Cmd":"FP_BIO_VERIFY"}'); + }; wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - var data = JSON.parse(obj.RespMessage); + var obj = JSON.parse(evt.data); + var data = JSON.parse(obj.RespMessage); wsocket.close(); callback(data, obj.RespCode, obj.RespSW12AndApiName); - }; - }, - FPBioVerifyLeft: function (callback) { + }; + }, + FPBioVerifyBin: function (callback) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { - wsocket.send('{"Cmd":"FP_BIO_VERIFY_LEFT"}'); - }; + wsocket.send('{"Cmd":"FP_BIO_VERIFY_BIN"}'); + }; wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - var data = JSON.parse(obj.RespMessage); + var obj = JSON.parse(evt.data); + var data = JSON.parse(obj.RespMessage); wsocket.close(); callback(data, obj.RespCode, obj.RespSW12AndApiName); - }; - }, - FPBioVerifyBinLeft: function (callback) { + }; + }, + FPBioVerifyLeft: function (callback) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { - wsocket.send('{"Cmd":"FP_BIO_VERIFY_BIN_LEFT"}'); - }; + wsocket.send('{"Cmd":"FP_BIO_VERIFY_LEFT"}'); + }; wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - var data = JSON.parse(obj.RespMessage); + var obj = JSON.parse(evt.data); + var data = JSON.parse(obj.RespMessage); wsocket.close(); callback(data, obj.RespCode, obj.RespSW12AndApiName); - }; - }, - FPBioVerifyRight: function (callback) { + }; + }, + FPBioVerifyBinLeft: function (callback) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { - wsocket.send('{"Cmd":"FP_BIO_VERIFY_RIGHT"}'); - }; + wsocket.send('{"Cmd":"FP_BIO_VERIFY_BIN_LEFT"}'); + }; wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - var data = JSON.parse(obj.RespMessage); + var obj = JSON.parse(evt.data); + var data = JSON.parse(obj.RespMessage); wsocket.close(); callback(data, obj.RespCode, obj.RespSW12AndApiName); - }; - }, - FPBioVerifyBinRight: function (callback) { + }; + }, + FPBioVerifyRight: function (callback) { wsocket = new WebSocket(WebSocketManager.url); wsocket.onopen = function () { - wsocket.send('{"Cmd":"FP_BIO_VERIFY_BIN_RIGHT"}'); - }; + wsocket.send('{"Cmd":"FP_BIO_VERIFY_RIGHT"}'); + }; wsocket.onmessage = function (evt) { - var obj = JSON.parse(evt.data); - var data = JSON.parse(obj.RespMessage); + var obj = JSON.parse(evt.data); + var data = JSON.parse(obj.RespMessage); wsocket.close(); callback(data, obj.RespCode, obj.RespSW12AndApiName); - }; - } + }; + }, + FPBioVerifyBinRight: function (callback) { + wsocket = new WebSocket(WebSocketManager.url); + wsocket.onopen = function () { + wsocket.send('{"Cmd":"FP_BIO_VERIFY_BIN_RIGHT"}'); + }; + wsocket.onmessage = function (evt) { + var obj = JSON.parse(evt.data); + var data = JSON.parse(obj.RespMessage); + wsocket.close(); + callback(data, obj.RespCode, obj.RespSW12AndApiName); + }; + } } diff --git a/public/js/mykad-reader-customer.js b/public/js/mykad-reader-customer.js index caca8e5..3c53b65 100644 --- a/public/js/mykad-reader-customer.js +++ b/public/js/mykad-reader-customer.js @@ -205,7 +205,7 @@ let original_photo_loader = document.querySelector("#photo-mykad").src; let mykad_modal = document.querySelector("#daftar_pelanggan_mykad_reader"); let photo_container = mykad_modal.querySelector("#photo-mykad-container"); - modal_form.querySelector("input[name='name']").value = data.OrgName; + modal_form.querySelector("textarea[name='name']").value = data.OrgName; modal_form.querySelector("input[name='noic']").value = getMyKadNumberWithoutHypens(data.IDNum); modal_form.querySelector("input[name='tarikh_lahir']").value = getFormattedDateOfBirth(data.BirthDate); modal_form.querySelector("input[name='negeri_lahir']").value = data.BirthPlace; diff --git a/public/js/postcode-concerns.js b/public/js/postcode-concerns.js new file mode 100644 index 0000000..6ad4ae5 --- /dev/null +++ b/public/js/postcode-concerns.js @@ -0,0 +1,172 @@ +let handlePoskodDetail_NotFound_MyKad = (modal) => { + + + let input_negeri = modal.querySelector('input#negeri'); + let input_daerah = modal.querySelector('input#daerah'); + let select_daerah = modal.querySelector('select#select-daerah'); + + handlePoskodDetail_NotFound(modal, input_negeri, input_daerah, select_daerah); +} + +let handlePoskodDetail_Found_MyKad = (modal) => { + + let input_negeri = modal.querySelector('input#negeri'); + let input_daerah = modal.querySelector('input#daerah'); + let select_daerah = modal.querySelector('select#select-daerah'); + + handlePoskodDetail_Found(input_negeri, input_daerah, select_daerah); +} + +let handlePoskodDetail_NotFound_Passport = (modal) => { + + let input_negeri = modal.querySelector('input#passport_negeri'); + let input_daerah = modal.querySelector('input#passport_daerah'); + let select_daerah = modal.querySelector('select#select-daerah'); + + handlePoskodDetail_NotFound(modal, input_negeri, input_daerah, select_daerah); +} + +let handlePoskodDetail_Found_Passport = (modal) => { + + let input_negeri = modal.querySelector('input#passport_negeri'); + let input_daerah = modal.querySelector('input#passport_daerah'); + let select_daerah = modal.querySelector('select#select-daerah'); + + handlePoskodDetail_Found(input_negeri, input_daerah, select_daerah); +} + +let handlePoskodDetail_NotFound = (modal, input_negeri, input_daerah, select_daerah) => { + + input_daerah.closest('div.col-md-8').style.display = 'none'; + input_daerah.disabled = true; + input_daerah.required = false; + + select_daerah.closest('div.col-md-8').style.display = 'block'; + select_daerah.disabled = false; + select_daerah.readOnly = false; + select_daerah.required = true; + + input_negeri.value = ''; + input_negeri.placeholder = ''; + + let getAllNegeri = () => { + return fetch(api_url + '/api/daerah'); + }; + + $(select_daerah).attr("data-placeholder","Sila pilih daerah"); + $(select_daerah).val('').trigger('change'); + + getAllNegeri() + .then(response => response.json()) + .then(x => x.map(y => { + return { + "id": y.namadaerah, + "text": y.namadaerah + ' - ' + y.negeri.negeri, + "data-koddaerah": y.koddaerah, + } + })) + .then(x => { + $(select_daerah).select2({ + placeholder: "Sila pilih daerah pelanggan", + closeOnSelect: true, + dropdownPosition: 'below', + data: x, + dropdownParent: $(modal), + }); + }) + .then(() => $(select_daerah).val('').trigger('change')); + +}; + +let handlePoskodDetail_Found = (input_negeri, input_daerah, select_daerah) => { + + select_daerah.closest('div.col-md-8').style.display = 'none'; + select_daerah.disabled = 'true'; + select_daerah.required = false; + + input_daerah.closest('div.col-md-8').style.display = 'block'; + input_daerah.disabled = false; + input_daerah.required = true; + + input_negeri.readOnly = true; + input_negeri.placeholder = ''; + input_daerah.readOnly = true; + input_daerah.placeholder = ''; +}; + +$('select.select2-daerah').on('select2:select', function (e) { + + let caller = e.target || e.srcElement; + let modal = caller.closest('div.modal.fade'); + let input_negeri = modal.querySelector('input[name="negeri"]'); + + let selected_daerah = e.params.data; + let selected_kod_daerah = selected_daerah['data-koddaerah']; + + let getDaerahDetail = (koddaerah) => { + return fetch(api_url + '/api/daerah/' + koddaerah) + .then(response => response.json()) + .then(x => fetch(api_url + '/api/negeri/' + x.kodnegeri)) + .then(response => response.json()) + }; + + let populatePostcodeRegistrationInputs = (koddaerah, kodnegeri) => { + const input_koddaerah = document.createElement("input"); + input_koddaerah.className = "d-none"; + input_koddaerah.name = "koddaerah"; + input_koddaerah.value = koddaerah; + + const input_kodnegeri = document.createElement("input"); + input_kodnegeri.className = "d-none"; + input_kodnegeri.name = "kodnegeri"; + input_kodnegeri.value = kodnegeri; + + modal.querySelector('form').appendChild(input_koddaerah); + modal.querySelector('form').appendChild(input_kodnegeri); + } + + getDaerahDetail(selected_kod_daerah) + .then(x => { + populatePostcodeRegistrationInputs(selected_kod_daerah, x.kodnegeri) + return x; + }) + .then(x => input_negeri.value = x.negeri); +}); + +$('#daftar_pelanggan_mykad_reader textarea#alamat').change(function(){ + let modal = document.querySelector('#daftar_pelanggan_mykad_reader'); + let input_poskod = modal.querySelector('input#poskod'); + let input_daerah = modal.querySelector('input#daerah'); + let input_negeri = modal.querySelector('input#negeri'); + let select_daerah = modal.querySelector('select#select-daerah'); + + input_poskod.value = ''; + input_poskod.readOnly = false; + + input_daerah.value = ''; + input_daerah.closest('div.col-md-8').style.display = 'none'; + input_daerah.disabled = true; + input_daerah.readOnly = true; + + select_daerah.closest('div.col-md-8').style.display = 'block'; + select_daerah.disabled = true; + select_daerah.readOnly = false; + + // Handle stubborn select2 + let isSelect2exist = modal.querySelector('span.select2'); + + if(isSelect2exist){ + modal.querySelector('span.select2') + .querySelector('span.select2-selection__rendered') + .textContent = ''; + + $(select_daerah).select2('destroy'); + } + + select_daerah.value = '' + + input_negeri.value = ''; + input_negeri.readOnly = true; + + input_poskod.focus(); +}); diff --git a/resources/views/customers/index.blade.php b/resources/views/customers/index.blade.php index 986a32f..934d9bf 100644 --- a/resources/views/customers/index.blade.php +++ b/resources/views/customers/index.blade.php @@ -6,6 +6,7 @@ visibility: hidden; position: absolute; } +
@@ -40,6 +41,9 @@ @php $user_cawangan = strtolower(auth()->user()->cawangan_kerja->details_caw); $enabled_cawangan = array_map(fn($x) => strtolower($x), config('mykad-reader.enabled_cawangan')); + + $is_in_pelanggan_main_page = request()->path() === 'pelanggan'; + $is_enabled_to_use_mykad_reader = function () use($user_cawangan, $enabled_cawangan){ if(sizeof($enabled_cawangan) == 0){ @@ -55,7 +59,8 @@ }; @endphp - @if( $is_enabled_to_use_mykad_reader() ) + + @if( $is_in_pelanggan_main_page && $is_enabled_to_use_mykad_reader() ) Baca MyKad @endif
@@ -121,13 +126,7 @@
Ahli
-
- -
+
@@ -137,15 +136,20 @@
Poskod
Daerah
-
+ +
+ +
Negeri
-
+
Umur
Bangsa
+
No KP
Tarikh Lahir
@@ -267,13 +271,18 @@
Alamat
-
+
Poskod
Daerah
-
+
+ +
+
Negeri
-
+
Umur
Bangsa
@@ -393,9 +402,12 @@
Poskod
Daerah
-
+ +
+ +
Negeri
-
+
Umur
Bangsa
@@ -555,6 +567,14 @@ method:'GET', url:api_url+'/api/poskod/'+poskod, success:function(poskod_detail){ + + let parent_modal = document.querySelector('#daftar_pelanggan'); + + if(Object.keys(poskod_detail).length === 0){ + handlePoskodDetail_NotFound_MyKad(parent_modal); + return; + } + var koddaerah = poskod_detail['koddaerah']; var kodnegeri = poskod_detail['kodnegeri']; $.ajax({ @@ -571,10 +591,50 @@ $('#daerah').val(daerah['namadaerah']); } }); + + handlePoskodDetail_Found_MyKad(parent_modal); } }); }); + $('#daftar_pelanggan_mykad_reader input#poskod').change(function(){ + var poskod = this.value; + + $.ajax({ + method:'GET', + url:api_url+'/api/poskod/'+poskod, + success:function(poskod_detail){ + + let parent_modal = document.querySelector('#daftar_pelanggan_mykad_reader'); + + if(Object.keys(poskod_detail).length === 0){ + handlePoskodDetail_NotFound_MyKad(parent_modal); + return; + } + + var koddaerah = poskod_detail['koddaerah']; + var kodnegeri = poskod_detail['kodnegeri']; + $.ajax({ + url:api_url+'/api/negeri/'+kodnegeri, + method:'GET', + success:function(negeri){ + $('#daftar_pelanggan_mykad_reader #negeri').val(negeri['negeri']); + } + }); + $.ajax({ + url:api_url+'/api/daerah/'+koddaerah, + method:'GET', + success:function(daerah){ + $('#daftar_pelanggan_mykad_reader #daerah').val(daerah['namadaerah']); + } + }); + + handlePoskodDetail_Found_MyKad(parent_modal); + } + }); + }); + + $('#passport_poskod').change(function(){ var poskod = this.value; @@ -582,6 +642,13 @@ method:'GET', url:api_url+'/api/poskod/'+poskod, success:function(poskod_detail){ + let parent_modal = document.querySelector('#passport_pelanggan'); + + if(Object.keys(poskod_detail).length === 0){ + handlePoskodDetail_NotFound_Passport(parent_modal); + return; + } + var koddaerah = poskod_detail['koddaerah']; var kodnegeri = poskod_detail['kodnegeri']; $.ajax({ @@ -598,6 +665,8 @@ $('#passport_daerah').val(daerah['namadaerah']); } }); + + handlePoskodDetail_Found_Passport(parent_modal); } }); }); @@ -1206,9 +1275,11 @@ // mycard-read endpoint initialization let mykad_reader_endpoint = "{{ config('mykad-reader.endpoint') }}"; let wakil_caricustomer_endpoint = "{{ route('wakil.caricustomer') }}"; + let mykad_reader_driver_endpoint = "{{ route('mykadreader.driver') }}"; + @endpush @endsection diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 81d29ea..74a19ff 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -76,6 +76,15 @@ flex-direction: column; align-items: flex-start !important; } + + .select2-container .select2-selection--single { + height: 37px; + } + + .select2-container .select2-selection--single .select2-selection__rendered { + padding-left: 0px; + } + @@ -318,11 +327,11 @@ @if ($auth_user['roles'] == 'ppc' || $auth_user['roles'] == 'pc') - - @php + + @php $current = Carbon\Carbon::now(); $tarikhsemasa = $current->toDateString(); - + $cawangan = App\CawanganAR::where('kodcaw',$auth_user['cawangan'])->get()->toArray(); $getVault = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/TunaiDiTangan/' . $auth_user['cawangan'],['tarikh' => $tarikhsemasa])->json(); @endphp @@ -359,7 +368,7 @@ @endif - +
@yield('content')
diff --git a/resources/views/supports/driver/mykad-reader/download.blade.php b/resources/views/supports/driver/mykad-reader/download.blade.php new file mode 100644 index 0000000..6a78d4e --- /dev/null +++ b/resources/views/supports/driver/mykad-reader/download.blade.php @@ -0,0 +1,247 @@ + + + + + + + + Muat Turun + + + + + +
+
+
+ + + + diff --git a/routes/web.php b/routes/web.php index f290847..4c4acfa 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,6 +2,7 @@ use Illuminate\Support\Facades\Route; use App\Services\ImbangdugaServices; +use Illuminate\Support\Facades\Storage; /* |-------------------------------------------------------------------------- | Web Routes @@ -375,3 +376,10 @@ Route::get('admin/searchpelanggan',['as'=>'admin.searchpelanggan','uses'=>'Khaza Route::get('admin/poskod',['as'=>'admin.poskod','uses'=>'HomeController@poskod']); Route::get('pembeliannotifykomuditi',['as'=>'beli.notifyKomoditi','uses'=>'OperasiController@notifyKomoditi'])->middleware('auth','operasi'); + +Route::get('supports/driver/mykad-reader',['as'=>'mykadreader.driver', function(){ + return view('supports.driver.mykad-reader.download'); +}])->middleware('auth','teller'); +Route::get('supports/driver/mykad-reader/download',['as'=>'mykadreader.driver.download', function(){ + return Storage::disk('supports')->download('MykadReaderDriver.zip'); +}])->middleware('auth','teller'); diff --git a/storage/drivers/MykadReaderDriver.zip b/storage/drivers/MykadReaderDriver.zip new file mode 100644 index 0000000..9241c9f Binary files /dev/null and b/storage/drivers/MykadReaderDriver.zip differ