Merged in feature/margin-hargaemas-v2 (pull request #376)
Feature/margin hargaemas v2
This commit is contained in:
@@ -317,4 +317,102 @@ class OperasiController extends Controller
|
|||||||
$auth_user = Auth::user();
|
$auth_user = Auth::user();
|
||||||
event(new KomoditiNotify('lulus',$auth_user['cawangan']));
|
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'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-12 text-right mb-2">
|
<div class="col-12 text-right mb-2">
|
||||||
<button type="button" style="margin:auto" class="btn btn-primary" data-toggle="modal" data-target="#daftar_marhun">Daftar Marhun</button>
|
<button type="button" style="margin:auto" class="btn btn-primary" data-toggle="modal" data-target="#daftar_marhun">Daftar Marhun</button>
|
||||||
|
<button type="button" id="toggleTableBtn" class="btn btn-info ml-2">
|
||||||
|
<i class="fas fa-exchange-alt"></i> Papar Margin
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
@@ -53,6 +56,33 @@
|
|||||||
<th colspan="5"></th>
|
<th colspan="5"></th>
|
||||||
</tfoot>
|
</tfoot>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<!-- Margin Summary Table (Hidden by default) -->
|
||||||
|
<table class="table table-striped table-hover text-center" id="marginTable" style="display: none;">
|
||||||
|
<thead class="thead-dark">
|
||||||
|
<tr>
|
||||||
|
<th>Bil</th>
|
||||||
|
<th>Karat</th>
|
||||||
|
<th>Nilai Marhun</th>
|
||||||
|
<th>Margin Teller (%)</th>
|
||||||
|
<th>Margin PC (%)</th>
|
||||||
|
<th>Nilai Marhun Teller</th>
|
||||||
|
<th>Nilai Marhun PC</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="marginTableBody">
|
||||||
|
<!-- Dynamic content will be inserted here -->
|
||||||
|
</tbody>
|
||||||
|
<tfoot class="thead-success">
|
||||||
|
<tr>
|
||||||
|
<th colspan="2" class="text-center">Jumlah</th>
|
||||||
|
<th id="totalNilaiMarhunMargin"></th>
|
||||||
|
<th colspan="2"></th>
|
||||||
|
<th id="totalNilaiTellerMargin"></th>
|
||||||
|
<th id="totalNilaiPCMargin"></th>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
@@ -511,7 +541,21 @@
|
|||||||
"visible": false,
|
"visible": false,
|
||||||
"searchable": 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({
|
$(".select2").select2({
|
||||||
@@ -567,6 +611,7 @@
|
|||||||
total_berat = 0;
|
total_berat = 0;
|
||||||
total_kuantiti = 0;
|
total_kuantiti = 0;
|
||||||
var marhun_details = '';
|
var marhun_details = '';
|
||||||
|
var array_mutu = [];
|
||||||
tablemarhun.clear().draw();
|
tablemarhun.clear().draw();
|
||||||
$.each(data,function(index,marhun){
|
$.each(data,function(index,marhun){
|
||||||
$.each(marhun,function(index,marhun_detail){
|
$.each(marhun,function(index,marhun_detail){
|
||||||
@@ -576,6 +621,7 @@
|
|||||||
jumlah_nilai_marhun += Number(marhun_detail['n_marhun']);
|
jumlah_nilai_marhun += Number(marhun_detail['n_marhun']);
|
||||||
status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : '';
|
status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : '';
|
||||||
total_kuantiti += Number(marhun_detail['bil']);
|
total_kuantiti += Number(marhun_detail['bil']);
|
||||||
|
array_mutu.push([marhun_detail['karat'], marhun_detail['n_marhun']]);
|
||||||
tablemarhun.row.add([
|
tablemarhun.row.add([
|
||||||
counter,
|
counter,
|
||||||
marhun_detail['recno'],
|
marhun_detail['recno'],
|
||||||
@@ -588,7 +634,7 @@
|
|||||||
marhun_detail['harga'],
|
marhun_detail['harga'],
|
||||||
status_tag_permata,
|
status_tag_permata,
|
||||||
marhun_detail['berat_batu_permata'],
|
marhun_detail['berat_batu_permata'],
|
||||||
"<div class='buttonpunya text-center'><button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button> <button onclick='deletemarhun(this)' class='btn btn-danger'><i class='fas fa-trash-alt'></i></button></div>"
|
"<div class='buttonpunya text-center'><button onclick='viewmarhun(this)' class='btn btn-info'><i class='fas fa-eye'></i></button> <button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button> <button onclick='deletemarhun(this)' class='btn btn-danger'><i class='fas fa-trash-alt'></i></button></div>"
|
||||||
]).draw();
|
]).draw();
|
||||||
count++;
|
count++;
|
||||||
counter = counter + 1;
|
counter = counter + 1;
|
||||||
@@ -601,7 +647,7 @@
|
|||||||
$('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti));
|
$('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti));
|
||||||
$('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun));
|
$('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun));
|
||||||
if (count == 1){
|
if (count == 1){
|
||||||
$('.buttonpunya').html("<button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button>");
|
$('.buttonpunya').html("<button onclick='viewmarhun(this)' class='btn btn-info'><i class='fas fa-eye'></i></button> <button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button>");
|
||||||
}
|
}
|
||||||
|
|
||||||
// if(total_nilai_marhun > 0 && total_nilai_marhun < 401){
|
// if(total_nilai_marhun > 0 && total_nilai_marhun < 401){
|
||||||
@@ -656,25 +702,32 @@
|
|||||||
$('#keuntungan_sebulan').val(formatter.format(keuntungan_sebulan.toFixed(2)));
|
$('#keuntungan_sebulan').val(formatter.format(keuntungan_sebulan.toFixed(2)));
|
||||||
$('#keuntungan_6bln').val(formatter.format(keuntungan_6bln.toFixed(2)));
|
$('#keuntungan_6bln').val(formatter.format(keuntungan_6bln.toFixed(2)));
|
||||||
|
|
||||||
|
var max_teller = 0;
|
||||||
|
var max_pelulus = 0;
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
method:'GET',
|
method:'GET',
|
||||||
url: api_url + '/api/maxpinjaman',
|
url: api_url + '/api/maxpinjaman',
|
||||||
|
data: {
|
||||||
|
'mutu': array_mutu,
|
||||||
|
'total_nilai_marhun': total_nilai_marhun,
|
||||||
|
},
|
||||||
success:function(data){
|
success:function(data){
|
||||||
|
|
||||||
$.each(data,function(index,pinjaman){
|
$.each(data,function(index,pinjaman){
|
||||||
if(pinjaman['user_type'] == 'teller'){
|
if (pinjaman['user_type'] == 'teller') {
|
||||||
pinjaman_teller = Number(pinjaman['max']);
|
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']);
|
pinjaman_pelulus = Number(pinjaman['max']);
|
||||||
|
max_pelulus = pinjaman['pc_pinjaman'];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
$('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %');
|
$('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %');
|
||||||
$('.span-pinjaman-max').text(formatter.format(pinjaman_teller) + ' %');
|
$('.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));
|
$('#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 = `
|
||||||
|
<table class="table table-bordered table-sm mt-3">
|
||||||
|
<thead class="thead-light">
|
||||||
|
<tr><th colspan="2" class="text-center"><strong>Maklumat Margin</strong></th></tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr><td><strong>Margin Teller</strong></td><td>${response.teller}%</td></tr>
|
||||||
|
<tr><td><strong>Margin PC</strong></td><td>${response.pc}%</td></tr>
|
||||||
|
<tr><td><strong>Nilai Marhun Teller</strong></td><td>RM${parseFloat(response.maxteller).toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td></tr>
|
||||||
|
<tr><td><strong>Nilai Marhun PC</strong></td><td>RM${parseFloat(response.maxpc).toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
let details = `
|
||||||
|
<table class="table table-bordered table-sm">
|
||||||
|
<thead class="thead-light">
|
||||||
|
<tr><th colspan="2" class="text-center"><strong>Maklumat Marhun</strong></th></tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr><td><strong>Jenis Marhun</strong></td><td>${jenismarhun}</td></tr>
|
||||||
|
<tr><td><strong>Nilai Marhun Asal</strong></td><td>${nm}</td></tr>
|
||||||
|
<tr><td><strong>Karat</strong></td><td>${karat}</td></tr>
|
||||||
|
<tr><td><strong>Berat</strong></td><td>${berat}g</td></tr>
|
||||||
|
<tr><td><strong>Kuantiti</strong></td><td>${kuantiti}</td></tr>
|
||||||
|
<tr><td><strong>Harga</strong></td><td>RM${harga}</td></tr>
|
||||||
|
<tr><td><strong>Nota</strong></td><td>${nota}</td></tr>
|
||||||
|
<tr><td><strong>Berat Batu Permata</strong></td><td>${beratpermata}g</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
${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 = `
|
||||||
|
<table class="table table-bordered table-sm">
|
||||||
|
<thead class="thead-light">
|
||||||
|
<tr><th colspan="2" class="text-center"><strong>Maklumat Marhun</strong></th></tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr><td><strong>Jenis Marhun</strong></td><td>${jenismarhun}</td></tr>
|
||||||
|
<tr><td><strong>Nama</strong></td><td>${nm}</td></tr>
|
||||||
|
<tr><td><strong>Karat</strong></td><td>${karat}</td></tr>
|
||||||
|
<tr><td><strong>Berat</strong></td><td>${berat}g</td></tr>
|
||||||
|
<tr><td><strong>Kuantiti</strong></td><td>${kuantiti}</td></tr>
|
||||||
|
<tr><td><strong>Harga</strong></td><td>RM${harga}</td></tr>
|
||||||
|
<tr><td><strong>Nota</strong></td><td>${nota}</td></tr>
|
||||||
|
<tr><td><strong>Berat Batu Permata</strong></td><td>${beratpermata}g</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="alert alert-warning text-center">
|
||||||
|
<em>Maklumat margin tidak tersedia</em>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Maklumat Marhun',
|
||||||
|
html: details,
|
||||||
|
icon: 'info',
|
||||||
|
confirmButtonText: 'OK',
|
||||||
|
width: '600px'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function editmarhun(e){
|
function editmarhun(e){
|
||||||
let norujuk = $('#norujukan').val();
|
let norujuk = $('#norujukan').val();
|
||||||
let selectedrow = $(e).closest('tr');
|
let selectedrow = $(e).closest('tr');
|
||||||
@@ -1502,7 +1652,7 @@
|
|||||||
|
|
||||||
swalWithBootstrapButtons.fire({
|
swalWithBootstrapButtons.fire({
|
||||||
title: 'Dapatkan Pengesahan Daripada Khazanah?',
|
title: 'Dapatkan Pengesahan Daripada Khazanah?',
|
||||||
text: "Tetapan margin melebihi" + pinjaman_teller + "% untuk Khazanah!",
|
text: "Tetapan Margin Melebihi Limit Maksima Teller!",
|
||||||
icon: 'info',
|
icon: 'info',
|
||||||
showCancelButton: true,
|
showCancelButton: true,
|
||||||
confirmButtonText: 'Hantar',
|
confirmButtonText: 'Hantar',
|
||||||
@@ -1514,7 +1664,7 @@
|
|||||||
let norujukan = $('#norujukan').val();
|
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 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 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 jumpinjam = $('#pinjaman').val();
|
||||||
let teller = "{{ Auth::user()->name }}";
|
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('<i class="fas fa-exchange-alt"></i> Papar Marhun');
|
||||||
|
loadMarginData();
|
||||||
|
isMarginTableVisible = true;
|
||||||
|
} else {
|
||||||
|
// Show main table, hide margin table
|
||||||
|
$('#marginTable_wrapper').hide();
|
||||||
|
$('#myTable_wrapper').show();
|
||||||
|
$(this).html('<i class="fas fa-exchange-alt"></i> 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 = `
|
||||||
|
<tr>
|
||||||
|
<td>${item.bil}</td>
|
||||||
|
<td>${item.karat}</td>
|
||||||
|
<td>RM${item.nilaiMarhun.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td>
|
||||||
|
<td>${item.marginTeller}%</td>
|
||||||
|
<td>${item.marginPC}%</td>
|
||||||
|
<td>RM${item.nilaiTeller.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td>
|
||||||
|
<td>RM${item.nilaiPC.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td>
|
||||||
|
</tr>
|
||||||
|
`;
|
||||||
|
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}));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
@endphp
|
@endphp
|
||||||
|
|
||||||
@if($gadai_session != null)
|
@if($gadai_session != null)
|
||||||
<div class="container">
|
<div class="p-4">
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-12 col-lg-12">
|
<div class="col-md-12 col-lg-12">
|
||||||
|
|
||||||
@@ -63,6 +63,14 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
<!-- Toggle Button -->
|
||||||
|
<div class="mb-3">
|
||||||
|
<button type="button" class="btn btn-info" id="toggleTableBtn">
|
||||||
|
<i class="fas fa-exchange-alt"></i> Papar Margin
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Main Marhun Table -->
|
||||||
<table class="table table-striped table-hover text-center" id="myTable">
|
<table class="table table-striped table-hover text-center" id="myTable">
|
||||||
<thead class="thead-dark">
|
<thead class="thead-dark">
|
||||||
<tr>
|
<tr>
|
||||||
@@ -89,6 +97,35 @@
|
|||||||
<th colspan="5"></th>
|
<th colspan="5"></th>
|
||||||
</tfoot>
|
</tfoot>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<!-- Margin Summary Table (Hidden by default) -->
|
||||||
|
<table class="table table-striped table-hover text-center" id="marginTable" style="display: none;">
|
||||||
|
<thead class="thead-dark">
|
||||||
|
<tr>
|
||||||
|
<th>Bil</th>
|
||||||
|
<th>Karat</th>
|
||||||
|
<th>Nilai Marhun</th>
|
||||||
|
<th>Margin Teller (%)</th>
|
||||||
|
<th>Margin PC (%)</th>
|
||||||
|
<th>Pembiayaan Teller</th>
|
||||||
|
<th>Pembiayaan PC</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="marginTableBody">
|
||||||
|
<!-- Data will be populated by JavaScript -->
|
||||||
|
</tbody>
|
||||||
|
<tfoot class="thead-dark">
|
||||||
|
<tr>
|
||||||
|
<th>Jumlah</th>
|
||||||
|
<th></th>
|
||||||
|
<th id="totalNilaiMarhunMargin"></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th id="totalNilaiTellerMargin"></th>
|
||||||
|
<th id="totalNilaiPCMargin"></th>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
@@ -472,21 +509,34 @@
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
var tablemarhun = $('#myTable').DataTable({
|
var tablemarhun = $('#myTable').DataTable({
|
||||||
"ordering": false,
|
"ordering": false,
|
||||||
"columnDefs": [
|
"columnDefs": [{
|
||||||
{
|
"targets": [1],
|
||||||
"targets": [ 1 ],
|
"visible": false,
|
||||||
"visible": false,
|
"searchable": 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({
|
$(".select2").select2({
|
||||||
dropdownParent: $('#daftar_marhun'),
|
dropdownParent: $('#daftar_marhun'),
|
||||||
@@ -526,60 +576,57 @@
|
|||||||
closeOnSelect: false
|
closeOnSelect: false
|
||||||
});
|
});
|
||||||
|
|
||||||
var total_nilai_marhun = 0;
|
var total_nilai_marhun = 0;
|
||||||
var total_berat = 0;
|
var total_berat = 0;
|
||||||
var total_kuantiti = 0;
|
var total_kuantiti = 0;
|
||||||
var kadarupah = 0;
|
var kadarupah = 0;
|
||||||
var jumlah_marhun = 0;
|
var jumlah_marhun = 0;
|
||||||
var jumlah_nilai_marhun = 0;
|
var jumlah_nilai_marhun = 0;
|
||||||
var pinjaman_pelulus = 0;
|
var pinjaman_pelulus = 0;
|
||||||
var pinjaman_teller = 0;
|
var pinjaman_teller = 0;
|
||||||
function marhuntable(data){
|
|
||||||
var counter = 1;
|
function marhuntable(data) {
|
||||||
total_nilai_marhun = 0;
|
var counter = 1;
|
||||||
total_berat = 0;
|
total_nilai_marhun = 0;
|
||||||
total_kuantiti = 0;
|
total_berat = 0;
|
||||||
var marhun_details = '';
|
total_kuantiti = 0;
|
||||||
jumlah_nilai_marhun = 0;
|
var marhun_details = '';
|
||||||
tablemarhun.clear().draw();
|
var array_mutu = [];
|
||||||
$.each(data,function(index,marhun){
|
jumlah_nilai_marhun = 0;
|
||||||
$.each(marhun,function(index,marhun_detail){
|
tablemarhun.clear().draw();
|
||||||
total_nilai_marhun = total_nilai_marhun + Number(marhun_detail['n_marhun']);
|
$.each(data, function(index, marhun) {
|
||||||
total_berat = total_berat + Number(marhun_detail['berat']);
|
$.each(marhun, function(index, marhun_detail) {
|
||||||
marhun_details = marhun_details + marhun_detail['bil'] + " " + marhun_detail['marhun'] +",";
|
total_nilai_marhun = total_nilai_marhun + Number(marhun_detail['n_marhun']);
|
||||||
jumlah_nilai_marhun += Number(marhun_detail['n_marhun']);
|
total_berat = total_berat + Number(marhun_detail['berat']);
|
||||||
status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : '';
|
marhun_details = marhun_details + marhun_detail['bil'] + " " + marhun_detail['marhun'] + ",";
|
||||||
total_kuantiti += Number(marhun_detail['bil']);
|
jumlah_nilai_marhun += Number(marhun_detail['n_marhun']);
|
||||||
tablemarhun.row.add([
|
status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : '';
|
||||||
counter,
|
total_kuantiti += Number(marhun_detail['bil']);
|
||||||
marhun_detail['recno'],
|
array_mutu.push([marhun_detail['karat'], marhun_detail['n_marhun']]);
|
||||||
marhun_detail['marhun'],
|
tablemarhun.row.add([
|
||||||
formatter.format(marhun_detail['n_marhun']),
|
counter,
|
||||||
marhun_detail['karat'],
|
marhun_detail['recno'],
|
||||||
formatter.format(marhun_detail['berat']),
|
marhun_detail['marhun'],
|
||||||
marhun_detail['bil'],
|
formatter.format(marhun_detail['n_marhun']),
|
||||||
marhun_detail['nota'],
|
marhun_detail['karat'],
|
||||||
marhun_detail['harga'],
|
formatter.format(marhun_detail['berat']),
|
||||||
status_tag_permata,
|
marhun_detail['bil'],
|
||||||
marhun_detail['berat_batu_permata'],
|
marhun_detail['nota'],
|
||||||
"<div class='buttonpunya text-center'><button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button> <button onclick='deletemarhun(this)' class='btn btn-danger'><i class='fas fa-trash-alt'></i></button></div>"
|
marhun_detail['harga'],
|
||||||
]).draw();
|
status_tag_permata,
|
||||||
counter = counter + 1;
|
marhun_detail['berat_batu_permata'],
|
||||||
|
"<div class='buttonpunya text-center'><button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button> <button onclick='deletemarhun(this)' class='btn btn-danger'><i class='fas fa-trash-alt'></i></button></div>"
|
||||||
|
]).draw();
|
||||||
|
counter = counter + 1;
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
$('#totalberattable').text(formatter.format(total_berat));
|
||||||
$('#totalberattable').text(formatter.format(total_berat));
|
$('#totalkuantititable').text(total_kuantiti);
|
||||||
$('#totalkuantititable').text(total_kuantiti);
|
$('#totalnilaimarhuntable').text(formatter.format(jumlah_nilai_marhun));
|
||||||
$('#totalnilaimarhuntable').text(formatter.format(jumlah_nilai_marhun));
|
$('#bilangan_marhun').val(formatter.format(counter - 1));
|
||||||
$('#bilangan_marhun').val(formatter.format(counter-1));
|
$('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti));
|
||||||
$('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti));
|
$('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun));
|
||||||
$('#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;
|
|
||||||
// }
|
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
method:'GET',
|
method:'GET',
|
||||||
@@ -594,33 +641,40 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#total_nilai_marhun').val(formatter.format(total_nilai_marhun));
|
$('#total_nilai_marhun').val(formatter.format(total_nilai_marhun));
|
||||||
$('#marhun_detail').val(marhun_details);
|
$('#marhun_detail').val(marhun_details);
|
||||||
$('#total_berat').val(formatter.format(total_berat));
|
$('#total_berat').val(formatter.format(total_berat));
|
||||||
$('#kadarkeuntungan').val(formatter.format(kadarupah));
|
$('#kadarkeuntungan').val(formatter.format(kadarupah));
|
||||||
$('#kuantiti_marhun').val(formatter.format(jumlah_marhun));
|
$('#kuantiti_marhun').val(formatter.format(jumlah_marhun));
|
||||||
|
|
||||||
$.ajax({
|
var max_teller = 0;
|
||||||
method:'GET',
|
var max_pelulus = 0;
|
||||||
url: api_url + '/api/maxpinjaman',
|
|
||||||
success:function(data){
|
$.ajax({
|
||||||
$.each(data,function(index,pinjaman){
|
method: 'GET',
|
||||||
if(pinjaman['user_type'] == 'teller'){
|
url: api_url + '/api/maxpinjaman',
|
||||||
pinjaman_teller = Number(pinjaman['max']);
|
data: {
|
||||||
}
|
'mutu': array_mutu,
|
||||||
if(pinjaman['user_type'] == 'khazanah'){
|
'total_nilai_marhun': total_nilai_marhun,
|
||||||
pinjaman_pelulus = Number(pinjaman['max']);
|
},
|
||||||
}
|
success: function(data) {
|
||||||
});
|
$.each(data, function(index, pinjaman) {
|
||||||
$('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %');
|
if (pinjaman['user_type'] == 'teller') {
|
||||||
$('.span-pinjaman-max').text(formatter.format(pinjaman_teller) + ' %');
|
pinjaman_teller = Number(pinjaman['max']);
|
||||||
var max_teller = total_nilai_marhun * (pinjaman_teller/100);
|
max_teller = pinjaman['teller_pinjaman'];
|
||||||
var max_pelulus = total_nilai_marhun * (pinjaman_pelulus/100);
|
}
|
||||||
$('#pembiayaan_max_teller').val(formatter.format(max_teller.toFixed(2)));
|
if (pinjaman['user_type'] == 'khazanah') {
|
||||||
$('#pembiyaan_max_pelulus').val(formatter.format(max_pelulus.toFixed(2)));
|
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(){
|
$('#pinjaman').on('input',function(){
|
||||||
var pinjaman = Number(this.value);
|
var pinjaman = Number(this.value);
|
||||||
@@ -859,8 +913,9 @@
|
|||||||
var batu_permata_array = $('#batupermata').val();
|
var batu_permata_array = $('#batupermata').val();
|
||||||
var tag_permata = $('input[id=tagpermata]').is(':checked') ? 1 : 0;
|
var tag_permata = $('input[id=tagpermata]').is(':checked') ? 1 : 0;
|
||||||
|
|
||||||
var beratpermata = $('#beratpermata').val();
|
var beratpermata = $('#beratpermata').val();
|
||||||
var kuantiti = $('#kuantiti').val();
|
var kuantiti = $('#kuantiti').val();
|
||||||
|
|
||||||
|
|
||||||
if(kuantiti > 10)
|
if(kuantiti > 10)
|
||||||
{
|
{
|
||||||
@@ -1425,22 +1480,24 @@
|
|||||||
buttonsStyling: false
|
buttonsStyling: false
|
||||||
});
|
});
|
||||||
|
|
||||||
swalWithBootstrapButtons.fire({
|
swalWithBootstrapButtons.fire({
|
||||||
title: 'Dapatkan Pengesahan Khazanah',
|
title: 'Dapatkan Pengesahan Khazanah',
|
||||||
text: "Tetapan margin melebihi " + pinjaman_teller + "% untuk Khazanah!",
|
text: "Tetapan Margin Melebihi Limit Maksima Teller!",
|
||||||
icon: 'info',
|
icon: 'info',
|
||||||
showCancelButton: true,
|
showCancelButton: true,
|
||||||
confirmButtonText: 'Hantar',
|
confirmButtonText: 'Hantar',
|
||||||
cancelButtonText: 'Batal',
|
cancelButtonText: 'Batal',
|
||||||
reverseButtons: true
|
reverseButtons: true
|
||||||
}).then((result) => {
|
}).then((result) => {
|
||||||
if (result.isConfirmed) {
|
if (result.isConfirmed) {
|
||||||
|
|
||||||
let norujukan = $('#norujukan').val();
|
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 nm = parseFloat($('#total_nilai_marhun').val().replace(/[^0-9.-]+/g, ""));
|
||||||
let status = "Pembiayaan Melebihi Margin " + pinjaman_teller + "%";
|
let ber = $('#total_berat').val();
|
||||||
let jumpinjam = $('#pinjaman').val();
|
let marg = $('.span-pinjaman').text();
|
||||||
let teller = "{{ Auth::user()->name }}";
|
let status = "Tetapan Margin Melebihi Limit Maksima Teller: " + pinjaman_teller + "%";
|
||||||
|
let jumpinjam = $('#pinjaman').val();
|
||||||
|
let teller = "{{ Auth::user()->name }}";
|
||||||
|
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: 'Tunggu Pengesahan Daripada Khazanah.',
|
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 marhun = $(e).closest('tr').children('td:eq(1)').text();let selectedrow = $(e).closest('tr');let recnozz = tablemarhun.row(selectedrow).data();
|
||||||
let norujuk = $('#norujukan').val();
|
let norujuk = $('#norujukan').val();
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
method: 'put',
|
method: 'put',
|
||||||
url: '{{ route("gadai.editmarhun") }}',
|
url: '{{ route("gadai.editmarhun") }}',
|
||||||
data: {
|
data: {
|
||||||
"_token": "{{ csrf_token() }}",
|
"_token": "{{ csrf_token() }}",
|
||||||
"norujukan" : norujuk,
|
"norujukan": norujuk,
|
||||||
"recno" : recnozz[1],
|
"recno": recnozz[1],
|
||||||
"teller": "{{ Auth::user()->name }}"
|
"teller": "{{ Auth::user()->name }}"
|
||||||
},
|
},
|
||||||
success:function(data){
|
success: function(data) {
|
||||||
location.reload();
|
location.reload();
|
||||||
},error: function(xhr, status, error) {
|
},
|
||||||
var err = eval("(" + xhr.responseText + ")");
|
error: function(xhr, status, error) {
|
||||||
alert(xhr.responseText);
|
var err = eval("(" + xhr.responseText + ")");
|
||||||
}
|
alert(xhr.responseText);
|
||||||
});
|
}
|
||||||
}
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function editmarhun(e){
|
function editmarhun(e){
|
||||||
let norujuk = $('#norujukan').val();
|
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('<i class="fas fa-exchange-alt"></i> 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('<i class="fas fa-exchange-alt"></i> 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 = `
|
||||||
|
<tr>
|
||||||
|
<td>${item.bil}</td>
|
||||||
|
<td>${item.karat}</td>
|
||||||
|
<td>RM${item.nilaiMarhun.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td>
|
||||||
|
<td>${item.marginTeller}%</td>
|
||||||
|
<td>${item.marginPC}%</td>
|
||||||
|
<td>RM${item.nilaiTeller.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td>
|
||||||
|
<td>RM${item.nilaiPC.toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td>
|
||||||
|
</tr>
|
||||||
|
`;
|
||||||
|
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}));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
@section('content')
|
@section('content')
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row justify-content-center mt-5">
|
<div class="row justify-content-center mt-5">
|
||||||
<div class="col-md-8">
|
<div class="col-md-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
|
|
||||||
<nav aria-label="breadcrumb">
|
<nav aria-label="breadcrumb">
|
||||||
@@ -19,7 +19,9 @@
|
|||||||
<a href="{{ route('parameter') }}" class="btn btn-info btn-lg">Parameter</a>
|
<a href="{{ route('parameter') }}" class="btn btn-info btn-lg">Parameter</a>
|
||||||
<a href="{{ route('komuditi') }}" class="btn btn-info btn-lg">Komoditi</a>
|
<a href="{{ route('komuditi') }}" class="btn btn-info btn-lg">Komoditi</a>
|
||||||
<a href="{{ route('perubatan') }}" class="btn btn-info btn-lg">Perubatan</a>
|
<a href="{{ route('perubatan') }}" class="btn btn-info btn-lg">Perubatan</a>
|
||||||
|
<a href="{{ route('operasi.laporan.audit') }}" class="btn btn-info btn-lg">Laporan Audit</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
@extends('layouts.app_operasi')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="container">
|
||||||
|
<div class="row justify-content-center mt-5">
|
||||||
|
<div class="col-md-10">
|
||||||
|
<div class="card">
|
||||||
|
<nav aria-label="breadcrumb">
|
||||||
|
<ol class="breadcrumb pb-3">
|
||||||
|
<li class="breadcrumb-item"><a href="{{ route('home') }}">Home</a></li>
|
||||||
|
<li class="breadcrumb-item active" aria-current="page">Laporan Audit</li>
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="card-header">
|
||||||
|
<h4 class="text-center">Laporan Audit</h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
<form action="{{ route('operasi.audittrail.laporancetak') }}" method="GET">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="dateaudit">Tarikh Mula:</label>
|
||||||
|
<input type="date" class="form-control" id="dateaudit" name="dateaudit" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="dateaudit_till">Tarikh Akhir:</label>
|
||||||
|
<input type="date" class="form-control" id="dateaudit_till" name="dateaudit_till" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="text-center">
|
||||||
|
<button type="submit" class="btn btn-info btn-lg">
|
||||||
|
<i class="fas fa-route"></i> Generate Audit Trail
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">Berat</div>
|
<div class="col-md-4">Berat Bersih</div>
|
||||||
<div class="col-md-8"><input type="text" class="form-control" name="berat_edit" id="berat_edit" onkeyup="calculationharga(this)"/></div>
|
<div class="col-md-8"><input type="text" class="form-control" name="berat_edit" id="berat_edit" onkeyup="calculationharga(this)"/></div>
|
||||||
<div class="col-md-4">Harga</div>
|
<div class="col-md-4">Harga</div>
|
||||||
<div class="col-md-8"><input type="text" name="harga_edit" id="harga_edit" class="form-control" readonly/></div>
|
<div class="col-md-8"><input type="text" name="harga_edit" id="harga_edit" class="form-control" readonly/></div>
|
||||||
|
|||||||
@@ -0,0 +1,148 @@
|
|||||||
|
@extends('layouts.app_operasi')
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-md-8">
|
||||||
|
<div class="card">
|
||||||
|
|
||||||
|
<nav aria-label="breadcrumb">
|
||||||
|
<ol class="breadcrumb pb-3">
|
||||||
|
<li class="breadcrumb-item"><a href="{{ url('/') }}">Home</a></li>
|
||||||
|
<li class="breadcrumb-item"><a href="{{ url('operasi/parameter') }}">Parameter</a></li>
|
||||||
|
<li class="breadcrumb-item"><a href="{{ url('operasi/marginmutu') }}">Margin Mutu Emas</a></li>
|
||||||
|
<li class="breadcrumb-item active" aria-current="page">Edit Margin Mutu</li>
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
<div class="card-body">
|
||||||
|
<h4 class="text-center mb-4">Edit Margin Mutu Emas</h4>
|
||||||
|
|
||||||
|
<form id="editMarginForm">
|
||||||
|
@csrf
|
||||||
|
<input type="hidden" id="recno" name="recno">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="karat">Karat</label>
|
||||||
|
<input type="text" class="form-control" id="karat" name="karat" readonly>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="keterangan">Keterangan</label>
|
||||||
|
<input type="text" class="form-control" id="keterangan" name="keterangan" readonly>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="teller">Teller (%)</label>
|
||||||
|
<input type="number" step="0.01" class="form-control" id="teller" name="teller" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="pc">PC (%)</label>
|
||||||
|
<input type="number" step="0.01" class="form-control" id="pc" name="pc" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="operasi">Operasi (%)</label>
|
||||||
|
<input readonly type="number" step="0.01" class="form-control" id="operasi" name="operasi" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="text-center">
|
||||||
|
<button type="submit" class="btn btn-primary">Update</button>
|
||||||
|
<a href="{{ route('operasi.marginmutu') }}" class="btn btn-secondary">Cancel</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
// Get data from URL parameters
|
||||||
|
const urlParams = new URLSearchParams(window.location.search);
|
||||||
|
$('#recno').val(urlParams.get('recno'));
|
||||||
|
$('#karat').val(urlParams.get('karat'));
|
||||||
|
$('#keterangan').val(urlParams.get('keterangan'));
|
||||||
|
$('#teller').val(urlParams.get('teller'));
|
||||||
|
$('#pc').val(urlParams.get('pc'));
|
||||||
|
$('#operasi').val(urlParams.get('operasi'));
|
||||||
|
|
||||||
|
var username = '{{ Auth::user()->name }}';
|
||||||
|
|
||||||
|
$('#editMarginForm').on('submit', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
const formData = {
|
||||||
|
recno: $('#recno').val(),
|
||||||
|
karat: $('#karat').val(),
|
||||||
|
keterangan: $('#keterangan').val(),
|
||||||
|
teller: $('#teller').val(),
|
||||||
|
pc: $('#pc').val(),
|
||||||
|
operasi: $('#operasi').val(),
|
||||||
|
_token: $('input[name="_token"]').val(),
|
||||||
|
username : username
|
||||||
|
};
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: '{{ config("api.url") }}/api/maxmutuemas/update',
|
||||||
|
type: 'POST',
|
||||||
|
data: formData,
|
||||||
|
success: function(response) {
|
||||||
|
if(response.status === 'success') {
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Berjaya!',
|
||||||
|
text: 'Data berhasil diupdate!',
|
||||||
|
icon: 'success',
|
||||||
|
confirmButtonText: 'OK'
|
||||||
|
}).then((result) => {
|
||||||
|
window.location.href = '{{ route("operasi.marginmutu") }}';
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Ralat!',
|
||||||
|
text: response.message,
|
||||||
|
icon: 'error',
|
||||||
|
confirmButtonText: 'OK'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function(xhr) {
|
||||||
|
let errorMessage = 'Error updating data';
|
||||||
|
|
||||||
|
try {
|
||||||
|
let response = JSON.parse(xhr.responseText);
|
||||||
|
|
||||||
|
// If validation errors exist, show them
|
||||||
|
if (response.errors) {
|
||||||
|
let errorMessages = [];
|
||||||
|
Object.keys(response.errors).forEach(function(key) {
|
||||||
|
response.errors[key].forEach(function(error) {
|
||||||
|
errorMessages.push(error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
errorMessage = errorMessages.join('\n');
|
||||||
|
} else if (response.message) {
|
||||||
|
errorMessage = response.message;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// If JSON parsing fails, use the raw responseText
|
||||||
|
errorMessage = xhr.responseText || 'Unknown error occurred';
|
||||||
|
}
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Ralat!',
|
||||||
|
text: errorMessage,
|
||||||
|
icon: 'error',
|
||||||
|
confirmButtonText: 'OK'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$('input[type="number"]').on('keydown', function(e) {
|
||||||
|
if (['e', 'E', '+', '-'].includes(e.key)) e.preventDefault();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endsection
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
@extends('layouts.app_operasi')
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="card">
|
||||||
|
|
||||||
|
<nav aria-label="breadcrumb">
|
||||||
|
<ol class="breadcrumb pb-3">
|
||||||
|
<li class="breadcrumb-item"><a href="{{ url('/') }}">Home</a></li>
|
||||||
|
<li class="breadcrumb-item"><a href="{{ url('operasi/parameter') }}">Parameter</a></li>
|
||||||
|
<li class="breadcrumb-item active" aria-current="page">Margin Mutu Emas</li>
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
<div class="card-body text-center">
|
||||||
|
|
||||||
|
<div class="mt-3">
|
||||||
|
|
||||||
|
<table class='table table-striped table-hover' id='table-marginmutu' style="width:100%;">
|
||||||
|
<thead class="thead-dark">
|
||||||
|
<tr>
|
||||||
|
<th>Bil</th>
|
||||||
|
<th>Karat</th>
|
||||||
|
<th>Keterangan</th>
|
||||||
|
<th>Teller (%)</th>
|
||||||
|
<th>PC (%)</th>
|
||||||
|
<th>Operasi (%)</th>
|
||||||
|
<th>Tarikh Update</th>
|
||||||
|
<th>Tindakan</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach($maxmutuemas as $index=>$mme)
|
||||||
|
<tr>
|
||||||
|
<td>{{ $loop->iteration }}</td>
|
||||||
|
<td>{{ $mme['karat'] }}</td>
|
||||||
|
<td>{{ $mme['keterangan'] }}</td>
|
||||||
|
<td>{{ $mme['teller'] }}%</td>
|
||||||
|
<td>{{ $mme['pc'] }}%</td>
|
||||||
|
<td>{{ $mme['operasi'] }}%</td>
|
||||||
|
<td>{{ \Carbon\Carbon::parse($mme['tarikhupdate'])->format('d/m/Y') }}</td>
|
||||||
|
<td>
|
||||||
|
<a href="{{ route('operasi.marginmutu.edit') }}?recno={{ $mme['recno'] }}&karat={{ $mme['karat'] }}&keterangan={{ $mme['keterangan'] }}&teller={{ $mme['teller'] }}&pc={{ $mme['pc'] }}&operasi={{ $mme['operasi'] }}"
|
||||||
|
class="btn btn-sm btn-warning">Edit</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
var table_marginmutu = $('#table-marginmutu').DataTable({
|
||||||
|
"pageLength": 25,
|
||||||
|
"order": [[ 0, "asc" ]]
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endsection
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
<div class="card-body text-center">
|
<div class="card-body text-center">
|
||||||
<a href="{{ route('operasi.hargaemas') }}" class="btn btn-info btn-lg">Harga Emas</a>
|
<a href="{{ route('operasi.hargaemas') }}" class="btn btn-info btn-lg">Harga Emas</a>
|
||||||
<a href="{{ route('operasi.margin') }}" class="btn btn-info btn-lg">Margin Pembiayaan</a>
|
<a href="{{ route('operasi.margin') }}" class="btn btn-info btn-lg">Margin Pembiayaan</a>
|
||||||
<a href="#" class="btn btn-info btn-lg">Contoh 2</a>
|
<a href="{{ route('operasi.marginmutu') }}" class="btn btn-info btn-lg">Margin Mutu Emas</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,261 @@
|
|||||||
|
<style>
|
||||||
|
#header {
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
border-collapse: collapse;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header td, #customers th {
|
||||||
|
|
||||||
|
padding:4px;
|
||||||
|
font-size:10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header tr:nth-child(even){background-color: #ffffff;}
|
||||||
|
|
||||||
|
#header tr:hover {background-color: #ddd;}
|
||||||
|
|
||||||
|
#header th {
|
||||||
|
padding-top: 12px;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
text-align: left;
|
||||||
|
padding:4px;
|
||||||
|
color:black;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#scan {
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
border-collapse: collapse;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scan td, #scan th {
|
||||||
|
|
||||||
|
padding: 8px;
|
||||||
|
font-size:11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scan tr:nth-child(even){background-color: #ffffff;}
|
||||||
|
|
||||||
|
#scan tr:hover {background-color: #ddd;}
|
||||||
|
|
||||||
|
#scan th {
|
||||||
|
padding-top: 12px;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
text-align: left;
|
||||||
|
padding:4px;
|
||||||
|
color:black;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#scan {
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
border-collapse: collapse;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scan td, #scan th {
|
||||||
|
border-collapse: collapse;
|
||||||
|
padding: 8px;
|
||||||
|
font-size:11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scan tr:nth-child(even){background-color: #ffffff;}
|
||||||
|
|
||||||
|
#scan tr:hover {background-color: #ddd;}
|
||||||
|
|
||||||
|
#scan th {
|
||||||
|
border-collapse: collapse;
|
||||||
|
padding-top: 12px;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
text-align: left;
|
||||||
|
padding:4px;
|
||||||
|
color:black;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#details {
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
border-collapse: collapse;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#details td, #details th {
|
||||||
|
|
||||||
|
padding: 8px;
|
||||||
|
font-size:8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#details tr:nth-child(even){background-color: #ffffff;}
|
||||||
|
|
||||||
|
#details tr:hover {background-color: #ddd;}
|
||||||
|
|
||||||
|
#details th {
|
||||||
|
padding-top: 12px;
|
||||||
|
font-style:bold;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
text-align: left;
|
||||||
|
padding:4px;
|
||||||
|
color:black;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#sign {
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
border-collapse: collapse;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sign td, #sign th {
|
||||||
|
|
||||||
|
padding: 8px;
|
||||||
|
font-size:11px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sign tr:nth-child(even){background-color: #ffffff;}
|
||||||
|
|
||||||
|
#sign tr:hover {background-color: #ddd;}
|
||||||
|
|
||||||
|
#sign th {
|
||||||
|
padding-top: 12px;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
text-align: left;
|
||||||
|
padding:4px;
|
||||||
|
color:black;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
.new-page {
|
||||||
|
page-break-before: always;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<table id="header">
|
||||||
|
<tr>
|
||||||
|
{{-- <th rowspan="4" style="width:50px"><br><img src="{{ asset('img/ARRAHN1.png') }}" style="width:70px"></img></th> --}}
|
||||||
|
<th colspan="1">KOPERASI PERMODALAN KELANTAN BERHAD</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="font-size:20px;font-weight:bold;">{{ $cawangan_detail['namacaw'] }}</td>
|
||||||
|
<th colspan="1">{{ $cawangan_detail['namacaw'] }}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>{{ $cawangan_detail['alamat1'] }}</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>{{ $cawangan_detail['alamat2'].' No Tel : '. $cawangan_detail['notel'].' No Faks : '. $cawangan_detail['nofaks'] }}</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<table id="scan">
|
||||||
|
<tr>
|
||||||
|
<th colspan ="5"><b>LAPORAN AUDIT TRAIL OPERASI (arOS V3)</b></th>
|
||||||
|
<th> </th>
|
||||||
|
<th> </th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th colspan="5"><b> TARIKH CETAK:</b>
|
||||||
|
@php
|
||||||
|
$myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_cetak);
|
||||||
|
$formattedweddingdate = $myDateTime->format('d-m-Y');
|
||||||
|
echo($formattedweddingdate);
|
||||||
|
@endphp
|
||||||
|
</th>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="width:20px"> <b>TARIKH MULA:</b></td>
|
||||||
|
<td>@php
|
||||||
|
$myDateTime = DateTime::createFromFormat('Y-m-d', $date);
|
||||||
|
$formattedweddingdate = $myDateTime->format('d-m-Y');
|
||||||
|
echo($formattedweddingdate);
|
||||||
|
@endphp</td>
|
||||||
|
<td style="width:20px"> <b>HINGGA:</b></td>
|
||||||
|
<td>@php
|
||||||
|
$myDateTime = DateTime::createFromFormat('Y-m-d', $date_till);
|
||||||
|
$formattedweddingdate = $myDateTime->format('d-m-Y');
|
||||||
|
echo($formattedweddingdate);
|
||||||
|
@endphp</td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<table id="details">
|
||||||
|
<tr>
|
||||||
|
<th>Bil</th>
|
||||||
|
<th>Tarikh</th>
|
||||||
|
<th>Masa</th>
|
||||||
|
<th>Pengguna</th>
|
||||||
|
<th>Tindakan</th>
|
||||||
|
<th>Perbezaan</th>
|
||||||
|
</tr>
|
||||||
|
@php $counter = 1; @endphp
|
||||||
|
@foreach($audittrail as $index=>$item)
|
||||||
|
<tr>
|
||||||
|
<td>{{ $counter }}</td>
|
||||||
|
<td>{{ $item['tarikh'] }}</td>
|
||||||
|
<td>{{ $item['masa'] }}</td>
|
||||||
|
<td>{{ $item['users'] }}</td>
|
||||||
|
<td>{{ $item['actions'] }}</td>
|
||||||
|
<td>{{ $item['differ'] }}</td>
|
||||||
|
</tr>
|
||||||
|
@php $counter++;@endphp
|
||||||
|
@endforeach
|
||||||
|
</table>
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<br><br><br>
|
||||||
|
<table id="sign">
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="2"> .................................................................. </td>
|
||||||
|
<td> </td>
|
||||||
|
<td colspan="2"> .................................................................. </td>
|
||||||
|
<td> </td>
|
||||||
|
<td colspan="2">.................................................................. </td>
|
||||||
|
<td> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="2"><B> Disediakan </B> </td>
|
||||||
|
<td></td>
|
||||||
|
<td colspan="2"><B> Disemak </B> </td>
|
||||||
|
<td> </td>
|
||||||
|
<td colspan="2"><B> Disahkan </B></td>
|
||||||
|
<td> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
@@ -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::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::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',['as'=>'laporan.stokauditbackdate','uses'=>'KhazanahController@laporanStokAuditBackdate'])->middleware('auth','khazanah');
|
||||||
Route::get('laporan/stokauditbackdate/cetak',['as'=>'stokauditbackdate.laporancetak','uses'=>'KhazanahController@cetakLaporanStokAuditBackdate'])->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::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::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/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::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/update',['as'=>'hargaemas.update','uses'=>'OperasiController@updatehargaemas'])->middleware('auth','operasi');
|
||||||
Route::post('/operasi/hargaemas',['as'=>'hargaemas.create','uses'=>'OperasiController@createhargaemas'])->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/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',['as'=>'komuditi','uses'=>'KomuditiController@index']);
|
||||||
Route::get('/komoditi/rekod',['as'=>'rekod.komoditi','uses'=>'KomuditiController@rekodKomoditi']);
|
Route::get('/komoditi/rekod',['as'=>'rekod.komoditi','uses'=>'KomuditiController@rekodKomoditi']);
|
||||||
|
|||||||
Reference in New Issue
Block a user