diff --git a/app/Events/NotifikasiKelulusan.php b/app/Events/NotifikasiKelulusan.php index 3bee030..0c53719 100644 --- a/app/Events/NotifikasiKelulusan.php +++ b/app/Events/NotifikasiKelulusan.php @@ -11,15 +11,16 @@ class NotifikasiKelulusan implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; - public $norujukan,$kelulusan,$siri,$komen,$teller; + public $norujukan,$kelulusan,$siri,$komen,$teller,$tagoperasi; - public function __construct($norujukan,$kelulusan,$siri,$komen,$teller) + public function __construct($norujukan,$kelulusan,$siri,$komen,$teller,$tagoperasi = null) { $this->norujukan = $norujukan; $this->kelulusan = $kelulusan; $this->siri = $siri; $this->komen = $komen; $this->teller = $teller; + $this->tagoperasi = $tagoperasi; } public function broadcastOn() diff --git a/app/Http/Controllers/CustomersController.php b/app/Http/Controllers/CustomersController.php index c5b978d..b0643a6 100644 --- a/app/Http/Controllers/CustomersController.php +++ b/app/Http/Controllers/CustomersController.php @@ -65,12 +65,16 @@ class CustomersController extends Controller $customer_page = ($cawangan_info['version'] == 'v1') ? 'customers.v1.info' : 'customers.v2.info'; + $getApprovalError = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/getApproval',[ + 'kodcaw' => $auth_user['cawangan'], + 'teller' => $auth_user['name'], + ])->json(); if($request->tebus_auto_tawarruq_berjaya === 'true'){ $request->session()->flash('activate_tab', 'SAG_baru'); } - return view($customer_page,compact('cawangan_info','api_url','customer_info','bakilelong','rugilelong','min_komoditi','pekerjaan')); + return view($customer_page,compact('cawangan_info','api_url','customer_info','bakilelong','rugilelong','min_komoditi','pekerjaan','getApprovalError')); } public function search(Request $request){ diff --git a/app/Http/Controllers/GadaianController.php b/app/Http/Controllers/GadaianController.php index 1baecd6..eb6e6b8 100644 --- a/app/Http/Controllers/GadaianController.php +++ b/app/Http/Controllers/GadaianController.php @@ -857,7 +857,11 @@ class GadaianController extends Controller 'nilaimarhun' => $nilaimarhun, 'berat' => $berat, 'margin' => $percentpinj, - 'teller' => $auth_user['name'] + 'teller' => $auth_user['name'], + 'komen' => $request->komen, + 'status' => $request->status, + 'ansuran' => $request->ansuran, + 'tagoperasi' => ($request->tagoperasi) ? $request->tagoperasi : 0, ])->json(); event(new StatusLiked($auth_user['cawangan'],$auth_user['name'])); diff --git a/app/Http/Controllers/HapusAnsuranController.php b/app/Http/Controllers/HapusAnsuranController.php new file mode 100644 index 0000000..7c481f7 --- /dev/null +++ b/app/Http/Controllers/HapusAnsuranController.php @@ -0,0 +1,63 @@ +middleware('auth'); + } + + public function createApproval(Request $request) + { + $auth_user = Auth::user(); + $api_url = config('api.url'); + $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json(); + + $norujukan = $request->norujukan; + $komen = $request->komen; + $marg = $request->margin; + $ber = $request->berat; + $nm = $request->nilaimarhun; + $status = $request->status; + $jumpinjam = $request->jumpinjam; + $teller = $request->teller; + $ansuran = $request->ansuran; + + // Get the approval data + $approvalData = Http::withOptions(['verify' => config('app.api_verify')]) + ->get($api_url . '/api/hapusansuran/create', [ + 'cawangan' => $auth_user['cawangan'], + "norujukan" => $norujukan, + "komen" => $komen, + "margin" => $marg, + "berat" => $ber, + "nilaimarhun" => $nm, + "status" => $status, + "jumpinjam" => $jumpinjam, + "teller" => $teller, + "ansuran" => $ansuran, + ]) + ->json(); + + if (isset($approvalData['status']) && $approvalData['status'] === 'success') { + Session::flash('success', 'Kelulusan berjaya dibuat.'); + return redirect()->route('operasi.kelulusan'); + } else { + Session::flash('error', 'Gagal membuat kelulusan. Sila cuba lagi.'); + return redirect()->back(); + } + + } + + +} diff --git a/app/Http/Controllers/KhazanahController.php b/app/Http/Controllers/KhazanahController.php index 533ede1..916c9bc 100644 --- a/app/Http/Controllers/KhazanahController.php +++ b/app/Http/Controllers/KhazanahController.php @@ -575,15 +575,9 @@ class KhazanahController extends Controller { $auth_user = Auth::user(); - $api_url = config('api.url'); - $norujukan = $request->norujukan; $pelulus = $request->pelulus; - $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json(); - - $getlulus = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/GetLulus/'. $auth_user['cawangan'],['norujukan' => $norujukan])->json(); - if($request->khazanah != null) { if($request->batal != null) @@ -592,22 +586,32 @@ class KhazanahController extends Controller $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusan/kepohonan/' . $auth_user['cawangan'] . '/' . $norujukan,[ "pembatalan" => $request->batal, "komen" => $request->komenubahhapus, - "khazanah" => $request->khazanah + "khazanah" => $request->khazanah, + "recno" => isset($request->recno) ? $request->recno : null, ])->json(); if($updatelulus) { - event(new NotifikasiUbahHapus($norujukan,"batal",$request->komenubahhapus,$request->teller)); + if(isset($request->tagoperasi) && $request->tagoperasi == 1){ + event(new NotifikasiKelulusan($norujukan,"batal",$request->recno,$request->komenubahhapus,$request->teller)); + }else{ + event(new NotifikasiUbahHapus($norujukan,"batal",$request->komenubahhapus,$request->teller)); + } } }else{ $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusan/kepohonan/' . $auth_user['cawangan'] . '/' . $norujukan,[ - "khazanah" => $request->khazanah + "khazanah" => $request->khazanah, + "recno" => isset($request->recno) ? $request->recno : null, ])->json(); if($updatelulus) { - event(new NotifikasiUbahHapus($norujukan,"lulus","tiada",$request->teller)); + if(isset($request->tagoperasi) && $request->tagoperasi == 1){ + event(new NotifikasiKelulusan($norujukan,"lulus",$request->recno,$request->komenubahhapus,$request->teller,1)); + }else{ + event(new NotifikasiUbahHapus($norujukan,"lulus","tiada",$request->teller)); + } } } } diff --git a/app/Http/Controllers/OperasiController.php b/app/Http/Controllers/OperasiController.php index 11a2e51..1b8872f 100644 --- a/app/Http/Controllers/OperasiController.php +++ b/app/Http/Controllers/OperasiController.php @@ -16,6 +16,7 @@ use Illuminate\Support\Facades\Hash; use Carbon\Carbon; +use Illuminate\Support\Facades\Log; class OperasiController extends Controller { @@ -40,6 +41,11 @@ class OperasiController extends Controller { array_push($arraykelulusan,["cawangan" => $lulus['cawangan'], "cawangankod" => $lulus['cawangankod'],"namateller" => $kel['teller'], 'siri' => $kel['siri'] , "norujukan" => $kel['norujukan'], 'pinjaman' => $kel['jumpinj'],'komen' => $kel['komen'], 'nilaimarhun' => ($kel['nilaimarhun'] ?? '-'), 'berat' => ($kel['berat'] ?? '-'),'margin' => ($kel['margin'] ?? '-'), 'status' => ($kel['status'] ?? '-'), 'pelulus' => $kel['pelulus']]); } + + foreach($lulus['kelulusanMohonid'] as $index=>$mohon) + { + array_push($arraykelulusan,["mohonid" => true,"ansuran" => $mohon['ansuran'],"cawangan" => $lulus['cawangan'], "cawangankod" => $lulus['cawangankod'],"namateller" => $mohon['teller'], 'recno' => $mohon['recno'] , "norujukan" => $mohon['norujukan'], 'pinjaman' => $mohon['pinjaman'],'komen' => $mohon['katalaluan'], 'nilaimarhun' => ($mohon['nilaimarhun'] ?? '-'), 'berat' => ($mohon['berat'] ?? '-'),'margin' => ($mohon['margin'] ?? '-'), 'status' => ($mohon['mohon'] ?? '-')]); + } } @@ -80,16 +86,27 @@ class OperasiController extends Controller if($request->pembatalan == null) { - $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusanKomen/' . $request->kodcaw . '/' . $norujukan,[ - "komen" => $request->komenkelulusan, - 'siri' => $request->siri - ])->json(); + if(!$request->taglulus){ + $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusanKomen/' . $request->kodcaw . '/' . $norujukan,[ + "komen" => $request->komenkelulusan, + 'siri' => $request->siri + ])->json(); + + $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusan/' . $request->kodcaw . '/' . $norujukan,[ + 'sahkan' => 1, + 'namaoperasi' => $request->namaoperasi, + 'siri' => $request->siri + ])->json(); + }else{ + $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateHapusAnsuran',[ + 'siri' => $request->siri, + "kodcaw" => $request->kodcaw, + "norujukan" => $request->norujukan, + 'namaoperasi' => $request->namaoperasi, + 'sahkan' => 1, + ])->json(); + } - $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusan/' . $request->kodcaw . '/' . $norujukan,[ - 'sahkan' => 1, - 'namaoperasi' => $request->namaoperasi, - 'siri' => $request->siri - ])->json(); if($updatelulus) { @@ -98,16 +115,26 @@ class OperasiController extends Controller } else { - $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusanKomen/' . $request->kodcaw . '/' . $norujukan,[ - "komen" => $request->komenkelulusan, - 'siri' => $request->siri - ])->json(); + if(!$request->taglulus){ + $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusanKomen/' . $request->kodcaw . '/' . $norujukan,[ + "komen" => $request->komenkelulusan, + 'siri' => $request->siri + ])->json(); - $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusan/' . $request->kodcaw . '/' . $norujukan,[ - 'sahkan' => 2, - 'namaoperasi' => $request->namaoperasi, - 'siri' => $request->siri - ])->json(); + $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusan/' . $request->kodcaw . '/' . $norujukan,[ + 'sahkan' => 2, + 'namaoperasi' => $request->namaoperasi, + 'siri' => $request->siri + ])->json(); + }else{ + $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateHapusAnsuran',[ + 'siri' => $request->siri, + "kodcaw" => $request->kodcaw, + "norujukan" => $request->norujukan, + 'namaoperasi' => $request->namaoperasi, + 'sahkan' => 2, + ])->json(); + } if($updatelulus) { diff --git a/resources/views/customers/v2/info.blade.php b/resources/views/customers/v2/info.blade.php index f9baeeb..c3aed6d 100644 --- a/resources/views/customers/v2/info.blade.php +++ b/resources/views/customers/v2/info.blade.php @@ -9,6 +9,7 @@ @section('content') @include('modal.historytebus') @include('modal.wakil') +@include('errors.alert', ['errorapproval' => $getApprovalError ?? null])
@@ -264,7 +265,7 @@ - {{-- --}} +
@@ -2777,7 +2778,7 @@ try{ - let response = await getKelulusanKhazanahOperasi('Hapus Ansuran',ansid); + let response = await getKelulusanKhazanahOperasi('Hapus Ansuran',ansid,ansuranlatest); let pusherresponse = await PusherResponse(ansid,response,ansuranlatest['created_at'],ansuranlatest['id']); }catch(error){ @@ -2797,8 +2798,8 @@ .then(response => response[0][0]); } - async function getKelulusanKhazanahOperasi(textstatus = 'none',norujukan){ - + async function getKelulusanKhazanahOperasi(textstatus = 'none',norujukan,ansuranlatest = null){ + const swalWithBootstrapButtons = Swal.mixin({ customClass: { confirmButton: 'btn btn-success', @@ -2826,8 +2827,31 @@ let marg = gadai.percentpinj; let status = textstatus; let jumpinjam = gadai.pinjaman; + let ansuran = ansuranlatest ? ansuranlatest['bakihargajualan'] - gadai.bakihargajualan : 0; let teller = "{{ Auth::user()->name }}"; + + let comment = Swal.fire({ + title: 'Sila Masukkan Komen', + input: 'text', + inputPlaceholder: 'Komen', + showCancelButton: true, + confirmButtonText: 'Hantar', + cancelButtonText: 'Batal', + allowOutsideClick: false, + allowEscapeKey: false, + inputValidator: (value) => { + if (!value) { + return 'Sila masukkan komen!'; + } + } + }); + let komen = await comment.then((result) => { + if (result.isConfirmed) { + return result.value; + } + }); + Swal.fire({ title: 'Tunggu Pengesahan Daripada Khazanah-Operasi.', icon: 'info', @@ -2845,18 +2869,21 @@ let requestdata = { "_token": "{{ csrf_token() }}", + "mohon" : "Hapus Ansuran", "norujukan" : norujukan, - "komen" : '', + "komen" : komen, "margin" : marg, "berat" : ber, "nilaimarhun" : nm, "status" : status, "jumpinjam" : jumpinjam, - "teller" : teller + "teller" : teller, + "ansuran" : ansuran, + "tagoperasi" : 1 }; - siricreated = await fetch("{{ route('operasi.createkelulusan') }}",{ + siricreated = await fetch("{{ route('teller.createkelulusan') }}",{ method: 'POST', headers: { "Content-Type": "application/json", @@ -2865,8 +2892,8 @@ }) .then(response => response.json()) .then(response => {return response}); - - return siricreated; + + return siricreated; }else if (result.dismiss === Swal.DismissReason.cancel){ console.log('gagal'); @@ -2891,12 +2918,14 @@ encrypted: true }); + + let recno = (siricreated && typeof siricreated === 'object' && 'id' in siricreated) ? siricreated['id'] : siricreated; let teller = "{{ Auth::user()->name }}"; let kodcaw = "{{ Auth::user()->cawangan }}"; var channel = pusher.subscribe('notice-kelulusan'); channel.bind('my-kelulusan', function(data) { - - if(data.norujukan == norujukan && data.siri == siricreated && data.teller == teller) + console.log(data,siricreated,teller,norujukan); + if(data.norujukan == norujukan && data.siri == recno && data.teller == teller && data.tagoperasi == null) { if(data.kelulusan == 'lulus') { @@ -2905,6 +2934,7 @@ title: 'Telah Disahkan', text: `Komen : ${data.komen}` }).then(function(){ + console.log("delete ansuran",tarikh,kodcaw,norujukan,tg_id); deleteFuncAnsuran(tarikh,kodcaw,norujukan,tg_id); return true; }); diff --git a/resources/views/errors/alert.blade.php b/resources/views/errors/alert.blade.php new file mode 100644 index 0000000..b82784d --- /dev/null +++ b/resources/views/errors/alert.blade.php @@ -0,0 +1,58 @@ +@if($errorapproval) + +@endif \ No newline at end of file diff --git a/resources/views/khazanah/kelulusan.blade.php b/resources/views/khazanah/kelulusan.blade.php index 695213b..5a009a9 100644 --- a/resources/views/khazanah/kelulusan.blade.php +++ b/resources/views/khazanah/kelulusan.blade.php @@ -112,11 +112,12 @@ No Rujukan Teller Status - Nilai Pembiayaan (RM) - Nilai Marhun (RM) - Berat - Margin - Tindakan + Nilai Pembiayaan (RM) + Ansuran (RM) + Nilai Marhun (RM) + Berat + Margin + Tindakan @@ -133,6 +134,7 @@ {{ $k['teller'] }} {{ $k['status'] }} {{ Helper::formatNumber($k['jumpinj']) }} + {{ Helper::formatNumber($k['nilaimarhun']) }} {{ $k['berat'] }} {{ $k['margin'] }} @@ -141,11 +143,12 @@ @endforeach @foreach($kelulusanmohonid as $index=>$km) - + {{ $km['norujukan'] }} {{ $km['teller'] }} {{ $km['mohon'] }} {{ Helper::formatNumber($km['pinjaman']) }} + {{ Helper::formatNumber($km['ansuran']) }} {{ Helper::formatNumber($km['nilaimarhun']) }} {{ $km['berat'] }} {{ $km['margin'] }} @@ -514,6 +517,8 @@ let norujukan = $(e).data('norujukan'); let teller = $(e).closest('tr').children('td:eq(1)').text(); let namakhazanah = "{{ $auth_user = Auth::user()->name }}"; + let recno = $(e).closest('tr').data('recno'); + let tagoperasi = $(e).closest('tr').data('tagoperasi'); teller = String(teller); @@ -524,7 +529,9 @@ "_token": "{{ csrf_token() }}", "norujukan" : norujukan, "khazanah" : namakhazanah, - 'teller' : teller + 'teller' : teller, + "recno" : recno, + "tagoperasi" : tagoperasi, }, success:function(data){ @@ -593,6 +600,8 @@ let norujukan = $(e).data('norujukan'); let namakhazanah = "{{ $auth_user = Auth::user()->name }}"; let teller = $(e).closest('tr').children('td:eq(1)').text(); + let recno = $(e).closest('tr').data('recno'); + let tagoperasi = $(e).closest('tr').data('tagoperasi'); teller = String(teller); @@ -605,7 +614,9 @@ "khazanah" : namakhazanah, "komenubahhapus" : komenkelulusan, "batal" : 'batal', - 'teller' : teller + 'teller' : teller, + "recno" : recno, + "tagoperasi" : tagoperasi }, success:function(data){ diff --git a/resources/views/layouts/app_operasi.blade.php b/resources/views/layouts/app_operasi.blade.php index ddda734..32b86c2 100644 --- a/resources/views/layouts/app_operasi.blade.php +++ b/resources/views/layouts/app_operasi.blade.php @@ -126,37 +126,7 @@ var audio = new Audio("{{ asset('sound/3.wav') }}"); audio.muted = true; - // Enable pusher logging - don't include this in production - Pusher.logToConsole = false; - - var pusher = new Pusher("{{ env('PUSHER_APP_KEY') }}", { - cluster: 'ap1', - encrypted: true - }); - - var channel = pusher.subscribe('operasi-notify'); - channel.bind('operasi-event', function(data) { - let message = JSON.stringify(data); - - $('#bell').css("color", "red"); - $('#linkz').text(data.namateller + " Pohon Kelulusan"); - $("#linkz").attr("href", "{{ url('kelulusan') }}"); - - if(window.location.pathname === '/operasi/kelulusan') - { - location.reload(); - }else{ - audio.play(); - audio.muted = false; - var countlagu = 1; - audio.onended = function() { - if(countlagu <= 3){ - countlagu++; - this.play(); - } - } - } - const Toast = Swal.mixin({ + const Toast = Swal.mixin({ toast: true, position: 'top-end', showConfirmButton: false, @@ -166,7 +136,67 @@ toast.addEventListener('mouseenter', Swal.stopTimer) toast.addEventListener('mouseleave', Swal.resumeTimer) } - }) + }); + + // Enable pusher logging - don't include this in production + Pusher.logToConsole = false; + + var pusher = new Pusher("{{ env('PUSHER_APP_KEY') }}", { + cluster: 'ap1', + encrypted: true + }); + + var kelulusanhapus = pusher.subscribe('notice-kelulusan'); + kelulusanhapus.bind('my-kelulusan', function(data) { + if(data.tagoperasi == 1){ + let message = JSON.stringify(data); + + $('#bell').css("color", "red"); + $('#linkz').text(data.namateller + " Pohon Kelulusan Dihapuskan"); + $("#linkz").attr("href", "{{ url('kelulusan') }}"); + if(window.location.pathname === '/operasi/kelulusan') + location.reload(); + else{ + audio.play(); + audio.muted = false; + var countlagu = 1; + audio.onended = function() { + if(countlagu <= 3){ + countlagu++; + this.play(); + } + } + } + Toast.fire({ + icon: 'info', + title: 'Kelulusan Dipohon Sekarang!' + }); + } + }); + + + var channel = pusher.subscribe('operasi-notify'); + channel.bind('operasi-event', function(data) { + let message = JSON.stringify(data); + + $('#bell').css("color", "red"); + $('#linkz').text(data.namateller + " Pohon Kelulusan"); + $("#linkz").attr("href", "{{ url('kelulusan') }}"); + + if(window.location.pathname === '/operasi/kelulusan') + { + location.reload(); + }else{ + audio.play(); + audio.muted = false; + var countlagu = 1; + audio.onended = function() { + if(countlagu <= 3){ + countlagu++; + this.play(); + } + } + } Toast.fire({ icon: 'error', diff --git a/resources/views/operasi/kelulusan.blade.php b/resources/views/operasi/kelulusan.blade.php index defa3ff..399628d 100644 --- a/resources/views/operasi/kelulusan.blade.php +++ b/resources/views/operasi/kelulusan.blade.php @@ -81,7 +81,7 @@
-
+
@@ -113,6 +113,7 @@ Komen Status Nilai Pembiayaan + Ansuran Nilai Marhun Berat Margin @@ -128,11 +129,16 @@ {{ $k['komen'] }} {{ $k['status'] }} {{ number_format($k['pinjaman'],2) }} + @if(isset($k['ansuran']) && $k['ansuran'] != 0) + {{ number_format($k['ansuran'],2) }} + @else + + @endif {{ $k['nilaimarhun'] }} {{ $k['berat'] }} {{ $k['margin'] }} - - + + @endforeach @@ -346,6 +352,7 @@ let siri = $(e).data('siri'); let namaoperasi = "{{ Auth::user()->name }}"; let teller = $(e).closest('tr').children('td:eq(2)').text(); + let taglulus = $(e).data('taglulus'); teller = String(teller); @@ -354,6 +361,7 @@ url: "{{ route('operasi.updatekelulusan') }}", data: { "_token": "{{ csrf_token() }}", + "taglulus" : taglulus, "norujukan" : norujukan, "kodcaw" : cawangankod, "komenkelulusan" : komenkelulusan,