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();
|
||||
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 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" id="toggleTableBtn" class="btn btn-info ml-2">
|
||||
<i class="fas fa-exchange-alt"></i> Papar Margin
|
||||
</button>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
@@ -53,6 +56,33 @@
|
||||
<th colspan="5"></th>
|
||||
</tfoot>
|
||||
</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 class="card">
|
||||
@@ -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'],
|
||||
"<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();
|
||||
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("<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){
|
||||
@@ -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 = `
|
||||
<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){
|
||||
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('<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>
|
||||
@endsection
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
@endphp
|
||||
|
||||
@if($gadai_session != null)
|
||||
<div class="container">
|
||||
<div class="p-4">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12 col-lg-12">
|
||||
|
||||
@@ -63,6 +63,14 @@
|
||||
</div>
|
||||
<div class="card">
|
||||
<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">
|
||||
<thead class="thead-dark">
|
||||
<tr>
|
||||
@@ -89,6 +97,35 @@
|
||||
<th colspan="5"></th>
|
||||
</tfoot>
|
||||
</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 class="card">
|
||||
@@ -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'],
|
||||
"<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;
|
||||
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'],
|
||||
"<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));
|
||||
$('#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('<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>
|
||||
@endsection
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="row justify-content-center mt-5">
|
||||
<div class="col-md-8">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
|
||||
<nav aria-label="breadcrumb">
|
||||
@@ -19,7 +19,9 @@
|
||||
<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('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>
|
||||
|
||||
@@ -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
|
||||
</select>
|
||||
</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-4">Harga</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">
|
||||
<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="#" 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>
|
||||
|
||||
@@ -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::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']);
|
||||
|
||||
Reference in New Issue
Block a user