diff --git a/app/Http/Controllers/OperasiController.php b/app/Http/Controllers/OperasiController.php index 2bc4fc1..4cad65d 100644 --- a/app/Http/Controllers/OperasiController.php +++ b/app/Http/Controllers/OperasiController.php @@ -317,4 +317,102 @@ class OperasiController extends Controller $auth_user = Auth::user(); event(new KomoditiNotify('lulus',$auth_user['cawangan'])); } + + public function marginmutu() + { + $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(); + + // Get MaxMutuEmas data from API + $maxmutuemas = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/maxmutuemas')->json(); + + return view('operasi.marginmutu', compact('cawangan_info', 'api_url', 'maxmutuemas')); + } + + public function editMarginMutu() + { + $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(); + + return view('operasi.edit_marginmutu', compact('cawangan_info', 'api_url')); + } + + public function laporanAudit() + { + $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(); + + return view('homepage.operasi.laporan-audit', compact('cawangan_info', 'api_url')); + } + + public function cetakLaporanAuditTrail(Request $request) + { + $api_url = config('api.url'); + $auth_user = Auth::user(); + $current = Carbon::now(); + $current = new Carbon(); + $tarikh_cetak = $current->toDateString(); + + if($request->dateaudit == null){ + $date = $current->toDateString(); + }else{ + $split_date = explode('-', $request->dateaudit); + $date = $split_date[0] . '-' . $split_date[1] . '-' . $split_date[2]; + } + + if($request->dateaudit_till == null){ + $date_till = $current->toDateString(); + }else{ + $split_date_till = explode('-', $request->dateaudit_till); + $date_till = $split_date_till[0] . '-' . $split_date_till[1] . '-' . $split_date_till[2]; + } + + $audittrail_raw = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url'). '/api/reports/audittrail/operasi',['date' => $date,'date_till' => $date_till])->json(); + if(!$audittrail_raw){ + return redirect()->back()->with('errormessage', 'Tiada data pada tarikh tersebut.'); + } + + // Transform the data to match view format + $audittrail = []; + foreach($audittrail_raw as $item) { + $created_at = \Carbon\Carbon::parse($item['created_at']); + + // Format differences for display + $differences_text = '-'; + if (isset($item['differences']) && !empty($item['differences'])) { + $diff_parts = []; + foreach ($item['differences'] as $field => $changes) { + $old = $changes['old'] ?? 'null'; + $new = $changes['new'] ?? 'null'; + $diff_parts[] = "{$field}: {$old} → {$new}"; + } + $differences_text = implode('; ', $diff_parts); + } + + $audittrail[] = [ + 'tarikh' => $created_at->format('d/m/Y'), + 'masa' => $created_at->format('H:i:s'), + 'users' => $item['users'], + 'actions' => $item['actions'], + 'differ' => $differences_text + ]; + } + + $cawangan_detail = [ + 'kodcaw' => 'operasi', + 'namacaw' => 'Operasi Ar-Rahn', + 'alamat1' => 'Lot 107, Jalan Parit Dalam,', + 'alamat2' => 'Seksyen 8', + 'poskod' => '15000', + 'bandar' => 'Kota Bahru', + 'negeri' => 'Kelantan', + 'notel' => '03-12345678', + 'nofaks' => '03-12345678', + ]; + + return view('print.laporan_audittrail_operasi', compact('audittrail','cawangan_detail','tarikh_cetak','date','date_till','api_url')); + } } diff --git a/resources/views/gadaian/v2/edit.blade.php b/resources/views/gadaian/v2/edit.blade.php index 4a557ec..943d99c 100644 --- a/resources/views/gadaian/v2/edit.blade.php +++ b/resources/views/gadaian/v2/edit.blade.php @@ -24,6 +24,9 @@
+
@@ -53,6 +56,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -511,7 +541,21 @@ "visible": false, "searchable": false } - ] + ], + "language": { + "lengthMenu": "Papar _MENU_ rekod setiap halaman", + "zeroRecords": "Tiada rekod dijumpai", + "info": "Memapar halaman _PAGE_ dari _PAGES_", + "infoEmpty": "Tiada rekod tersedia", + "infoFiltered": "(ditapis dari _MAX_ jumlah rekod)", + "search": "Cari:", + "paginate": { + "first": "Pertama", + "last": "Akhir", + "next": "Seterusnya", + "previous": "Sebelumnya" + } + } }); $(".select2").select2({ @@ -567,6 +611,7 @@ total_berat = 0; total_kuantiti = 0; var marhun_details = ''; + var array_mutu = []; tablemarhun.clear().draw(); $.each(data,function(index,marhun){ $.each(marhun,function(index,marhun_detail){ @@ -576,6 +621,7 @@ jumlah_nilai_marhun += Number(marhun_detail['n_marhun']); status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : ''; total_kuantiti += Number(marhun_detail['bil']); + array_mutu.push([marhun_detail['karat'], marhun_detail['n_marhun']]); tablemarhun.row.add([ counter, marhun_detail['recno'], @@ -588,7 +634,7 @@ marhun_detail['harga'], status_tag_permata, marhun_detail['berat_batu_permata'], - "
" + "
" ]).draw(); count++; counter = counter + 1; @@ -601,7 +647,7 @@ $('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti)); $('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun)); if (count == 1){ - $('.buttonpunya').html(""); + $('.buttonpunya').html(" "); } // if(total_nilai_marhun > 0 && total_nilai_marhun < 401){ @@ -656,25 +702,32 @@ $('#keuntungan_sebulan').val(formatter.format(keuntungan_sebulan.toFixed(2))); $('#keuntungan_6bln').val(formatter.format(keuntungan_6bln.toFixed(2))); + var max_teller = 0; + var max_pelulus = 0; + $.ajax({ method:'GET', url: api_url + '/api/maxpinjaman', + data: { + 'mutu': array_mutu, + 'total_nilai_marhun': total_nilai_marhun, + }, success:function(data){ $.each(data,function(index,pinjaman){ - if(pinjaman['user_type'] == 'teller'){ + if (pinjaman['user_type'] == 'teller') { pinjaman_teller = Number(pinjaman['max']); + max_teller = pinjaman['teller_pinjaman']; } - if(pinjaman['user_type'] == 'khazanah'){ + if (pinjaman['user_type'] == 'khazanah') { pinjaman_pelulus = Number(pinjaman['max']); + max_pelulus = pinjaman['pc_pinjaman']; } }); $('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %'); $('.span-pinjaman-max').text(formatter.format(pinjaman_teller) + ' %'); - var max_teller = total_nilai_marhun * (pinjaman_teller/100); - var max_pelulus = total_nilai_marhun * (pinjaman_pelulus/100); $('#pembiayaan_max_teller').val(formatter.format(max_teller)); - $('#pembiyaan_max_pelulus').val(formatter.format(max_pelulus.toFixed(2))); + $('#pembiyaan_max_pelulus').val(formatter.format(max_pelulus)); } }); } @@ -701,6 +754,103 @@ }); } + function viewmarhun(e){ + let selectedrow = $(e).closest('tr'); + let recno = tablemarhun.row(selectedrow).data(); + let nm = recno[3]; + let karat = recno[4]; + let berat = recno[5]; + let harga = recno[8]; + let nota = recno[7]; + let kuantiti = recno[6]; + let jenismarhun = recno[2]; + let beratpermata = recno[10]; + + // Call API to get specific MaxMutuEmas data by karat + $.ajax({ + url: '{{ config("api.url") }}/api/maxmutuemas/specific', + type: 'GET', + data: { karat: karat, nilaimarhun: nm }, + success: function(response) { + let marginInfo = ''; + let marginTable = ''; + if (response && response.karat) { + marginTable = ` + + + + + + + + + + +
Maklumat Margin
Margin Teller${response.teller}%
Margin PC${response.pc}%
Nilai Marhun TellerRM${parseFloat(response.maxteller).toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}
Nilai Marhun PCRM${parseFloat(response.maxpc).toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}
+ `; + } + + let details = ` + + + + + + + + + + + + + + +
Maklumat Marhun
Jenis Marhun${jenismarhun}
Nilai Marhun Asal${nm}
Karat${karat}
Berat${berat}g
Kuantiti${kuantiti}
HargaRM${harga}
Nota${nota}
Berat Batu Permata${beratpermata}g
+ ${marginTable} + `; + + Swal.fire({ + title: 'Maklumat Marhun & Margin', + html: details, + icon: 'info', + confirmButtonText: 'OK', + width: '600px' + }); + }, + error: function(xhr) { + // If API call fails, show basic marhun info only + let details = ` + + + + + + + + + + + + + + +
Maklumat Marhun
Jenis Marhun${jenismarhun}
Nama${nm}
Karat${karat}
Berat${berat}g
Kuantiti${kuantiti}
HargaRM${harga}
Nota${nota}
Berat Batu Permata${beratpermata}g
+
+ Maklumat margin tidak tersedia +
+ `; + + Swal.fire({ + title: 'Maklumat Marhun', + html: details, + icon: 'info', + confirmButtonText: 'OK', + width: '600px' + }); + } + }); + } + function editmarhun(e){ let norujuk = $('#norujukan').val(); let selectedrow = $(e).closest('tr'); @@ -1502,7 +1652,7 @@ swalWithBootstrapButtons.fire({ title: 'Dapatkan Pengesahan Daripada Khazanah?', - text: "Tetapan margin melebihi" + pinjaman_teller + "% untuk Khazanah!", + text: "Tetapan Margin Melebihi Limit Maksima Teller!", icon: 'info', showCancelButton: true, confirmButtonText: 'Hantar', @@ -1514,7 +1664,7 @@ let norujukan = $('#norujukan').val(); let nm = parseFloat($('#total_nilai_marhun').val().replace(/[^0-9.-]+/g,""));let ber = $('#total_berat').val();let marg = $('.span-pinjaman').text(); // let komen = "Pembiayaan Melebihi Margin 70%|" + nm + "|" + ber + "|" + marg + "|"; - let status = "Pembiayaan Melebihi Margin " + pinjaman_teller + "%"; + let status = "Tetapan Margin Melebihi Limit Maksima Teller: " + pinjaman_teller + "%"; let jumpinjam = $('#pinjaman').val(); let teller = "{{ Auth::user()->name }}"; @@ -1618,5 +1768,153 @@ } } } + + // Toggle Table Functionality + let isMarginTableVisible = false; + + $('#toggleTableBtn').on('click', function() { + if (!isMarginTableVisible) { + // Show margin table, hide main table + $('#myTable_wrapper').hide(); + $('#marginTable').show(); + $(this).html(' Papar Marhun'); + loadMarginData(); + isMarginTableVisible = true; + } else { + // Show main table, hide margin table + $('#marginTable_wrapper').hide(); + $('#myTable_wrapper').show(); + $(this).html(' Papar Margin'); + isMarginTableVisible = false; + } + }); + + function loadMarginData() { + let marginData = []; + let totalNilaiMarhun = 0; + let totalNilaiTeller = 0; + let totalNilaiPC = 0; + + // Process each individual row from the main table + let rowsData = []; + tablemarhun.rows().data().each(function(row, index) { + let recno = row[1]; // Recno column + let karat = row[4]; // Karat column + let nilaiMarhun = parseFloat(row[3].replace(/[^0-9.-]+/g, "")); // Nilai Marhun column + rowsData.push({ + index: index, + recno: recno, + karat: karat, + nilaiMarhun: nilaiMarhun + }); + }); + + let bil = 1; + let processedCount = 0; + let totalEntries = rowsData.length; + + rowsData.forEach((rowData) => { + // Call API to get margin data for each individual item + $.ajax({ + url: '{{ config("api.url") }}/api/maxmutuemas/specific', + type: 'GET', + data: { karat: rowData.karat, nilaimarhun: rowData.nilaiMarhun }, + success: function(response) { + if (response && response.karat) { + let nilaiTeller = parseFloat(response.maxteller) || 0; + let nilaiPC = parseFloat(response.maxpc) || 0; + + marginData.push({ + index: rowData.index, + bil: rowData.index + 1, + recno: rowData.recno, + karat: rowData.karat, + nilaiMarhun: rowData.nilaiMarhun, + marginTeller: response.teller, + marginPC: response.pc, + nilaiTeller: nilaiTeller, + nilaiPC: nilaiPC + }); + + totalNilaiMarhun += rowData.nilaiMarhun; + totalNilaiTeller += nilaiTeller; + totalNilaiPC += nilaiPC; + } + + processedCount++; + if (processedCount === totalEntries) { + // Sort by original index to maintain order + marginData.sort((a, b) => a.index - b.index); + populateMarginTable(marginData, totalNilaiMarhun, totalNilaiTeller, totalNilaiPC); + } + }, + error: function() { + processedCount++; + if (processedCount === totalEntries) { + // Sort by original index to maintain order + marginData.sort((a, b) => a.index - b.index); + populateMarginTable(marginData, totalNilaiMarhun, totalNilaiTeller, totalNilaiPC); + } + } + }); + }); + } + + let marginDataTable = null; + + function populateMarginTable(data, totalMarhun, totalTeller, totalPC) { + // If DataTable already exists, destroy it first + if (marginDataTable !== null) { + marginDataTable.destroy(); + marginDataTable = null; + } + + let tbody = $('#marginTableBody'); + tbody.empty(); + + data.forEach(function(item) { + let row = ` + + ${item.bil} + ${item.karat} + RM${item.nilaiMarhun.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})} + ${item.marginTeller}% + ${item.marginPC}% + RM${item.nilaiTeller.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})} + RM${item.nilaiPC.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})} + + `; + tbody.append(row); + }); + + // Initialize DataTable + marginDataTable = $('#marginTable').DataTable({ + "pageLength": 10, + "ordering": false, + "order": [[ 0, "asc" ]], + "responsive": true, + "language": { + "lengthMenu": "Papar _MENU_ rekod setiap halaman", + "zeroRecords": "Tiada rekod dijumpai", + "info": "Memapar halaman _PAGE_ dari _PAGES_", + "infoEmpty": "Tiada rekod tersedia", + "infoFiltered": "(ditapis dari _MAX_ jumlah rekod)", + "search": "Cari:", + "paginate": { + "first": "Pertama", + "last": "Akhir", + "next": "Seterusnya", + "previous": "Sebelumnya" + } + }, + "footerCallback": function (row, data, start, end, display) { + // Update footer totals + $('#totalNilaiMarhunMargin').text('RM' + totalMarhun.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})); + $('#totalNilaiTellerMargin').text('RM' + totalTeller.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})); + $('#totalNilaiPCMargin').text('RM' + totalPC.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})); + } + }); + } + @endsection diff --git a/resources/views/gadaian/v2/index.blade.php b/resources/views/gadaian/v2/index.blade.php index 46de56e..3cf5f94 100644 --- a/resources/views/gadaian/v2/index.blade.php +++ b/resources/views/gadaian/v2/index.blade.php @@ -14,7 +14,7 @@ @endphp @if($gadai_session != null) -
+
@@ -63,6 +63,14 @@
+ +
+ +
+ + @@ -89,6 +97,35 @@
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -472,21 +509,34 @@ }) } - var tablemarhun = $('#myTable').DataTable({ - "ordering": false, - "columnDefs": [ - { - "targets": [ 1 ], - "visible": false, - "searchable": false + var tablemarhun = $('#myTable').DataTable({ + "ordering": false, + "columnDefs": [{ + "targets": [1], + "visible": false, + "searchable": false + }, + { + "targets": [7], + "visible": true, + "searchable": false + } + ], + "language": { + "lengthMenu": "Papar _MENU_ rekod setiap halaman", + "zeroRecords": "Tiada rekod dijumpai", + "info": "Memapar halaman _PAGE_ dari _PAGES_", + "infoEmpty": "Tiada rekod tersedia", + "infoFiltered": "(ditapis dari _MAX_ jumlah rekod)", + "search": "Cari:", + "paginate": { + "first": "Pertama", + "last": "Akhir", + "next": "Seterusnya", + "previous": "Sebelumnya" + } }, - { - "targets": [ 7 ], - "visible": false, - "searchable": false - } - ] - }); + }); $(".select2").select2({ dropdownParent: $('#daftar_marhun'), @@ -526,60 +576,57 @@ closeOnSelect: false }); - var total_nilai_marhun = 0; - var total_berat = 0; - var total_kuantiti = 0; - var kadarupah = 0; - var jumlah_marhun = 0; - var jumlah_nilai_marhun = 0; - var pinjaman_pelulus = 0; - var pinjaman_teller = 0; - function marhuntable(data){ - var counter = 1; - total_nilai_marhun = 0; - total_berat = 0; - total_kuantiti = 0; - var marhun_details = ''; - jumlah_nilai_marhun = 0; - tablemarhun.clear().draw(); - $.each(data,function(index,marhun){ - $.each(marhun,function(index,marhun_detail){ - total_nilai_marhun = total_nilai_marhun + Number(marhun_detail['n_marhun']); - total_berat = total_berat + Number(marhun_detail['berat']); - marhun_details = marhun_details + marhun_detail['bil'] + " " + marhun_detail['marhun'] +","; - jumlah_nilai_marhun += Number(marhun_detail['n_marhun']); - status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : ''; - total_kuantiti += Number(marhun_detail['bil']); - tablemarhun.row.add([ - counter, - marhun_detail['recno'], - marhun_detail['marhun'], - formatter.format(marhun_detail['n_marhun']), - marhun_detail['karat'], - formatter.format(marhun_detail['berat']), - marhun_detail['bil'], - marhun_detail['nota'], - marhun_detail['harga'], - status_tag_permata, - marhun_detail['berat_batu_permata'], - "
" - ]).draw(); - counter = counter + 1; + var total_nilai_marhun = 0; + var total_berat = 0; + var total_kuantiti = 0; + var kadarupah = 0; + var jumlah_marhun = 0; + var jumlah_nilai_marhun = 0; + var pinjaman_pelulus = 0; + var pinjaman_teller = 0; + + function marhuntable(data) { + var counter = 1; + total_nilai_marhun = 0; + total_berat = 0; + total_kuantiti = 0; + var marhun_details = ''; + var array_mutu = []; + jumlah_nilai_marhun = 0; + tablemarhun.clear().draw(); + $.each(data, function(index, marhun) { + $.each(marhun, function(index, marhun_detail) { + total_nilai_marhun = total_nilai_marhun + Number(marhun_detail['n_marhun']); + total_berat = total_berat + Number(marhun_detail['berat']); + marhun_details = marhun_details + marhun_detail['bil'] + " " + marhun_detail['marhun'] + ","; + jumlah_nilai_marhun += Number(marhun_detail['n_marhun']); + status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : ''; + total_kuantiti += Number(marhun_detail['bil']); + array_mutu.push([marhun_detail['karat'], marhun_detail['n_marhun']]); + tablemarhun.row.add([ + counter, + marhun_detail['recno'], + marhun_detail['marhun'], + formatter.format(marhun_detail['n_marhun']), + marhun_detail['karat'], + formatter.format(marhun_detail['berat']), + marhun_detail['bil'], + marhun_detail['nota'], + marhun_detail['harga'], + status_tag_permata, + marhun_detail['berat_batu_permata'], + "
" + ]).draw(); + counter = counter + 1; + }); }); - }); - $('#totalberattable').text(formatter.format(total_berat)); - $('#totalkuantititable').text(total_kuantiti); - $('#totalnilaimarhuntable').text(formatter.format(jumlah_nilai_marhun)); - $('#bilangan_marhun').val(formatter.format(counter-1)); - $('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti)); - $('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun)); - // if(total_nilai_marhun > 0 && total_nilai_marhun < 401){ - // kadarupah = 1.2/100; - // }else if(total_nilai_marhun >= 401 && total_nilai_marhun < 2001){ - // kadarupah = 1.5/100; - // }else if(total_nilai_marhun >= 2001 ){ - // kadarupah = 1.7/100; - // } + $('#totalberattable').text(formatter.format(total_berat)); + $('#totalkuantititable').text(total_kuantiti); + $('#totalnilaimarhuntable').text(formatter.format(jumlah_nilai_marhun)); + $('#bilangan_marhun').val(formatter.format(counter - 1)); + $('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti)); + $('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun)); + $.ajax({ method:'GET', @@ -594,33 +641,40 @@ } }); - $('#total_nilai_marhun').val(formatter.format(total_nilai_marhun)); - $('#marhun_detail').val(marhun_details); - $('#total_berat').val(formatter.format(total_berat)); - $('#kadarkeuntungan').val(formatter.format(kadarupah)); - $('#kuantiti_marhun').val(formatter.format(jumlah_marhun)); + $('#total_nilai_marhun').val(formatter.format(total_nilai_marhun)); + $('#marhun_detail').val(marhun_details); + $('#total_berat').val(formatter.format(total_berat)); + $('#kadarkeuntungan').val(formatter.format(kadarupah)); + $('#kuantiti_marhun').val(formatter.format(jumlah_marhun)); - $.ajax({ - method:'GET', - url: api_url + '/api/maxpinjaman', - success:function(data){ - $.each(data,function(index,pinjaman){ - if(pinjaman['user_type'] == 'teller'){ - pinjaman_teller = Number(pinjaman['max']); - } - if(pinjaman['user_type'] == 'khazanah'){ - pinjaman_pelulus = Number(pinjaman['max']); - } - }); - $('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %'); - $('.span-pinjaman-max').text(formatter.format(pinjaman_teller) + ' %'); - var max_teller = total_nilai_marhun * (pinjaman_teller/100); - var max_pelulus = total_nilai_marhun * (pinjaman_pelulus/100); - $('#pembiayaan_max_teller').val(formatter.format(max_teller.toFixed(2))); - $('#pembiyaan_max_pelulus').val(formatter.format(max_pelulus.toFixed(2))); - } - }); - } + var max_teller = 0; + var max_pelulus = 0; + + $.ajax({ + method: 'GET', + url: api_url + '/api/maxpinjaman', + data: { + 'mutu': array_mutu, + 'total_nilai_marhun': total_nilai_marhun, + }, + success: function(data) { + $.each(data, function(index, pinjaman) { + if (pinjaman['user_type'] == 'teller') { + pinjaman_teller = Number(pinjaman['max']); + max_teller = pinjaman['teller_pinjaman']; + } + if (pinjaman['user_type'] == 'khazanah') { + pinjaman_pelulus = Number(pinjaman['max']); + max_pelulus = pinjaman['pc_pinjaman']; + } + }); + $('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %'); + $('.span-pinjaman-max').text(formatter.format(pinjaman_teller) + ' %'); + $('#pembiayaan_max_teller').val(formatter.format(max_teller)); + $('#pembiyaan_max_pelulus').val(formatter.format(max_pelulus)); + } + }); + } $('#pinjaman').on('input',function(){ var pinjaman = Number(this.value); @@ -859,8 +913,9 @@ var batu_permata_array = $('#batupermata').val(); var tag_permata = $('input[id=tagpermata]').is(':checked') ? 1 : 0; - var beratpermata = $('#beratpermata').val(); - var kuantiti = $('#kuantiti').val(); + var beratpermata = $('#beratpermata').val(); + var kuantiti = $('#kuantiti').val(); + if(kuantiti > 10) { @@ -1425,22 +1480,24 @@ buttonsStyling: false }); - swalWithBootstrapButtons.fire({ - title: 'Dapatkan Pengesahan Khazanah', - text: "Tetapan margin melebihi " + pinjaman_teller + "% untuk Khazanah!", - icon: 'info', - showCancelButton: true, - confirmButtonText: 'Hantar', - cancelButtonText: 'Batal', - reverseButtons: true - }).then((result) => { - if (result.isConfirmed) { + swalWithBootstrapButtons.fire({ + title: 'Dapatkan Pengesahan Khazanah', + text: "Tetapan Margin Melebihi Limit Maksima Teller!", + icon: 'info', + showCancelButton: true, + confirmButtonText: 'Hantar', + cancelButtonText: 'Batal', + reverseButtons: true + }).then((result) => { + if (result.isConfirmed) { - let norujukan = $('#norujukan').val(); - let nm = parseFloat($('#total_nilai_marhun').val().replace(/[^0-9.-]+/g,""));let ber = $('#total_berat').val();let marg = $('.span-pinjaman').text(); - let status = "Pembiayaan Melebihi Margin " + pinjaman_teller + "%"; - let jumpinjam = $('#pinjaman').val(); - let teller = "{{ Auth::user()->name }}"; + let norujukan = $('#norujukan').val(); + let nm = parseFloat($('#total_nilai_marhun').val().replace(/[^0-9.-]+/g, "")); + let ber = $('#total_berat').val(); + let marg = $('.span-pinjaman').text(); + let status = "Tetapan Margin Melebihi Limit Maksima Teller: " + pinjaman_teller + "%"; + let jumpinjam = $('#pinjaman').val(); + let teller = "{{ Auth::user()->name }}"; Swal.fire({ title: 'Tunggu Pengesahan Daripada Khazanah.', @@ -1598,23 +1655,24 @@ let marhun = $(e).closest('tr').children('td:eq(1)').text();let selectedrow = $(e).closest('tr');let recnozz = tablemarhun.row(selectedrow).data(); let norujuk = $('#norujukan').val(); - $.ajax({ - method: 'put', - url: '{{ route("gadai.editmarhun") }}', - data: { - "_token": "{{ csrf_token() }}", - "norujukan" : norujuk, - "recno" : recnozz[1], - "teller": "{{ Auth::user()->name }}" - }, - success:function(data){ - location.reload(); - },error: function(xhr, status, error) { - var err = eval("(" + xhr.responseText + ")"); - alert(xhr.responseText); - } - }); - } + $.ajax({ + method: 'put', + url: '{{ route("gadai.editmarhun") }}', + data: { + "_token": "{{ csrf_token() }}", + "norujukan": norujuk, + "recno": recnozz[1], + "teller": "{{ Auth::user()->name }}" + }, + success: function(data) { + location.reload(); + }, + error: function(xhr, status, error) { + var err = eval("(" + xhr.responseText + ")"); + alert(xhr.responseText); + } + }); + } function editmarhun(e){ let norujuk = $('#norujukan').val(); @@ -1852,5 +1910,169 @@ } }); + // Toggle Table Functionality + let isMarginTableVisible = false; + + $('#toggleTableBtn').on('click', function() { + if (!isMarginTableVisible) { + // Check if main table has data before showing margin table + let tableData = $('#myTable').DataTable().data(); + if (tableData.length === 0) { + Swal.fire({ + icon: 'warning', + title: 'Amaran!', + text: 'Tiada data marhun untuk papar margin. Sila daftar marhun terlebih dahulu.' + }); + return; + } + + // Show margin table, hide main table + $('#myTable_wrapper').hide(); + $('#marginTable').show(); + $(this).html(' Papar Marhun'); + loadMarginData(); + isMarginTableVisible = true; + + // Disable Daftar Marhun button when margin table is visible + $('button[data-target="#daftar_marhun"]').prop('disabled', true); + } else { + // Show main table, hide margin table + $('#marginTable_wrapper').hide(); + $('#myTable_wrapper').show(); + $(this).html(' Papar Margin'); + isMarginTableVisible = false; + + // Enable Daftar Marhun button when main table is visible + $('button[data-target="#daftar_marhun"]').prop('disabled', false); + } + }); + + function loadMarginData() { + let marginData = []; + let totalNilaiMarhun = 0; + let totalNilaiTeller = 0; + let totalNilaiPC = 0; + + // Process each individual row from the main table + let rowsData = []; + tablemarhun.rows().data().each(function(row, index) { + console.log(row); + let recno = row[1]; // Recno column + let karat = row[4]; // Karat column + let nilaiMarhun = parseFloat(row[3].replace(/[^0-9.-]+/g, "")); // Nilai Marhun column + rowsData.push({ + index: index, + recno: recno, + karat: karat, + nilaiMarhun: nilaiMarhun + }); + }); + + let bil = 1; + let processedCount = 0; + let totalEntries = rowsData.length; + + rowsData.forEach((rowData) => { + // Call API to get margin data for each individual item + $.ajax({ + url: '{{ config("api.url") }}/api/maxmutuemas/specific', + type: 'GET', + data: { karat: rowData.karat, nilaimarhun: rowData.nilaiMarhun }, + success: function(response) { + if (response && response.karat) { + let nilaiTeller = parseFloat(response.maxteller) || 0; + let nilaiPC = parseFloat(response.maxpc) || 0; + + marginData.push({ + index: rowData.index, + bil: rowData.index + 1, + recno: rowData.recno, + karat: rowData.karat, + nilaiMarhun: rowData.nilaiMarhun, + marginTeller: response.teller, + marginPC: response.pc, + nilaiTeller: nilaiTeller, + nilaiPC: nilaiPC + }); + + totalNilaiMarhun += rowData.nilaiMarhun; + totalNilaiTeller += nilaiTeller; + totalNilaiPC += nilaiPC; + } + + processedCount++; + if (processedCount === totalEntries) { + // Sort by original index to maintain order + marginData.sort((a, b) => a.index - b.index); + populateMarginTable(marginData, totalNilaiMarhun, totalNilaiTeller, totalNilaiPC); + } + }, + error: function() { + processedCount++; + if (processedCount === totalEntries) { + // Sort by original index to maintain order + marginData.sort((a, b) => a.index - b.index); + populateMarginTable(marginData, totalNilaiMarhun, totalNilaiTeller, totalNilaiPC); + } + } + }); + }); + } + + let marginDataTable = null; + function populateMarginTable(data, totalMarhun, totalTeller, totalPC) { + // If DataTable already exists, destroy it first + if (marginDataTable !== null) { + marginDataTable.destroy(); + marginDataTable = null; + } + + let tbody = $('#marginTableBody'); + tbody.empty(); + + data.forEach(function(item) { + let row = ` + + ${item.bil} + ${item.karat} + RM${item.nilaiMarhun.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})} + ${item.marginTeller}% + ${item.marginPC}% + RM${item.nilaiTeller.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})} + RM${item.nilaiPC.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})} + + `; + tbody.append(row); + }); + + // Initialize DataTable + marginDataTable = $('#marginTable').DataTable({ + "pageLength": 10, + "ordering": false, + "order": [[ 0, "asc" ]], + "responsive": true, + "language": { + "lengthMenu": "Papar _MENU_ rekod setiap halaman", + "zeroRecords": "Tiada rekod dijumpai", + "info": "Memapar halaman _PAGE_ dari _PAGES_", + "infoEmpty": "Tiada rekod tersedia", + "infoFiltered": "(ditapis dari _MAX_ jumlah rekod)", + "search": "Cari:", + "paginate": { + "first": "Pertama", + "last": "Akhir", + "next": "Seterusnya", + "previous": "Sebelumnya" + } + }, + "footerCallback": function (row, data, start, end, display) { + // Update footer totals + $('#totalNilaiMarhunMargin').text('RM' + totalMarhun.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})); + $('#totalNilaiTellerMargin').text('RM' + totalTeller.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})); + $('#totalNilaiPCMargin').text('RM' + totalPC.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})); + } + }); + } + @endsection diff --git a/resources/views/homepage/operasi/home.blade.php b/resources/views/homepage/operasi/home.blade.php index a86275b..b327950 100644 --- a/resources/views/homepage/operasi/home.blade.php +++ b/resources/views/homepage/operasi/home.blade.php @@ -3,7 +3,7 @@ @section('content')
-
+
+
diff --git a/resources/views/homepage/operasi/laporan-audit.blade.php b/resources/views/homepage/operasi/laporan-audit.blade.php new file mode 100644 index 0000000..afffb68 --- /dev/null +++ b/resources/views/homepage/operasi/laporan-audit.blade.php @@ -0,0 +1,46 @@ +@extends('layouts.app_operasi') + +@section('content') +
+
+
+
+ + +
+

Laporan Audit

+
+ +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/modal/editmarhun.blade.php b/resources/views/modal/editmarhun.blade.php index a40407c..5b95402 100644 --- a/resources/views/modal/editmarhun.blade.php +++ b/resources/views/modal/editmarhun.blade.php @@ -63,7 +63,7 @@ @endforeach
-
Berat
+
Berat Bersih
Harga
diff --git a/resources/views/operasi/edit_marginmutu.blade.php b/resources/views/operasi/edit_marginmutu.blade.php new file mode 100644 index 0000000..ae1333e --- /dev/null +++ b/resources/views/operasi/edit_marginmutu.blade.php @@ -0,0 +1,148 @@ +@extends('layouts.app_operasi') +@section('content') + +
+
+
+
+ + +
+

Edit Margin Mutu Emas

+ +
+ @csrf + + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + Cancel +
+
+
+
+
+
+
+ + +@endsection \ No newline at end of file diff --git a/resources/views/operasi/marginmutu.blade.php b/resources/views/operasi/marginmutu.blade.php new file mode 100644 index 0000000..5bc86a6 --- /dev/null +++ b/resources/views/operasi/marginmutu.blade.php @@ -0,0 +1,64 @@ +@extends('layouts.app_operasi') +@section('content') + +
+
+
+
+ + +
+ +
+ + + + + + + + + + + + + + + + @foreach($maxmutuemas as $index=>$mme) + + + + + + + + + + + @endforeach + +
BilKaratKeteranganTeller (%)PC (%)Operasi (%)Tarikh UpdateTindakan
{{ $loop->iteration }}{{ $mme['karat'] }}{{ $mme['keterangan'] }}{{ $mme['teller'] }}%{{ $mme['pc'] }}%{{ $mme['operasi'] }}%{{ \Carbon\Carbon::parse($mme['tarikhupdate'])->format('d/m/Y') }} + Edit +
+ +
+
+
+
+
+
+ +@endsection \ No newline at end of file diff --git a/resources/views/operasi/parameter.blade.php b/resources/views/operasi/parameter.blade.php index 110e2ca..4028c70 100644 --- a/resources/views/operasi/parameter.blade.php +++ b/resources/views/operasi/parameter.blade.php @@ -16,7 +16,7 @@
diff --git a/resources/views/print/laporan_audittrail_operasi.blade.php b/resources/views/print/laporan_audittrail_operasi.blade.php new file mode 100644 index 0000000..bb19ab3 --- /dev/null +++ b/resources/views/print/laporan_audittrail_operasi.blade.php @@ -0,0 +1,261 @@ + + + + + + + + + + + + + + + + + + + + + + + + + {{-- --}} + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
LAPORAN AUDIT TRAIL OPERASI (arOS V3)
TARIKH CETAK: + @php + $myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_cetak); + $formattedweddingdate = $myDateTime->format('d-m-Y'); + echo($formattedweddingdate); + @endphp +
TARIKH MULA:@php + $myDateTime = DateTime::createFromFormat('Y-m-d', $date); + $formattedweddingdate = $myDateTime->format('d-m-Y'); + echo($formattedweddingdate); + @endphp HINGGA:@php + $myDateTime = DateTime::createFromFormat('Y-m-d', $date_till); + $formattedweddingdate = $myDateTime->format('d-m-Y'); + echo($formattedweddingdate); + @endphp
+ +
+ + + + + + + + + + @php $counter = 1; @endphp + @foreach($audittrail as $index=>$item) + + + + + + + + + @php $counter++;@endphp + @endforeach +
BilTarikhMasaPenggunaTindakanPerbezaan
{{ $counter }}{{ $item['tarikh'] }}{{ $item['masa'] }}{{ $item['users'] }}{{ $item['actions'] }}{{ $item['differ'] }}
+

+ +
+


+ + + + + + + + + + + + + + + + + + + +
.................................................................. .................................................................. ..................................................................
Disediakan Disemak Disahkan
diff --git a/routes/web.php b/routes/web.php index f3114bc..423f3a7 100644 --- a/routes/web.php +++ b/routes/web.php @@ -269,6 +269,8 @@ Route::post('laporan/saghilang/cetak',['as'=>'saghilang.laporancetak','uses'=>'K // Route::get('/laporan/agingbulanan', [ 'as'=>'laporan.agingbulanan', 'uses'=>'KhazanahController@laporanAging_Bulanan'])->middleware('auth','khazanah'); // Route::post('/laporan/agingbulanan/cetak', ['as'=>'agingbulan.cetaklaporan', 'uses'=>'KhazanahController@cetaklaporang_Aging'])->middleware('auth','khazanah'); +Route::get('laporan/operasi/audittrail/cetak',['as'=>'operasi.audittrail.laporancetak','uses'=>'OperasiController@cetakLaporanAuditTrail'])->middleware('auth','operasi'); + Route::get('/laporan/stokauditbackdate',['as'=>'laporan.stokauditbackdate','uses'=>'KhazanahController@laporanStokAuditBackdate'])->middleware('auth','khazanah'); Route::get('laporan/stokauditbackdate/cetak',['as'=>'stokauditbackdate.laporancetak','uses'=>'KhazanahController@cetakLaporanStokAuditBackdate'])->middleware('auth','khazanah'); @@ -344,6 +346,7 @@ Route::post('/operasi/createkelulusan-by-khazanah',['as'=>'operasi.createkelulus Route::get('/operasi/getkelulusan',['as'=>'operasi.getkelulusan','uses'=>'OperasiController@getkelulusan'])->middleware('auth','teller'); Route::put('/operasi/updatekelulusan',['as'=>'operasi.updatekelulusan','uses'=>'OperasiController@updatekelulusan'])->middleware('auth','operasi'); Route::get('/operasi/parameter','OperasiController@parameter')->name('parameter')->middleware('auth','operasi'); +Route::get('/operasi/laporan-audit','OperasiController@laporanAudit')->name('operasi.laporan.audit')->middleware('auth','operasi'); Route::get('/operasi/hargaemas',['as'=>'operasi.hargaemas','uses'=>'OperasiController@hargaemas'])->middleware('auth','operasi'); Route::post('/operasi/hargaemas/update',['as'=>'hargaemas.update','uses'=>'OperasiController@updatehargaemas'])->middleware('auth','operasi'); Route::post('/operasi/hargaemas',['as'=>'hargaemas.create','uses'=>'OperasiController@createhargaemas'])->middleware('auth','operasi'); @@ -360,6 +363,8 @@ Route::post('operasi/kakitangan/edit/store',['as'=>'operasi.kakitangan.edit.stor Route::get('/operasi/margin',['as'=>'operasi.margin','uses'=>'OperasiController@margin'])->middleware('auth','operasi'); +Route::get('/operasi/marginmutu',['as'=>'operasi.marginmutu','uses'=>'OperasiController@marginmutu'])->middleware('auth','operasi'); +Route::get('/operasi/marginmutu/edit',['as'=>'operasi.marginmutu.edit','uses'=>'OperasiController@editMarginMutu'])->middleware('auth','operasi'); Route::get('/komoditi',['as'=>'komuditi','uses'=>'KomuditiController@index']); Route::get('/komoditi/rekod',['as'=>'rekod.komoditi','uses'=>'KomuditiController@rekodKomoditi']);