37 Commits

Author SHA1 Message Date
nurafrinaalimi16 a825b0b467 add new line for address on notis tuntut baki 2026-07-28 16:46:31 +08:00
nurafrinaalimi16 b0792cceb0 Merge remote-tracking branch 'origin/production' into rebate-anggota 2026-06-15 11:17:24 +08:00
nurafrinaalimi16 82f31baa6a :new logo koperasi 2026-06-15 10:22:51 +08:00
Muhd hafifie 3d3a7f35f9 Merged in feature/margin-hargaemas-v2 (pull request #376)
Feature/margin hargaemas v2
2026-04-19 07:27:21 +00:00
Hafifie PKB 46c7cc08a7 1. added homepage for laporan audit in operasi.
2. bug fix when table 0 marhun must cannot press papar margin.
3. bug fix when in papar margin display must cannot press daftar marhun.
4. change bersih to bersih in editmarhun
2026-04-19 15:07:48 +08:00
Hafifie PKB 79ee2be97e added audit logs in marginmutu operasi 2026-04-19 15:07:48 +08:00
Hafifie PKB 55168f350a 1. add button papar margin that change to shows information about margin.
2. fix the nilai marhun not same with the calculation in javascript. we use all from PHP
2026-04-19 15:07:47 +08:00
Hafifie PKB 0a19fa3d4b block scientific notation from input type number include [e,+,0,-] 2026-04-19 15:06:07 +08:00
Hafifie PKB fbec4b82fd Block Margin Mutu for operasi edit.
2. popup error for each error logs
2026-04-19 15:06:07 +08:00
Hafifie PKB 8190c7361f add view marhun & make table for details of marhun and margins 2026-04-19 15:06:04 +08:00
Hafifie PKB 73db8b97d7 1.added page that shows margin mutu harga emas.
2. change in gadaian page that have static 75% and 80% max pinjam turn to manipulate value of max pinjam based on mutu emas
2026-04-19 15:04:37 +08:00
Ain Izazi Aziz 66b8f7f195 Merged in hotfix/removekodcawkaunterv2 (pull request #359)
remove kodcaw
2026-01-06 14:00:13 +00:00
Ain Izazi b81fb5157c remove kodcaw 2026-01-06 21:57:28 +08:00
Ain Izazi Aziz f66198c206 Merged in bugfix/blockEnterarosV2 (pull request #347)
add block enter after add new customer
2025-12-03 05:16:32 +00:00
Ain Izazi 7e9dc3b72a add block enter after add new customer 2025-12-03 13:15:35 +08:00
Muhd hafifie 5de4632ed5 Merged in bugfix/resit-ujrah (pull request #345)
Bugfix/resit ujrah
2025-12-02 12:12:47 +00:00
Cyclone 0156712742 remove totalrebate 2025-12-02 20:09:29 +08:00
Cyclone 94abeef80b fix the defined variable ujrah_rebate and keuntungan_rebate 2025-11-28 23:15:31 +08:00
Cyclone 98ad8a585e resit ujrah align with keuntungan 2025-11-23 20:49:23 +08:00
Aiman Mazlan 5b3bd0ea5a Merged in Hotfix/aiman/block-tebus-refer-t_lelong-gadai (pull request #337)
Fix the width of column pembiayaan belum selesai and lelong at role khazanah
2025-11-23 08:51:52 +00:00
aiman 6d5bb3183b Fix the width of column pembiayaan belum selesai and lelong at role khazanah 2025-11-23 13:00:33 +08:00
Aiman Mazlan 7986e6750e Merged in Hotfix/aiman/block-tebus-refer-t_lelong-gadai (pull request #334)
Block SAG refer to t_lelong table gadai instead of table lelong
2025-11-19 08:54:25 +00:00
aiman c50dbe6013 Block SAG refer to t_lelong table gadai instead of table lelong 2025-11-13 11:27:25 +08:00
Aiman Mazlan da06e1ff74 Merged in bugfix/block-tuntutbaki (pull request #330)
Bugfix/block tuntutbaki
2025-10-30 00:35:06 +00:00
Aiman Mazlan baf9975a87 Merged in feature/aiman/laporan-aliran-tunai-teller-v2 (pull request #327)
Feature/aiman/laporan aliran tunai teller v2

Approved-by: Muhd hafifie
2025-10-27 07:55:33 +00:00
aiman 42493bd265 Change the status from 403 to 200 2025-10-26 16:27:28 +08:00
nur amirah zulkipli 22c0325cba Merged in bugfix/laporan-kawalan-stok (pull request #326)
Fix calculation for column baki on Laporan Kawalan Stock report
2025-10-22 05:19:29 +00:00
Amirah c41db872b1 Fix calculation for column baki on Laporan Kawalan Stock report 2025-10-22 13:18:45 +08:00
aiman 1720537632 Filter bakiLelong with kodlaluan and re-adjust the laporan aliran tunai teller 2025-10-15 14:52:08 +08:00
aiman 1d903a70ba Adjust the tarikh for laporan aliran tunai 2025-10-14 16:40:20 +08:00
aiman 1114aadbef Enable datepicker, new route for laporan aliran tunai teller 2025-10-14 15:51:40 +08:00
aiman e6c60a8d83 Update Laporan Aliran Tunai Teller 2025-10-12 12:48:43 +08:00
Hafifie PKB e90886130c block tuntutbaki 2025-10-10 20:32:37 +08:00
Afiq Hamzah e9f9ebad30 Remove unneeded document 2025-10-05 16:36:17 +08:00
Afiq Hamzah cab39e6604 Merge with feature/aiman/pampasan/sempornaV2 2025-10-05 16:34:16 +08:00
Ain Izazi Aziz 04ed49af8a Merged in hotfix/editsuratgadai (pull request #321)
add no tel di sag
2025-09-23 02:24:47 +00:00
Ain Izazi f1a950fb51 add no tel di sag 2025-09-23 10:23:34 +08:00
42 changed files with 4799 additions and 1222 deletions
+67 -4
View File
@@ -1,20 +1,83 @@
<?php
namespace App;
use DateTime;
class Helper
{
public static function formatNumber($amount)
{
$formattedAmount = number_format($amount, 2, '.', ',');
return $formattedAmount;
return number_format($amount, 2, '.', ',');
}
public static function formatDate($date_string)
{
return (new DateTime($date_string))->format("d-m-Y");
}
public static function terbilangBm(int $number): string
{
$units = [
0 => 'kosong',
1 => 'satu',
2 => 'dua',
3 => 'tiga',
4 => 'empat',
5 => 'lima',
6 => 'enam',
7 => 'tujuh',
8 => 'lapan',
9 => 'sembilan',
10 => 'sepuluh',
11 => 'sebelas'
];
if ($number < 0) return 'negatif ' . self::terbilangBm(abs($number));
if ($number < 12) return $units[$number];
if ($number < 20) return self::terbilangBm($number - 10) . ' belas';
if ($number < 100) {
$tens = intdiv($number, 10);
$rest = $number % 10;
return self::terbilangBm($tens) . ' puluh' . ($rest ? ' ' . self::terbilangBm($rest) : '');
}
if ($number < 200) return 'seratus' . ($number > 100 ? ' ' . self::terbilangBm($number - 100) : '');
if ($number < 1000) {
$hundreds = intdiv($number, 100);
$rest = $number % 100;
return self::terbilangBm($hundreds) . ' ratus' . ($rest ? ' ' . self::terbilangBm($rest) : '');
}
if ($number < 2000) return 'seribu' . ($number > 1000 ? ' ' . self::terbilangBm($number - 1000) : '');
if ($number < 1000000) {
$thousands = intdiv($number, 1000);
$rest = $number % 1000;
return self::terbilangBm($thousands) . ' ribu' . ($rest ? ' ' . self::terbilangBm($rest) : '');
}
if ($number < 1000000000) {
$millions = intdiv($number, 1000000);
$rest = $number % 1000000;
return self::terbilangBm($millions) . ' juta' . ($rest ? ' ' . self::terbilangBm($rest) : '');
}
return 'terlalu besar';
}
public static function ringgitTerbilang($amount, bool $tambahSahaja = true): string
{
$formatted = number_format((float)$amount, 2, '.', '');
[$ringgitStr, $senStr] = explode('.', $formatted);
$ringgit = (int)$ringgitStr;
$sen = (int)$senStr;
$parts = [];
$parts[] = self::terbilangBm($ringgit) . ' ringgit';
if ($sen > 0) {
$parts[] = 'dan ' . self::terbilangBm($sen) . ' sen';
} elseif ($tambahSahaja) {
$parts[] = 'sahaja';
}
return trim(preg_replace('/\s+/', ' ', implode(' ', $parts)));
}
}
+67 -7
View File
@@ -2,12 +2,14 @@
namespace App\Http\Controllers;
use App\User;
use App\Cawangan;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Services\CustomerService;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Session;
class AliranTunaiController extends Controller
@@ -599,7 +601,7 @@ class AliranTunaiController extends Controller
return response($updateTunai);
}
public function LaporanAliranTunai($teller)
public function LaporanAliranTunai($teller, Request $request)
{
$auth_user = Auth::user();
$api_url = config('api.url');
@@ -611,8 +613,6 @@ class AliranTunaiController extends Controller
$cawangan=Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/cawangan/detail/'.$auth_user['cawangan'])->json();
$cawangan_detail=$cawangan[0];
$tarikh_cetak = $current->toDateString();
$cawangan=Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/cawangan/detail/'.$auth_user['cawangan'])->json();
$alirantunai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/GetCurrentTunai/' . $auth_user['cawangan'],['kodlaluan' => $auth_user['name']])->json();
@@ -621,7 +621,67 @@ class AliranTunaiController extends Controller
$teller = $auth_user['name'];
return view('aliran_tunai.laporan.laporanalirantunai',compact('tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail','addtunai','alirantunai','teller'));
$bakiLelong = Http::withOptions(['verify' =>config('app.api_verify')])->get(config('api.url') . '/api/lelong/bakilelongbyteller/'.$auth_user['cawangan'],[
'tarikh' => $request->datetimepicker1
])->json();
return view('aliran_tunai.laporan.laporanalirantunai',compact('tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail','addtunai','alirantunai','teller', 'bakiLelong'));
}
public function laporanAliranTunaiTeller()
{
$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('khazanah.laporan.alirantunai', compact('api_url', 'cawangan_info'));
}
public function cetakLaporanAliranTunaiTeller(Request $request)
{
$api_url = config('api_url');
$auth_user = Auth::user();
$current = Carbon::now();
$current = new Carbon();
$tarikh_cetak = $current->toDateString();
if($request->datetimepicker1 == null){
$tarikh = $current->toDateString();
}else{
$split_date = explode('-',$request->datetimepicker1);
$tarikh = $split_date[2] . '-' . $split_date[1] . '-' . $split_date[0];
}
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
$cawangan=Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/cawangan/detail/'.$auth_user['cawangan'])->json();
$cawangan_detail=$cawangan[0];
$addtunai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/getAddTunai/' . $auth_user['cawangan'] . '/kodlaluan/',['kodlaluan' => $auth_user['name']])->json();
$teller = $auth_user['name'];
$bakiLelong = Http::withOptions(['verify' =>config('app.api_verify')])->get(config('api.url') . '/api/lelong/bakilelongbyteller/'.$auth_user['cawangan'],[
'tarikh' => $tarikh,
'kodlaluan' => $auth_user['name']
])->json();
$tunai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/getTunaiByTarikh/',[
'kodlaluan' => $auth_user['name'],
'kodcaw' => $auth_user['cawangan'],
'tarikh' => $tarikh
])->json();
if(!$tunai)
{
return redirect()->back()->with('errormessage', 'Tiada data pada tarikh tersebut.');
}
$jumlahTambah = $tunai['tambah'] + $tunai['masuk'] + $bakiLelong['rugi_lelong'];
$jumlahTolak = $tunai['kurang'] + $tunai['keluar'] + $bakiLelong['baki_lelong'];
return view('aliran_tunai.laporan.laporanalirantunai',compact('tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail','addtunai','tunai','teller', 'bakiLelong', 'jumlahTambah', 'jumlahTolak'));
}
public function LaporanTunaiTeller(Request $request){
+271 -1
View File
@@ -4417,4 +4417,274 @@ class KhazanahController extends Controller
}
}
public function pampasanDetail($id)
{
$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();
$gadai = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/gadai/norujukan/' . '011237' . '/' . $id)
->json();
$gadai_info = is_array($gadai) && isset($gadai[0]) ? $gadai[0] : $gadai;
$customer_info = null;
if(isset($gadai_info['nokp'])) {
$customer = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/customers/' . $gadai_info['nokp'])
->json();
$customer_info = null;
if (isset($gadai_info['nokp'])) {
$customer = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/customers/' . $gadai_info['nokp'])
->json();
$customer_info = is_array($customer) && isset($customer[0]) ? $customer[0] : $customer;
}
$barang_kes = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/palsu/laporan/', ['kodcaw' => $auth_user['cawangan']])
->json();
// You may need to adjust the array index if the API returns an array of results
$gadai_info = is_array($gadai) && isset($gadai[0]) ? $gadai[0] : $gadai;
// $pampasan_info = is_array($pampasan) && isset($pampasan[0]) ? $pampasan[0] : $pampasan;
$barang_kes_collection = collect($barang_kes);
$barang_kes_info = $barang_kes_collection->where('norujukan', '=', $id)->first();
$customer_info = null;
if (isset($gadai_info['nokp'])) {
$customer = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/customers/' . $gadai_info['nokp'])
->json();
$customer_info = is_array($customer) && isset($customer[0]) ? $customer[0] : $customer;
}
$denominasi = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/DenominasiController/' . $auth_user['cawangan'])->json();
if (sizeof($denominasi) == 0) {
$denominasi = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/DenominasiCreate/' . $auth_user['cawangan'])->json();
} else {
$denominasi = $denominasi[0];
}
$pampasan = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/pampasan', ['kodcaw' => '011237', 'norujukan' => $id])
->json()['data'][0];
$baucerno = $pampasan['baucerno'];
$nilaimarhun = $barang_kes_info['nilaimarhun'] ?? 0;
$pembiayaan = $barang_kes_info['pembiayaan'] ?? 0;
$untung = $barang_kes_info['untung'] ?? 0;
$jumlah_tebus = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/tebus/norujukan/' . $auth_user['cawangan'] . '/' . $id)
->json()[0]['bakipjm'];
$jumlah_pampasan = $nilaimarhun - $pembiayaan - $untung;
$jumlahPanjar = $jumlah_tebus + $jumlah_pampasan;
return view('khazanah.pampasan_detail', compact('gadai_info', 'barang_kes_info', 'cawangan_info', 'customer_info', 'baucerno', 'denominasi', 'jumlah_pampasan', 'jumlah_tebus', 'jumlahPanjar'));
}
}
public function initiatePampasan(Request $request)
{
$norujukan = $request->input('norujukan');
$teller = auth()->user()->name;
$kodcaw = auth()->user()->cawangan;
$baucerno = $this->generateBaucer($kodcaw);
$response = Http::post(config('api.url') . '/api/pampasan/initiatePampasan', [
'norujukan' => $norujukan,
'kodcaw' => $kodcaw,
'teller' => $teller,
'baucerno' => $baucerno,
]);
if ($response->failed()) {
throw new \Exception("HTTP error! status: " . $response->status(), 1);
}
$result = $response->json();
// $jumlah_pampasan = $nilaimarhun - $pembiayaan - $untung;
// $jumlahTebus = $pembiayaan + $untung;
// $jumlahPanjar = $jumlah_pampasan + $jumlahTebus;
//return view('khazanah.pampasan_detail', compact('gadai_info', 'pampasan_info', 'cawangan_info', 'customer_info','baucerno', 'denominasi','jumlah_pampasan', 'jumlahTebus', 'jumlahPanjar') );
return response()->json($result);
}
public function generateBaucer($kodcaw)
{
$data = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url').'/api/SenaraiPanjar/list/' . $kodcaw)
->json();
$today = now();
$dd = $today->format('d');
$mm = $today->format('m');
$yy = $today->format('y');
$recno = $data['recno'] ?? 0;
$baucerno = 'B' . $yy . $mm . $dd . '-' . str_pad($recno, 4, '0', STR_PAD_LEFT);
return $baucerno;
}
public function terimaPampasan(Request $request)
{
$responsePampasan = Http::withOptions(['verify' => config('app.api_verify')])
->post(config('api.url') . '/api/pampasan/terimaPampasan',[
"norujukan" => $request->norujukan,
"kodcaw" => auth()->user()->cawangan,
"jumlah_pampasan" => $request->jumlahpampasan,
"teller" => auth()->user()->name,
"denominasi" => $request->denominasi,
]
)->json();
$jumlahTebus = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/tebus/norujukan/' . auth()->user()->cawangan .'/'.$request->norujukan)->json()[0]['bakipjm'];
$bayaranPanjar = $request->jumlahpampasan + $jumlahTebus;
$responsePanjar = Http::withOptions(['verify' => config('app.api_verify')])
->post(
config('api.url') . '/api/panjar/createpanjar/' . auth()->user()->cawangan,
array_merge(
[
'tarikhbil' => now()->format('Y-m-d'),
'jenismodal' => 'belanjaam',
'deskripsi' => 'BAYARAN PAMPASAN ' . '(' . $request->norujukan . ')',
'bayaran' => $bayaranPanjar,
'kodlaluan' => auth()->user()->name,
'baucer' => $responsePampasan['data']['baucerno'],
'tuntutan' => auth()->user()->name
],
$request->denominasi
)
)->json();
if ($responsePampasan['success'] == true) {
return redirect()->route('pampasan.resit', ["pampasan" => $responsePampasan['data']]);
} else
return redirect()->route('khazanah.panjar')->with('pampasaninformation', ['status' => 'error', 'message' => 'Baki perubatan tidak mencukupi.']);
}
public function resitPampasan(Request $request)
{
$pampasan = $request->pampasan;
$kodcaw = $pampasan['kodcaw'];
$norujukan = $pampasan['norujukan'] ?? null;
if ($norujukan) {
$gadai_info = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/gadai/norujukan/' . $kodcaw . '/' . $norujukan)
->json();
$gadai_info = is_array($gadai_info) && isset($gadai_info[0]) ? $gadai_info[0] : $gadai_info;
$customer_info = null;
if (isset($gadai_info['nokp'])) {
$customer = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/customers/' . $gadai_info['nokp'])
->json();
$customer_info = is_array($customer) && isset($customer[0]) ? $customer[0] : $customer;
}
$pampasan_info = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/palsu/laporan/', ['kodcaw' => $kodcaw])
->json();
$norujukan = $norujukan;
$pampasan_info = collect($pampasan_info)->firstWhere('norujukan', $norujukan);
$nilaimarhun = $pampasan_info['nilaimarhun'] ?? 0;
$pembiayaan = $pampasan_info['pembiayaan'] ?? 0;
$untung = $pampasan_info['untung'] ?? 0;
$jumlah_pampasan = $nilaimarhun - $pembiayaan - $untung;
$status = Http::withOptions(['verify' => config('app.api_verify')])
->put(config('api.url') . '/api/pampasan/updateStatusPampasan', ['kodcaw' => $kodcaw, 'norujukan' => $norujukan])
->json();
// dd($pampasan_info, $nilaimarhun, $pembiayaan, $untung, $jumlah_pampasan);
// dd($norujukan);
return view('print.resit.resitpampasan', compact(
'pampasan',
'gadai_info',
'customer_info',
'pampasan_info',
'nilaimarhun',
'pembiayaan',
'untung',
'jumlah_pampasan',
'status'
));
}
}
public function suratPampasan(Request $request, $norujukan)
{
$auth_user = Auth::user();
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/cawangan/'.$auth_user['cawangan'])->json();
$gadai = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/gadai/norujukan/' . '011237' . '/' . $norujukan)
->json();
$gadai_info = is_array($gadai) && isset($gadai[0]) ? $gadai[0] : $gadai;
$customer_info = null;
if(isset($gadai_info['nokp'])) {
$customer = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/customers/' . $gadai_info['nokp'])
->json();
$customer_info = is_array($customer) && isset($customer[0]) ? $customer[0] : $customer;
}
$pampasan = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/palsu/laporan/' , ['kodcaw'=>'011237'])
->json();
$pampasan_collection = collect($pampasan);
$pampasan_info = $pampasan_collection->where('norujukan', '=', $norujukan)->first();
if (!$pampasan_info) {
abort(404, 'Maklumat pampasan tidak dijumpai untuk no rujukan tersebut.');
}
$nilaimarhun = $pampasan_info['nilaimarhun'] ?? 0;
$pembiayaan = $pampasan_info['pembiayaan'] ?? 0;
$untung = $pampasan_info['untung'] ?? 0;
$jumlah_pampasan = $nilaimarhun - $pembiayaan - $untung;
$jumlah = $pampasan_info['jumlah_pampasan'] ?? 0;
$jumlah_pampasan_terbilang = Helper::ringgitTerbilang($jumlah_pampasan);
return view('print.surat_pampasan', compact('cawangan_info', 'gadai', 'gadai_info', 'customer_info', 'pampasan', 'pampasan_info','jumlah_pampasan_terbilang', 'jumlah_pampasan'));
}
}
+21 -8
View File
@@ -99,6 +99,15 @@ class LelongController extends Controller
public function transaksituntutbaki(Request $request){
$auth_user = Auth::user();
$aliranTunaiController = new AliranTunaiController();
$checkCashBox = $aliranTunaiController->periksaAliranTunai($request);
if($checkCashBox->getContent() !== 'sama')
{
return response('kemaskini', 200);
}
$lelong = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/TuntutBaki/resit/' . $auth_user['cawangan'] . '/' . $request->norujukan)->json();
if($lelong)
@@ -106,6 +115,18 @@ class LelongController extends Controller
return response('Berjaya');
}
$getTunai2=Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/GetCurrentTunai/'.$auth_user['cawangan'],['kodlaluan' => $request->teller])->json();
$keluar = $getTunai2['keluar'];
$baki = $getTunai2['baki'];
$masuk = $getTunai2['masuk'];
$bakiakhir = $baki;
if(($bakiakhir < $request->jumlah) && $request->jenis == 'T'){
return response('Baki tidak mencukupi', 200);
}
$tuntutbaki = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/Tuntutbakisimpan/' . $auth_user['cawangan'], [
'batchno' => $request->batchno,
'jenis' => $request->jenis,
@@ -122,14 +143,6 @@ class LelongController extends Controller
$updatetuntutbaki = Http::withOptions(['verify' => config('app.api_verify')])->put( config('api.url').'/api/tuntutbakiupdate/' . $auth_user['cawangan'] . '/' . $request->norujukan);
$getTunai2=Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/GetCurrentTunai/'.$auth_user['cawangan'],['kodlaluan' => $request->teller])->json();
$keluar = $getTunai2['keluar'];
$baki = $getTunai2['baki'];
$masuk = $getTunai2['masuk'];
$bakiakhir = $baki;
if($request->jenis == 'T')
{
$bakiakhir -= $request->jumlah;
+26 -1
View File
@@ -46,7 +46,10 @@ class PenebusanController extends Controller
$nilaihargasemasa = $this->tukaranhargaemas($norujukan);
$pertambahpinjaman = 0.80;
return view('penebusan.' . $cawangan_info['version'] . '.index',compact('cawangan_info','api_url','gadai','marhun','nama','nilaihargasemasa','pertambahpinjaman'));
$pampasan = $this->getPampasanByNorujukan($norujukan);
return view('penebusan.' . $cawangan_info['version'] . '.index',compact('cawangan_info','api_url','gadai','marhun','nama','nilaihargasemasa','pertambahpinjaman', 'pampasan'));
}
public function tebuspenuh(Request $request)
@@ -786,4 +789,26 @@ class PenebusanController extends Controller
return view($view, compact('cawangan_info','api_url','gadai','marhun','nama','nilaihargasemasa'));
}
public function getPampasanByNorujukan($norujukan)
{
$auth_user = Auth::user();
$pampasanListResponse = Http::get(config('api.url'). '/api/palsu/laporan', [
'kodcaw' => $auth_user['cawangan'],
'status' => 'all',
]);
if($pampasanListResponse->failed()){
throw new \Exception("Something wrong with API", 1);
}
$pampasanList = array_filter($pampasanListResponse->json(), function($pampasan) use($norujukan){
return $pampasan['norujukan'] == $norujukan;
});
$pampasan = sizeof($pampasanList) == 0 ? null : array_pop($pampasanList);
return $pampasan;
}
}
+1
View File
@@ -72,5 +72,6 @@ class Kernel extends HttpKernel
'admin' => 'App\Http\Middleware\Admin',
'audit' => 'App\Http\Middleware\Audit',
'masteradmin' => 'App\Http\Middleware\Masteradmin',
'role' => 'App\Http\Middleware\RoleAccess',
];
}
+71
View File
@@ -0,0 +1,71 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Support\Facades\Auth;
use Closure;
class RoleAccess
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string ...$roles
* @return mixed
*/
public function handle($request, Closure $next, ...$roles)
{
if (!Auth::check()) {
return redirect('/login');
}
$user = Auth::user();
$userRole = $user->roles;
$userRoleHarian = $user->role_harian ?? null;
// Check each allowed role
foreach ($roles as $role) {
switch ($role) {
case 'teller':
if ($userRoleHarian == 'teller' || $userRole == 'teller') {
return $next($request);
}
break;
case 'khazanah':
if ($userRole == 'pc' || $userRole == 'ppc') {
return $next($request);
}
break;
case 'admin':
if ($userRole == 'admin') {
return $next($request);
}
break;
case 'penilai':
if ($userRole == 'penilai') {
return $next($request);
}
break;
case 'operasi':
if ($userRole == 'operasi') {
return $next($request);
}
break;
case 'audit':
if ($userRole == 'audit') {
return $next($request);
}
break;
}
}
// If no roles matched, deny access
abort(403, 'Access denied. Required roles: ' . implode(', ', $roles));
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

+30
View File
@@ -0,0 +1,30 @@
/**
* First we will load all of this project's JavaScript dependencies which
* includes Vue and other libraries. It is a great starting point when
* building robust, powerful web applications using Vue and Laravel.
*/
require('./bootstrap');
window.Vue = require('vue');
/**
* The following block of code may be used to automatically register your
* Vue components. It will recursively scan this directory for the Vue
* components and automatically register them with their "basename".
*
* Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
*/
// const files = require.context('./', true, /\.vue$/i)
// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default))
/**
* Next, we will create a fresh Vue application instance and attach it to
* the page. Then, you may begin adding components to this application
* or customize the JavaScript scaffolding to fit your unique needs.
*/
const app = new Vue({
el: '#app',
});
+3 -3
View File
@@ -35,7 +35,7 @@ window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: '26b0ec2f297f94b7aa9b',
cluster: 'ap1',
forceTLS: true
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
forceTLS: false
});
+4 -7
View File
@@ -558,15 +558,12 @@
function cetaklaporanalirantunai()
{
let teller = "{{ Auth::user()->name }}";
let urlroute = '{{ route("laporan.alirantunai", ":id") }}';
urlroute = urlroute.replace(':id', teller);
window.open(urlroute, '_blank');
let urlroute = '{{ route("laporan.alirantunai") }}';
window.location.href = urlroute;
}
function cetakserahankeseluruhan()
{
let urlroute = '{{ route("laporan.serahanteller") }}';
@@ -1,211 +1,298 @@
<html>
<head>
<style>
.header{
font-size:12px;
font-weight: bold;
margin-left:40px;
}
body {
background: white;
}
page {
background: white;
display: block;
margin: 0 auto;
margin-bottom: 0.5cm;
/* box-shadow: 0 0 0.5cm rgba(0,0,0,0.5); */
}
page[size="A4"] {
width: 21cm;
/* height: 29.7cm; */
}
page[size="A4"][layout="landscape"] {
width: 29.7cm;
height: 21cm;
}
@media print {
body, page {
margin: 0;
box-shadow: 0;
}
}
.middleheader{
text-align: center;
}
.container{
font-family: Arial, Helvetica, sans-serif;
width: 25%;
border: 2px solid gray;
border-radius: 15px;
padding: 5px 10px 10px 30px;
margin: 0 auto;
}
#header {
font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
margin-left:40px;
}
#header td, #customer 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;
}
.statements{
font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 95%;
margin: 0 auto;
}
.statements th{
font-size:14px;
background-color: #f9ca24;
border:1px solid gray;
color:black;
padding:4px 10px 4px 10px;
}
.statements td{
border:1px solid gray;
padding:4px 4px 4px 4px;
}
.center{
position: fixed;
left: 0;
bottom: 0;
width: 100%;
color: white;
text-align: center;
}
</style>
</head>
<body onload="window.print()">
<page size="A4">
<h6 class="header">SULIT DAN PERSENDIRIAN</h6>
<table id="header">
<tr>
<th rowspan="4" style="width:50px"><br><img src="{{ asset('img/icon_pkb.png') }}" style="width:70px"></img></th>
<th colspan="1">KOPERASI PERMODALAN KELANTAN BERHAD</th>
</tr>
<tr>
<td>{{ $cawangan_detail['namacaw'] }}</td>
<td></td>
</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>
<h6 class="middleheader">PENYATA ALIRAN TUNAI : {{ $teller }}</h6>
<div class="row" style="display: flex; justify-content: start;">
<div class="container" style="flex: 1; margin-left: 20px;">
<h3>Baki Awal</h3>
<span>RM {{ number_format($alirantunai['bakiawal'], 2) }}</span>
</div>
<div class="container" style="flex: 1; margin-left: 10px;">
<h3>Pendahuluan</h3>
<span>RM {{ number_format($alirantunai['tambah'], 2) }}</span>
</div>
<div class="container" style="flex: 1; margin-left: 10px;">
<h3>Penyelesaian Pem.</h3>
<span>RM {{ number_format($alirantunai['masuk'], 2) }}</span>
</div>
</div>
<div class="row" style="display: flex; justify-content: start; margin-top: 20px;">
<div class="container" style="flex: 1; margin-left: 20px;">
<h3>Baki Tunai Semasa</h3>
<span>RM {{ number_format($alirantunai['baki'], 2) }}</span>
</div>
<div class="container" style="flex: 1; margin-left: 10px;">
<h3>Serahan</h3>
<span>RM {{ number_format($alirantunai['kurang'], 2) }}</span>
</div>
<div class="container" style="flex: 1; margin-left: 10px;">
<h3>Pembiayaan</h3>
<span>RM {{ number_format($alirantunai['keluar'], 2) }}</span>
</div>
</div>
<h6 class="middleheader" style="margin-bottom:-5px;">KEMASUKAN TUNAI</h6>
<br>
<table class="statements">
<tr>
<th>TARIKH</th>
<th>DEBIT (RM)</th>
<th>KREDIT (RM)</th>
<th>NOTA</th>
</tr>
@php $totaltambah = 0; $totalkurang = 0; @endphp
@foreach($addtunai as $index=>$ad)
@php $totaltambah += $ad['tambah']; $totalkurang += $ad['kurang']; @endphp
<tr style="text-align:center;">
<td>{{ $ad['tarikh'] }}</td>
<td>{{ number_format($ad['tambah'],2) }}</td>
<td>{{ number_format($ad['kurang'],2) }}</td>
<td>{{ $ad['nota'] }}</td>
</tr>
@endforeach
<tr style="text-align:center;">
<td style="font-weight:bold;">JUMLAH</td>
<td>{{ number_format($totaltambah,2) }}</td>
<td>{{ number_format($totalkurang,2) }}</td>
<td></td>
</tr>
</table>
</page>
<script>
<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: 50%;
}
#details td, #details th {
padding: 8px;
font-size:11px;
}
#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;
}
</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>{{ $cawangan_detail['namacaw'] }}</td>
<td></td>
</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="3" style="
text-align: left;
font-size: 16px;
font-weight: bold;
text-transform: uppercase;
padding-top: 10px;
padding-bottom: 10px;
letter-spacing: 0.5px;
">
LAPORAN ALIRAN TUNAI TELLER
</th>
</tr>
<tr>
<td style="width:100px"><b>TARIKH:</b></td>
<td><b>
@php
$tarikhTeller = DateTime::createFromFormat('Y-m-d', $tunai['tarikh']);
echo $tarikhTeller->format('d-m-Y');
@endphp
</b></td>
</tr>
<tr>
<td><b>TARIKH CETAK:</b></td>
<td><b>
@php
$myDateTime = DateTime::createFromFormat('Y-m-d', $tarikh_cetak);
$formattedweddingdate = $myDateTime->format('d-m-Y');
echo $formattedweddingdate;
@endphp
</b></td>
</tr>
</table>
<br>
<table id="details">
<tr>
<th>BAKI AWAL</th>
</tr>
<tr>
<td>Baki Awal</td>
<td>:</td>
<td>RM {{ number_format($tunai['bakiawal'],2) }}</td>
</tr>
<tr>
<th>TAMBAH</th>
</tr>
<tr>
<td>Pendahuluan</td>
<td>:</td>
<td>RM {{ number_format($tunai['tambah'],2) }}</td>
</tr>
<tr>
<td>Pen. Pembiayaan / Keuntungan</td>
<td>:</td>
<td>RM {{ number_format($tunai['masuk'],2) }}</td>
</tr>
<tr>
<td>Kerugian Baki Lelong</td>
<td>:</td>
<td>RM {{ number_format($bakiLelong['rugi_lelong'],2) }}</td>
</tr>
<tr>
<td>Jumlah</td>
<td>:</td>
<td>RM {{ number_format($jumlahTambah,2) }}</td>
</tr>
<tr>
<th>TOLAK</th>
</tr>
<tr>
<td>Serahan</td>
<td>:</td>
<td>RM {{ number_format($tunai['kurang'],2) }}</td>
</tr>
<tr>
<td>Pembiayaan</td>
<td>:</td>
<td>RM {{ number_format($tunai['keluar'],2) }}</td>
</tr>
<tr>
<td>Baki Lelong</td>
<td>:</td>
<td>RM {{ number_format($bakiLelong['baki_lelong'],2) }}</td>
</tr>
<tr>
<td>Jumlah</td>
<td>:</td>
<td>RM {{ number_format($jumlahTolak,2) }}</td>
</tr>
<tr><th>BAKI AKHIR</th></tr>
<tr>
<td colspan="3" style="
border: 2px solid black;
text-align: center;
background-color: #f8f8f8;
font-weight: bold;
font-size: 13px;
padding: 10px;
">
BAKI AKHIR TELLER: RM {{ number_format($tunai['bakiawal'] + $jumlahTambah - $jumlahTolak,2) }}
</td>
</tr>
</table>
<br>
<br>
<br>
<br>
<table id="sign">
<tr>
<td></td>
<td colspan="2"> .................................................................. </td>
<td> </td>
<td colspan="2">.................................................................. </td>
<td> </td>
</tr>
<tr>
<td></td>
<td colspan="2"><B> DI SEMAK</B> </td>
<td> </td>
<td colspan="2"><B>DI SAHKAN </B></td>
<td> </td>
</tr>
</table>
</script>
</body>
</html>
+17 -2
View File
@@ -102,7 +102,7 @@
<h5 class="modal-title" id="ModalLabel">Daftar Pelanggan</h5>
</div>
<div class="modal-body">
<form action="{{ route('customer.store') }}" onsubmit="verifycustomer()" method="POST">
<form name="form-store" action="{{ route('customer.store') }}" onsubmit="verifycustomer()" method="POST">
@csrf
<div class="row form-group">
<div class="col-md-6">
@@ -373,7 +373,7 @@
<h5 class="modal-title" id="ModalLabel">Daftar Pelanggan</h5>
</div>
<div class="modal-body">
<form action="{{ route('customer.store') }}" onsubmit="verifycustomerpassport()" method="POST">
<form name="form-store" action="{{ route('customer.store') }}" onsubmit="verifycustomerpassport()" method="POST">
@csrf
<div class="row form-group">
<div class="col-md-6">
@@ -1394,6 +1394,21 @@ var api_url = @json($api_url ?? '');
$('#pekerjaan-lain').val('');
lainContainer.hide();
}
});
document.getElementsByName('form-store')[0].addEventListener('keypress', function(e) {
// Jika tekan Enter
if (e.key === 'Enter') {
// Jika bukan butang submit dan bukan textarea
const tag = e.target.tagName.toLowerCase();
const type = e.target.type ? e.target.type.toLowerCase() : '';
if (tag !== 'textarea' && type !== 'submit') {
e.preventDefault();
return false;
}
}
});
</script>
@push('additional_scripts')
+308 -10
View File
@@ -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
+350 -128
View File
@@ -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">
@@ -473,21 +510,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'),
@@ -527,60 +577,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',
@@ -596,33 +643,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);
@@ -865,8 +919,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)
{
@@ -1431,22 +1486,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.',
@@ -1604,23 +1661,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();
@@ -1858,5 +1916,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
@@ -20,7 +20,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
@@ -0,0 +1,63 @@
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-12">
<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">Aliran Tunai</li>
</ol>
</nav>
@if(session()->has('errormessage'))
<div class="alert alert-danger">
{{ session()->get('errormessage') }}
</div>
@endif
<div class="card-body text-center">
<div class="row form-group">
<div class="col-md-2">
</div>
<div class="col-md-10">
</div>
</div>
<div class="row">
<div class="col-md-5">
<form action="{{ route('alirantunai.laporancetak') }}" method="post">
@csrf
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" id="basic-addon1">Tarikh</span>
</div>
<input type="text" class="form-control" placeholder="Pilih Tarikh" aria-label="Tarikh" id="datetimepicker1" name="datetimepicker1" aria-describedby="basic-addon1">
<input type="submit" class="btn btn-primary ml-md-5" id="submit_button" name="submit_button" value="Cetak">
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
var api_url = "<?php echo $api_url ?>";
var kodcaw = "<?php echo $cawangan_info['kodcaw'] ?>";
$(document).ready( function () {
$('#datetimepicker1').datepicker({
format: 'dd-mm-yyyy'
});
});
var tablecustomers = $('#myTable').DataTable({
"ordering": false
});
</script>
@endsection
@@ -0,0 +1,282 @@
@extends('layouts.app')
@section('content')
<div class="container">
<h2 class="text-center font-weight-bold my-4">PAMPASAN</h2>
<div class="row mb-4">
<div class="col-md-6">
<label>NAMA</label>
<input type="text" class="form-control mb-2" value="{{ $customer_info['nama'] ?? '-' }}" readonly>
</div>
<div class="col-md-6">
<label>NO PELANGGAN</label>
<input type="text" class="form-control mb-2" value="{{ $gadai_info['nopelanggan'] ?? '-' }}" readonly>
</div>
<div class="col-md-6">
<label>NO RUJUKAN</label>
<input type="text" class="form-control mb-2" value="{{ $gadai_info['norujukan'] ?? '-' }}" readonly>
</div>
<div class="col-md-6">
<label>NO KAD PENGENALAN</label>
<input type="text" class="form-control mb-2" value="{{ $gadai_info['nokp'] ?? '-' }}" readonly>
</div>
</div>
<div class="card p-4 mx-auto" style="max-width:900px;">
<div class="row mb-3">
<div class="col-md-6">
<label>BAUCER NO</label>
<input type="text" class="form-control" value="{{ $baucerno ?? '-' }}" readonly>
</div>
<div class="col-md-6">
<label>NILAI MARHUN</label>
<input type="text" class="form-control"
value="RM {{ number_format($barang_kes_info['nilaimarhun'], 2) }}" readonly>
</div>
<div class="col-md-6">
<label>BAKI PEMBIAYAAN</label>
<input type="text" class="form-control"
value="RM {{ number_format($barang_kes_info['pembiayaan'], 2) }}" readonly>
</div>
<div class="col-md-6">
<label>KEUNTUNGAN</label>
<input type="text" class="form-control" value="RM {{ number_format($barang_kes_info['untung'], 2) }}"
readonly>
</div>
<div class="col-md-6">
<label>JUMLAH PAMPASAN</label>
@php
$nilaimarhun = floatval($barang_kes_info['nilaimarhun'] ?? 0);
$pembiayaan = floatval($barang_kes_info['pembiayaan'] ?? 0);
$untung = floatval($barang_kes_info['untung'] ?? 0);
$jumlah_pampasan = $nilaimarhun - $pembiayaan - $untung;
@endphp
<input type="text" class="form-control" value="RM {{ number_format($jumlah_pampasan, 2) }}" readonly>
</div>
<div class="col-md-6">
<label>JUMLAH TEBUS</label>
<input type="text" class="form-control" value="RM {{ number_format($jumlah_tebus, 2) }}" readonly>
</div>
<div class="col-md-12 row mb-3 justify-content-center">
<div class="col-md-6 text-center">
<label><strong>JUMLAH PANJAR</strong></label>
<input type="text" class="form-control text-center"
value="RM {{ number_format($jumlahPanjar, 2) }}" readonly>
</div>
</div>
</div>
<div class="row mb-3">
<div class="col-12">
<div class="alert alert-info text-center font-weight-bold" style="font-size: 1.2rem;">
Cara Pengiraan Jumlah Pampasan:<br>
<span style="font-size:1.3rem;">
<b>Jumlah Pampasan = Nilai Marhun - Baki Pembiayaan - Keuntungan</b>
</span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 text-right">
<button type="button" class="btn btn-success mr-2" data-toggle="modal"
data-target="#denominasipampasan" data-jumlah="{{ $jumlah_pampasan }}">
DENO
</button>
<button type="button" class="btn btn-danger" onclick="window.history.back()">BATAL</button>
</div>
</div>
</div>
</div>
<script>
const formatter = new Intl.NumberFormat('en-US', {
minimumFractionDigits: 2
});
var arrayambilan = [
["bundle1", 0],
["bundle5", 0],
["bundle10", 0],
["bundle20", 0],
["bundle50", 0],
["bundle100", 0],
["sen1", 0],
["sen5", 0],
["sen10", 0],
["sen20", 0],
["sen50", 0],
["ringgit1", 0],
["ringgit5", 0],
["ringgit10", 0],
["ringgit20", 0],
["ringgit50", 0],
["ringgit100", 0]
];
function totalamount(idwang, bilangan) {
var amount = 0;
switch (idwang) {
case 'bundle1':
amount += (bilangan * 100);
break;
case 'bundle20':
amount += (bilangan * 1000);
break;
case 'bundle5':
amount += (bilangan * 500);
break;
case 'bundle50':
amount += (bilangan * 5000);
break;
case 'bundle10':
amount += (bilangan * 1000);
break;
case 'bundle100':
amount += (bilangan * 5000);
break;
case 'sen1':
amount += (bilangan * 0.01);
break;
case 'sen5':
amount += (bilangan * 0.05);
break;
case 'sen10':
amount += (bilangan * 0.10);
break;
case 'sen20':
amount += (bilangan * 0.20);
break;
case 'sen50':
amount += (bilangan * 0.50);
break;
case 'ringgit1':
amount += (bilangan * 1);
break;
case 'ringgit5':
amount += (bilangan * 5);
break;
case 'ringgit10':
amount += (bilangan * 10);
break;
case 'ringgit20':
amount += (bilangan * 20);
break;
case 'ringgit50':
amount += (bilangan * 50);
break;
case 'ringgit100':
amount += (bilangan * 100);
break;
}
return amount;
}
function kiraanpanjar(datakeyin) {
var idkey = $(datakeyin).attr('id');
var valkey = $(datakeyin).val();
var amount = 0;
let amountkiraan = 0;
var validate = parseFloat($(datakeyin).data('amaun'));
$.each(arrayambilan, function(index, arr) {
if (arr[0] == idkey) {
arrayambilan[index][1] = totalamount(idkey, valkey);
}
amount += arr[1];
});
if (Number(valkey) > Number(validate)) {
Swal.fire({
icon: 'error',
title: 'Amaran',
text: 'Jumlah denominasi melebihi kadar'
});
$(datakeyin).val('');
} else {
$('#amaunkiraan').val(amount);
}
switch (idkey) {
case 'bundle1':
amountkiraan += (valkey * 100);
$('#totalb1').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'bundle20':
amountkiraan += (valkey * 1000);
$('#totalb20').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'bundle5':
amountkiraan += (valkey * 500);
$('#totalb5').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'bundle50':
amountkiraan += (valkey * 5000);
$('#totalb50').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'bundle10':
amountkiraan += (valkey * 1000);
$('#totalb10').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'bundle100':
amountkiraan += (valkey * 5000);
$('#totalb100').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'sen1':
amountkiraan += (valkey * 0.01);
$('#totalsen1').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'sen5':
amountkiraan += (valkey * 0.05);
$('#totalsen5').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'sen10':
amountkiraan += (valkey * 0.10);
$('#totalsen10').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'sen20':
amountkiraan += (valkey * 0.20);
$('#totalsen20').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'sen50':
amountkiraan += (valkey * 0.50);
$('#totalsen50').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'ringgit1':
amountkiraan += (valkey * 1);
$('#totalring1').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'ringgit5':
amountkiraan += (valkey * 5);
$('#totalring5').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'ringgit10':
amountkiraan += (valkey * 10);
$('#totalring10').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'ringgit20':
amountkiraan += (valkey * 20);
$('#totalring20').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'ringgit50':
amountkiraan += (valkey * 50);
$('#totalring50').val(formatter.format(amountkiraan.toFixed(2)));
break;
case 'ringgit100':
amountkiraan += (valkey * 100);
$('#totalring100').val(formatter.format(amountkiraan.toFixed(2)));
break;
}
}
</script>
@include('modal.denopampasan')
@endsection
File diff suppressed because it is too large Load Diff
+116 -41
View File
@@ -13,7 +13,7 @@
@include('modal.agh')
<div class="container">
<div class="container col-12">
<div class="row justify-content-center">
<div class="col-md-12 col-lg-12">
<div class="card">
@@ -171,7 +171,7 @@
</nav>
<div class="tab-content" id="navtawarruqdannottawarruq">
<div class="tab-pane fade {{ $activate_pane_SAG_baru }}" id="nav-tawarruq" role="tabpanel" aria-labelledby="nav-tawarruq-tab">
<table class="table table-striped table-hover" id="myTable">
<table class="table table-striped table-hover" id="myTable" style="width: 100%">
<thead class="thead-dark">
<tr>
<th>Bil</th>
@@ -184,23 +184,14 @@
<th>Tempoh</th>
<th>Keuntungan</th>
<th>Lelong</th>
<th>Pembayaran Terakhir</th>
</tr>
</thead>
</table>
</div>
<div class="tab-pane fade {{ $activate_pane_SAG_lama }}" id="nav-xtawarruq" role="tabpanel" aria-labelledby="nav-xtawarruq-tab">
<table id="xtawarruq" class="table table-striped table-hover">
<table id="xtawarruq" class="table table-striped table-hover" style="width:100%">
<thead class="thead-dark">
{{-- <tr>
<th>Bil</th>
<th>No Rujukan</th>
<th>Tarikh Gadai</th>
<th>Tarikh Matang</th>
<th>Pembiayaan</th>
<th>Margin</th>
<th>Tempoh</th>
<th>Lelong</th>
</tr> --}}
<tr>
<th>Bil</th>
<th>No Rujukan</th>
@@ -212,6 +203,7 @@
<th>Tempoh</th>
<th>Keuntungan</th>
<th>Lelong</th>
<th>Pembayaran Terakhir</th>
</tr>
</thead>
</table>
@@ -233,7 +225,9 @@
</thead>
</table>
<table id="lelongTable" class="table table-striped table-hover">
{{-- Lelong --}}
<table id="lelongTable" class="table table-striped table-hover" style="width:100%">
<thead class="thead-dark">
<tr>
<th>Bil</th>
@@ -514,7 +508,7 @@
});
var xtawarruq = $('#xtawarruq').DataTable({
"scrollX": false
"scrollX": true,
});
var tabledahtebus = $('#dahtebusTable').DataTable({
@@ -563,6 +557,26 @@
function checkserah(data){
var urlpenebusan = $(data).data("url");
var norujukan = $(data).data("norujukan");
var isBlocked = $(data).data("blocked");
if(isBlocked === true || isBlocked === "true"){
Swal.fire({
icon: 'error',
title: 'Amaran',
text: 'Pembiayaan Sedang Dilelong'
});
return false;
}
Swal.fire({
title: 'Memuatkan...',
allowEscapeKey : false,
allowOutsideClick: false,
didOpen: function () {
Swal.showLoading()
}
});
$.ajax({
method:'get',
url: api_url + '/api/check/serah/gadai',
@@ -585,14 +599,49 @@
});
}
function getPembayaranTerakhir(tarikhLelong)
{
if (!tarikhLelong || tarikhLelong === '') {
return { tarikh: '', blocked: false };
}
let lelongDate;
if (tarikhLelong.includes('-')) {
const parts = tarikhLelong.split('-');
if (parts[0].length === 4) {
lelongDate = new Date(tarikhLelong);
} else {
lelongDate = new Date(parts[2], parts[1] - 1, parts[0]);
}
}
let pembayaranTerakhir = new Date(lelongDate);
pembayaranTerakhir.setDate(pembayaranTerakhir.getDate() - 3);
let today = new Date();
today.setHours(0, 0, 0, 0);
pembayaranTerakhir.setHours(0, 0, 0, 0);
let isBlocked = today > pembayaranTerakhir;
let day = String(pembayaranTerakhir.getDate()).padStart(2, '0');
let month = String(pembayaranTerakhir.getMonth() + 1).padStart(2, '0');
let year = pembayaranTerakhir.getFullYear();
return {
tarikh: `${year}-${month}-${day}`,
blocked: isBlocked
};
}
function gadaiTable(data,jenistebus){
var counter = 1;
tablegadai.clear().draw();
tabledahtebus.clear().draw();
tablelelong.clear().draw();
xtawarruq.clear().draw();
$.each(data,function(index,gadai_detail){
var counter = 1;
tablegadai.clear().draw();
tabledahtebus.clear().draw();
tablelelong.clear().draw();
xtawarruq.clear().draw();
$.each(data,function(index,gadai_detail){
let jeniskeuntungan = (gadai_detail['tagbaru'] == 1) ? 'onepercent' : 'asal';
$.ajax({
method:'get',
@@ -616,15 +665,7 @@ $.each(data,function(index,gadai_detail){
var taglel = '';
if(gadai_detail['taglel'] == 1){
if(tagarrahnbid == 1){
$.ajax({
method:"GET",
async:false,
url:api_arrahnbid + 'portalApi?norujukan=' + gadai_detail['norujukan'],
success: function(data){
taglel = data.lelong.t_lelong;
}
});
taglel = gadai_detail['t_lelong'];
} else {
$.ajax({
method:"GET",
@@ -647,7 +688,18 @@ $.each(data,function(index,gadai_detail){
if(gadai_detail["percentpinj"] != 0)
xtawarruq.row.add([
'<input type="radio" value='+ gadai_detail["norujukan"] + ' name="belum"/>',
'<a href="#" onclick="checkserah(this)" data-pinjaman='+ gadai_detail['pinjaman'] +' data-hargajualan='+ gadai_detail['hargajualan'] +' data-norujukan='+ gadai_detail['norujukan'] +' data-url=' + urlroute +'>' + gadai_detail['norujukan'] + '</a>',
// '<a href="#" onclick="checkserah(this)" data-pinjaman='+ gadai_detail['pinjaman'] +' data-hargajualan='+ gadai_detail['hargajualan'] +' data-norujukan='+ gadai_detail['norujukan'] +' data-url=' + urlroute +'>' + gadai_detail['norujukan'] + '</a>',
(function() {
let bayaranInfo = getPembayaranTerakhir(taglel);
let blockedAttr = bayaranInfo.blocked ? 'data-blocked="true"' : '';
return '<a href="#" onclick="checkserah(this)" ' +
'data-pinjaman='+ gadai_detail['pinjaman'] +' ' +
'data-hargajualan='+ gadai_detail['hargajualan'] +' ' +
'data-norujukan='+ gadai_detail['norujukan'] +' ' +
'data-url=' + urlroute + ' ' +
blockedAttr + '>' +
gadai_detail['norujukan'] + '</a>';
})(),
gadai_detail['t_gadai'],
tarikh_matang,
'RM '+ formatter.format(gadai_detail['bakihargajualan']),
@@ -656,20 +708,23 @@ $.each(data,function(index,gadai_detail){
gadai_detail['tempoh'],
'RM '+ upahsemasa,
'<div style="white-space: nowrap; color:red; font-weight: bolder">' + taglel + '</div>',
(function() {
let bayaranInfo = getPembayaranTerakhir(taglel);
if (!bayaranInfo.tarikh) {
return '';
}
let color = bayaranInfo.blocked ? 'red' : 'green';
return '<div style="white-space: nowrap; color: ' + color + '; font-weight: bold;">' +
bayaranInfo.tarikh + '</div>';
})()
]).draw();
}else{
var taglel = '';
if(gadai_detail['taglel'] == 1){
if(tagarrahnbid == 1){
$.ajax({
method:"GET",
async:false,
url:api_arrahnbid + 'portalApi?norujukan=' + gadai_detail['norujukan'],
success: function(data){
taglel = data.lelong.t_lelong;
}
});
if(gadai_detail['t_lelong'] != null) {
taglel = gadai_detail['t_lelong'];
}
} else {
$.ajax({
method:"GET",
@@ -690,7 +745,18 @@ $.each(data,function(index,gadai_detail){
// let radio_action = "onclick=checkCanChangeGadaianDetail(" + "'" + table_norujukan + "'" + ")";
tablegadai.row.add([
'<input type="radio" value='+ gadai_detail["norujukan"] + ' name="belum"/>',
'<a href="#" onclick="checkserah(this)" data-pinjaman='+ gadai_detail['pinjaman'] +' data-hargajualan='+ gadai_detail['hargajualan'] +' data-norujukan='+ gadai_detail['norujukan'] +' data-url=' + urlroute +'>' + gadai_detail['norujukan'] + '</a>',
// '<a href="#" onclick="checkserah(this)" data-pinjaman='+ gadai_detail['pinjaman'] +' data-hargajualan='+ gadai_detail['hargajualan'] +' data-norujukan='+ gadai_detail['norujukan'] +' data-url=' + urlroute +'>' + gadai_detail['norujukan'] + '</a>',
(function() {
let bayaranInfo = getPembayaranTerakhir(taglel);
let blockedAttr = bayaranInfo.blocked ? 'data-blocked="true"' : '';
return '<a href="#" onclick="checkserah(this)" ' +
'data-pinjaman='+ gadai_detail['pinjaman'] +' ' +
'data-hargajualan='+ gadai_detail['hargajualan'] +' ' +
'data-norujukan='+ gadai_detail['norujukan'] +' ' +
'data-url=' + urlroute + ' ' +
blockedAttr + '>' +
gadai_detail['norujukan'] + '</a>';
})(),
gadai_detail['t_gadai'],
tarikh_matang,
'RM '+ formatter.format(gadai_detail['bakihargajualan']),
@@ -699,6 +765,15 @@ $.each(data,function(index,gadai_detail){
gadai_detail['tempoh'],
'RM '+ upahsemasa['pendapatan'],
'<div style="white-space: nowrap; color:red; font-weight: bolder">' + taglel + '</div>',
(function() {
let bayaranInfo = getPembayaranTerakhir(taglel);
if (!bayaranInfo.tarikh) {
return '';
}
let color = bayaranInfo.blocked ? 'red' : 'green';
return '<div style="white-space: nowrap; color: ' + color + '; font-weight: bold;">' +
bayaranInfo.tarikh + '</div>';
})()
]).draw();
}
}else if(jenistebus == "sudah_tebus"){
+1 -1
View File
@@ -39,12 +39,12 @@
<link rel="stylesheet" href="{{ asset('vendor/datepicker/css/bootstrap-datepicker.min.css') }}"/>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<script src="{{ asset('js/jquery.min.js') }}"></script>
<script src="{{ asset('js/popper.min.js') }}"></script>
<script src="{{ asset('vendor/bootstrap/js/bootstrap.min.js') }}"></script>
<script src="{{ asset('js/select2.min.js') }}"></script>
<script src="{{ asset('js/apexcharts.js') }}"></script>
<script src="{{ asset('js/numeral.min.js') }}"></script>
<script src="{{ asset('js/sweetalert.min.js') }}"></script>
<script src="{{ asset('js/popper.min.js') }}"></script>
<script src="{{ asset('vendor/DataTables/datatables.min.js') }}"></script>
<script src="{{ asset('vendor/datepicker/js/bootstrap-datepicker.min.js') }}"></script>
<script src="{{ asset('js/typehead.jquery.js') }}"></script>
+29 -3
View File
@@ -601,9 +601,26 @@ function ubahwakil(e)
'hargajual' : hargajual
},
success:function(data){
let urlroute = '{{ route("resit.tuntutbaki", ":id") }}';
urlroute = urlroute.replace(':id', norujukan);
Swal.fire(
if(data == 'kemaskini'){
Swal.fire(
'Amaran!',
'Sila kemaskini aliran tunai dahulu!',
'error'
)
return false;
}
else if(data == 'Baki tidak mencukupi'){
Swal.fire(
'Amaran!',
'Baki tunai tidak mencukupi. Sila tambah baki tunai dahulu!',
'error'
)
return false;
}else if(data == 'Berjaya'){
let urlroute = '{{ route("resit.tuntutbaki", ":id") }}';
urlroute = urlroute.replace(':id', norujukan);
Swal.fire(
'Berjaya!',
'Tuntut Baki Berjaya',
'success'
@@ -611,6 +628,15 @@ function ubahwakil(e)
window.open(urlroute, '_blank');
window.location.replace("{{ route('customer_info') }}");
})
}else{
Swal.fire(
'Amaran!',
'Terdapat ralat semasa proses. Sila cuba lagi!',
'error'
)
return false;
}
},error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(xhr.responseText);
@@ -0,0 +1,199 @@
<div class="modal fade" id="denominasipampasan" tabindex="-1" role="dialog"
aria-labelledby="denominasipampasanModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-xl" role="document">
<div class="modal-content">
<div class="modal-header">
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active" data-toggle="pill" href="#home" role="tab"
aria-controls="pills-flamingo" aria-selected="true">Keping</a>
</li>
</ul>
<label class="mt-2 ml-3">Amaun Kiraan:</label>
<input type="text" class="form-control col-3 ml-3" id="amaunkiraan" placeholder="0.00" readonly>
<label class="mt-2 ml-3">Jumlah Panjar:</label>
<input type="text" class="form-control col-3 ml-2 bg-light font-weight-bold" id="jumlahPanjar"
value="{{ number_format($jumlahPanjar, 2) }}" readonly>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<form id="formPampasan" method="POST" onsubmit="return terimadeno(event)" action="{{ route('pampasan.terima') }}">
@csrf
<input type="hidden" id="norujukan" name="norujukan" value="{{ $gadai_info['norujukan'] }}">
<input type="hidden" id="baucerno" name="baucerno" value="{{ $baucerno }}">
<input type="hidden" name="jumlahpampasan" value="{{ $jumlah_pampasan }}">
<input type="hidden" name="jumlahPanjar" value="{{ $jumlahPanjar }}">
<input type="hidden" name="teller" value="{{ auth()->user()->name }}">
<div class="tab-content">
<div class="tab-pane fade show active" id="home" role="tabpanel"
aria-labelledby="flamingo-tab">
<table class="table text-center">
<tr>
<th></th>
<th name="denominasi" class="denominasi">Peti Besi</th>
<th>Ambilan</th>
<th>Jumlah (RM)</th>
<th></th>
<th name="denominasi" class="denominasi">Peti Besi</th>
<th>Ambilan</th>
<th>Jumlah (RM)</th>
</tr>
<tr>
<td>RM0.01</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtsen1'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilansen1]" class="form-control kosong" id="sen1"
data-amaun="{{ $denominasi['txtsen1'] }}" onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalsen1]" id="totalsen1" class="form-control kosong"
value="0.00" readonly /> </td>
<td>RM1</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtring1'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilanring1]" class="form-control kosong" id="ringgit1"
data-amaun="{{ $denominasi['txtring1'] }}" onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalring1]" id="totalring1" class="form-control kosong"
value="0.00" readonly /> </td>
</tr>
<tr>
<td>RM0.05</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtsen5'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilansen5]" class="form-control kosong" id="sen5"
data-amaun="{{ $denominasi['txtsen5'] }}" onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalsen5]" id="totalsen5" class="form-control kosong"
value="0.00" readonly /> </td>
<td>RM5</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtring5'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilanring5]" class="form-control kosong" id="ringgit5"
data-amaun="{{ $denominasi['txtring5'] }}" onkeyup="kiraanpanjar(this)" />
</td>
<td><input type="text" name="denominasi[totalring5]" id="totalring5"
class="form-control kosong" value="0.00" readonly /> </td>
</tr>
<tr>
<td>RM0.10</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtsen10'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilansen10]" class="form-control kosong"
id="sen10" data-amaun="{{ $denominasi['txtsen10'] }}"
onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalsen10]" id="totalsen10"
class="form-control kosong" value="0.00" readonly /> </td>
<td>RM10</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtring10'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilanring10]" class="form-control kosong"
id="ringgit10" data-amaun="{{ $denominasi['txtring10'] }}"
onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalring10]" id="totalring10"
class="form-control kosong" value="0.00" readonly /> </td>
</tr>
<tr>
<td>RM0.20</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtsen20'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilansen20]" class="form-control kosong"
id="sen20" data-amaun="{{ $denominasi['txtsen20'] }}"
onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalsen20]" id="totalsen20"
class="form-control kosong" value="0.00" readonly /> </td>
<td> RM20</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtring20'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilanring20]" class="form-control kosong"
id="ringgit20" data-amaun="{{ $denominasi['txtring20'] }}"
onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalring20]" id="totalring20"
class="form-control kosong" value="0.00" readonly /> </td>
</tr>
<tr>
<td>RM0.50</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtsen50'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilansen50]" class="form-control kosong"
id="sen50" data-amaun="{{ $denominasi['txtsen50'] }}"
onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalsen50]" id="totalsen50"
class="form-control kosong" value="0.00" readonly /> </td>
<td>RM50</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtring50'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilanring50]" class="form-control kosong"
id="ringgit50" data-amaun="{{ $denominasi['txtring50'] }}"
onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalring50]" id="totalring50"
class="form-control kosong" value="0.00" readonly /> </td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td>RM100</td>
<td name="denominasi" class="denominasi"><input type="text" class="form-control"
value="{{ $denominasi['txtring100'] }}" readonly /></td>
<td><input type="text" name="denominasi[ambilanring100]" class="form-control kosong"
id="ringgit100" data-amaun="{{ $denominasi['txtring100'] }}"
onkeyup="kiraanpanjar(this)" /> </td>
<td><input type="text" name="denominasi[totalring100]" id="totalring100"
class="form-control kosong" value="0.00" readonly /> </td>
</tr>
</table>
</div>
</div>
<input type="hidden" id="jenisjenis" />
<input type="hidden" id="kodcawangan" />
<input type="hidden" id="tellerla" />
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger btn-lg" data-dismiss="modal">Batal</button>
<button type="submit" class="btn btn-success btn-lg">Terima</button>
</div>
</form>
</div>
</div>
</div>
<script>
function terimadeno(e) {
e.preventDefault();
let amaunKiraan = parseFloat($('#amaunkiraan').val()) || 0;
let jumlahPampasan = parseFloat($('input[name="jumlahpampasan"]').val()) || 0;
let jumlahPanjar = parseFloat($('input[name="jumlahPanjar"]').val()) || 0;
// Validation
if (amaunKiraan !== jumlahPanjar) {
Swal.fire({
icon: 'error',
title: 'Jumlah Tidak Sama',
text: 'Amaun kiraan mesti sama dengan Jumlah Panjar.'
});
return false;
}
Swal.fire({
icon: 'success',
title: 'Berjaya',
text: 'Pampasan berjaya!',
showConfirmButton: true
}).then(() => {
$('#formPampasan')[0].submit();
});
return false;
}
</script>
+1 -1
View File
@@ -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>
+23 -3
View File
@@ -1,4 +1,4 @@
<!-- Modal Keraian -->
<!-- Modal Keraian -->
<div class="modal fade" id="keraianModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
@@ -570,6 +570,26 @@
</div>
</div>
</div>
<!-- Modal Surat Agreement -->
<div class="modal fade" id="suratModal" tabindex="-1" role="dialog" aria-labelledby="suratModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="suratModalLabel">Surat Agreement</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="surat-content" style="font-family: 'Times New Roman', Times, serif;">
<!-- Surat content will be injected here -->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button>
<button type="button" class="btn btn-primary" id="btnPrintSurat">Cetak & Teruskan</button>
</div>
</div>
</div>
</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
+499 -374
View File
@@ -2,27 +2,97 @@
@section('content')
<div class="modal fade" id="kelulusanmodal">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h4 class="text-center">Maklumat Lanjut</h4>
<button type="button" class="close" data-dismiss="modal">&times;</button>
</div>
<!-- Modal body -->
<div class="modal-body">
<div class="row col-12 text-center">
<div class="row col-7">
<label>Nama : </label>
<span id="namalanjut"> </span>
</div>
<div class="modal fade" id="kelulusan_pampasan_modal">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h4 class="text-center">Maklumat Lanjut</h4>
<button type="button" class="close" data-dismiss="modal">&times;</button>
</div>
<!-- Modal body -->
<div class="modal-body">
<div class="row col-5">
<label>Kad Pengenalan : </label>
<span id="nokplanjut"> </span>
<div class="row col-12 text-center">
<div class="row col-7">
<label>Nombor Rujukan : </label>
<span id="norujukan_pampasan"> </span>
</div>
</div>
<div class="row col-12 text-center">
<div class="row col-7">
<label>Nama : </label>
<span id="namalanjut_pampasan"> </span>
</div>
<div class="row col-5">
<label>Kad Pengenalan : </label>
<span id="nokplanjut_pampasan"> </span>
</div>
</div>
<div class="row mt-3">
<div class="col-12">
<div class="table-responsive">
<table class="table table-hover">
<tbody>
<tr>
<th class="bg-secondary text-white" scope="row" style="width: 30%;">Nilai Marhun</th>
<td id="nilaiMarhun">text</td>
</tr>
<tr>
<th class="bg-secondary text-white" scope="row" style="width: 30%;">Baki Pembiayaan</th>
<td id="pembiayaan"></td>
</tr>
<tr>
<th class="bg-secondary text-white" scope="row" style="width: 30%;">Jumlah Pampasan</th>
<td id="jumlahPampasan"></td>
</tr>
<tr>
<th class="bg-secondary text-white" scope="row" style="width: 30%;">Keuntungan</th>
<td id="keuntungan"></td>
</tr>
<tr>
<th class="bg-secondary text-white" scope="row" style="width: 30%;">Ansuran Pembiayaan</th>
<td id="bayaranAnsuran"></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- Modal footer -->
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="kelulusanmodal">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h4 class="text-center">Maklumat Lanjut</h4>
<button type="button" class="close" data-dismiss="modal">&times;</button>
</div>
<!-- Modal body -->
<div class="modal-body">
<div class="row col-12 text-center">
<div class="row col-7">
<label>Nama : </label>
<span id="namalanjut"> </span>
</div>
<div class="row col-5">
<label>Kad Pengenalan : </label>
<span id="nokplanjut"> </span>
</div>
</div>
<div class="row mt-3">
@@ -71,404 +141,459 @@
</div>
</div>
<!-- Modal footer -->
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
</div>
<!-- Modal footer -->
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div class="container col-12">
<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 active" aria-current="page">Kelulusan</li>
</ol>
</nav>
<div class="card-body text-center">
<div class="row mb-4">
<div class="col-2 justify-content-start">
</div>
<div class="col-8 mt-3 justify-content-center">
</div>
<div class="col-2">
</div>
</div>
<table class='table mt-2 table-striped table-hover' id='table-kelulusan' style="width:100%;">
<thead class="thead-dark">
<tr>
<th>No Rujukan</th>
<th>Cawangan</th>
<th>Teller</th>
<th>Komen</th>
<th>Status</th>
<th>Nilai Pembiayaan</th>
<th>Ansuran</th>
<th>Nilai Marhun</th>
<th>Berat</th>
<th>Margin</th>
<th>Tindakan</th>
</tr>
</thead>
<tbody>
@foreach($arraykelulusan as $index=>$k)
<tr>
@php
$targetModal = '#kelulusanmodal';
$targetModal = strtolower($k['status']) == 'kelulusan pengeluaran pampasan' ? '#kelulusan_pampasan_modal' : $targetModal;
@endphp
<td><a href="#" data-toggle="modal" data-target="{{$targetModal}}" data-kodcawangan="{{ $k['cawangankod'] }}" data-norujukan="{{ $k['norujukan'] }}">{{ $k['norujukan'] }} </a></td>
<td>{{ $k['cawangan'] }}</td>
<td>{{ $k['namateller'] }}</td>
<th>{{ $k['komen'] }}</th>
<td>{{ $k['status'] }}</td>
<td>{{ number_format($k['pinjaman'],2) }}</td>
@if(isset($k['ansuran']) && $k['ansuran'] != 0)
<td>{{ number_format($k['ansuran'],2) }}</td>
@else
<td></td>
@endif
<td>{{ $k['nilaimarhun'] }}</td>
<td>{{ $k['berat'] }}</td>
<td>{{ $k['margin'] }}</td>
<td><button class="btn btn-primary mr-2" onclick="updatelulus(this)" data-taglulus="{{ isset($k['mohonid']) ? true : false }}" data-kodcaw="{{ $k['cawangankod'] }}" data-norujukan="{{ $k['norujukan'] }}" data-siri="{{ isset($k['siri']) ? $k['siri'] : $k['recno'] }}" data-status="{{ $k['status'] ?? '' }}"><i class="fas fa-thumbs-up"></i></button>
<button class="btn btn-danger" onclick="updatebatal(this)" data-taglulus="{{ isset($k['mohonid']) ? true : false }}" data-kodcaw="{{ $k['cawangankod'] }}" data-norujukan="{{ $k['norujukan'] }}" data-siri="{{ isset($k['siri']) ? $k['siri'] : $k['recno'] }}"><i class="fas fa-thumbs-down"></i></button>
</td>
</tr>
@endforeach
</tbody>
</table>
<div class="row mt-4 d-flex justify-content-end">
<a href="{{ route ('operasi.rekodlepas') }}" class="btn btn-info mr-3">Rekod Lulus</a>
</div>
</div>
</div>
</div>
</div>
<div class="container col-12">
<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 active" aria-current="page">Kelulusan</li>
</ol>
</nav>
<div class="card-body text-center">
<div class="row mb-4">
<div class="col-2 justify-content-start">
</div>
<div class="col-8 mt-3 justify-content-center">
</div>
<div class="col-2">
</div>
</div>
<table class='table mt-2 table-striped table-hover' id='table-kelulusan' style="width:100%;">
<thead class="thead-dark">
<tr>
<th>No Rujukan</th>
<th>Cawangan</th>
<th>Teller</th>
<th>Komen</th>
<th>Status</th>
<th>Nilai Pembiayaan</th>
<th>Ansuran</th>
<th>Nilai Marhun</th>
<th>Berat</th>
<th>Margin</th>
<th>Tindakan</th>
</tr>
</thead>
<tbody>
@foreach($arraykelulusan as $index=>$k)
<tr>
<td><a href="#" data-toggle="modal" data-target="#kelulusanmodal" data-kodcawangan="{{ $k['cawangankod'] }}" data-norujukan="{{ $k['norujukan'] }}">{{ $k['norujukan'] }} </a></td>
<td>{{ $k['cawangan'] }}</td>
<td>{{ $k['namateller'] }}</td>
<th>{{ $k['komen'] }}</th>
<td>{{ $k['status'] }}</td>
<td>{{ number_format($k['pinjaman'],2) }}</td>
@if(isset($k['ansuran']) && $k['ansuran'] != 0)
<td>{{ number_format($k['ansuran'],2) }}</td>
@else
<td></td>
@endif
<td>{{ $k['nilaimarhun'] }}</td>
<td>{{ $k['berat'] }}</td>
<td>{{ $k['margin'] }}</td>
<td><button class="btn btn-primary mr-2" onclick="updatelulus(this)" data-taglulus="{{ isset($k['mohonid']) ? true : false }}" data-kodcaw="{{ $k['cawangankod'] }}" data-norujukan="{{ $k['norujukan'] }}" data-siri="{{ isset($k['siri']) ? $k['siri'] : $k['recno'] }}"><i class="fas fa-thumbs-up"></i></button>
<button class="btn btn-danger" onclick="updatebatal(this)" data-taglulus="{{ isset($k['mohonid']) ? true : false }}" data-kodcaw="{{ $k['cawangankod'] }}" data-norujukan="{{ $k['norujukan'] }}" data-siri="{{ isset($k['siri']) ? $k['siri'] : $k['recno'] }}" ><i class="fas fa-thumbs-down"></i></button></td>
</tr>
@endforeach
</tbody>
</table>
<div class="row mt-4 d-flex justify-content-end">
<a href="{{ route ('operasi.rekodlepas') }}" class="btn btn-info mr-3">Rekod Lulus</a>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
var tablekelulusan = $('#table-kelulusan').DataTable({
"scrollX": true
});
var tablekelulusan = $('#table-kelulusan').DataTable({
"scrollX": true
});
let api = "{{ config('api.url') }}";
let api = "{{ config('api.url') }}";
const formatter = new Intl.NumberFormat('en-US', {
minimumFractionDigits: 2
});
const formatter = new Intl.NumberFormat('en-US', {
minimumFractionDigits: 2
});
var audio = new Audio("{{ asset('sound/3.wav') }}");
var audio = new Audio("{{ asset('sound/3.wav') }}");
if(tablekelulusan.data().any()){
audio.play();
audio.addEventListener('ended', function() {
this.currentTime = 0;
this.play();
}, false);
}else{
audio.loop = false;
audio.muted = true;
}
if (tablekelulusan.data().any()) {
audio.play();
audio.addEventListener('ended', function() {
this.currentTime = 0;
this.play();
}, false);
} else {
audio.loop = false;
audio.muted = true;
}
$('#kelulusanmodal').on('show.bs.modal', function(event) {
let button = $(event.relatedTarget);
let norujukan = $(button).data('norujukan');
let kodcaw = $(button).data('kodcawangan');
$('#kelulusanmodal').on('show.bs.modal', function(event) {
let button = $(event.relatedTarget);
let norujukan = $(button).data('norujukan');
let kodcaw = $(button).data('kodcawangan');
$.ajax({
method: 'GET',
url: api + '/api/gadai/norujukan/' + norujukan,
dataType: 'json',
success: function(datagadaiwithnorujukan) {
let nokp = datagadaiwithnorujukan[0][0].nokp;
$.ajax({
method:'GET',
url: api + '/api/gadai/norujukan/' + norujukan,
method: 'GET',
url: api + '/api/customers/' + nokp,
dataType: 'json',
success:function(datagadaiwithnorujukan){
success: function(datagadaiwithnokp) {
let nokp = datagadaiwithnorujukan[0][0].nokp;
let nama = datagadaiwithnokp.nama;
$('#namalanjut').text(nama);
$('#nokplanjut').text(nokp);
$.ajax({
method:'GET',
url: api + '/api/customers/' + nokp,
dataType: 'json',
success:function(datagadaiwithnokp){
method: 'GET',
url: api + '/api/gadai/customers/' + nokp + '/outstandingsemasa/' + kodcaw,
dataType: 'json',
success: function(outstandingsemasa) {
let nama = datagadaiwithnokp.nama;
$('#pinjterkumpul').text('RM' + formatter.format(outstandingsemasa));
$('#namalanjut').text(nama);
$('#nokplanjut').text(nokp);
$.ajax({
method:'GET',
url: api + '/api/gadai/customers/' + nokp + '/outstandingsemasa/' + kodcaw,
dataType: 'json',
success:function(outstandingsemasa){
$('#pinjterkumpul').text('RM' + formatter.format(outstandingsemasa));
},error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(xhr.responseText);
}
});
}
});
$.ajax({
method:'GET',
url: api + '/api/customers/' + nokp + '/gadai/belum_tebus',
dataType: 'json',
success:function(data){
let bilanganaktif = 0;
if(data == null)
{
bilanganaktif = 0;
}else{
bilanganaktif = data[0].length;
}
$('#bilaktif').text(bilanganaktif);
}
});
$.ajax({
method:'GET',
url: api + '/api/customers/' + nokp + '/gadai/lelong',
dataType: 'json',
success:function(data){
let bilanganlelong = 0;
if(data == null)
{
bilanganlelong = 0;
}else{
bilanganlelong = data.length;
}
$('#billelong').text(bilanganlelong);
}
},
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(xhr.responseText);
}
});
}
});
$.ajax({
method: 'GET',
url: api + '/api/customers/' + nokp + '/gadai/belum_tebus',
dataType: 'json',
success: function(data) {
let bilanganaktif = 0;
if (data == null) {
bilanganaktif = 0;
} else {
bilanganaktif = data[0].length;
}
$('#bilaktif').text(bilanganaktif);
}
});
$.ajax({
method: 'GET',
url: api + '/api/customers/' + nokp + '/gadai/lelong',
dataType: 'json',
success: function(data) {
let bilanganlelong = 0;
if (data == null) {
bilanganlelong = 0;
} else {
bilanganlelong = data.length;
}
$('#billelong').text(bilanganlelong);
}
});
}
});
});
async function updatelulus(e)
{
const { value: katalaluan } = await Swal.fire({
title: 'Masukkan Katalaluan Semula',
input: 'password',
inputPlaceholder: 'Katalaluan',
confirmButtonText: 'Hantar',
showCancelButton:true,
cancelButtonText:'Batal',
allowOutsideClick: true
})
async function updatelulus(e) {
let dataminta = '';
const {
value: katalaluan
} = await Swal.fire({
title: 'Masukkan Katalaluan Semula',
input: 'password',
inputPlaceholder: 'Katalaluan',
confirmButtonText: 'Hantar',
showCancelButton: true,
cancelButtonText: 'Batal',
allowOutsideClick: true
})
$.ajax({
method:'get',
url: "{{ route('operasi.getmintasemulakelulusan') }}",
async:false,
data:{ passsemula : katalaluan },
success:function(data)
{
if(data == "False")
{
dataminta = data;
}
}
});
let dataminta = '';
if(dataminta == 'False')
{
Swal.fire({
icon: 'error',
title: 'Pengesahan Katalaluan Tidak Berjaya'
})
event.preventDefault();
return false;
$.ajax({
method: 'get',
url: "{{ route('operasi.getmintasemulakelulusan') }}",
async: false,
data: {
passsemula: katalaluan
},
success: function(data) {
if (data == "False") {
dataminta = data;
}
}
});
// var { value: komenkelulusan } = await Swal.fire({
// title: 'Masukkan Komen!',
// input: 'radio',
// customClass: {
// input: 'custom-radio'
// },
// inputOptions: {
// 'Pelanggan Baru': 'Pelanggan Baru',
// 'Pelanggan Tetap': 'Pelanggan Tetap',
// 'Rekod Gadaian Baik': 'Rekod Gadaian Baik',
// 'Lain2': 'Lain-Lain'
// },
// confirmButtonText: 'Hantar',
// showCancelButton:false,
// allowOutsideClick: false
// })
// if(komenkelulusan === 'Lain2')
// {
// var { value: komenkelulusan } = await Swal.fire({
// title: 'Masukkan Komen!',
// input: 'text',
// inputPlaceholder: 'Komen',
// confirmButtonText: 'Hantar',
// showCancelButton:false,
// allowOutsideClick: false
// });
// }
const { value: komenkelulusan } = await Swal.fire({
title: 'Masukkan Komen!',
input: 'text',
inputPlaceholder: 'Komen',
confirmButtonText: 'Hantar',
showCancelButton:false,
allowOutsideClick: false
})
let norujukan = $(e).data('norujukan');
let cawangankod = $(e).data('kodcaw');
let siri = $(e).data('siri');
let namaoperasi = "{{ Auth::user()->name }}";
let teller = $(e).closest('tr').children('td:eq(2)').text();
let taglulus = $(e).data('taglulus');
teller = String(teller);
$.ajax({
method:'put',
url: "{{ route('operasi.updatekelulusan') }}",
data: {
"_token": "{{ csrf_token() }}",
"taglulus" : taglulus,
"norujukan" : norujukan,
"kodcaw" : cawangankod,
"komenkelulusan" : komenkelulusan,
"siri" : siri,
'namaoperasi' : namaoperasi,
'teller' : teller
},
success:function(data){
console.log(data);
Swal.fire({
icon: 'success',
title: 'Pengesahan Berjaya'
}).then(function(){
location.reload();
});
},error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(xhr.responseText);
}
});
if (dataminta == 'False') {
Swal.fire({
icon: 'error',
title: 'Pengesahan Katalaluan Tidak Berjaya'
})
event.preventDefault();
return false;
}
async function updatebatal(e)
{
const { value: katalaluan } = await Swal.fire({
title: 'Masukkan Katalaluan Semula',
input: 'password',
inputPlaceholder: 'Katalaluan',
confirmButtonText: 'Hantar',
showCancelButton:true,
cancelButtonText:'Batal',
allowOutsideClick: true
})
// var { value: komenkelulusan } = await Swal.fire({
// title: 'Masukkan Komen!',
// input: 'radio',
// customClass: {
// input: 'custom-radio'
// },
// inputOptions: {
// 'Pelanggan Baru': 'Pelanggan Baru',
// 'Pelanggan Tetap': 'Pelanggan Tetap',
// 'Rekod Gadaian Baik': 'Rekod Gadaian Baik',
// 'Lain2': 'Lain-Lain'
// },
// confirmButtonText: 'Hantar',
// showCancelButton:false,
// allowOutsideClick: false
// })
let dataminta = '';
// if(komenkelulusan === 'Lain2')
// {
// var { value: komenkelulusan } = await Swal.fire({
// title: 'Masukkan Komen!',
// input: 'text',
// inputPlaceholder: 'Komen',
// confirmButtonText: 'Hantar',
// showCancelButton:false,
// allowOutsideClick: false
// });
// }
$.ajax({
method:'get',
url: "{{ route('operasi.getmintasemulakelulusan') }}",
async:false,
data:{ passsemula : katalaluan },
success:function(data)
{
if(data == "False")
{
dataminta = data;
}
}
});
const {
value: komenkelulusan
} = await Swal.fire({
title: 'Masukkan Komen!',
input: 'text',
inputPlaceholder: 'Komen',
confirmButtonText: 'Hantar',
showCancelButton: false,
allowOutsideClick: false
})
if(dataminta == 'False')
{
Swal.fire({
icon: 'error',
title: 'Pengesahan Katalaluan Tidak Berjaya'
})
event.preventDefault();
return false;
}
let norujukan = $(e).data('norujukan');
let cawangankod = $(e).data('kodcaw');
let siri = $(e).data('siri');
let namaoperasi = "{{ Auth::user()->name }}";
let teller = $(e).closest('tr').children('td:eq(2)').text();
let taglulus = $(e).data('taglulus');
let status = $(e).data('status');
const { value: komenkelulusan } = await Swal.fire({
title: 'Masukkan Komen',
input: 'text',
inputPlaceholder: 'Komen',
confirmButtonText: 'Hantar',
showCancelButton:false,
allowOutsideClick: false
})
teller = String(teller);
let norujukan = $(e).data('norujukan');
let siri = $(e).data('siri');
let cawangankod = $(e).data('kodcaw');
let namaoperasi = "{{ Auth::user()->name }}";
let teller = $(e).closest('tr').children('td:eq(2)').text();
let requestData = {
"_token": "{{ csrf_token() }}",
"taglulus": taglulus,
"norujukan": norujukan,
"kodcaw": cawangankod,
"komenkelulusan": komenkelulusan,
"siri": siri,
'namaoperasi': namaoperasi,
'teller': teller
};
teller = String(teller);
$.ajax({
method:'put',
url: "{{ route('operasi.updatekelulusan') }}",
data: {
"_token": "{{ csrf_token() }}",
"norujukan" : norujukan,
"siri" : siri,
"kodcaw" : cawangankod,
"komenkelulusan" : komenkelulusan,
"pembatalan" : "batal",
'namaoperasi' : namaoperasi,
'teller' : teller
},
success:function(data){
Swal.fire({
icon: 'success',
title: 'Pengesahan Berjaya'
}).then(function(){
location.reload();
});
},error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(xhr.responseText);
}
});
if (status === 'Kelulusan Pengeluaran Pampasan') {
requestData.actions = 'Pengesahan Pembayaran Pampasan';
}
$.ajax({
method: 'put',
url: "{{ route('operasi.updatekelulusan') }}",
data: requestData,
success: function(data) {
console.log(data);
Swal.fire({
icon: 'success',
title: 'Pengesahan Berjaya'
}).then(function() {
location.reload();
});
},
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(xhr.responseText);
}
});
}
async function updatebatal(e) {
const {
value: katalaluan
} = await Swal.fire({
title: 'Masukkan Katalaluan Semula',
input: 'password',
inputPlaceholder: 'Katalaluan',
confirmButtonText: 'Hantar',
showCancelButton: true,
cancelButtonText: 'Batal',
allowOutsideClick: true
})
let dataminta = '';
$.ajax({
method: 'get',
url: "{{ route('operasi.getmintasemulakelulusan') }}",
async: false,
data: {
passsemula: katalaluan
},
success: function(data) {
if (data == "False") {
dataminta = data;
}
}
});
if (dataminta == 'False') {
Swal.fire({
icon: 'error',
title: 'Pengesahan Katalaluan Tidak Berjaya'
})
event.preventDefault();
return false;
}
const {
value: komenkelulusan
} = await Swal.fire({
title: 'Masukkan Komen',
input: 'text',
inputPlaceholder: 'Komen',
confirmButtonText: 'Hantar',
showCancelButton: false,
allowOutsideClick: false
})
let norujukan = $(e).data('norujukan');
let siri = $(e).data('siri');
let cawangankod = $(e).data('kodcaw');
let namaoperasi = "{{ Auth::user()->name }}";
let teller = $(e).closest('tr').children('td:eq(2)').text();
teller = String(teller);
$.ajax({
method: 'put',
url: "{{ route('operasi.updatekelulusan') }}",
data: {
"_token": "{{ csrf_token() }}",
"norujukan": norujukan,
"siri": siri,
"kodcaw": cawangankod,
"komenkelulusan": komenkelulusan,
"pembatalan": "batal",
'namaoperasi': namaoperasi,
'teller': teller
},
success: function(data) {
Swal.fire({
icon: 'success',
title: 'Pengesahan Berjaya'
}).then(function() {
location.reload();
});
},
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(xhr.responseText);
}
});
}
$('#kelulusan_pampasan_modal').on('show.bs.modal', async function(event) {
const triggerModalButton = event.relatedTarget;
const norujukan = triggerModalButton.dataset.norujukan;
const kodcaw = triggerModalButton.dataset.kodcawangan;
const pampasan = await fetch(api + `/api/pampasan?norujukan=${norujukan}&kodcaw=${kodcaw}`)
.then(response => response.json())
.then(x => x.data.pop());
const barangkes = await fetch(api + `/api/palsu/laporan?kodcaw=${kodcaw}`)
.then(response => response.json())
.then(x => x.filter(x => x.norujukan == norujukan))
.then(x => x.pop());
const tebus = await fetch(api + `/api/tebus/norujukan/${kodcaw}/${norujukan}`)
.then(response => response.json())
.then(x => x[0]);
const customer = await fetch(api + `/api/customers/${barangkes.nokp}`)
.then(response => response.json());
const formatMYR = (value) => {
return new Intl.NumberFormat('ms-MY', {
style: 'currency',
currency: 'MYR'
}).format(value);
};
document.getElementById('norujukan_pampasan').textContent = norujukan;
document.getElementById('namalanjut_pampasan').textContent = customer.nama;
document.getElementById('nokplanjut_pampasan').textContent = customer.kpbaru;
document.getElementById('nilaiMarhun').textContent = formatMYR(barangkes.nilaimarhun);
document.getElementById('pembiayaan').textContent = formatMYR(barangkes.pembiayaan);
document.getElementById('jumlahPampasan').innerHTML = '<strong>' + formatMYR(barangkes.nilaimarhun - barangkes.pembiayaan - barangkes.untung) + '</strong>';
document.getElementById('keuntungan').textContent = formatMYR(barangkes.untung);
document.getElementById('bayaranAnsuran').textContent = formatMYR(tebus.pinjaman - (tebus.bakipjm - tebus.bakiupah));
});
</script>
@endsection
@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
+1 -1
View File
@@ -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>
+176 -4
View File
@@ -131,6 +131,20 @@
</div>
</div>
@if($pampasan)
<div class="bg-white p-3 my-3">
<div class="border text-center p-2 mx-auto" style="border: 2px solid red !important; width: 209px;">
<span class="text-danger font-weight-bold">PAMPASAN</span>
</div>
<div class="text-center mt-2">
<a href="{{ route('pampasan.surat', $gadai['norujukan']) }}" target="_blank"
class="btn surat-perjanjian-btn" data-norujukan="{{ $gadai['norujukan'] }}" title="Lihat Surat" style="background-color: red; color: white; border: 2px solid red;">
<i class="fas fa-file-alt fa-lg"></i> Cetak Surat Perjanjian
</a>
</div>
</div>
@endif
<div class="card" id="infomarhun">
<div class="card-body">
<table id="tablemarhun" class="table table-striped table-hover table-bordered text-center">
@@ -1082,6 +1096,28 @@
</div>
</div>
<!-- Modal Surat Agreement -->
<div class="modal fade" id="suratModal" tabindex="-1" role="dialog" aria-labelledby="suratModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="suratModalLabel">Surat Agreement</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="surat-content" style="font-family: 'Times New Roman', Times, serif;">
<!-- Surat content will be injected here -->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button>
<button type="button" class="btn btn-primary" id="btnPrintSurat">Cetak & Teruskan</button>
</div>
</div>
</div>
</div>
<script>
let elem_jenisAT = $('#jenisAT').remove();
@@ -1152,6 +1188,7 @@
var percent_mora = 0;
var pinjaman_teller = 0;
var pinjaman_pelulus = 0;
var pampasan = @json($pampasan);
@@ -1365,6 +1402,10 @@
}
});
if(pampasan != null){
$('#jumlahupah').val(pampasan.untung);
}
$.ajax({
method:'GET',
url: api + '/api/upahrebettawarruq/' + kodcaw + '/' + norujukan,
@@ -1395,7 +1436,18 @@
dataType: 'json',
async:false,
success:function(harga_tebus){
$('#perludibayar').val(formatter.format(harga_tebus));
if(pampasan != null){
let pembiayaan = safeMoneyParse(pampasan.pembiayaan);
let untung = safeMoneyParse(pampasan.untung);
$('#perludibayar').val(formatter.format(pembiayaan + untung));
$('#duitPelanggan').val(formatter.format(pembiayaan + untung));
$('#duitPelanggan').prop('readonly', true);
}else {
$('#perludibayar').val(formatter.format(harga_tebus));
}
}
});
@@ -1753,8 +1805,129 @@
let teller = "{{ Auth::user()->name }}";
function bayaransemua()
async function getPampasanByNorujukan(norujukan) {
const params = new URLSearchParams({
kodcaw: kodcaw,
status: 'all'
});
try {
const pampasanListResponse = await fetch(`{{ config('api.url') }}/api/palsu/laporan?${params}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
if (!pampasanListResponse.ok) {
throw new Error(`HTTP error! status: ${pampasanListResponse.status}`);
}
const pampasanListData = await pampasanListResponse.json();
const pampasanList = pampasanListData.filter(pampasan => pampasan.norujukan === norujukan);
const pampasan = pampasanList.length === 0 ? null : pampasanList.pop();
return pampasan;
} catch (error) {
console.error('Failed to fetch pampasan data:', error);
throw new Error("Something wrong with API");
}
}
// Helper function for safe money parsing
const safeMoneyParse = (value) => {
const parsed = parseFloat(value);
return isNaN(parsed) ? 0 : Math.round(parsed * 100) / 100; // Round to 2 decimal places
};
async function checkWangPetiBesiEnoughForTuntutanPampasan(pampasan) {
const currentDate = new Date().toISOString().split('T')[0];
let wangpetibesi = await fetch(api + '/api/TunaiDiTangan/' + kodcaw + '?tarikh=' + currentDate).then(response => response.json());
const nilaimarhun = safeMoneyParse(pampasan.nilaimarhun);
const pembiayaan = safeMoneyParse(pampasan.pembiayaan);
const untung = safeMoneyParse(pampasan.untung);
const jumlahpampasan = safeMoneyParse(nilaimarhun - pembiayaan - untung);
const balancewangpetibesiafterdeduct = wangpetibesi - jumlahpampasan < 0 ? false : true;
if(! balancewangpetibesiafterdeduct){
Swal.fire({
title: 'Peringatan',
html: `
<p>Wang peti besi tidak mencukupi untuk proses tuntutan pampasan</p>
<br>
<div style="text-align: left; margin: 0 auto; display: inline-block;">
<strong>Wang Peti Besi:</strong> RM ${formatter.format(wangpetibesi)}<br><br>
<strong>Jumlah Diperlukan:</strong> RM ${formatter.format(jumlahpampasan)}<br><br>
<strong>Kekurangan:</strong> <span style="color: red;">RM ${formatter.format(jumlahpampasan - wangpetibesi)}</span>
</div>
`,
icon: 'warning'
});
return false;
}
return true;
}
async function bayaransemua()
{
// Instantiate pampasan using the JavaScript function
const pampasan = await getPampasanByNorujukan(norujukan);
if(pampasan != null){
if(pampasan && !pampasan.hasOwnProperty('agreement_printed_at')){
Swal.fire({
title: 'Peringatan',
text: 'Sila print surat perjanjian',
icon: 'warning'
});
return; // Exit early if agreement not printed
}
const isEnough = await checkWangPetiBesiEnoughForTuntutanPampasan(pampasan);
if(! isEnough){
return;
}
}
if(pampasan != null){
const result = await Swal.fire({
title: 'Pengesahan Proses Tuntutan Pampasan',
html: `
<div style="text-align: left; margin: 20px 0; min-width: 500px;">
<p><strong>Sila pastikan wang untuk proses tuntutan pampasan adalah mencukupi.</strong></p>
<br>
<p style="color: #d33; font-weight: bold;">⚠️ Proses tidak dapat diundur</p>
<p style="color: #d33;">⚠️ Short wang teller atau peti besi akan ditanggung oleh anda</p>
<br>
<p>Adakah anda ingin meneruskan proses ini?</p>
</div>
`,
icon: 'question',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya, Teruskan',
cancelButtonText: 'Batal',
allowOutsideClick: false,
allowEscapeKey: false,
width: '600px'
});
if (!result.isConfirmed) {
return; // Exit if user cancels
}
}
$("#terima_transaksi").prop('disabled', true);
// Swal.fire({
// title: 'Memuatkan...',
@@ -3204,7 +3377,7 @@
///////////
}
//Bayaran Semua function end file
}
function gadaiautotawarruq()
@@ -4466,7 +4639,6 @@ return true;
};
}(jQuery));
</script>
@endsection
@@ -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>
@@ -471,23 +471,21 @@
<tr style="font-weight:bold;">
<td colspan="2">Baki</td>
<td style="text-align: right;">
@php $totalbil1 = $gad1 - $teb1 - $lel1 - $ans1 - $hpk1; echo number_format($totalbil1);@endphp
@php $totalbil1 = $gad1 - $teb1 - $lel1 /*- $ans1*/ - $hpk1; echo number_format($totalbil1);@endphp
</td>
<td style="text-align: right;">
@php $totalpinj1 = $gadpinj1 - $tebpinj1 - $lelpinj1 - $anspinj1 - $hpkpinj1; echo number_format($totalpinj1,2);@endphp
</td>
<td style="text-align: right;">
@php $totalbil2 = $gad2 - $teb2 - $lel2 - $ans2 - $hpk2; echo number_format($totalbil2);@endphp
@php $totalbil2 = $gad2 - $teb2 - $lel2 /*- $ans2*/ - $hpk2; echo number_format($totalbil2);@endphp
</td>
<td style="text-align: right;">
@php $totalpinj2 = $gadpinj2 - $tebpinj2 - $lelpinj2 - $anspinj2 - $hpkpinj2; echo number_format($totalpinj2,2);@endphp
</td>
<td style="text-align: right;">
@php $totalbil3 = $gad3 - $teb3 - $lel3 = - $ans3 - $hpk3; echo number_format($totalbil3);@endphp
@php $totalbil3 = $gad3 - $teb3 - $lel3 /*- $ans3*/ - $hpk3; echo number_format($totalbil3);@endphp
</td>
<td style="text-align: right;">
@php $totalpinj3 = $gadpinj3 - $tebpinj3 - $lelpinj3 - $anspinj3 - $hpkpinj3; echo number_format($totalpinj3,2);@endphp
@@ -440,9 +440,12 @@
<td>{{ number_format($totalnm, 2) }}</td>
<td>{{ number_format($totalpinjamanasal, 2) }}</td>
<td>{{ number_format($totalpinjaman, 2) }}</td>
<td>@php$totalkeuntunganrebet = $totalpinjaman + $totalupah - $totalbayaran;
echo number_format($totalkeuntunganrebet, 2);
@endphp ?></td>
<td>
@php
$totalkeuntunganrebet = $totalpinjaman + $totalupah - $totalbayaran;
echo number_format($totalkeuntunganrebet, 2);
@endphp
</td>
<td>{{ number_format($totalujrah, 2) }}</td>
<td>{{ number_format($totalonepercent, 2) }}</td>
<td>{{ number_format($totalupah, 2) }}</td>
@@ -231,7 +231,7 @@
<td>
@php
// $gadaidetail = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/gadai/norujukan/' . $item['norujukan'])->json();
$gadaidetail = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/gadai/norujukankodcaw/' . $item['kodcaw'] . '/' . $item['norujukan'])->json();
$gadaidetail = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/gadai/norujukan/' . $item['kodcaw'] . '/' . $item['norujukan'])->json();
$customer_detail = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/customers/' . $gadaidetail[0][0]['nokp'])->json();
echo $customer_detail['nama'];
@endphp
@@ -137,6 +137,10 @@
<td style="vertical-align:top;">{{ $cawangan_detail['alamat2'] }}</td>
<td></td>
</tr>
<tr>
<td style="vertical-align:top;">{{ $cawangan_detail['alamat3'] }}</td>
<td></td>
</tr>
<tr>
<td style="vertical-align:top;">{{ ' No Tel : '. $cawangan_detail['notel'] . ' No Faks : '. $cawangan_detail['nofaks'] }}</td>
<td></td>
@@ -0,0 +1,258 @@
<!DOCTYPE html>
<html>
<head>
<title>Resit Pampasan</title>
<style>
body {
font-family: Arial, sans-serif;
font-size: 14px;
}
.resit {
width: 700px;
margin: 0 auto;
border: 1px solid #000;
padding: 20px;
}
.header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20px;
}
.header-left {
display: flex;
align-items: center;
gap: 10px;
}
.header img {
height: 20px;
}
.header .tag {
border: 1px solid #000;
padding: 5px 12px;
font-size: 14px;
font-weight: bold;
background: #f9f9f9;
}
h2 {
text-align: right;
margin-bottom: 10px;
}
.panel {
border-top: 1px dashed #000;
margin-top: 30px;
padding-top: 20px;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 10px;
}
td {
padding: 6px;
}
.label {
width: 200px;
font-weight: bold;
}
.signature {
margin-top: 40px;
display: flex;
justify-content: space-between;
}
.signature div {
text-align: center;
width: 45%;
}
.footer {
margin-top: 20px;
text-align: center;
font-size: 12px;
}
.pelanggan-info {
text-align: center;
margin-bottom: 20px;
}
.center-table {
margin: 0 auto;
text-align: left;
width: fit-content;
}
.bayaran-info {
margin-top: 20px;
}
.jumlah-row {
margin-top: 20px;
}
.jumlah-row td {
padding-top: 15px;
font-weight: bold;
text-decoration: underline;
}
</style>
</head>
<body onload="window.print()">
<div class="resit">
<div class="header">
<div class="header-left">
<img src="{{ asset('img/kopkb.png') }}" alt="Logo KOPPKB">
<img src="{{ asset('img/ARRAHN1.png') }}" alt="Logo Ar-Rahn">
</div>
<span class="tag">Resit Pampasan</span>
<span class="tag">Untuk Kegunaan Pelanggan</span>
</div>
<div class="pelanggan-info">
<table class="center-table">
<tr>
<td class="label">Nama:</td>
<td>{{ $customer_info['nama'] }}</td>
</tr>
<tr>
<td class="label">No. KP:</td>
<td>{{ $gadai_info['nokp'] }}</td>
</tr>
<tr>
<td class="label">No. SAG:</td>
<td>{{ $pampasan['norujukan'] }}</td>
</tr>
<tr>
<td class="label">Tarikh Tuntutan:</td>
<td>{{ \Carbon\Carbon::parse($pampasan['created_at'])->format('d/m/Y') }}</td>
</tr>
</table>
</div>
<div class="bayaran-info">
<table class="center-table">
<tr>
<td class="label">Nilai Marhun:</td>
<td>RM {{ number_format($pampasan_info['nilaimarhun'], 2) }}</td>
</tr>
<tr>
<td class="label">(-) Baki Pembiayaan:</td>
<td>RM {{ number_format($pampasan_info['pembiayaan'], 2) }}</td>
</tr>
<tr>
<td class="label">(-) Keuntungan:</td>
<td>RM {{ number_format($pampasan_info['untung'], 2) }}</td>
</tr>
<tr class="jumlah-row">
<td class="label"><strong>JUMLAH PAMPASAN</strong></td>
<td><strong>RM {{ number_format($pampasan['jumlah_pampasan'], 2) }}</strong></td>
</tr>
</table>
</div>
<div class="signature">
<div>
<p>__________________________</p>
<p>PELANGGAN</p>
<p>{{ $customer_info['nama'] }}</p>
</div>
<div>
<p>__________________________</p>
<p>AR-RAHN</p>
<p>{{ auth()->user()->name }}</p>
</div>
</div>
<div class="panel">
<div class="header">
<div class="header-left">
<img src="{{ asset('img/kopkb.png') }}" alt="Logo KOPPKB">
<img src="{{ asset('img/ARRAHN1.png') }}" alt="Logo Ar-Rahn">
</div>
<span class="tag">Resit Pampasan</span>
<span class="tag">Untuk Kegunaan Pejabat</span>
</div>
<div class="pelanggan-info">
<table class="center-table">
<tr>
<td class="label">Nama:</td>
<td>{{ $customer_info['nama'] }}</td>
</tr>
<tr>
<td class="label">No. KP:</td>
<td>{{ $gadai_info['nokp'] }}</td>
</tr>
<tr>
<td class="label">No. SAG:</td>
<td>{{ $pampasan['norujukan'] }}</td>
</tr>
<tr>
<td class="label">Tarikh Tuntutan:</td>
<td>{{ \Carbon\Carbon::parse($pampasan['created_at'])->format('d/m/Y') }}</td>
</tr>
</table>
</div>
<div class="bayaran-info">
<table class="center-table">
<tr>
<td class="label">Nilai Marhun:</td>
<td>RM {{ number_format($pampasan_info['nilaimarhun'], 2) }}</td>
</tr>
<tr>
<td class="label">(-) Baki Pembiayaan:</td>
<td>RM {{ number_format($pampasan_info['pembiayaan'], 2) }}</td>
</tr>
<tr>
<td class="label">(-) Keuntungan:</td>
<td>RM {{ number_format($pampasan_info['untung'], 2) }}</td>
</tr>
<tr class="jumlah-row">
<td class="label"><strong>JUMLAH PAMPASAN</strong></td>
<td><strong>RM {{ number_format($pampasan['jumlah_pampasan'], 2) }}</strong></td>
</tr>
</table>
</div>
<div class="signature">
<div>
<p>__________________________</p>
<p>PELANGGAN</p>
<p>{{ $customer_info['nama'] }}</p>
</div>
<div>
<p>__________________________</p>
<p>AR-RAHN</p>
<p>{{ auth()->user()->name }}</p>
</div>
</div>
</div>
</div>
</body>
</html>
<script>
window.onload = function() {
window.print();
};
window.onafterprint = function() {
window.location.href = "{{ url('/panjar') }}";
};
</script>
@@ -629,22 +629,22 @@
</tr>
<tr>
<td style="width:10px">Keuntungan</td>
<td style="width:10px">: RM {{ number_format($penebusan['onepercent'], 2) }}</td>
<td style="width:10px">: RM {{ number_format($transaction_tebus['onepercent'],2) }}</td>
</tr>
<tr>
<td style="width:10px">(-) Rebat Untung</td>
<td style="width:10px">: RM
{{ number_format($totalrebate['onepercent'], 2) }}
{{ number_format($keuntungan_rebate,2) }}
</td>
</tr>
<tr>
<td style="width:10px">Lain-Lain Caj</td>
<td style="width:10px">: RM {{ number_format($penebusan['ujrah'], 2) }} </td>
<td style="width:10px">: RM {{ number_format($transaction_tebus['ujrah'],2) }} </td>
</tr>
<tr>
<td style="width:10px">(-) Rebat Lain-Lain Caj</td>
<td style="width:10px">: RM
{{ number_format($totalrebate['ujrah'], 2) }} </td>
{{ number_format($ujrah_rebate, 2) }} </td>
</tr>
<tr>
<td style="width:10px">Jumlah Keuntungan + Lain-Lain Caj</td>
@@ -862,22 +862,22 @@
</tr>
<tr>
<td style="width:10px">Keuntungan</td>
<td style="width:10px">: RM {{ number_format($penebusan['onepercent'], 2) }}</td>
<td style="width:10px">: RM {{ number_format($transaction_tebus['onepercent'], 2) }}</td>
</tr>
<tr>
<td style="width:10px">(-) Rebat Untung</td>
<td style="width:10px">: RM
{{ number_format($totalrebate['onepercent'], 2) }}
{{ number_format($keuntungan_rebate, 2) }}
</td>
</tr>
<tr>
<td style="width:10px">Lain-Lain Caj</td>
<td style="width:10px">: RM {{ number_format($penebusan['ujrah'], 2) }} </td>
<td style="width:10px">: RM {{ number_format($transaction_tebus['ujrah'], 2) }} </td>
</tr>
<tr>
<td style="width:10px">(-) Rebat Lain-Lain Caj</td>
<td style="width:10px">: RM
{{ number_format($totalrebate['ujrah'], 2) }} </td>
{{ number_format($ujrah_rebate, 2) }} </td>
</tr>
<tr>
<td style="width:10px">Jumlah Keuntungan + Lain-Lain Caj</td>
+1 -1
View File
@@ -1607,7 +1607,7 @@
<p>{{ $cawangan_detail['namacaw'] }}</p>
<p>{{ $cawangan_detail['alamat1'] }}</p>
<p>{{ $cawangan_detail['alamat2'] }}</p>
<p>{{ $cawangan_detail['notel'] }}</p>
<p>No Tel: {{ $cawangan_detail['notel'] }}</p>
</div>
</div>
<div class="header-center">
@@ -0,0 +1,278 @@
<!DOCTYPE html>
<html lang="ms">
<head>
<meta charset="utf-8">
<title>Surat Pampasan</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
@page {
size: A4;
margin: 20mm;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: "Times New Roman", Times, serif;
color: #000;
}
.page {
width: 210mm;
min-height: 257mm;
margin: 0 auto;
position: relative;
}
.header {
text-align: center;
line-height: 1.4;
margin-bottom: 8mm;
}
.header .org-name {
font-weight: bold;
text-transform: uppercase;
}
.title {
text-align: center;
font-weight: bold;
text-transform: uppercase;
margin: 2mm 0 4mm;
font-size: 16px;
text-decoration: underline;
}
.claim-no {
text-align: center;
margin: 2mm 0 6mm;
}
.claim-no .label {
text-transform: uppercase;
font-weight: bold;
}
.content {
font-size: 12pt;
line-height: 1.65;
text-align: justify;
}
.content b {
font-weight: bold;
}
.content .emph {
font-weight: bold;
text-transform: uppercase;
}
.mt-2 {
margin-top: 2mm;
}
.mt-4 {
margin-top: 4mm;
}
.mt-8 {
margin-top: 8mm;
}
.mt-12 {
margin-top: 12mm;
}
.date-row {
margin-top: 8mm;
}
.line {
display: inline-block;
border-bottom: 1px solid #000;
width: 65mm;
height: 8mm;
vertical-align: bottom;
margin-left: 2mm;
margin-right: 6mm;
}
.signatures {
display: flex;
gap: 10mm;
margin-top: 12mm;
}
.sig-col {
width: 50%;
text-align: center;
}
.sig-line {
border-bottom: 1px solid #000;
height: 18mm;
margin: 0 10mm 2mm;
}
.sig-labels {
display: flex;
justify-content: space-between;
margin: 0 10mm;
font-weight: bold;
}
.sig-meta {
text-align: left;
margin: 2mm 10mm 0;
font-weight: bold;
}
.page-break {
page-break-after: always;
}
@media print {
html,
body {
width: 210mm;
}
.page {
min-height: 277mm;
}
.no-print {
display: none !important;
}
* {
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
}
</style>
</head>
<body>
<div class="page">
<div class="header">
<div class="org-name">KOPERASI PERMODALAN KELANTAN BERHAD (D-5-0228)</div>
<div>Lot PT 448, Tingkat 1, Jalan Kuala Krai, Batu 3 Wakaf Che Yeh, 15150 Kota Bharu, Kelantan</div>
<div>Tel : 09-7414331 / 4334 &nbsp;&nbsp; Website : www.koppkb.com &nbsp;&nbsp; Email : admin@koppkb.com
</div>
</div>
<div class="title">AKUAN TERIMAAN PAMPASAN DAN PELEPASAN</div>
<div class="claim-no"><span class="label">NO. TUNTUTAN :</span> <b>{{ $gadai_info['norujukan'] }}</b></div>
<div class="content">
<p>
1. Bahawasanya saya, Penama : <b>{{ $customer_info['nama'] }}</b><br>
No. Kad Pengenalan : <b>{{ $customer_info['kpbaru'] }}</b><br>
Adalah dengan ini atas <span class="emph">BALASAN</span> sebanyak <b>RM {{ number_format($jumlah_pampasan, 2) }}</b>
<b> (Ringgit Malaysia : {{ $jumlah_pampasan_terbilang }} sahaja)</b>
yang dibayar kepada saya oleh <b>AR-RAHN CAWANGAN SEMPORNA</b> atau
<b>KOPERASI PERMODALAN KELANTAN BERHAD (KoPKB)</b> yang mana penerimaan wang bayaran tersebut
adalah saya perakui sebagai bayaran muktamad melepaskan <b>AR-RAHN CAWANGAN SEMPORNA</b>
atau <b>KOPERASI PERMODALAN KELANTAN BERHAD (KoPKB)</b> daripada segala liabiliti, tindakan, klausa
tindakan, tuntutan dan tanggungjawab yang saya boleh kuatkuasakan, punyai atau mungkin mempunyai
pada masa ini atau pada bila-bila masa terhadap <b>AR-RAHN CAWANGAN SEMPORNA</b>,<b> KOPERASI PERMODALAN
KELANTAN BERHAD (KoPKB)</b>
berkait dengan kehilangan/kecurian barangan kemas pada bulan <b>November 2024</b> yang
telah digadaikan di <b>AR-RAHN CAWANGAN SEMPORNA, LOT F9-0 GROUND FLOOR, BANDAR MUTIARA, JALAN HOSPITAL,
91300 SEMPORNA, SABAH</b> atau apa-apa perkara
yang timbul berkait/akibat
daripada kehilangan/kecurian tersebut.
</p>
<p class="mt-4">
2. <span class="emph">DAN</span> saya memberikan sebenar-benar akujanji bahawa saya tidak akan
mengambil/memulakan
sebarang tindakan perundangan terhadap <b>AR-RAHN CAWANGAN SEMPORNA</b> atau
<b>KOPERASI PERMODALAN KELANTAN BERHAD (KoPKB)</b> berkait dengan kehilangan/kecurian tersebut
dengan penerimaan wang balasan di atas.
</p>
<p class="mt-4">
Adalah saya dengan ini memperakui bahawa dokumen ini telah dibacakan/saya baca dan saya fahami
kesan dan implikasi dokumen ini sepenuh-penuhnya.
</p>
<div class="date-row">
Bertarikh:
</div>
<div class="signatures">
<div class="sig-col">
<div class="sig-line"></div>
<div class="sig-labels"><span>(PELANGGAN)</span></div>
<div class="sig-labels"><span>{{ $customer_info['nama'] }}</span></div>
<div class="sig-meta">No K/P: </div>
</div>
<div class="sig-col">
<div class="sig-line"></div>
<div class="sig-labels"><span>(SAKSI)</span></div>
<div class="sig-meta">Nama : </div>
<div class="sig-meta">No K/P: </div>
</div>
</div>
</div>
</div>
<div class="no-print" style="text-align:center; margin: 10mm 0;">
<button onclick="cetakSuratPampasan()" style="padding:8px 16px;font-size:14px;">Cetak</button>
</div>
<script>
window.addEventListener('DOMContentLoaded', function(){
cetakSuratPampasan();
})
async function cetakSuratPampasan() {
window.print();
await initiatePampasan();
}
async function initiatePampasan() {
return fetch('/pampasan/initiate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
'norujukan': @json($gadai_info['norujukan']),
"_token": "{{ csrf_token() }}",
})
})
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
})
.then(result => {
return result;
})
.catch(error => {
console.error('Error initiating pampasan:', error);
Swal.fire({
title: 'Ralat',
text: 'Gagal daftar pampasan',
icon: 'error'
});
throw error;
});
}
</script>
</body>
</html>
+27 -1
View File
@@ -1,5 +1,6 @@
<?php
use App\Http\Controllers\KhazanahController;
use Illuminate\Support\Facades\Route;
use App\Services\ImbangdugaServices;
use Illuminate\Support\Facades\Storage;
@@ -112,6 +113,10 @@ Route::get('/history',['as'=>'gadai.history','uses'=>'GadaianController@history'
Route::get('/history/khazanah',['as'=>'gadai.history.khazanah','uses'=>'GadaianController@history'])->middleware('auth','khazanah');
Route::post('/customer/assign-anggota', ['as' => 'customer.assignAnggota','uses' => 'CustomersController@assignAnggota'])->middleware('auth', 'teller');
//Laporan Aliran Tunai Teller
Route::get('/laporan/alirantunai', ['as' => 'laporan.alirantunai', 'uses'=> 'AliranTunaiController@laporanAliranTunaiTeller'])->middleware('auth','teller');
Route::post('laporan/alirantunai/cetak', ['as' => 'alirantunai.laporancetak', 'uses' => 'AliranTunaiController@cetakLaporanAliranTunaiTeller'])->middleware('auth', 'teller');
//Kemaskini Upah
Route::get('/kemaskiniupah',['as'=>'kemaskini.upah','uses'=>'AliranTunaiController@kemaskiniupah'])->middleware('auth','teller');
@@ -267,6 +272,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');
@@ -339,11 +346,11 @@ Route::post('/barcodescanned',['as'=>'barcode.scanned','uses'=>'KhazanahControll
Route::get('/operasi/kelulusan','OperasiController@kelulusan')->name('operasi.kelulusan')->middleware('auth','operasi');
Route::get('/operasi/kelulusan/anggota','OperasiController@kelulusanAnggota')->name('operasi.kelulusananggota')->middleware('auth','operasi');
Route::post('/operasi/createkelulusan',['as'=>'operasi.createkelulusan','uses'=>'OperasiController@createkelulusan'])->middleware('auth','teller');
Route::post('/operasi/createkelulusan-anggota',['as'=>'operasi.createkelulusan-anggota','uses'=>'OperasiController@createkelulusanAnggota'])->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/updatekelulusananggota',['as'=>'operasi.updatekelulusananggota','uses'=>'OperasiController@updatekelulusananggota'])->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 +367,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']);
@@ -498,3 +507,20 @@ Route::get('/event/tellercash',['as'=>'event.tellercash','uses'=>'EventTriggerCo
Route::get('/perubatan',['as'=>'perubatan','uses'=>'PerubatanController@index'])->middleware('auth','operasi');
Route::get('/perubatan/search',['as'=>'perubatan.search','uses'=>'PerubatanController@search'])->middleware('auth','operasi');
Route::put('/perubatan/update',['as'=>'perubatan.update','uses'=>'PerubatanController@update'])->middleware('auth','operasi');
/* Pampasan */
//Page Pampasan Detail Payment Customer
Route::get('/pampasan/detail/{norujukan}', ['as' => 'pampasan.detail','uses' => 'KhazanahController@pampasanDetail'])->middleware('auth', 'khazanah');
//Selepas teller print surat perjanjian pampasan pelanggan
Route::post('/pampasan/initiate',['as' => 'pampasan.initiate', 'uses' => 'KhazanahController@initiatePampasan'])->middleware('auth', 'teller');
//Selepas PC masukkan Deno dan Submit Jumlah Pampasan
Route::post('/pampasan/terima',['as' => 'pampasan.terima', 'uses' => 'KhazanahController@terimaPampasan'])->middleware('auth', 'khazanah');
//Cetak Resit Pampasan
Route::get(('/pampasan/resit'), ['as' => 'pampasan.resit', 'uses' => 'KhazanahController@resitPampasan'])->middleware('auth', 'khazanah');
//Surat Pampasan
Route::get('/pampasan/surat/{norujukan}', ['as' => 'pampasan.surat', 'uses' => 'KhazanahController@suratPampasan'])->middleware('auth', 'role:teller,khazanah');