29 Commits

Author SHA1 Message Date
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
49 changed files with 7650 additions and 6683 deletions
-46
View File
@@ -1,46 +0,0 @@
<?php
namespace App\Events;
use Illuminate\Queue\SerializesModels;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class NotifikasiAnggota implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $nokp;
public $status; // DILULUSKAN atau DITOLAK
public $komen;
public $tagoperasi;
public function __construct($nokp, $status, $komen, $tagoperasi = null)
{
$this->nokp = $nokp;
$this->status = strtoupper($status); // pastikan huruf besar DILULUSKAN/DITOLAK
$this->komen = $komen;
$this->tagoperasi = $tagoperasi;
}
public function broadcastOn()
{
return ['notice-anggota'];
}
public function broadcastAs()
{
return 'my-anggota';
}
public function broadcastWith()
{
return [
'noic' => $this->nokp,
'status' => $this->status, // ikut format API updateAnggota
'komen' => $this->komen,
'tagoperasi' => $this->tagoperasi,
];
}
}
+67 -4
View File
@@ -1,20 +1,83 @@
<?php <?php
namespace App; namespace App;
use DateTime; use DateTime;
class Helper class Helper
{ {
public static function formatNumber($amount) public static function formatNumber($amount)
{ {
$formattedAmount = number_format($amount, 2, '.', ','); return number_format($amount, 2, '.', ',');
return $formattedAmount;
} }
public static function formatDate($date_string) public static function formatDate($date_string)
{ {
return (new DateTime($date_string))->format("d-m-Y"); 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; namespace App\Http\Controllers;
use App\User;
use App\Cawangan;
use Carbon\Carbon;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Services\CustomerService; use App\Services\CustomerService;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Carbon\Carbon; use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Session;
class AliranTunaiController extends Controller class AliranTunaiController extends Controller
@@ -599,7 +601,7 @@ class AliranTunaiController extends Controller
return response($updateTunai); return response($updateTunai);
} }
public function LaporanAliranTunai($teller) public function LaporanAliranTunai($teller, Request $request)
{ {
$auth_user = Auth::user(); $auth_user = Auth::user();
$api_url = config('api.url'); $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=Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/cawangan/detail/'.$auth_user['cawangan'])->json();
$cawangan_detail=$cawangan[0]; $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(); $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(); $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']; $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){ public function LaporanTunaiTeller(Request $request){
+110 -335
View File
@@ -14,7 +14,6 @@ use Illuminate\Support\Facades\Auth;
use Twilio\Rest\Client; use Twilio\Rest\Client;
use App\Komoditi; use App\Komoditi;
use App\Events\Dashboard\PelangganNotify; use App\Events\Dashboard\PelangganNotify;
use Illuminate\Support\Facades\Log;
use Carbon\Carbon; use Carbon\Carbon;
@@ -25,7 +24,7 @@ class CustomersController extends Controller
public function __construct() public function __construct()
{ {
$this->middleware('auth'); $this->middleware('auth');
$this->customerService = new CustomerService(); $this->customerService = New CustomerService();
} }
/** /**
* Display a listing of the resource. * Display a listing of the resource.
@@ -39,241 +38,84 @@ class CustomersController extends Controller
$api_url = config('api.url'); $api_url = config('api.url');
$auth_user = Auth::user(); $auth_user = Auth::user();
$idtype = 'nokp'; $idtype = 'nokp';
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/' . $auth_user['cawangan'])->json(); $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
$bank = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/bank')->json(); $bank = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/bank')->json();
$pekerjaan = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/pekerjaan')->json(); $pekerjaan = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/pekerjaan')->json();
$blacklist_search = false; $blacklist_search = false;
return view('customers.' . $cawangan_info['version'] . '.index', compact('search', 'blacklist_search', 'cawangan_info', 'bank', 'api_url', 'idtype', 'pekerjaan')); return view('customers.' . $cawangan_info['version'] . '.index',compact('search','blacklist_search','cawangan_info','bank','api_url','idtype','pekerjaan'));
} }
public function info(Request $request) public function info(Request $request){
{
$auth_user = Auth::user(); $auth_user = Auth::user();
$api_url = config('api.url'); $api_url = config('api.url');
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
// 🔹 Panggil maklumat cawangan $customer_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/customers/'. Session::get('noic'))->json();
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')]) // dd($customer_info);
->get($api_url . '/api/cawangan/' . $auth_user['cawangan']) $pekerjaan = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/pekerjaan')->json();
->json();
// 🔹 Panggil maklumat pelanggan (customer)
$customer_info = Http::withOptions(['verify' => config('app.api_verify')])
->get($api_url . '/api/customers/' . Session::get('noic'))
->json();
// 🔹 Panggil maklumat pekerjaan
$pekerjaan = Http::withOptions(['verify' => config('app.api_verify')])
->get($api_url . '/api/pekerjaan')
->json();
$komoditi = Komoditi::first(); $komoditi = Komoditi::first();
$min_komoditi = $komoditi['min_komoditi']; $min_komoditi = $komoditi['min_komoditi'];
// 🔹 Panggil baki lelong $bakilelong = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/bakilelong/cawangan/' . $auth_user['cawangan'] . '/' . Session::get('noic') . '/baki')->json();
$bakilelong = Http::withOptions(['verify' => config('app.api_verify')]) $rugilelong = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/bakilelong/cawangan/' . $auth_user['cawangan'] . '/' . Session::get('noic') . '/rugi')->json();
->get($api_url . '/api/bakilelong/cawangan/' . $auth_user['cawangan'] . '/' . Session::get('noic') . '/baki')
->json();
// 🔹 Panggil rugi lelong
$rugilelong = Http::withOptions(['verify' => config('app.api_verify')])
->get($api_url . '/api/bakilelong/cawangan/' . $auth_user['cawangan'] . '/' . Session::get('noic') . '/rugi')
->json();
// 🔹 Reset session sementara
$request->session()->forget('page_reload'); $request->session()->forget('page_reload');
$request->session()->forget('norujukan'); $request->session()->forget('norujukan');
$customer_page = ($cawangan_info['version'] == 'v1') $customer_page = ($cawangan_info['version'] == 'v1') ? 'customers.v1.info' : 'customers.v2.info';
? 'customers.v1.info'
: 'customers.v2.info';
// Logik papar butang "Assign sebagai Anggota" $getApprovalError = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/getApproval',[
$showAssignAnggotaBtn = false; 'kodcaw' => $auth_user['cawangan'],
$noic = Session::get('noic'); 'teller' => $auth_user['name'],
])->json();
if (!empty($customer_info)) { if($request->tebus_auto_tawarruq_berjaya === 'true'){
$anggota_info = Http::withOptions(['verify' => config('app.api_verify')])
->get($api_url . '/api/customer/anggota', [
'noic' => $noic
])
->json();
$isAnggotaExist = isset($anggota_info) && !empty($anggota_info) && !isset($anggota_info['message']);
if ($isAnggotaExist && isset($customer_info['tag_anggota']) && $customer_info['tag_anggota'] == 0) {
$showAssignAnggotaBtn = true;
}
}
$getApprovalError = Http::withOptions(['verify' => config('app.api_verify')])
->get($api_url . '/api/getApproval', [
'kodcaw' => $auth_user['cawangan'],
'teller' => $auth_user['name'],
])
->json();
if ($request->tebus_auto_tawarruq_berjaya === 'true') {
$request->session()->flash('activate_tab', 'SAG_baru'); $request->session()->flash('activate_tab', 'SAG_baru');
} }
return view($customer_page, compact( return view($customer_page,compact('cawangan_info','api_url','customer_info','bakilelong','rugilelong','min_komoditi','pekerjaan','getApprovalError'));
'cawangan_info',
'api_url',
'customer_info',
'bakilelong',
'rugilelong',
'min_komoditi',
'pekerjaan',
'getApprovalError',
'showAssignAnggotaBtn'
));
} }
public function search(Request $request){
public function search(Request $request) // dd($request->all());
{
$noic = $request->noic; $noic = $request->noic;
$idtype = $request->customerIDType; $idtype = $request->customerIDType;
Session::put('noic', $noic); Session::put('noic', $noic);
$api_url = config('api.url'); $api_url = config('api.url');
$auth_user = Auth::user(); $auth_user = Auth::user();
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
$bank = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/bank')->json();
$customer_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/customers/'. $noic)->json();
$pekerjaan = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/pekerjaan')->json();
// Dapatkan maklumat asas $blacklist = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/customer/blacklist',[
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')]) 'nokp' => $noic
->get($api_url . '/api/cawangan/' . $auth_user['cawangan']) ])->json();
->json(); // if($customers_info){
// $customer_info = $customers_info[0];
$bank = Http::withOptions(['verify' => config('app.api_verify')]) // }else{
->get($api_url . '/api/bank') // $customer_info = $customers_info;
->json(); // }
$customer_info = Http::withOptions(['verify' => config('app.api_verify')])
->get($api_url . '/api/customers/' . $noic)
->json();
$pekerjaan = Http::withOptions(['verify' => config('app.api_verify')])
->get($api_url . '/api/pekerjaan')
->json();
$blacklist = Http::withOptions(['verify' => config('app.api_verify')])
->get($api_url . '/api/customer/blacklist', ['nokp' => $noic])
->json();
// Reset session lama
$request->session()->forget('page_reload'); $request->session()->forget('page_reload');
$request->session()->forget('norujukan'); $request->session()->forget('norujukan');
$blacklist_search = false; $blacklist_search = false;
$search = true; $search = true;
if($customer_info){
// SEMAK STATUS ANGGOTA DAN PELANGGAN if($blacklist){
$isAnggota = false;
$isPelanggan = false;
$isNewCustomer = false;
$showAssignAnggotaBtn = false;
$showDaftarPelangganBtn = false;
// Semak dalam sistem anggota
$anggota_info = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/customer/anggota', [
'noic' => $noic
])
->json();
// Semak betul-betul jika ada rekod anggota
if (!empty($anggota_info) && isset($anggota_info['data']) && !empty($anggota_info['data'])) {
$isAnggota = true;
} elseif (isset($anggota_info['noic']) && !empty($anggota_info['noic'])) {
$isAnggota = true;
}
if ($customer_info && isset($customer_info['id'])) {
$isPelanggan = true;
}
// Tentukan butang mana nak paparkan (logik diperbetulkan)
if ($isPelanggan && !$isAnggota) {
// Pelanggan dah berdaftar tapi bukan anggota koperasi
$showAssignAnggotaBtn = true;
} elseif ($isAnggota && !$isPelanggan) {
// Anggota koperasi tapi belum berdaftar sebagai pelanggan
$showDaftarPelangganBtn = true;
} elseif (!$isAnggota && !$isPelanggan) {
// Bukan anggota dan bukan pelanggan (pelanggan baru)
$showDaftarPelangganBtn = true;
$isNewCustomer = true;
}
//Debug log untuk semak nilai sebenar
// Log::info('DEBUG CUSTOMER STATUS', [
// 'noic' => $noic,
// 'isAnggota' => $isAnggota,
// 'isPelanggan' => $isPelanggan,
// 'isNewCustomer' => $isNewCustomer,
// 'showAssignAnggotaBtn' => $showAssignAnggotaBtn,
// 'showDaftarPelangganBtn' => $showDaftarPelangganBtn,
// ]);
if ($customer_info) {
// Ada maklumat pelanggan
if ($blacklist) {
$blacklist_search = true; $blacklist_search = true;
return view('customers.' . $cawangan_info['version'] . '.index', compact( return view('customers.' . $cawangan_info['version'] .'.index',compact('blacklist_search','customer_info','search','noic','cawangan_info','bank','api_url','idtype'));
'blacklist_search', }else{
'customer_info', Session::put('customer_info',$customer_info);
'search', return redirect()->route('customer_info')->with( ['customer_info' => $customer_info,'cawangan_info'=>$cawangan_info,'api_url'=>$api_url]);
'noic',
'cawangan_info',
'bank',
'api_url',
'idtype',
'isAnggota',
'isPelanggan',
'isNewCustomer',
'showAssignAnggotaBtn',
'showDaftarPelangganBtn',
'auth_user'
));
} else {
// Simpan dalam session & redirect ke paparan info pelanggan
Session::put('customer_info', $customer_info);
return redirect()->route('customer_info')->with([
'customer_info' => $customer_info,
'cawangan_info' => $cawangan_info,
'api_url' => $api_url,
'isAnggota' => $isAnggota,
'isPelanggan' => $isPelanggan,
'isNewCustomer' => $isNewCustomer,
'showAssignAnggotaBtn' => $showAssignAnggotaBtn,
'showDaftarPelangganBtn' => $showDaftarPelangganBtn,
'auth_user' => $auth_user
]);
} }
} else { }else{
// Tiada customer dalam sistem if($blacklist){
if ($blacklist) {
$blacklist_search = true; $blacklist_search = true;
return view('customers.' . $cawangan_info['version'] . '.index',compact('blacklist_search','customer_info','search','noic','cawangan_info','bank','api_url','idtype','pekerjaan'));
}else{
return view('customers.' . $cawangan_info['version'] . '.index',compact('blacklist_search','customer_info','search','noic','cawangan_info','bank','api_url','idtype','pekerjaan'));
} }
return view('customers.' . $cawangan_info['version'] . '.index', compact(
'blacklist_search',
'customer_info',
'search',
'noic',
'cawangan_info',
'bank',
'api_url',
'idtype',
'pekerjaan',
'isAnggota',
'isPelanggan',
'isNewCustomer',
'showAssignAnggotaBtn',
'showDaftarPelangganBtn',
'auth_user'
));
} }
} }
@@ -281,9 +123,9 @@ class CustomersController extends Controller
public function cari(Request $request) public function cari(Request $request)
{ {
$api_url = config('api.url'); $api_url = config('api.url');
$customers_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/customers/' . $request->icno)->json(); $customers_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/customers/'. $request->icno)->json();
if (sizeof($customers_info) > 0) if(sizeof($customers_info) > 0)
return $customers_info; return $customers_info;
else else
return response(["no-data"], 200); return response(["no-data"], 200);
@@ -307,58 +149,60 @@ class CustomersController extends Controller
*/ */
public function store(Request $request) public function store(Request $request)
{ {
if ($request->idtype == 'nokp') { if($request->idtype == 'nokp'){
$nokpbaru = $request->noic; $nokpbaru = $request->noic;
$nokplama = ''; $nokplama = '';
} elseif ($request->idtype == 'passport') { }elseif($request->idtype == 'passport'){
$nokpbaru = ''; $nokpbaru = '';
$nokplama = $request->noic; $nokplama = $request->noic;
} }
if ($request->warganegara) { if($request->warganegara){
$warganegara = 'Y'; $warganegara = 'Y';
} else { }else{
$warganegara = 'N'; $warganegara = 'N';
} }
if ($request->bumiputera) { if($request->bumiputera){
$bumiputera = 'Y'; $bumiputera = 'Y';
} else { }else{
$bumiputera = 'N'; $bumiputera = 'N';
} }
if ($request->jantina == 'Lelaki') { if($request->jantina == 'Lelaki'){
$jantina = 'L'; $jantina = 'L';
} elseif ($request->jantina == 'Perempuan') { }elseif($request->jantina == 'Perempuan'){
$jantina = 'P'; $jantina = 'P';
} }
$split_date = explode('/', $request->tarikh_lahir); $split_date = explode('/',$request->tarikh_lahir);
$tarikh_lahir = $split_date[2] . '-' . $split_date[1] . '-' . $split_date[0]; $tarikh_lahir = $split_date[2].'-'.$split_date[1].'-'.$split_date[0];
$tarikhlahir = Carbon::parse($tarikh_lahir); $tarikhlahir = Carbon::parse($tarikh_lahir);
$auth_user = Auth::user(); $auth_user = Auth::user();
$latest_customer = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/customers/latest/' . $auth_user['cawangan'])->json(); $latest_customer = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/customers/latest/' . $auth_user['cawangan'])->json();
if ($latest_customer == null) { if($latest_customer == null){
$nosiri_latest = 1; $nosiri_latest = 1;
} else { }
$nosiri_latest = $latest_customer['nosiri'] + 1; else{
$nosiri_latest = $latest_customer['nosiri']+1;
} }
$count = sprintf("%08d", $nosiri_latest); $count = sprintf("%08d", $nosiri_latest);
$no_pelanggan = $request->bangsa . substr($request->noic, 6, 2) . '-' . $count; $no_pelanggan = $request->bangsa . substr($request->noic,6,2).'-'.$count;
$detail_poskod = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/poskod/' . $request->poskod)->json(); $detail_poskod = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/poskod/' . $request->poskod)->json();
if (empty($detail_poskod)) { if(empty($detail_poskod)){
$detail_poskod = Http::withOptions(['verify' => config('app.api_verify')]) $detail_poskod = Http::withOptions(['verify' => config('app.api_verify')])
->post(config('api.url') . '/api/poskod', [ ->post(config('api.url') . '/api/poskod', [
'poskod' => $request->poskod, 'poskod' => $request->poskod,
'koddaerah' => $request->koddaerah, 'koddaerah' => $request->koddaerah,
'kodnegeri' => $request->kodnegeri, 'kodnegeri' => $request->kodnegeri,
'user' => auth()->user(), 'user' => auth()->user(),
])->json(); ])->json();
} }
$customer_info = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/customers/create/' . $auth_user['cawangan'], [ $customer_info = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/customers/create/'. $auth_user['cawangan'],[
'kodcaw' => $auth_user['cawangan'], 'kodcaw' => $auth_user['cawangan'],
'nopelanggan' => $no_pelanggan, 'nopelanggan' => $no_pelanggan,
'nokpbaru' => $nokpbaru, 'nokpbaru' => $nokpbaru,
@@ -380,117 +224,61 @@ class CustomersController extends Controller
'teller' => $auth_user['name'], 'teller' => $auth_user['name'],
'telefon2' => $request->alternate_phone, 'telefon2' => $request->alternate_phone,
'nosiri' => $nosiri_latest, 'nosiri' => $nosiri_latest,
'nota' => $request->nota, 'nota'=>$request->nota,
'kodkerja' => $request->pekerjaan, 'kodkerja'=>$request->pekerjaan,
'nota_pekerjaan' => $request->nota_pekerjaan, 'nota_pekerjaan'=>$request->nota_pekerjaan,
'notaarcc' => $request->notaarcc, 'notaarcc'=>$request->notaarcc,
'tujuangadai' => $request->tujuan_gadai, 'tujuangadai'=>$request->tujuan_gadai,
]); ]);
Session::put('customer_info', $customer_info); Session::put('customer_info', $customer_info);
Session::put('noic', $request->noic); Session::put('noic', $request->noic);
event(new PelangganNotify('lulus', $auth_user['cawangan'])); event(new PelangganNotify('lulus',$auth_user['cawangan']));
return redirect()->route('customer_info')->with(['customer_info' => $customer_info]); return redirect()->route('customer_info')->with( ['customer_info' => $customer_info] );
} }
public function getOTP(Request $request) public function getOTP(Request $request){
{
$auth_user = Auth::user(); $auth_user = Auth::user();
$expired = Carbon::now(); $expired = Carbon::now();
$expired = new Carbon(); $expired = new Carbon();
$expired = $expired->addHours(24); $expired = $expired->addHours(24);
$currentDateTime = Carbon::now(); $currentDateTime = Carbon::now();
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/' . $auth_user['cawangan'])->json(); $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
$nama_cawangan = $cawangan_info["details_caw"]; $nama_cawangan = $cawangan_info["details_caw"];
$nokp = $request->noic_otp; $nokp = $request->noic_otp;
$customer = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/customers/' . $nokp)->json(); $customer = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url'). '/api/customers/'.$nokp)->json();
$recipient = '6' . $customer['telefon']; $recipient = '6'.$customer['telefon'];
// $recipient = '60189025461'; // $recipient = '60189025461';
//pembinaan token //pembinaan token
function token($length) function token($length) {
{
$characters = array( $characters = array(
"A", "A","B","C","D","E","F","G","H","J","K","L","M",
"B", "N","P","Q","R","S","T","U","V","W","X","Y","Z",
"C", "a","b","c","d","e","f","g","h","i","j","k","m",
"D", "n","o","p","q","r","s","t","u","v","w","x","y","z",
"E", "1","2","3","4","5","6","7","8","9");
"F",
"G",
"H",
"J",
"K",
"L",
"M",
"N",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
);
if ($length < 0 || $length > count($characters)) return null; if ($length < 0 || $length > count($characters)) return null;
shuffle($characters); shuffle($characters);
return implode("", array_slice($characters, 0, $length)); return implode("", array_slice($characters, 0, $length));
} }
$otp_token = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/otp/' . $nokp)->json(); $otp_token = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/otp/' . $nokp) ->json();
$otp_token_used = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/otp/used/' . $nokp)->json(); $otp_token_used = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/otp/used/' . $nokp) ->json();
if (is_array($otp_token) || is_object($otp_token)) { if (is_array($otp_token) || is_object($otp_token)){
if ($otp_token) { if($otp_token){
return response(['error' => "OTP Akaun Telah Di Jana"]); return response(['error' => "OTP Akaun Telah Di Jana"]);
} else { }else{
if (is_array($otp_token_used) || is_object($otp_token_used)) { if (is_array($otp_token_used) || is_object($otp_token_used)){
if ($otp_token_used) { if($otp_token_used){
return response(['error' => "Pelanggan Sudah Mendaftar Pada Customer Portal"]); return response(['error' => "Pelanggan Sudah Mendaftar Pada Customer Portal"]);
} else { }else{
$random = token(6); $random = token(6);
$otp_baru = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/otp/generateotp/' . $nokp, [ $otp_baru = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url'). '/api/otp/generateotp/' . $nokp,[
'otptoken' => $random, 'otptoken' => $random,
'expired' => $expired, 'expired' => $expired,
'kodcaw' => $auth_user['cawangan'] 'kodcaw' => $auth_user['cawangan']
@@ -498,12 +286,12 @@ class CustomersController extends Controller
// $message = "Your OTP code is " . $random; // $message = "Your OTP code is " . $random;
$message = 'AR-RAHN PKB ' . $nama_cawangan . ' : OTP: ' . $random . ' ' . $currentDateTime . '. AR-RAHN CARELINE CENTRE 1300-22-4343'; $message = 'AR-RAHN PKB ' . $nama_cawangan . ' : OTP: ' . $random . ' ' . $currentDateTime . '. AR-RAHN CARELINE CENTRE 1300-22-4343';
$this->sendWhatsAppMessage($message, $recipient); $this->sendWhatsAppMessage($message, $recipient);
return response()->json(['otp' => $random]); return response()->json(['otp'=>$random]);
} }
} else { }else{
$random = token(6); $random = token(6);
$otp_baru = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/otp/generateotp/' . $nokp, [ $otp_baru = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url'). '/api/otp/generateotp/' . $nokp,[
'otptoken' => $random, 'otptoken' => $random,
'expired' => $expired, 'expired' => $expired,
'kodcaw' => $auth_user['cawangan'] 'kodcaw' => $auth_user['cawangan']
@@ -511,17 +299,17 @@ class CustomersController extends Controller
// $message = "Your OTP code is " . $random; // $message = "Your OTP code is " . $random;
$message = 'AR-RAHN PKB ' . $nama_cawangan . ' : OTP: ' . $random . ' ' . $currentDateTime . '. AR-RAHN CARELINE CENTRE 1300-22-4343'; $message = 'AR-RAHN PKB ' . $nama_cawangan . ' : OTP: ' . $random . ' ' . $currentDateTime . '. AR-RAHN CARELINE CENTRE 1300-22-4343';
$this->sendWhatsAppMessage($message, $recipient); $this->sendWhatsAppMessage($message, $recipient);
return response()->json(['otp' => $random]); return response()->json(['otp'=>$random]);
} }
} }
} else { }else{
if (is_array($otp_token_used) || is_object($otp_token_used)) { if (is_array($otp_token_used) || is_object($otp_token_used)){
if ($otp_token_used) { if($otp_token_used){
return response(['error' => "Pelanggan Sudah Mendaftar Pada Customer Portal"]); return response(['error' => "Pelanggan Sudah Mendaftar Pada Customer Portal"]);
} else { }else{
$random = token(6); $random = token(6);
$otp_baru = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/otp/generateotp/' . $nokp, [ $otp_baru = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url'). '/api/otp/generateotp/' . $nokp,[
'otptoken' => $random, 'otptoken' => $random,
'expired' => $expired, 'expired' => $expired,
'kodcaw' => $auth_user['cawangan'] 'kodcaw' => $auth_user['cawangan']
@@ -529,12 +317,12 @@ class CustomersController extends Controller
// $message = "Your OTP code is " . $random; // $message = "Your OTP code is " . $random;
$message = 'AR-RAHN PKB ' . $nama_cawangan . ' : OTP: ' . $random . ' ' . $currentDateTime . '. AR-RAHN CARELINE CENTRE 1300-22-4343'; $message = 'AR-RAHN PKB ' . $nama_cawangan . ' : OTP: ' . $random . ' ' . $currentDateTime . '. AR-RAHN CARELINE CENTRE 1300-22-4343';
$this->sendWhatsAppMessage($message, $recipient); $this->sendWhatsAppMessage($message, $recipient);
return response()->json(['otp' => $random]); return response()->json(['otp'=>$random]);
} }
} else { }else{
$random = token(6); $random = token(6);
$otp_baru = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/otp/generateotp/' . $nokp, [ $otp_baru = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url'). '/api/otp/generateotp/' . $nokp,[
'otptoken' => $random, 'otptoken' => $random,
'expired' => $expired, 'expired' => $expired,
'kodcaw' => $auth_user['cawangan'] 'kodcaw' => $auth_user['cawangan']
@@ -542,36 +330,23 @@ class CustomersController extends Controller
// $message = "Your OTP code is " . $random; // $message = "Your OTP code is " . $random;
$message = 'AR-RAHN PKB ' . $nama_cawangan . ' : OTP: ' . $random . ' ' . $currentDateTime . '. AR-RAHN CARELINE CENTRE 1300-22-4343'; $message = 'AR-RAHN PKB ' . $nama_cawangan . ' : OTP: ' . $random . ' ' . $currentDateTime . '. AR-RAHN CARELINE CENTRE 1300-22-4343';
$this->sendWhatsAppMessage($message, $recipient); $this->sendWhatsAppMessage($message, $recipient);
return response()->json(['otp' => $random]); return response()->json(['otp'=>$random]);
} }
} }
} }
public function sendWhatsAppMessage(string $message, string $recipient) public function sendWhatsAppMessage(string $message, string $recipient)
{ {
$status = Http::withOptions(['verify' => config('app.api_verify')])->get('http://gateway.onewaysms.com.my:10001/api.aspx', [ $status = Http::withOptions(['verify' => config('app.api_verify')])->get('http://gateway.onewaysms.com.my:10001/api.aspx',[
'apiusername' => 'APIUK330HDAFO', 'apiusername' => 'APIUK330HDAFO',
'apipassword' => 'APIUK330HDAFOUK330', 'apipassword' => 'APIUK330HDAFOUK330',
'senderid' => 'INFO', 'senderid' => 'INFO',
'mobileno' => $recipient, 'mobileno' => $recipient,
'message' => $message, 'message'=> $message,
'languagetype' => 1 'languagetype'=> 1
]); ]);
return ($status); return ($status);
} }
public function assignAnggota(Request $request)
{
$noic = $request->noic;
$response = Http::withOptions(['verify' => config('app.api_verify')])
->put(config('api.url') . '/api/customers/' . $noic . '/assign-anggota');
if ($response->successful()) {
return redirect()->back()->with('success', 'Pelanggan berjaya ditandakan sebagai anggota koperasi.');
} else {
return redirect()->back()->with('error', 'Gagal mengemaskini status anggota. Sila cuba semula.');
}
}
} }
File diff suppressed because it is too large Load Diff
+274 -4
View File
@@ -2856,7 +2856,7 @@ class KhazanahController extends Controller
event(new NotifikasiAGH($auth_user['cawangan'],'Tak boleh generate dah kerana sudah digenerate dah.','error',$auth_user['name'])); event(new NotifikasiAGH($auth_user['cawangan'],'Tak boleh generate dah kerana sudah digenerate dah.','error',$auth_user['name']));
$daftar = 400; $daftar = 400;
}else{ }else{
$daftarpolis = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url').'/api/polis/create',[ $daftarpolis = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url').'/api/polis/create/',[
'kodcaw' =>$auth_user['cawangan'], 'kodcaw' =>$auth_user['cawangan'],
'norujukan' => $request->norujukanhidden, 'norujukan' => $request->norujukanhidden,
@@ -3933,9 +3933,9 @@ class KhazanahController extends Controller
$totalhartasemasa = $array_ig->sum_harta; $totalhartasemasa = $array_ig->sum_harta;
$totaltanggungansemasa = $array_ig->sum_tanggungan; $totaltanggungansemasa = $array_ig->sum_tanggungan;
// if($this->floatvalue(number_format($totalhartasemasa,2)) != $this->floatvalue(number_format($totaltanggungansemasa,2))){ if($this->floatvalue(number_format($totalhartasemasa,2)) != $this->floatvalue(number_format($totaltanggungansemasa,2))){
// return redirect()->route('laporan.imbangdugaakru')->with('error','Imbangduga tidak sama. Sila berhubung dengan pihak IT'); return redirect()->route('laporan.imbangdugaakru')->with('error','Imbangduga tidak sama. Sila berhubung dengan pihak IT');
// } }
return view('print.laporan_imbangduga-akru',compact('tarikh_imbangan', 'tarikh_imbangan2','hartasemasa','tanggungansemasa','totalhartasemasa','totaltanggungansemasa','tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail')); return view('print.laporan_imbangduga-akru',compact('tarikh_imbangan', 'tarikh_imbangan2','hartasemasa','tanggungansemasa','totalhartasemasa','totaltanggungansemasa','tarikh_cetak','cawangan_info','cawangan','api_url','cawangan_detail'));
} }
@@ -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){ public function transaksituntutbaki(Request $request){
$auth_user = Auth::user(); $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(); $lelong = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url').'/api/TuntutBaki/resit/' . $auth_user['cawangan'] . '/' . $request->norujukan)->json();
if($lelong) if($lelong)
@@ -106,6 +115,18 @@ class LelongController extends Controller
return response('Berjaya'); 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'], [ $tuntutbaki = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/Tuntutbakisimpan/' . $auth_user['cawangan'], [
'batchno' => $request->batchno, 'batchno' => $request->batchno,
'jenis' => $request->jenis, '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); $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') if($request->jenis == 'T')
{ {
$bakiakhir -= $request->jumlah; $bakiakhir -= $request->jumlah;
+125 -188
View File
@@ -7,7 +7,6 @@ namespace App\Http\Controllers;
use App\Events\OperasiNotice; use App\Events\OperasiNotice;
use App\Events\StatusLiked; use App\Events\StatusLiked;
use App\Events\NotifikasiKelulusan; use App\Events\NotifikasiKelulusan;
use App\Events\NotifikasiAnggota;
use App\Events\Dashboard\KomoditiNotify; use App\Events\Dashboard\KomoditiNotify;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
@@ -26,29 +25,31 @@ class OperasiController extends Controller
$this->middleware('auth'); $this->middleware('auth');
} }
public function kelulusan(Request $request) public function kelulusan(Request $request){
{
$auth_user = Auth::user(); $auth_user = Auth::user();
$api_url = config('api.url'); $api_url = config('api.url');
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/' . $auth_user['cawangan'])->json(); $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
$kelulusan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/ListOperasi/')->json(); $kelulusan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/ListOperasi/')->json();
$arraykelulusan = []; $arraykelulusan = [];
foreach ($kelulusan as $index => $lulus) { foreach($kelulusan as $index=>$lulus)
foreach ($lulus['kelulusanall'] as $index => $kel) { {
array_push($arraykelulusan, ["cawangan" => $lulus['cawangan'], "cawangankod" => $lulus['cawangankod'], "namateller" => $kel['teller'], 'siri' => $kel['siri'], "norujukan" => $kel['norujukan'], 'pinjaman' => $kel['jumpinj'], 'komen' => $kel['komen'], 'nilaimarhun' => ($kel['nilaimarhun'] ?? '-'), 'berat' => ($kel['berat'] ?? '-'), 'margin' => ($kel['margin'] ?? '-'), 'status' => ($kel['status'] ?? '-'), 'pelulus' => $kel['pelulus']]); foreach($lulus['kelulusanall'] as $index=>$kel)
{
array_push($arraykelulusan,["cawangan" => $lulus['cawangan'], "cawangankod" => $lulus['cawangankod'],"namateller" => $kel['teller'], 'siri' => $kel['siri'] , "norujukan" => $kel['norujukan'], 'pinjaman' => $kel['jumpinj'],'komen' => $kel['komen'], 'nilaimarhun' => ($kel['nilaimarhun'] ?? '-'), 'berat' => ($kel['berat'] ?? '-'),'margin' => ($kel['margin'] ?? '-'), 'status' => ($kel['status'] ?? '-'), 'pelulus' => $kel['pelulus']]);
} }
foreach ($lulus['kelulusanMohonid'] as $index => $mohon) { foreach($lulus['kelulusanMohonid'] as $index=>$mohon)
array_push($arraykelulusan, ["mohonid" => true, "ansuran" => $mohon['ansuran'], "cawangan" => $lulus['cawangan'], "cawangankod" => $lulus['cawangankod'], "namateller" => $mohon['teller'], 'recno' => $mohon['recno'], "norujukan" => $mohon['norujukan'], 'pinjaman' => $mohon['pinjaman'], 'komen' => $mohon['katalaluan'], 'nilaimarhun' => ($mohon['nilaimarhun'] ?? '-'), 'berat' => ($mohon['berat'] ?? '-'), 'margin' => ($mohon['margin'] ?? '-'), 'status' => ($mohon['mohon'] ?? '-')]); {
array_push($arraykelulusan,["mohonid" => true,"ansuran" => $mohon['ansuran'],"cawangan" => $lulus['cawangan'], "cawangankod" => $lulus['cawangankod'],"namateller" => $mohon['teller'], 'recno' => $mohon['recno'] , "norujukan" => $mohon['norujukan'], 'pinjaman' => $mohon['pinjaman'],'komen' => $mohon['katalaluan'], 'nilaimarhun' => ($mohon['nilaimarhun'] ?? '-'), 'berat' => ($mohon['berat'] ?? '-'),'margin' => ($mohon['margin'] ?? '-'), 'status' => ($mohon['mohon'] ?? '-')]);
} }
} }
return view('operasi.kelulusan', compact('cawangan_info', 'api_url', 'arraykelulusan')); return view('operasi.kelulusan',compact('cawangan_info','api_url','arraykelulusan'));
} }
public function getkelulusan(Request $request) public function getkelulusan(Request $request)
@@ -58,13 +59,16 @@ class OperasiController extends Controller
$norujukan = $request->norujukan; $norujukan = $request->norujukan;
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/' . $auth_user['cawangan'])->json(); $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
$kelulusan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/SenaraiDahLulus/' . $auth_user['cawangan'] . '/' . $norujukan)->json(); $kelulusan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/SenaraiDahLulus/' . $auth_user['cawangan'] . '/' . $norujukan)->json();
if (sizeof($kelulusan) > 0) { if(sizeof($kelulusan) > 0)
{
$kelulusan = $kelulusan[0]['masalulus']; $kelulusan = $kelulusan[0]['masalulus'];
} else { }
else
{
$kelulusan = ''; $kelulusan = '';
} }
@@ -80,20 +84,27 @@ class OperasiController extends Controller
$norujukan = $request->norujukan; $norujukan = $request->norujukan;
if ($request->pembatalan == null) { if($request->pembatalan == null)
if (!$request->taglulus) { {
$updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusanKomen/' . $request->kodcaw . '/' . $norujukan, [ if(!$request->taglulus){
$updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusanKomen/' . $request->kodcaw . '/' . $norujukan,[
"komen" => $request->komenkelulusan, "komen" => $request->komenkelulusan,
'siri' => $request->siri 'siri' => $request->siri
])->json(); ])->json();
$updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusan/' . $request->kodcaw . '/' . $norujukan, [ $updateData = [
'sahkan' => 1, 'sahkan' => 1,
'namaoperasi' => $request->namaoperasi, 'namaoperasi' => $request->namaoperasi,
'siri' => $request->siri 'siri' => $request->siri
])->json(); ];
} else {
$updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateHapusAnsuran', [ if ($request->has('actions')) {
$updateData['actions'] = $request->actions;
}
$updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusan/' . $request->kodcaw . '/' . $norujukan, $updateData)->json();
}else{
$updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateHapusAnsuran',[
'siri' => $request->siri, 'siri' => $request->siri,
"kodcaw" => $request->kodcaw, "kodcaw" => $request->kodcaw,
"norujukan" => $request->norujukan, "norujukan" => $request->norujukan,
@@ -103,23 +114,26 @@ class OperasiController extends Controller
} }
if ($updatelulus) { if($updatelulus)
event(new NotifikasiKelulusan($norujukan, "lulus", $request->siri, $request->komenkelulusan, $request->teller)); {
event(new NotifikasiKelulusan($norujukan,"lulus",$request->siri,$request->komenkelulusan,$request->teller));
} }
} else { }
if (!$request->taglulus) { else
$updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusanKomen/' . $request->kodcaw . '/' . $norujukan, [ {
if(!$request->taglulus){
$updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusanKomen/' . $request->kodcaw . '/' . $norujukan,[
"komen" => $request->komenkelulusan, "komen" => $request->komenkelulusan,
'siri' => $request->siri 'siri' => $request->siri
])->json(); ])->json();
$updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusan/' . $request->kodcaw . '/' . $norujukan, [ $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusan/' . $request->kodcaw . '/' . $norujukan,[
'sahkan' => 2, 'sahkan' => 2,
'namaoperasi' => $request->namaoperasi, 'namaoperasi' => $request->namaoperasi,
'siri' => $request->siri 'siri' => $request->siri
])->json(); ])->json();
} else { }else{
$updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateHapusAnsuran', [ $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateHapusAnsuran',[
'siri' => $request->siri, 'siri' => $request->siri,
"kodcaw" => $request->kodcaw, "kodcaw" => $request->kodcaw,
"norujukan" => $request->norujukan, "norujukan" => $request->norujukan,
@@ -128,100 +142,61 @@ class OperasiController extends Controller
])->json(); ])->json();
} }
if ($updatelulus) { if($updatelulus)
event(new NotifikasiKelulusan($norujukan, "batal", $request->siri, $request->komenkelulusan, $request->teller)); {
event(new NotifikasiKelulusan($norujukan,"batal",$request->siri,$request->komenkelulusan,$request->teller));
} }
} }
return response()->json($updatelulus, 200); return response()->json($updatelulus,200);
} }
public function updatekelulusananggota(Request $request) public function createKelulusanByKhazanah(Request $request)
{ {
$auth_user = Auth::user(); $auth_user = Auth::user();
$api_url = config('api.url'); $api_url = config('api.url');
// Data asas $current = Carbon::now();
$nokp = $request->nokp; $current = new Carbon();
$kodcaw = $request->kodcaw;
$komen = $request->komenkelulusan;
$namaoperasi = $request->namaoperasi;
$taglulus = $request->taglulus; // contoh: 'Y' = lulus, 'N' = batal
// 1️⃣ Tentukan status kelulusan $norujukan = $request->norujukan;
$status = ($taglulus == 'Y') ? 1 : 2; // 1 = Lulus, 2 = Batal/Tolak
try { $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
// 2️⃣ Panggil API baru — ikut route baru dengan {kodcaw}
$endpoint = $api_url . '/api/UpdateKelulusanAnggota/' . $kodcaw;
$payload = [ $getsiri = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/ListLatestLulus/'. $auth_user['cawangan'] . '/' . $norujukan)->json();
'nokp' => $nokp,
'komenkelulusan' => $komen,
'namaoperasi' => $namaoperasi,
'sahkan' => $status
];
Log::info('Menghantar permintaan ke API UpdateKelulusanAnggota', [ if(isset($getsiri['siri']))
'endpoint' => $endpoint, {
'payload' => $payload $siri = $getsiri['siri'] + 1;
]); }else{
$siri = 1;
$response = Http::withOptions(['verify' => config('app.api_verify')])
->put($endpoint, $payload);
$updatelulus = $response->json();
// 3️⃣ Log hasil respon API
Log::info('Respon dari API UpdateKelulusanAnggota', [
'status' => $response->status(),
'body' => $updatelulus
]);
// 4️⃣ Jika berjaya, cipta event notifikasi
if ($response->successful() && $updatelulus && isset($updatelulus['success']) && $updatelulus['success'] === true) {
// $jenis = ($status == 1) ? 'lulus' : 'batal';
// event(new NotifikasiAnggota($nokp, $jenis, null, $komen, $namaoperasi));
$statusText = ($status == 1) ? 'DILULUSKAN' : 'DITOLAK';
event(new NotifikasiAnggota($nokp, $statusText, $komen, $namaoperasi));
Log::info('Event NotifikasiAnggota dispatched', [
'nokp' => $nokp,
'komen' => $komen,
'namaoperasi' => $namaoperasi
]);
} else {
Log::warning('Gagal kemas kini kelulusan anggota', [
'nokp' => $nokp,
'kodcaw' => $kodcaw,
'response' => $updatelulus
]);
}
return response()->json($updatelulus, $response->status());
} catch (\Exception $e) {
Log::error('Ralat UpdateKelulusanAnggota (frontend)', [
'message' => $e->getMessage(),
'line' => $e->getLine()
]);
return response()->json([
'success' => false,
'message' => 'Ralat semasa menghantar kelulusan anggota.',
'error' => $e->getMessage()
], 500);
} }
$createlulus = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/CreateKelulusan/' . $auth_user['cawangan'] . '/' . $norujukan . '/roles/khazanah', [
'komen' => $request->komen,
'dategadai' => $current->toDateString(),
'bilgadai' => 1,
'siri' => $siri,
'margin' => $request->margin,
'berat' => $request->berat,
'nilaimarhun' => $request->nilaimarhun,
'status' => $request->status,
'jumpinjam' => $request->jumpinjam,
'jenistebus' => "G",
'teller' => $request->teller,
'peloperasi' => "operasi",
'pelulus' => "operasi",
'actions' => "Mohon Pengesahan Pembayaran Pampasan"
])->json();
event(new OperasiNotice($auth_user['cawangan'],$auth_user['name']));
return response()->json($siri,201);
} }
public function createkelulusan(Request $request) public function createkelulusan(Request $request)
{ {
$auth_user = Auth::user(); $auth_user = Auth::user();
@@ -232,13 +207,14 @@ class OperasiController extends Controller
$norujukan = $request->norujukan; $norujukan = $request->norujukan;
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/' . $auth_user['cawangan'])->json(); $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
$getsiri = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/ListLatestLulus/' . $auth_user['cawangan'] . '/' . $norujukan)->json(); $getsiri = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/ListLatestLulus/'. $auth_user['cawangan'] . '/' . $norujukan)->json();
if (isset($getsiri['siri'])) { if(isset($getsiri['siri']))
{
$siri = $getsiri['siri'] + 1; $siri = $getsiri['siri'] + 1;
} else { }else{
$siri = 1; $siri = 1;
} }
@@ -258,110 +234,57 @@ class OperasiController extends Controller
])->json(); ])->json();
event(new StatusLiked($auth_user['cawangan'], $auth_user['name'])); event(new StatusLiked($auth_user['cawangan'],$auth_user['name']));
return response()->json($siri, 201); return response()->json($siri,201);
}
public function createkelulusanAnggota(Request $request)
{
try {
$auth_user = Auth::user();
$api_url = config('api.url');
$current = Carbon::now();
Log::info('createkelulusanAnggota', $request->all());
// Dapatkan maklumat cawangan
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])
->get($api_url . '/api/cawangan/' . $auth_user['cawangan'])
->json();
// Generate siri baru
$getsiri = Http::withOptions(['verify' => config('app.api_verify')])
->get($api_url . '/api/ListLatestLulus/' . $auth_user['cawangan'] . '/anggota')
->json();
$siri = isset($getsiri['siri']) ? $getsiri['siri'] + 1 : 1;
// Hantar ke API
$createlulus = Http::withOptions(['verify' => config('app.api_verify')])
->post($api_url . '/api/CreateKelulusanAnggota/' . $auth_user['cawangan'] . '/roles/operasi', [
'komen' => $request->komen,
'date_mohon' => $current->toDateString(),
'siri' => $siri,
'nokp' => $request->nokp,
'teller' => $request->teller,
'peloperasi' => 'operasi'
])
->json();
event(new StatusLiked($auth_user['cawangan'], $auth_user['name']));
return response()->json([
'success' => true,
'message' => 'Permohonan kelulusan anggota berjaya dihantar.',
'siri' => $siri,
'data' => $createlulus,
], 201);
Log::info('🛰️ API CreateKelulusanAnggota Response:', [
'status' => $response->status(),
'body' => $response->body(),
]);
} catch (\Throwable $th) {
Log::error('❌ createkelulusanAnggota error: ' . $th->getMessage());
return response()->json([
'success' => false,
'message' => $th->getMessage(),
], 500);
}
} }
public function mintakatalaluansemula(Request $request) public function mintakatalaluansemula(Request $request)
{ {
if (Hash::check($request->passsemula, Auth::user()->password)) { if(Hash::check($request->passsemula, Auth::user()->password))
{
return "True"; return "True";
} else { }
else
{
return "False"; return "False";
} }
} }
public function parameter() public function parameter()
{ {
$auth_user = Auth::user(); $auth_user = Auth::user();
$api_url = config('api.url'); $api_url = config('api.url');
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/' . $auth_user['cawangan'])->json(); $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
return view('operasi.parameter', compact('cawangan_info', 'api_url')); return view('operasi.parameter',compact('cawangan_info','api_url'));
} }
public function hargaemas() public function hargaemas()
{ {
$auth_user = Auth::user(); $auth_user = Auth::user();
$api_url = config('api.url'); $api_url = config('api.url');
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/' . $auth_user['cawangan'])->json(); $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
$harga_emas = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/harga_emas/')->json(); $harga_emas = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/harga_emas/')->json();
return view('operasi.hargaemas', compact('cawangan_info', 'api_url', 'harga_emas')); return view('operasi.hargaemas',compact('cawangan_info','api_url','harga_emas'));
} }
public function margin() public function margin(){
{
$auth_user = Auth::user(); $auth_user = Auth::user();
$api_url = config('api.url'); $api_url = config('api.url');
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/' . $auth_user['cawangan'])->json(); $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
$margin_pembiayaan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/maxpinjaman')->json(); $margin_pembiayaan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/maxpinjaman')->json();
return view('operasi.margin_pembiayaan', compact('cawangan_info', 'api_url', 'margin_pembiayaan')); return view('operasi.margin_pembiayaan',compact('cawangan_info','api_url','margin_pembiayaan'));
} }
public function kelulusanrekodlepas() public function kelulusanrekodlepas()
{ {
$auth_user = Auth::user(); $auth_user = Auth::user();
$api_url = config('api.url'); $api_url = config('api.url');
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/' . $auth_user['cawangan'])->json(); $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
//declare array baru //declare array baru
$arraykelulusan = []; $arraykelulusan = [];
@@ -369,36 +292,50 @@ class OperasiController extends Controller
$kelulusan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/ListOperasiKelulusan/')->json(); $kelulusan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/ListOperasiKelulusan/')->json();
foreach ($kelulusan as $index => $k) { foreach($kelulusan as $index=>$k)
foreach ($k['kelulusanall'] as $index1 => $kel) { {
$komen = explode("|", $kel['komen']); foreach($k['kelulusanall'] as $index1=>$kel)
{
$komen = explode("|",$kel['komen']);
$results = array_search("", $komen, true); $results=array_search("",$komen,true);
if ($results !== false) { if($results !== false) {
unset($komen[$results]); unset($komen[$results]);
} }
array_push($arraykelulusan, ['norujukan' => $kel['norujukan'], 'pinjaman' => $kel['jumpinj'], 'nilaimarhun' => ($komen[1] ?? $kel['nilaimarhun'] ?? '-'), 'berat' => ($komen[2] ?? $kel['berat'] ?? '-'), 'margin' => ($komen[3] ?? $kel['margin'] ?? '-'), 'komen' => ($komen[0] ?? $kel['komen'] ?? '-'), 'status' => ($kel['status'] ?? '-'), 'pelulus' => $kel['operasi'],]); array_push($arraykelulusan,['norujukan' => $kel['norujukan'], 'pinjaman' => $kel['jumpinj'], 'nilaimarhun' => ($komen[1] ?? $kel['nilaimarhun'] ?? '-'), 'berat' => ($komen[2] ?? $kel['berat'] ?? '-'),'margin' => ($komen[3] ?? $kel['margin'] ?? '-'), 'komen' => ($komen[0] ?? $kel['komen'] ?? '-'), 'status' => ($kel['status'] ?? '-'), 'pelulus' => $kel['operasi'],]);
} }
} }
return view('operasi.rekodtelahlulus', compact('cawangan_info', 'api_url', 'arraykelulusan')); return view('operasi.rekodtelahlulus',compact('cawangan_info','api_url','arraykelulusan'));
} }
public function notifyKomoditi() public function notifyKomoditi()
{ {
$auth_user = Auth::user(); $auth_user = Auth::user();
event(new KomoditiNotify('lulus', $auth_user['cawangan'])); event(new KomoditiNotify('lulus',$auth_user['cawangan']));
} }
public function kelulusananggota(Request $request) public function marginmutu()
{ {
$auth_user = Auth::user(); $auth_user = Auth::user();
$api_url = config('api.url'); $api_url = config('api.url');
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/' . $auth_user['cawangan'])->json(); $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
$arraykelulusan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/list/approval/anggota')->json(); // Get MaxMutuEmas data from API
$maxmutuemas = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/maxmutuemas')->json();
return view('operasi.kelulusan_anggota', compact('cawangan_info', 'api_url', 'arraykelulusan')); return view('operasi.marginmutu', compact('cawangan_info', 'api_url', 'maxmutuemas'));
}
public function editMarginMutu()
{
$auth_user = Auth::user();
$api_url = config('api.url');
$cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $auth_user['cawangan'])->json();
return view('operasi.edit_marginmutu', compact('cawangan_info', 'api_url'));
} }
} }
+26 -1
View File
@@ -46,7 +46,10 @@ class PenebusanController extends Controller
$nilaihargasemasa = $this->tukaranhargaemas($norujukan); $nilaihargasemasa = $this->tukaranhargaemas($norujukan);
$pertambahpinjaman = 0.80; $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) 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')); 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', 'admin' => 'App\Http\Middleware\Admin',
'audit' => 'App\Http\Middleware\Audit', 'audit' => 'App\Http\Middleware\Audit',
'masteradmin' => 'App\Http\Middleware\Masteradmin', '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));
}
}
-24
View File
@@ -1,24 +0,0 @@
<?php
namespace App\Imports;
use App\Anggota;
use Maatwebsite\Excel\Concerns\ToModel;
class AnggotaImport implements ToModel
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new Anggota([
//
'noic' => $row['noic'],
'nama' => $row['nama'],
'status' => $row['status'] ?? 'aktif',
]);
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 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({ window.Echo = new Echo({
broadcaster: 'pusher', broadcaster: 'pusher',
key: '26b0ec2f297f94b7aa9b', key: process.env.MIX_PUSHER_APP_KEY,
cluster: 'ap1', cluster: process.env.MIX_PUSHER_APP_CLUSTER,
forceTLS: true forceTLS: false
}); });
+3 -6
View File
@@ -558,15 +558,12 @@
function cetaklaporanalirantunai() function cetaklaporanalirantunai()
{ {
let teller = "{{ Auth::user()->name }}"; let urlroute = '{{ route("laporan.alirantunai") }}';
let urlroute = '{{ route("laporan.alirantunai", ":id") }}';
urlroute = urlroute.replace(':id', teller);
window.open(urlroute, '_blank');
window.location.href = urlroute;
} }
function cetakserahankeseluruhan() function cetakserahankeseluruhan()
{ {
let urlroute = '{{ route("laporan.serahanteller") }}'; let urlroute = '{{ route("laporan.serahanteller") }}';
@@ -1,211 +1,298 @@
<html> <style>
<head> #header {
<style> font-family: Arial, Helvetica, sans-serif;
.header{ border-collapse: collapse;
font-size:12px; width: 100%;
font-weight: bold; }
margin-left:40px;
} #header td, #customers th {
body { padding:4px;
background: white; font-size:10px;
} }
page { #header tr:nth-child(even){background-color: #ffffff;}
background: white;
display: block; #header tr:hover {background-color: #ddd;}
margin: 0 auto;
margin-bottom: 0.5cm; #header th {
/* box-shadow: 0 0 0.5cm rgba(0,0,0,0.5); */ 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>
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>
</script>
</body>
</html>
+46 -79
View File
@@ -71,27 +71,12 @@
</form> </form>
</div> </div>
@if($search == true && $blacklist_search == false) @if($search == true && $blacklist_search == false)
<div class="text-center mt-3"> <div class="text-center mt-3">
<button type="button" style="margin:auto" class="btn btn-primary" onclick="newcustomer()">
{{-- Jika anggota tapi belum daftar pelanggan --}} Daftar Pelanggan
@if(isset($showDaftarPelangganBtn) && $showDaftarPelangganBtn) </button>
<button type="button" style="margin:auto" class="btn btn-success" onclick="newcustomer()"> </div>
Daftar Pelanggan @endif
</button>
@endif
{{-- Jika pelanggan dah ada tapi belum anggota --}}
@if(isset($showAssignAnggotaBtn) && $showAssignAnggotaBtn)
<form action="{{ route('customers.assignAnggota') }}" method="POST" style="display:inline-block;">
@csrf
<input type="hidden" name="noic" value="{{ $noic }}">
<button type="submit" class="btn btn-primary">Assign sebagai Anggota</button>
</form>
@endif
</div>
@endif
</div> </div>
</div> </div>
<!-- Modal No KP --> <!-- Modal No KP -->
@@ -102,7 +87,7 @@
<h5 class="modal-title" id="ModalLabel">Daftar Pelanggan</h5> <h5 class="modal-title" id="ModalLabel">Daftar Pelanggan</h5>
</div> </div>
<div class="modal-body"> <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 @csrf
<div class="row form-group"> <div class="row form-group">
<div class="col-md-6"> <div class="col-md-6">
@@ -373,7 +358,7 @@
<h5 class="modal-title" id="ModalLabel">Daftar Pelanggan</h5> <h5 class="modal-title" id="ModalLabel">Daftar Pelanggan</h5>
</div> </div>
<div class="modal-body"> <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 @csrf
<div class="row form-group"> <div class="row form-group">
<div class="col-md-6"> <div class="col-md-6">
@@ -493,75 +478,42 @@
</div> </div>
</div> </div>
</div> </div>
<script> <script>
var api_url = @json($api_url ?? ''); var api_url = "<?php echo $api_url ?>";
var search = @json($search ?? false); var search = "<?php echo $search ?>";
var type_id = @json($idtype ?? ''); var type_id = "<?php echo $idtype ?>";
var isAnggota = @json($isAnggota ?? false); var blacklist_search = "<?php echo $blacklist_search ?>";
var isPelanggan = @json($isPelanggan ?? false);
var blacklist_search = @json($blacklist_search ?? false);
var showAssignAnggotaBtn = @json($showAssignAnggotaBtn ?? false);
var showDaftarPelangganBtn = @json($showDaftarPelangganBtn ?? false);
$(document).ready(function(){ $(document).ready(function(){
// Datepicker
$('#passport_tarikh_lahir').datepicker({ $('#passport_tarikh_lahir').datepicker({
format: 'dd/mm/yyyy', format: 'dd/mm/yyyy',
endDate: new Date() endDate: new Date()
}); });
var noic = $('#noic').val(); var noic = $('#noic').val();
if (typeof identifyIC === 'function') { identifyIC(noic);
identifyIC(noic);
}
// Debug: Papar semua nilai dalam console if(search == true){
console.log({ if(blacklist_search == true){
search, Swal.fire({
blacklist_search, icon: 'warning',
showAssignAnggotaBtn, title: 'Amaran!',
showDaftarPelangganBtn text: 'Pelanggan telah disenarai hitamkan dari Pembiayaan'
}); });
event.preventDefault();
// Logik amaran SweetAlert return false;
if("{{ auth()->user()->cawangan }}" == 'X0301'){ }else{
if (search === true) { Swal.fire({
if (blacklist_search === true) { icon: 'info',
Swal.fire({ title: 'Pelanggan Tiada Dalam Rekod!',
icon: 'warning', text: 'Sila Daftar Pelanggan'
title: 'Amaran!', });
text: 'Pelanggan telah disenarai hitamkan dari Pembiayaan.' event.preventDefault();
}); return false;
}
else if (isAnggota && !isPelanggan) {
Swal.fire({
icon: 'info',
title: 'Anggota Belum Didaftarkan!',
text: 'Pelanggan ini adalah anggota koperasi tetapi belum berdaftar sebagai pelanggan.'
});
}
else if (isPelanggan && !isAnggota) {
Swal.fire({
icon: 'info',
title: 'Pelanggan Bukan Anggota!',
text: 'Pelanggan ini berdaftar tetapi belum menjadi anggota koperasi.'
});
}
else if (!isAnggota && !isPelanggan) {
Swal.fire({
icon: 'info',
title: 'Pelanggan Tiada Dalam Rekod!',
text: 'Sila Daftar Pelanggan.'
});
}
} }
} }
}); });
function calculatePassportAge(){ function calculatePassportAge(){
var passport_lahir = $('#passport_tarikh_lahir').val(); var passport_lahir = $('#passport_tarikh_lahir').val();
var split_date = passport_lahir.split('/'); var split_date = passport_lahir.split('/');
@@ -1394,6 +1346,21 @@ var api_url = @json($api_url ?? '');
$('#pekerjaan-lain').val(''); $('#pekerjaan-lain').val('');
lainContainer.hide(); 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> </script>
@push('additional_scripts') @push('additional_scripts')
File diff suppressed because it is too large Load Diff
+108 -5
View File
@@ -567,6 +567,7 @@
total_berat = 0; total_berat = 0;
total_kuantiti = 0; total_kuantiti = 0;
var marhun_details = ''; var marhun_details = '';
var array_mutu = [];
tablemarhun.clear().draw(); tablemarhun.clear().draw();
$.each(data,function(index,marhun){ $.each(data,function(index,marhun){
$.each(marhun,function(index,marhun_detail){ $.each(marhun,function(index,marhun_detail){
@@ -576,6 +577,7 @@
jumlah_nilai_marhun += Number(marhun_detail['n_marhun']); jumlah_nilai_marhun += Number(marhun_detail['n_marhun']);
status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : ''; status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : '';
total_kuantiti += Number(marhun_detail['bil']); total_kuantiti += Number(marhun_detail['bil']);
array_mutu.push([marhun_detail['karat'], marhun_detail['n_marhun']]);
tablemarhun.row.add([ tablemarhun.row.add([
counter, counter,
marhun_detail['recno'], marhun_detail['recno'],
@@ -588,7 +590,7 @@
marhun_detail['harga'], marhun_detail['harga'],
status_tag_permata, status_tag_permata,
marhun_detail['berat_batu_permata'], marhun_detail['berat_batu_permata'],
"<div class='buttonpunya text-center'><button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button> <button onclick='deletemarhun(this)' class='btn btn-danger'><i class='fas fa-trash-alt'></i></button></div>" "<div class='buttonpunya text-center'><button onclick='viewmarhun(this)' class='btn btn-info'><i class='fas fa-eye'></i></button> <button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button> <button onclick='deletemarhun(this)' class='btn btn-danger'><i class='fas fa-trash-alt'></i></button></div>"
]).draw(); ]).draw();
count++; count++;
counter = counter + 1; counter = counter + 1;
@@ -601,7 +603,7 @@
$('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti)); $('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti));
$('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun)); $('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun));
if (count == 1){ if (count == 1){
$('.buttonpunya').html("<button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button>"); $('.buttonpunya').html("<button onclick='viewmarhun(this)' class='btn btn-info'><i class='fas fa-eye'></i></button> <button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button>");
} }
// if(total_nilai_marhun > 0 && total_nilai_marhun < 401){ // if(total_nilai_marhun > 0 && total_nilai_marhun < 401){
@@ -659,6 +661,10 @@
$.ajax({ $.ajax({
method:'GET', method:'GET',
url: api_url + '/api/maxpinjaman', url: api_url + '/api/maxpinjaman',
data: {
'mutu': array_mutu,
'total_nilai_marhun': total_nilai_marhun,
},
success:function(data){ success:function(data){
$.each(data,function(index,pinjaman){ $.each(data,function(index,pinjaman){
@@ -701,6 +707,103 @@
}); });
} }
function viewmarhun(e){
let selectedrow = $(e).closest('tr');
let recno = tablemarhun.row(selectedrow).data();
let nm = recno[3];
let karat = recno[4];
let berat = recno[5];
let harga = recno[8];
let nota = recno[7];
let kuantiti = recno[6];
let jenismarhun = recno[2];
let beratpermata = recno[10];
// Call API to get specific MaxMutuEmas data by karat
$.ajax({
url: '{{ config("api.url") }}/api/maxmutuemas/specific',
type: 'GET',
data: { karat: karat, nilaimarhun: nm },
success: function(response) {
let marginInfo = '';
let marginTable = '';
if (response && response.karat) {
marginTable = `
<table class="table table-bordered table-sm mt-3">
<thead class="thead-light">
<tr><th colspan="2" class="text-center"><strong>Maklumat Margin</strong></th></tr>
</thead>
<tbody>
<tr><td><strong>Margin Teller</strong></td><td>${response.teller}%</td></tr>
<tr><td><strong>Margin PC</strong></td><td>${response.pc}%</td></tr>
<tr><td><strong>Nilai Marhun Teller</strong></td><td>RM${parseFloat(response.maxteller).toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td></tr>
<tr><td><strong>Nilai Marhun PC</strong></td><td>RM${parseFloat(response.maxpc).toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td></tr>
</tbody>
</table>
`;
}
let details = `
<table class="table table-bordered table-sm">
<thead class="thead-light">
<tr><th colspan="2" class="text-center"><strong>Maklumat Marhun</strong></th></tr>
</thead>
<tbody>
<tr><td><strong>Jenis Marhun</strong></td><td>${jenismarhun}</td></tr>
<tr><td><strong>Nilai Marhun Asal</strong></td><td>${nm}</td></tr>
<tr><td><strong>Karat</strong></td><td>${karat}</td></tr>
<tr><td><strong>Berat</strong></td><td>${berat}g</td></tr>
<tr><td><strong>Kuantiti</strong></td><td>${kuantiti}</td></tr>
<tr><td><strong>Harga</strong></td><td>RM${harga}</td></tr>
<tr><td><strong>Nota</strong></td><td>${nota}</td></tr>
<tr><td><strong>Berat Batu Permata</strong></td><td>${beratpermata}g</td></tr>
</tbody>
</table>
${marginTable}
`;
Swal.fire({
title: 'Maklumat Marhun & Margin',
html: details,
icon: 'info',
confirmButtonText: 'OK',
width: '600px'
});
},
error: function(xhr) {
// If API call fails, show basic marhun info only
let details = `
<table class="table table-bordered table-sm">
<thead class="thead-light">
<tr><th colspan="2" class="text-center"><strong>Maklumat Marhun</strong></th></tr>
</thead>
<tbody>
<tr><td><strong>Jenis Marhun</strong></td><td>${jenismarhun}</td></tr>
<tr><td><strong>Nama</strong></td><td>${nm}</td></tr>
<tr><td><strong>Karat</strong></td><td>${karat}</td></tr>
<tr><td><strong>Berat</strong></td><td>${berat}g</td></tr>
<tr><td><strong>Kuantiti</strong></td><td>${kuantiti}</td></tr>
<tr><td><strong>Harga</strong></td><td>RM${harga}</td></tr>
<tr><td><strong>Nota</strong></td><td>${nota}</td></tr>
<tr><td><strong>Berat Batu Permata</strong></td><td>${beratpermata}g</td></tr>
</tbody>
</table>
<div class="alert alert-warning text-center">
<em>Maklumat margin tidak tersedia</em>
</div>
`;
Swal.fire({
title: 'Maklumat Marhun',
html: details,
icon: 'info',
confirmButtonText: 'OK',
width: '600px'
});
}
});
}
function editmarhun(e){ function editmarhun(e){
let norujuk = $('#norujukan').val(); let norujuk = $('#norujukan').val();
let selectedrow = $(e).closest('tr'); let selectedrow = $(e).closest('tr');
@@ -876,7 +979,7 @@
'harga' : harga_edit, 'harga' : harga_edit,
'n_marhun' : nilai_marhun_edit, 'n_marhun' : nilai_marhun_edit,
'marhun' : marhun_edit, 'marhun' : marhun_edit,
'nota' : nota, // 'nota' : nota,
'tag_permata' : tagpermata_edit, 'tag_permata' : tagpermata_edit,
'berat_batu_permata' : beratpermata_edit, 'berat_batu_permata' : beratpermata_edit,
"teller": "{{ Auth::user()->name }}", "teller": "{{ Auth::user()->name }}",
@@ -1502,7 +1605,7 @@
swalWithBootstrapButtons.fire({ swalWithBootstrapButtons.fire({
title: 'Dapatkan Pengesahan Daripada Khazanah?', title: 'Dapatkan Pengesahan Daripada Khazanah?',
text: "Tetapan margin melebihi" + pinjaman_teller + "% untuk Khazanah!", text: "Tetapan Margin Melebihi Limit Maksima Teller!",
icon: 'info', icon: 'info',
showCancelButton: true, showCancelButton: true,
confirmButtonText: 'Hantar', confirmButtonText: 'Hantar',
@@ -1514,7 +1617,7 @@
let norujukan = $('#norujukan').val(); let norujukan = $('#norujukan').val();
let nm = parseFloat($('#total_nilai_marhun').val().replace(/[^0-9.-]+/g,""));let ber = $('#total_berat').val();let marg = $('.span-pinjaman').text(); let nm = parseFloat($('#total_nilai_marhun').val().replace(/[^0-9.-]+/g,""));let ber = $('#total_berat').val();let marg = $('.span-pinjaman').text();
// let komen = "Pembiayaan Melebihi Margin 70%|" + nm + "|" + ber + "|" + marg + "|"; // let komen = "Pembiayaan Melebihi Margin 70%|" + nm + "|" + ber + "|" + marg + "|";
let status = "Pembiayaan Melebihi Margin " + pinjaman_teller + "%"; let status = "Tetapan Margin Melebihi Limit Maksima Teller: " + pinjaman_teller + "%";
let jumpinjam = $('#pinjaman').val(); let jumpinjam = $('#pinjaman').val();
let teller = "{{ Auth::user()->name }}"; let teller = "{{ Auth::user()->name }}";
+215 -114
View File
@@ -14,7 +14,7 @@
@endphp @endphp
@if($gadai_session != null) @if($gadai_session != null)
<div class="container"> <div class="p-4">
<div class="row justify-content-center"> <div class="row justify-content-center">
<div class="col-md-12 col-lg-12"> <div class="col-md-12 col-lg-12">
@@ -187,7 +187,6 @@
<input type="text" name="kadarkeuntungan" id="kadarkeuntungan" value="" hidden> <input type="text" name="kadarkeuntungan" id="kadarkeuntungan" value="" hidden>
<input type="text" name="kuantiti_marhun" id="kuantiti_marhun" value="" hidden> <input type="text" name="kuantiti_marhun" id="kuantiti_marhun" value="" hidden>
<input type="text" name="total_nilai_marhun" id="total_nilai_marhun" value="" hidden> <input type="text" name="total_nilai_marhun" id="total_nilai_marhun" value="" hidden>
<input type="text" name="nokp" id="nokp" value="{{ !empty($customer_info['kpbaru']) ? $customer_info['kpbaru'] : ($customer_info['kplama'] ?? '') }}" hidden>
<a href="{{ route('gadai.batal',['norujukan'=>$norujukan]) }}" class="float-right btn btn-danger mr-2">Batal</a> <a href="{{ route('gadai.batal',['norujukan'=>$norujukan]) }}" class="float-right btn btn-danger mr-2">Batal</a>
<input type="submit" name="terima_gadai" id="terima_gadai" class="float-right btn btn-primary mr-2" value="Terima"> <input type="submit" name="terima_gadai" id="terima_gadai" class="float-right btn btn-primary mr-2" value="Terima">
</div> </div>
@@ -527,67 +526,69 @@
closeOnSelect: false closeOnSelect: false
}); });
var total_nilai_marhun = 0; var total_nilai_marhun = 0;
var total_berat = 0; var total_berat = 0;
var total_kuantiti = 0; var total_kuantiti = 0;
var kadarupah = 0; var kadarupah = 0;
var jumlah_marhun = 0; var jumlah_marhun = 0;
var jumlah_nilai_marhun = 0; var jumlah_nilai_marhun = 0;
var pinjaman_pelulus = 0; var pinjaman_pelulus = 0;
var pinjaman_teller = 0; var pinjaman_teller = 0;
function marhuntable(data){
var counter = 1; function marhuntable(data) {
total_nilai_marhun = 0; var counter = 1;
total_berat = 0; total_nilai_marhun = 0;
total_kuantiti = 0; total_berat = 0;
var marhun_details = ''; total_kuantiti = 0;
jumlah_nilai_marhun = 0; var marhun_details = '';
tablemarhun.clear().draw(); var array_mutu = [];
$.each(data,function(index,marhun){ jumlah_nilai_marhun = 0;
$.each(marhun,function(index,marhun_detail){ tablemarhun.clear().draw();
total_nilai_marhun = total_nilai_marhun + Number(marhun_detail['n_marhun']); $.each(data, function(index, marhun) {
total_berat = total_berat + Number(marhun_detail['berat']); $.each(marhun, function(index, marhun_detail) {
marhun_details = marhun_details + marhun_detail['bil'] + " " + marhun_detail['marhun'] +","; total_nilai_marhun = total_nilai_marhun + Number(marhun_detail['n_marhun']);
jumlah_nilai_marhun += Number(marhun_detail['n_marhun']); total_berat = total_berat + Number(marhun_detail['berat']);
status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : ''; marhun_details = marhun_details + marhun_detail['bil'] + " " + marhun_detail['marhun'] + ",";
total_kuantiti += Number(marhun_detail['bil']); jumlah_nilai_marhun += Number(marhun_detail['n_marhun']);
tablemarhun.row.add([ status_tag_permata = marhun_detail['tag_permata'] == 1 ? 'Ada' : '';
counter, total_kuantiti += Number(marhun_detail['bil']);
marhun_detail['recno'], array_mutu.push([marhun_detail['karat'], marhun_detail['n_marhun']]);
marhun_detail['marhun'], tablemarhun.row.add([
formatter.format(marhun_detail['n_marhun']), counter,
marhun_detail['karat'], marhun_detail['recno'],
formatter.format(marhun_detail['berat']), marhun_detail['marhun'],
marhun_detail['bil'], formatter.format(marhun_detail['n_marhun']),
marhun_detail['nota'], marhun_detail['karat'],
marhun_detail['harga'], formatter.format(marhun_detail['berat']),
status_tag_permata, marhun_detail['bil'],
marhun_detail['berat_batu_permata'], marhun_detail['nota'],
"<div class='buttonpunya text-center'><button onclick='editmarhun(this)' class='btn btn-primary'><i class='fas fa-edit'></i></button> <button onclick='deletemarhun(this)' class='btn btn-danger'><i class='fas fa-trash-alt'></i></button></div>" marhun_detail['harga'],
]).draw(); status_tag_permata,
counter = counter + 1; marhun_detail['berat_batu_permata'],
"<div class='buttonpunya text-center'><button onclick='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();
counter = counter + 1;
});
}); });
}); $('#totalberattable').text(formatter.format(total_berat));
$('#totalberattable').text(formatter.format(total_berat)); $('#totalkuantititable').text(total_kuantiti);
$('#totalkuantititable').text(total_kuantiti); $('#totalnilaimarhuntable').text(formatter.format(jumlah_nilai_marhun));
$('#totalnilaimarhuntable').text(formatter.format(jumlah_nilai_marhun)); $('#bilangan_marhun').val(formatter.format(counter - 1));
$('#bilangan_marhun').val(formatter.format(counter-1)); $('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti));
$('#bilangan_jumlah_kuantiti').val(formatter.format(total_kuantiti)); $('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun));
$('#jumlah_nilai_marhun').val(formatter.format(jumlah_nilai_marhun)); // if(total_nilai_marhun > 0 && total_nilai_marhun < 401){
// if(total_nilai_marhun > 0 && total_nilai_marhun < 401){ // kadarupah = 1.2/100;
// kadarupah = 1.2/100; // }else if(total_nilai_marhun >= 401 && total_nilai_marhun < 2001){
// }else if(total_nilai_marhun >= 401 && total_nilai_marhun < 2001){ // kadarupah = 1.5/100;
// kadarupah = 1.5/100; // }else if(total_nilai_marhun >= 2001 ){
// }else if(total_nilai_marhun >= 2001 ){ // kadarupah = 1.7/100;
// kadarupah = 1.7/100; // }
// }
$.ajax({ $.ajax({
method:'GET', method:'GET',
url: api_url + '/api/kadarujrah', url: api_url + '/api/kadarujrah',
async:false, async:false,
data:{ data:{
'nokp': $('#nokp').val(),
'nilaimarhun' : total_nilai_marhun, 'nilaimarhun' : total_nilai_marhun,
'kodcaw' : kodcaw_ujrah 'kodcaw' : kodcaw_ujrah
}, },
@@ -602,34 +603,35 @@
$('#kadarkeuntungan').val(formatter.format(kadarupah)); $('#kadarkeuntungan').val(formatter.format(kadarupah));
$('#kuantiti_marhun').val(formatter.format(jumlah_marhun)); $('#kuantiti_marhun').val(formatter.format(jumlah_marhun));
$.ajax({ $.ajax({
method:'GET', method: 'GET',
url: api_url + '/api/maxpinjaman', url: api_url + '/api/maxpinjaman',
success:function(data){ data: {
$.each(data,function(index,pinjaman){ 'mutu': array_mutu,
if(pinjaman['user_type'] == 'teller'){ 'total_nilai_marhun': total_nilai_marhun,
pinjaman_teller = Number(pinjaman['max']); },
} success: function(data) {
if(pinjaman['user_type'] == 'khazanah'){ $.each(data, function(index, pinjaman) {
pinjaman_pelulus = Number(pinjaman['max']); if (pinjaman['user_type'] == 'teller') {
} pinjaman_teller = Number(pinjaman['max']);
}); }
$('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %'); if (pinjaman['user_type'] == 'khazanah') {
$('.span-pinjaman-max').text(formatter.format(pinjaman_teller) + ' %'); pinjaman_pelulus = Number(pinjaman['max']);
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))); $('.span-pinjaman-max-pelulus').text(formatter.format(pinjaman_pelulus) + ' %');
$('#pembiyaan_max_pelulus').val(formatter.format(max_pelulus.toFixed(2))); $('.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)));
}
});
}
$('#pinjaman').on('input',function(){ $('#pinjaman').on('input',function(){
var pinjaman = Number(this.value); var pinjaman = Number(this.value);
var nilaimarhun = Number($('#jumlah_nilai_marhun').val()); var nilaimarhun = Number($('#jumlah_nilai_marhun').val());
var nokp = $('#nokp').val();
//console.log('DEBUG NOKP:', nokp, kadarupah);
// var keuntungan_sebulan = pinjaman * kadarupah; // var keuntungan_sebulan = pinjaman * kadarupah;
// var keuntungan_6bln = keuntungan_sebulan * 6; // var keuntungan_6bln = keuntungan_sebulan * 6;
@@ -643,7 +645,6 @@
url: api_url + '/api/onepercent', url: api_url + '/api/onepercent',
async:false, async:false,
data:{ data:{
'nokp': nokp,
'nilaimarhun' : total_nilai_marhun, 'nilaimarhun' : total_nilai_marhun,
'pembiayaan' : pinjaman, 'pembiayaan' : pinjaman,
'kadarujrah' : kadarupah, 'kadarujrah' : kadarupah,
@@ -865,8 +866,9 @@
var batu_permata_array = $('#batupermata').val(); var batu_permata_array = $('#batupermata').val();
var tag_permata = $('input[id=tagpermata]').is(':checked') ? 1 : 0; var tag_permata = $('input[id=tagpermata]').is(':checked') ? 1 : 0;
var beratpermata = $('#beratpermata').val(); var beratpermata = $('#beratpermata').val();
var kuantiti = $('#kuantiti').val(); var kuantiti = $('#kuantiti').val();
if(kuantiti > 10) if(kuantiti > 10)
{ {
@@ -1168,10 +1170,10 @@
icon: 'error', icon: 'error',
title: 'Amaran!', title: 'Amaran!',
text: 'Pembiayaan Tidak Lengkap' text: 'Pembiayaan Tidak Lengkap'
}); });
event.preventDefault(); event.preventDefault();
return false; return false;
} }
let dataCawangan = await getDataCawangan(); let dataCawangan = await getDataCawangan();
let bakiAkhir = dataCawangan.baki; let bakiAkhir = dataCawangan.baki;
@@ -1431,22 +1433,24 @@
buttonsStyling: false buttonsStyling: false
}); });
swalWithBootstrapButtons.fire({ swalWithBootstrapButtons.fire({
title: 'Dapatkan Pengesahan Khazanah', title: 'Dapatkan Pengesahan Khazanah',
text: "Tetapan margin melebihi " + pinjaman_teller + "% untuk Khazanah!", text: "Tetapan Margin Melebihi Limit Maksima Teller!",
icon: 'info', icon: 'info',
showCancelButton: true, showCancelButton: true,
confirmButtonText: 'Hantar', confirmButtonText: 'Hantar',
cancelButtonText: 'Batal', cancelButtonText: 'Batal',
reverseButtons: true reverseButtons: true
}).then((result) => { }).then((result) => {
if (result.isConfirmed) { if (result.isConfirmed) {
let norujukan = $('#norujukan').val(); let norujukan = $('#norujukan').val();
let nm = parseFloat($('#total_nilai_marhun').val().replace(/[^0-9.-]+/g,""));let ber = $('#total_berat').val();let marg = $('.span-pinjaman').text(); let nm = parseFloat($('#total_nilai_marhun').val().replace(/[^0-9.-]+/g, ""));
let status = "Pembiayaan Melebihi Margin " + pinjaman_teller + "%"; let ber = $('#total_berat').val();
let jumpinjam = $('#pinjaman').val(); let marg = $('.span-pinjaman').text();
let teller = "{{ Auth::user()->name }}"; let status = "Tetapan Margin Melebihi Limit Maksima Teller: " + pinjaman_teller + "%";
let jumpinjam = $('#pinjaman').val();
let teller = "{{ Auth::user()->name }}";
Swal.fire({ Swal.fire({
title: 'Tunggu Pengesahan Daripada Khazanah.', title: 'Tunggu Pengesahan Daripada Khazanah.',
@@ -1604,20 +1608,117 @@
let marhun = $(e).closest('tr').children('td:eq(1)').text();let selectedrow = $(e).closest('tr');let recnozz = tablemarhun.row(selectedrow).data(); let marhun = $(e).closest('tr').children('td:eq(1)').text();let selectedrow = $(e).closest('tr');let recnozz = tablemarhun.row(selectedrow).data();
let norujuk = $('#norujukan').val(); let norujuk = $('#norujukan').val();
$.ajax({
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 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({ $.ajax({
method: 'put', url: '{{ config("api.url") }}/api/maxmutuemas/specific',
url: '{{ route("gadai.editmarhun") }}', type: 'GET',
data: { data: { karat: karat,nilaimarhun: nm },
"_token": "{{ csrf_token() }}", success: function(response) {
"norujukan" : norujuk, let marginInfo = '';
"recno" : recnozz[1], let marginTable = '';
"teller": "{{ Auth::user()->name }}" 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>${parseFloat(response.maxteller).toLocaleString('en-MY', {minimumFractionDigits: 2, maximumFractionDigits: 2})}</td></tr>
<tr><td><strong>Nilai Marhun PC</strong></td><td>${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>Harga</strong></td><td>RM${harga}</td></tr>
</tbody>
</table>
${marginTable}
`;
Swal.fire({
title: 'Maklumat Marhun & Margin',
html: details,
icon: 'info',
confirmButtonText: 'OK',
width: '600px'
});
}, },
success:function(data){ error: function(xhr) {
location.reload(); // If API call fails, show basic marhun info only
},error: function(xhr, status, error) { let details = `
var err = eval("(" + xhr.responseText + ")"); <table class="table table-bordered table-sm">
alert(xhr.responseText); <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'
});
} }
}); });
} }
@@ -274,9 +274,11 @@
<div class="row"> <div class="row">
<a href="{{ route('lelong') }}" class="btn btn-info btn-lg btn-block mb-3">Lelong</a> <a href="{{ route('lelong') }}" class="btn btn-info btn-lg btn-block mb-3">Lelong</a>
</div> </div>
@if(Auth::user()->cawangan == '011237')
<div class="row"> <div class="row">
<a href="{{ url('panjar') }}" class="btn btn-info btn-lg btn-block mb-3">Perbelanjaan</a> <a href="{{ url('panjar') }}" class="btn btn-info btn-lg btn-block mb-3">Perbelanjaan</a>
</div> </div>
@endif
<div class="row"> <div class="row">
<a href="{{ url('alirantunai') }}" class="btn btn-info btn-lg btn-block mb-3">Aliran <a href="{{ url('alirantunai') }}" class="btn btn-info btn-lg btn-block mb-3">Aliran
Tunai</a> Tunai</a>
@@ -3,7 +3,7 @@
@section('content') @section('content')
<div class="container"> <div class="container">
<div class="row justify-content-center mt-5"> <div class="row justify-content-center mt-5">
<div class="col-md-12"> <div class="col-md-8">
<div class="card"> <div class="card">
<nav aria-label="breadcrumb"> <nav aria-label="breadcrumb">
@@ -14,7 +14,6 @@
</nav> </nav>
<div class="card-body text-center"> <div class="card-body text-center">
<a href="{{ route('operasi.kelulusananggota') }}" class="btn btn-info btn-lg">Kelulusan Anggota</a>
<a href="{{ route('operasi.kelulusan') }}" class="btn btn-info btn-lg">Kelulusan</a> <a href="{{ route('operasi.kelulusan') }}" class="btn btn-info btn-lg">Kelulusan</a>
<a href="{{ route('daftar.kakitangan') }}" class="btn btn-info btn-lg">Kakitangan</a> <a href="{{ route('daftar.kakitangan') }}" class="btn btn-info btn-lg">Kakitangan</a>
<a href="{{ route('parameter') }}" class="btn btn-info btn-lg">Parameter</a> <a href="{{ route('parameter') }}" class="btn btn-info btn-lg">Parameter</a>
@@ -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
@@ -189,10 +189,6 @@
<a href="{{ route('laporan.notisperingatan') }}" <a href="{{ route('laporan.notisperingatan') }}"
class="btn btn-dark btn-lg btn-block mb-3 custom-btn">Notis Peringatan</a> class="btn btn-dark btn-lg btn-block mb-3 custom-btn">Notis Peringatan</a>
</div> </div>
<div class="row">
<a href="{{ route('laporan.imbangduga') }}"
class="btn btn-dark btn-lg btn-block mb-3 custom-btn">Imbang Duga</a>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -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') @include('modal.agh')
<div class="container"> <div class="container col-12">
<div class="row justify-content-center"> <div class="row justify-content-center">
<div class="col-md-12 col-lg-12"> <div class="col-md-12 col-lg-12">
<div class="card"> <div class="card">
@@ -171,7 +171,7 @@
</nav> </nav>
<div class="tab-content" id="navtawarruqdannottawarruq"> <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"> <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"> <thead class="thead-dark">
<tr> <tr>
<th>Bil</th> <th>Bil</th>
@@ -184,23 +184,14 @@
<th>Tempoh</th> <th>Tempoh</th>
<th>Keuntungan</th> <th>Keuntungan</th>
<th>Lelong</th> <th>Lelong</th>
<th>Pembayaran Terakhir</th>
</tr> </tr>
</thead> </thead>
</table> </table>
</div> </div>
<div class="tab-pane fade {{ $activate_pane_SAG_lama }}" id="nav-xtawarruq" role="tabpanel" aria-labelledby="nav-xtawarruq-tab"> <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"> <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> <tr>
<th>Bil</th> <th>Bil</th>
<th>No Rujukan</th> <th>No Rujukan</th>
@@ -212,6 +203,7 @@
<th>Tempoh</th> <th>Tempoh</th>
<th>Keuntungan</th> <th>Keuntungan</th>
<th>Lelong</th> <th>Lelong</th>
<th>Pembayaran Terakhir</th>
</tr> </tr>
</thead> </thead>
</table> </table>
@@ -233,7 +225,9 @@
</thead> </thead>
</table> </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"> <thead class="thead-dark">
<tr> <tr>
<th>Bil</th> <th>Bil</th>
@@ -514,7 +508,7 @@
}); });
var xtawarruq = $('#xtawarruq').DataTable({ var xtawarruq = $('#xtawarruq').DataTable({
"scrollX": false "scrollX": true,
}); });
var tabledahtebus = $('#dahtebusTable').DataTable({ var tabledahtebus = $('#dahtebusTable').DataTable({
@@ -563,6 +557,26 @@
function checkserah(data){ function checkserah(data){
var urlpenebusan = $(data).data("url"); var urlpenebusan = $(data).data("url");
var norujukan = $(data).data("norujukan"); 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({ $.ajax({
method:'get', method:'get',
url: api_url + '/api/check/serah/gadai', 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){ function gadaiTable(data,jenistebus){
var counter = 1; var counter = 1;
tablegadai.clear().draw(); tablegadai.clear().draw();
tabledahtebus.clear().draw(); tabledahtebus.clear().draw();
tablelelong.clear().draw(); tablelelong.clear().draw();
xtawarruq.clear().draw(); xtawarruq.clear().draw();
$.each(data,function(index,gadai_detail){ $.each(data,function(index,gadai_detail){
let jeniskeuntungan = (gadai_detail['tagbaru'] == 1) ? 'onepercent' : 'asal'; let jeniskeuntungan = (gadai_detail['tagbaru'] == 1) ? 'onepercent' : 'asal';
$.ajax({ $.ajax({
method:'get', method:'get',
@@ -616,15 +665,7 @@ $.each(data,function(index,gadai_detail){
var taglel = ''; var taglel = '';
if(gadai_detail['taglel'] == 1){ if(gadai_detail['taglel'] == 1){
if(tagarrahnbid == 1){ if(tagarrahnbid == 1){
$.ajax({ taglel = gadai_detail['t_lelong'];
method:"GET",
async:false,
url:api_arrahnbid + 'portalApi?norujukan=' + gadai_detail['norujukan'],
success: function(data){
taglel = data.lelong.t_lelong;
}
});
} else { } else {
$.ajax({ $.ajax({
method:"GET", method:"GET",
@@ -647,7 +688,18 @@ $.each(data,function(index,gadai_detail){
if(gadai_detail["percentpinj"] != 0) if(gadai_detail["percentpinj"] != 0)
xtawarruq.row.add([ xtawarruq.row.add([
'<input type="radio" value='+ gadai_detail["norujukan"] + ' name="belum"/>', '<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'], gadai_detail['t_gadai'],
tarikh_matang, tarikh_matang,
'RM '+ formatter.format(gadai_detail['bakihargajualan']), 'RM '+ formatter.format(gadai_detail['bakihargajualan']),
@@ -656,20 +708,23 @@ $.each(data,function(index,gadai_detail){
gadai_detail['tempoh'], gadai_detail['tempoh'],
'RM '+ upahsemasa, 'RM '+ upahsemasa,
'<div style="white-space: nowrap; color:red; font-weight: bolder">' + taglel + '</div>', '<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(); ]).draw();
}else{ }else{
var taglel = ''; var taglel = '';
if(gadai_detail['taglel'] == 1){ if(gadai_detail['taglel'] == 1){
if(tagarrahnbid == 1){ if(tagarrahnbid == 1){
$.ajax({ if(gadai_detail['t_lelong'] != null) {
method:"GET", taglel = gadai_detail['t_lelong'];
async:false, }
url:api_arrahnbid + 'portalApi?norujukan=' + gadai_detail['norujukan'],
success: function(data){
taglel = data.lelong.t_lelong;
}
});
} else { } else {
$.ajax({ $.ajax({
method:"GET", method:"GET",
@@ -690,7 +745,18 @@ $.each(data,function(index,gadai_detail){
// let radio_action = "onclick=checkCanChangeGadaianDetail(" + "'" + table_norujukan + "'" + ")"; // let radio_action = "onclick=checkCanChangeGadaianDetail(" + "'" + table_norujukan + "'" + ")";
tablegadai.row.add([ tablegadai.row.add([
'<input type="radio" value='+ gadai_detail["norujukan"] + ' name="belum"/>', '<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'], gadai_detail['t_gadai'],
tarikh_matang, tarikh_matang,
'RM '+ formatter.format(gadai_detail['bakihargajualan']), 'RM '+ formatter.format(gadai_detail['bakihargajualan']),
@@ -699,6 +765,15 @@ $.each(data,function(index,gadai_detail){
gadai_detail['tempoh'], gadai_detail['tempoh'],
'RM '+ upahsemasa['pendapatan'], 'RM '+ upahsemasa['pendapatan'],
'<div style="white-space: nowrap; color:red; font-weight: bolder">' + taglel + '</div>', '<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(); ]).draw();
} }
}else if(jenistebus == "sudah_tebus"){ }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 rel="stylesheet" href="{{ asset('vendor/datepicker/css/bootstrap-datepicker.min.css') }}"/>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<script src="{{ asset('js/jquery.min.js') }}"></script> <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('vendor/bootstrap/js/bootstrap.min.js') }}"></script>
<script src="{{ asset('js/select2.min.js') }}"></script> <script src="{{ asset('js/select2.min.js') }}"></script>
<script src="{{ asset('js/apexcharts.js') }}"></script> <script src="{{ asset('js/apexcharts.js') }}"></script>
<script src="{{ asset('js/numeral.min.js') }}"></script> <script src="{{ asset('js/numeral.min.js') }}"></script>
<script src="{{ asset('js/sweetalert.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/DataTables/datatables.min.js') }}"></script>
<script src="{{ asset('vendor/datepicker/js/bootstrap-datepicker.min.js') }}"></script> <script src="{{ asset('vendor/datepicker/js/bootstrap-datepicker.min.js') }}"></script>
<script src="{{ asset('js/typehead.jquery.js') }}"></script> <script src="{{ asset('js/typehead.jquery.js') }}"></script>
+29 -3
View File
@@ -601,9 +601,26 @@ function ubahwakil(e)
'hargajual' : hargajual 'hargajual' : hargajual
}, },
success:function(data){ success:function(data){
let urlroute = '{{ route("resit.tuntutbaki", ":id") }}';
urlroute = urlroute.replace(':id', norujukan); if(data == 'kemaskini'){
Swal.fire( 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!', 'Berjaya!',
'Tuntut Baki Berjaya', 'Tuntut Baki Berjaya',
'success' 'success'
@@ -611,6 +628,15 @@ function ubahwakil(e)
window.open(urlroute, '_blank'); window.open(urlroute, '_blank');
window.location.replace("{{ route('customer_info') }}"); 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) { },error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")"); var err = eval("(" + xhr.responseText + ")");
alert(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>
+21 -1
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 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-dialog modal-dialog-centered" role="document">
<div class="modal-content"> <div class="modal-content">
@@ -571,5 +571,25 @@
</div> </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,141 @@
@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'));
$('#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()
};
$.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'
});
}
});
});
});
</script>
@endsection
+496 -371
View File
@@ -2,27 +2,97 @@
@section('content') @section('content')
<div class="modal fade" id="kelulusanmodal"> <div class="modal fade" id="kelulusan_pampasan_modal">
<div class="modal-dialog modal-lg modal-dialog-centered"> <div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content"> <div class="modal-content">
<!-- Modal Header --> <!-- Modal Header -->
<div class="modal-header"> <div class="modal-header">
<h4 class="text-center">Maklumat Lanjut</h4> <h4 class="text-center">Maklumat Lanjut</h4>
<button type="button" class="close" data-dismiss="modal">&times;</button> <button type="button" class="close" data-dismiss="modal">&times;</button>
</div> </div>
<!-- Modal body --> <!-- Modal body -->
<div class="modal-body"> <div class="modal-body">
<div class="row col-12 text-center"> <div class="row col-12 text-center">
<div class="row col-7"> <div class="row col-7">
<label>Nama : </label> <label>Nombor Rujukan : </label>
<span id="namalanjut"> </span> <span id="norujukan_pampasan"> </span>
</div> </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"> <div class="row col-5">
<label>Kad Pengenalan : </label> <label>Kad Pengenalan : </label>
<span id="nokplanjut"> </span> <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>
</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>
<div class="row mt-3"> <div class="row mt-3">
@@ -71,404 +141,459 @@
</div> </div>
</div> </div>
<!-- Modal footer --> <!-- Modal footer -->
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button> <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> </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> </div>
<script> <script>
var tablekelulusan = $('#table-kelulusan').DataTable({
"scrollX": true
});
var tablekelulusan = $('#table-kelulusan').DataTable({ let api = "{{ config('api.url') }}";
"scrollX": true
});
let api = "{{ config('api.url') }}"; const formatter = new Intl.NumberFormat('en-US', {
minimumFractionDigits: 2
});
const formatter = new Intl.NumberFormat('en-US', { var audio = new Audio("{{ asset('sound/3.wav') }}");
minimumFractionDigits: 2
});
var audio = new Audio("{{ asset('sound/3.wav') }}"); if (tablekelulusan.data().any()) {
audio.play();
if(tablekelulusan.data().any()){ audio.addEventListener('ended', function() {
audio.play(); this.currentTime = 0;
audio.addEventListener('ended', function() { this.play();
this.currentTime = 0; }, false);
this.play(); } else {
}, false); audio.loop = false;
}else{ audio.muted = true;
audio.loop = false; }
audio.muted = true;
}
$('#kelulusanmodal').on('show.bs.modal', function(event) { $('#kelulusanmodal').on('show.bs.modal', function(event) {
let button = $(event.relatedTarget); let button = $(event.relatedTarget);
let norujukan = $(button).data('norujukan'); let norujukan = $(button).data('norujukan');
let kodcaw = $(button).data('kodcawangan'); 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({ $.ajax({
method:'GET', method: 'GET',
url: api + '/api/gadai/norujukan/' + norujukan, url: api + '/api/customers/' + nokp,
dataType: 'json', 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({ $.ajax({
method:'GET', method: 'GET',
url: api + '/api/customers/' + nokp, url: api + '/api/gadai/customers/' + nokp + '/outstandingsemasa/' + kodcaw,
dataType: 'json', dataType: 'json',
success:function(datagadaiwithnokp){ success: function(outstandingsemasa) {
let nama = datagadaiwithnokp.nama; $('#pinjterkumpul').text('RM' + formatter.format(outstandingsemasa));
$('#namalanjut').text(nama); },
$('#nokplanjut').text(nokp); error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
$.ajax({ alert(xhr.responseText);
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);
}
}); });
} }
}); });
$.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({ async function updatelulus(e) {
title: 'Masukkan Katalaluan Semula',
input: 'password',
inputPlaceholder: 'Katalaluan',
confirmButtonText: 'Hantar',
showCancelButton:true,
cancelButtonText:'Batal',
allowOutsideClick: true
})
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({ let dataminta = '';
method:'get',
url: "{{ route('operasi.getmintasemulakelulusan') }}",
async:false,
data:{ passsemula : katalaluan },
success:function(data)
{
if(data == "False")
{
dataminta = data;
}
}
});
if(dataminta == 'False') $.ajax({
{ method: 'get',
Swal.fire({ url: "{{ route('operasi.getmintasemulakelulusan') }}",
icon: 'error', async: false,
title: 'Pengesahan Katalaluan Tidak Berjaya' data: {
}) passsemula: katalaluan
event.preventDefault(); },
return false; success: function(data) {
if (data == "False") {
dataminta = data;
} }
}
});
// var { value: komenkelulusan } = await Swal.fire({ if (dataminta == 'False') {
// title: 'Masukkan Komen!', Swal.fire({
// input: 'radio', icon: 'error',
// customClass: { title: 'Pengesahan Katalaluan Tidak Berjaya'
// input: 'custom-radio' })
// }, event.preventDefault();
// inputOptions: { return false;
// '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);
}
});
} }
async function updatebatal(e) // var { value: komenkelulusan } = await Swal.fire({
{ // title: 'Masukkan Komen!',
const { value: katalaluan } = await Swal.fire({ // input: 'radio',
title: 'Masukkan Katalaluan Semula', // customClass: {
input: 'password', // input: 'custom-radio'
inputPlaceholder: 'Katalaluan', // },
confirmButtonText: 'Hantar', // inputOptions: {
showCancelButton:true, // 'Pelanggan Baru': 'Pelanggan Baru',
cancelButtonText:'Batal', // 'Pelanggan Tetap': 'Pelanggan Tetap',
allowOutsideClick: true // '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({ const {
method:'get', value: komenkelulusan
url: "{{ route('operasi.getmintasemulakelulusan') }}", } = await Swal.fire({
async:false, title: 'Masukkan Komen!',
data:{ passsemula : katalaluan }, input: 'text',
success:function(data) inputPlaceholder: 'Komen',
{ confirmButtonText: 'Hantar',
if(data == "False") showCancelButton: false,
{ allowOutsideClick: false
dataminta = data; })
}
}
});
if(dataminta == 'False') let norujukan = $(e).data('norujukan');
{ let cawangankod = $(e).data('kodcaw');
Swal.fire({ let siri = $(e).data('siri');
icon: 'error', let namaoperasi = "{{ Auth::user()->name }}";
title: 'Pengesahan Katalaluan Tidak Berjaya' let teller = $(e).closest('tr').children('td:eq(2)').text();
}) let taglulus = $(e).data('taglulus');
event.preventDefault(); let status = $(e).data('status');
return false;
}
const { value: komenkelulusan } = await Swal.fire({ teller = String(teller);
title: 'Masukkan Komen',
input: 'text',
inputPlaceholder: 'Komen',
confirmButtonText: 'Hantar',
showCancelButton:false,
allowOutsideClick: false
})
let norujukan = $(e).data('norujukan'); let requestData = {
let siri = $(e).data('siri'); "_token": "{{ csrf_token() }}",
let cawangankod = $(e).data('kodcaw'); "taglulus": taglulus,
let namaoperasi = "{{ Auth::user()->name }}"; "norujukan": norujukan,
let teller = $(e).closest('tr').children('td:eq(2)').text(); "kodcaw": cawangankod,
"komenkelulusan": komenkelulusan,
"siri": siri,
'namaoperasi': namaoperasi,
'teller': teller
};
teller = String(teller); if (status === 'Kelulusan Pengeluaran Pampasan') {
requestData.actions = 'Pengesahan Pembayaran Pampasan';
$.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);
}
});
} }
$.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> </script>
@endsection @endsection
@@ -1,518 +0,0 @@
@extends('layouts.app_operasi')
@section('content')
<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 Anggota</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>Cawangan</th>
<th>No Kad Pengenalan</th>
<th>Nama Anggota</th>
<th>Status</th>
<th>Tarikh/Masa</th>
<th>Tindakan</th>
</tr>
</thead>
<tbody>
@foreach ($arraykelulusan as $index => $k)
@foreach ($k['kelulusanall'] as $indexapp => $approval)
@php
$status = strtolower($approval['status'] ?? '');
$statusLabel = $approval['status'] ?? '—';
// Gunakan strpos() supaya compatible dengan PHP 7.x juga
if (
strpos($status, 'lulus') !== false ||
strpos($status, 'diluluskan') !== false ||
strpos($status, 'selesai') !== false
) {
$statusStyle = 'background-color:#7ee4b8; color:white;';
} elseif (
strpos($status, 'tolak') !== false ||
strpos($status, 'batal') !== false
) {
$statusStyle = 'background-color:#f58c8c; color:white;';
} elseif (
strpos($status, 'menunggu') !== false ||
strpos($status, 'pending') !== false
) {
$statusStyle = 'background-color:#ffd166; color:#333;';
} else {
$statusStyle = 'background-color:#d1d5db; color:#333;';
}
@endphp
<tr>
<td>{{ $k['cawangan'] }}</td>
<td>{{ $approval['nokp'] }}</td>
<td>{{ $approval['nama'] ?? '-' }}</td>
<td>
<span class="px-3 py-2 d-inline-block text-center fw-bold"
style="{{ $statusStyle }} border-radius:8px; min-width:130px; display:inline-block;">
{{ $statusLabel }}
</span>
</td>
<td>{{ \Carbon\Carbon::parse($approval['created_at'])->timezone('Asia/Kuala_Lumpur')->format('d/m/Y h:i A') }}
</td>
<td>
@if ($statusLabel != 'DILULUSKAN')
<!-- Button Lulus -->
<button class="btn btn-success btn-sm me-2"
onclick="updatelulusAnggota(this)"
data-nokp="{{ $approval['nokp'] }}"
data-kodcaw="{{ $k['cawangankod'] }}" data-taglulus="Y"
title="Lulus Anggota">
<i class="fas fa-thumbs-up"></i>
</button>
<!-- Button Tolak -->
<button class="btn btn-danger btn-sm" onclick="updatelulusAnggota(this)"
data-nokp="{{ $approval['nokp'] }}"
data-kodcaw="{{ $k['cawangankod'] }}" data-taglulus="N"
title="Batal / Tolak Kelulusan">
<i class="fas fa-thumbs-down"></i>
</button>
@endif
</td>
</tr>
@endforeach
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<script>
var tablekelulusan = $('#table-kelulusan').DataTable({
"scrollX": true
});
let api = "{{ config('api.url') }}";
const formatter = new Intl.NumberFormat('en-US', {
minimumFractionDigits: 2
});
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;
}
$('#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/customers/' + nokp,
dataType: 'json',
success: function(datagadaiwithnokp) {
let nama = datagadaiwithnokp.nama;
$('#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);
}
});
}
});
});
async function updatelulus(e) {
console.log(e);
return;
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;
}
// 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);
}
});
}
async function updatelulusAnggota(e) {
// 1️⃣ Semak katalaluan semula
const {
value: katalaluan
} = await Swal.fire({
title: 'Masukkan Katalaluan Semula',
input: 'password',
inputPlaceholder: 'Katalaluan',
confirmButtonText: 'Hantar',
showCancelButton: true,
cancelButtonText: 'Batal',
allowOutsideClick: true
});
if (!katalaluan) return;
let sah = true;
await $.ajax({
method: 'get',
url: "{{ route('operasi.getmintasemulakelulusan') }}",
async: false,
data: {
passsemula: katalaluan
},
success: function(data) {
if (data == "False") sah = false;
}
});
if (!sah) {
Swal.fire({
icon: 'error',
title: 'Pengesahan Katalaluan Tidak Berjaya'
});
return false;
}
// 2️⃣ Dapatkan komen kelulusan
const {
value: komenkelulusan
} = await Swal.fire({
title: 'Masukkan Komen Kelulusan',
input: 'text',
inputPlaceholder: 'Contoh: Anggota layak diluluskan',
confirmButtonText: 'Hantar',
showCancelButton: false,
allowOutsideClick: false
});
// 3️⃣ Ambil data daripada butang / row
let nokp = $(e).data('nokp'); // data-nokp perlu ada dalam butang
let kodcaw = $(e).data('kodcaw');
let siri = $(e).data('siri');
let taglulus = $(e).data('taglulus');
let namaoperasi = "{{ Auth::user()->name }}";
// 4️⃣ Hantar ke backend (route khas kelulusan anggota)
$.ajax({
method: 'put',
url: "{{ route('operasi.updatekelulusananggota') }}",
data: {
"_token": "{{ csrf_token() }}",
"nokp": nokp,
"kodcaw": kodcaw,
"siri": siri,
"taglulus": taglulus,
"komenkelulusan": komenkelulusan,
"namaoperasi": namaoperasi
},
success: function(data) {
Swal.fire({
icon: 'success',
title: 'Kelulusan Anggota Berjaya'
}).then(function() {
location.reload();
});
},
error: function(xhr, status, error) {
alert("Ralat: " + 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);
}
});
}
</script>
@endsection
@@ -0,0 +1,64 @@
@extends('layouts.app_operasi')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-12">
<div class="card">
<nav aria-label="breadcrumb">
<ol class="breadcrumb pb-3">
<li class="breadcrumb-item"><a href="{{ url('/') }}">Home</a></li>
<li class="breadcrumb-item"><a href="{{ url('operasi/parameter') }}">Parameter</a></li>
<li class="breadcrumb-item active" aria-current="page">Margin Mutu Emas</li>
</ol>
</nav>
<div class="card-body text-center">
<div class="mt-3">
<table class='table table-striped table-hover' id='table-marginmutu' style="width:100%;">
<thead class="thead-dark">
<tr>
<th>Bil</th>
<th>Karat</th>
<th>Keterangan</th>
<th>Teller (%)</th>
<th>PC (%)</th>
<th>Operasi (%)</th>
<th>Tarikh Update</th>
<th>Tindakan</th>
</tr>
</thead>
<tbody>
@foreach($maxmutuemas as $index=>$mme)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $mme['karat'] }}</td>
<td>{{ $mme['keterangan'] }}</td>
<td>{{ $mme['teller'] }}%</td>
<td>{{ $mme['pc'] }}%</td>
<td>{{ $mme['operasi'] }}%</td>
<td>{{ \Carbon\Carbon::parse($mme['tarikhupdate'])->format('d/m/Y') }}</td>
<td>
<a href="{{ route('operasi.marginmutu.edit') }}?recno={{ $mme['recno'] }}&karat={{ $mme['karat'] }}&keterangan={{ $mme['keterangan'] }}&teller={{ $mme['teller'] }}&pc={{ $mme['pc'] }}&operasi={{ $mme['operasi'] }}"
class="btn btn-sm btn-warning">Edit</a>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
var table_marginmutu = $('#table-marginmutu').DataTable({
"pageLength": 25,
"order": [[ 0, "asc" ]]
});
</script>
@endsection
+1 -1
View File
@@ -16,7 +16,7 @@
<div class="card-body text-center"> <div class="card-body text-center">
<a href="{{ route('operasi.hargaemas') }}" class="btn btn-info btn-lg">Harga Emas</a> <a href="{{ route('operasi.hargaemas') }}" class="btn btn-info btn-lg">Harga Emas</a>
<a href="{{ route('operasi.margin') }}" class="btn btn-info btn-lg">Margin Pembiayaan</a> <a href="{{ route('operasi.margin') }}" class="btn btn-info btn-lg">Margin Pembiayaan</a>
<a href="#" class="btn btn-info btn-lg">Contoh 2</a> <a href="{{ route('operasi.marginmutu') }}" class="btn btn-info btn-lg">Margin Mutu Emas</a>
</div> </div>
</div> </div>
</div> </div>
+176 -4
View File
@@ -131,6 +131,20 @@
</div> </div>
</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" id="infomarhun">
<div class="card-body"> <div class="card-body">
<table id="tablemarhun" class="table table-striped table-hover table-bordered text-center"> <table id="tablemarhun" class="table table-striped table-hover table-bordered text-center">
@@ -1082,6 +1096,28 @@
</div> </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>
<script> <script>
let elem_jenisAT = $('#jenisAT').remove(); let elem_jenisAT = $('#jenisAT').remove();
@@ -1152,6 +1188,7 @@
var percent_mora = 0; var percent_mora = 0;
var pinjaman_teller = 0; var pinjaman_teller = 0;
var pinjaman_pelulus = 0; var pinjaman_pelulus = 0;
var pampasan = @json($pampasan);
@@ -1365,6 +1402,10 @@
} }
}); });
if(pampasan != null){
$('#jumlahupah').val(pampasan.untung);
}
$.ajax({ $.ajax({
method:'GET', method:'GET',
url: api + '/api/upahrebettawarruq/' + kodcaw + '/' + norujukan, url: api + '/api/upahrebettawarruq/' + kodcaw + '/' + norujukan,
@@ -1395,7 +1436,18 @@
dataType: 'json', dataType: 'json',
async:false, async:false,
success:function(harga_tebus){ 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 }}"; 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); $("#terima_transaksi").prop('disabled', true);
// Swal.fire({ // Swal.fire({
// title: 'Memuatkan...', // title: 'Memuatkan...',
@@ -3204,7 +3377,7 @@
/////////// ///////////
} }
//Bayaran Semua function end file
} }
function gadaiautotawarruq() function gadaiautotawarruq()
@@ -4466,7 +4639,6 @@ return true;
}; };
}(jQuery)); }(jQuery));
</script> </script>
@endsection @endsection
@@ -471,23 +471,21 @@
<tr style="font-weight:bold;"> <tr style="font-weight:bold;">
<td colspan="2">Baki</td> <td colspan="2">Baki</td>
<td style="text-align: right;"> <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>
<td style="text-align: right;"> <td style="text-align: right;">
@php $totalpinj1 = $gadpinj1 - $tebpinj1 - $lelpinj1 - $anspinj1 - $hpkpinj1; echo number_format($totalpinj1,2);@endphp @php $totalpinj1 = $gadpinj1 - $tebpinj1 - $lelpinj1 - $anspinj1 - $hpkpinj1; echo number_format($totalpinj1,2);@endphp
</td> </td>
<td style="text-align: right;"> <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>
<td style="text-align: right;"> <td style="text-align: right;">
@php $totalpinj2 = $gadpinj2 - $tebpinj2 - $lelpinj2 - $anspinj2 - $hpkpinj2; echo number_format($totalpinj2,2);@endphp @php $totalpinj2 = $gadpinj2 - $tebpinj2 - $lelpinj2 - $anspinj2 - $hpkpinj2; echo number_format($totalpinj2,2);@endphp
</td> </td>
<td style="text-align: right;"> <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>
<td style="text-align: right;"> <td style="text-align: right;">
@php $totalpinj3 = $gadpinj3 - $tebpinj3 - $lelpinj3 - $anspinj3 - $hpkpinj3; echo number_format($totalpinj3,2);@endphp @php $totalpinj3 = $gadpinj3 - $tebpinj3 - $lelpinj3 - $anspinj3 - $hpkpinj3; echo number_format($totalpinj3,2);@endphp
@@ -201,8 +201,8 @@
@foreach($senaraipelanggan as $index=>$item) @foreach($senaraipelanggan as $index=>$item)
<tr> <tr>
<td>{{ $counter }}</td> <td>{{ $counter }}</td>
<td>{{ !empty($item['kpbaru']) ? $item['kpbaru'] : $item['kplama'] }}</td> <td>{{$item['kpbaru']}}</td>
<td>{{ $item['nama']}}</td> <td>{{$item['nama']}}</td>
</tr> </tr>
@php $counter++;@endphp @php $counter++;@endphp
@@ -440,9 +440,12 @@
<td>{{ number_format($totalnm, 2) }}</td> <td>{{ number_format($totalnm, 2) }}</td>
<td>{{ number_format($totalpinjamanasal, 2) }}</td> <td>{{ number_format($totalpinjamanasal, 2) }}</td>
<td>{{ number_format($totalpinjaman, 2) }}</td> <td>{{ number_format($totalpinjaman, 2) }}</td>
<td>@php$totalkeuntunganrebet = $totalpinjaman + $totalupah - $totalbayaran; <td>
echo number_format($totalkeuntunganrebet, 2); @php
@endphp ?></td> $totalkeuntunganrebet = $totalpinjaman + $totalupah - $totalbayaran;
echo number_format($totalkeuntunganrebet, 2);
@endphp
</td>
<td>{{ number_format($totalujrah, 2) }}</td> <td>{{ number_format($totalujrah, 2) }}</td>
<td>{{ number_format($totalonepercent, 2) }}</td> <td>{{ number_format($totalonepercent, 2) }}</td>
<td>{{ number_format($totalupah, 2) }}</td> <td>{{ number_format($totalupah, 2) }}</td>
@@ -231,7 +231,7 @@
<td> <td>
@php @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/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(); $customer_detail = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/customers/' . $gadaidetail[0][0]['nokp'])->json();
echo $customer_detail['nama']; echo $customer_detail['nama'];
@endphp @endphp
@@ -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>
@@ -625,32 +625,29 @@
<table id="payment" class="{{ sizeof($wakil) != 0 ? 'custom-table-right' : '' }}"> <table id="payment" class="{{ sizeof($wakil) != 0 ? 'custom-table-right' : '' }}">
<tr> <tr>
<td style="width:10px">Baki Pembiayaan</td> <td style="width:10px">Baki Pembiayaan</td>
<td style="width:10px">: <strong>RM {{ number_format($gadai['bakipjm'], 2) }} </td></strong> <td style="width:10px">: RM {{ number_format($gadai['bakipjm'], 2) }} </td>
</tr> </tr>
<tr> <tr>
<td style="width:10px">Keuntungan</td> <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>
<tr> <tr>
<td style="width:10px">(-) Rebat Untung</td> <td style="width:10px">(-) Rebat Untung</td>
<td style="width:10px">: RM <td style="width:10px">: RM
{{ number_format($totalrebate['onepercent'], 2) }} {{ number_format($keuntungan_rebate,2) }}
</td> </td>
</tr> </tr>
<tr> <tr>
<td style="width:10px">Lain-Lain Caj</td> <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>
<tr> <tr>
<td style="width:10px">(-) Rebat Lain-Lain Caj</td> <td style="width:10px">(-) Rebat Lain-Lain Caj</td>
<td style="width:10px">: RM <td style="width:10px">: RM
{{ number_format($totalrebate['ujrah'], 2) }} </td> {{ number_format($ujrah_rebate, 2) }} </td>
</tr> </tr>
<tr> <tr>
<td style="width:10px">Jumlah Keuntungan + Lain-Lain Caj</td> <td></td>
<td style="width:10px">: <strong>RM
{{ number_format($penebusan['onepercent'] + $penebusan['ujrah'], 2) }}</strong>
</td>
</tr> </tr>
<tr> <tr>
<td></td> <td></td>
@@ -858,32 +855,26 @@
<table id="payment" class="{{ sizeof($wakil) != 0 ? 'custom-table-right' : '' }}"> <table id="payment" class="{{ sizeof($wakil) != 0 ? 'custom-table-right' : '' }}">
<tr> <tr>
<td style="width:10px">Baki Pembiayaan</td> <td style="width:10px">Baki Pembiayaan</td>
<td style="width:10px">: <strong>RM {{ number_format($gadai['bakipjm'], 2) }} </strong></td> <td style="width:10px">: RM {{ number_format($gadai['bakipjm'], 2) }} </td>
</tr> </tr>
<tr> <tr>
<td style="width:10px">Keuntungan</td> <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>
<tr> <tr>
<td style="width:10px">(-) Rebat Untung</td> <td style="width:10px">(-) Rebat Untung</td>
<td style="width:10px">: RM <td style="width:10px">: RM
{{ number_format($totalrebate['onepercent'], 2) }} {{ number_format($keuntungan_rebate, 2) }}
</td> </td>
</tr> </tr>
<tr> <tr>
<td style="width:10px">Lain-Lain Caj</td> <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>
<tr> <tr>
<td style="width:10px">(-) Rebat Lain-Lain Caj</td> <td style="width:10px">(-) Rebat Lain-Lain Caj</td>
<td style="width:10px">: RM <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>
<td style="width:10px">: <strong>RM
{{ number_format($penebusan['onepercent'] + $penebusan['ujrah'], 2) }}</strong>
</td>
</tr> </tr>
<tr> <tr>
<td></td> <td></td>
File diff suppressed because it is too large Load Diff
@@ -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>
+12 -14
View File
@@ -10,20 +10,18 @@
}); });
</script> </script>
<style> <style>
.grid-container { .grid-container {
display: grid; display: grid;
grid-template-columns: 45% 25% 30%; grid: 75px / 33% 33% 33%;
align-items: start; padding-top: 10px;
padding-top: 10px; }
}
#header_surat1 {
font-family: Arial, Helvetica, sans-serif;
width: 100%;
font-size: 10px;
padding-right: 10px;
}
#header_surat1 {
font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
font-size: 10px;
}
#header_surat1 p { #header_surat1 p {
margin: 2px; margin: 2px;
@@ -109,7 +107,7 @@
<div class="grid-container" style="margin-bottom: 10px"> <div class="grid-container" style="margin-bottom: 10px">
<div id="header_surat1"> <div id="header_surat1">
<p style="word-break: break-word;">KOPERASI PERMODALAN KELANTAN BERHAD (D-5-0228)</p> <p style="text-wrap:nowrap">KOPERASI PERMODALAN KELANTAN BERHAD (D-5-0228)</p>
<p>{{ $cawangan_detail['namacaw'] }}</p> <p>{{ $cawangan_detail['namacaw'] }}</p>
<p style="text-wrap:nowrap">{{ $cawangan_detail['alamat1'] }}</p> <p style="text-wrap:nowrap">{{ $cawangan_detail['alamat1'] }}</p>
<p>{{ $cawangan_detail['alamat2'] }}</p> <p>{{ $cawangan_detail['alamat2'] }}</p>
+25 -6
View File
@@ -1,5 +1,6 @@
<?php <?php
use App\Http\Controllers\KhazanahController;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use App\Services\ImbangdugaServices; use App\Services\ImbangdugaServices;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
@@ -110,7 +111,10 @@ Route::post('/createwakil',['as'=>'wakil.create','uses'=>'PenebusanController@cr
Route::get('/firstwakil',['as'=>'wakil.first','uses'=>'PenebusanController@getfirstWakil'])->middleware('auth','teller'); Route::get('/firstwakil',['as'=>'wakil.first','uses'=>'PenebusanController@getfirstWakil'])->middleware('auth','teller');
Route::get('/history',['as'=>'gadai.history','uses'=>'GadaianController@history'])->middleware('auth','teller'); Route::get('/history',['as'=>'gadai.history','uses'=>'GadaianController@history'])->middleware('auth','teller');
Route::get('/history/khazanah',['as'=>'gadai.history.khazanah','uses'=>'GadaianController@history'])->middleware('auth','khazanah'); 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 //Kemaskini Upah
Route::get('/kemaskiniupah',['as'=>'kemaskini.upah','uses'=>'AliranTunaiController@kemaskiniupah'])->middleware('auth','teller'); Route::get('/kemaskiniupah',['as'=>'kemaskini.upah','uses'=>'AliranTunaiController@kemaskiniupah'])->middleware('auth','teller');
@@ -204,8 +208,6 @@ Route::post('/deletependahuluanserahan',['as'=>'khazanah.deletependser','uses'=>
//Ubah dan Hapus //Ubah dan Hapus
Route::get('/getkelulu',['as'=>'teller.getkelulusan','uses'=>'GadaianController@getkelulusan'])->middleware('auth','teller'); Route::get('/getkelulu',['as'=>'teller.getkelulusan','uses'=>'GadaianController@getkelulusan'])->middleware('auth','teller');
Route::post('/createkelulu',['as'=>'teller.createkelulusan','uses'=>'GadaianController@createkelulusan'])->middleware('auth'); Route::post('/createkelulu',['as'=>'teller.createkelulusan','uses'=>'GadaianController@createkelulusan'])->middleware('auth');
Route::post('/createkeluluanggota',['as'=>'teller.createkelulusan-anggota','uses'=>'GadaianController@createkelulusanAnggota'])->middleware('auth');
Route::put('/updatekelulu',['as'=>'teller.updatekelulusan','uses'=>'GadaianController@updatekelulusan'])->middleware('auth','khazanah'); Route::put('/updatekelulu',['as'=>'teller.updatekelulusan','uses'=>'GadaianController@updatekelulusan'])->middleware('auth','khazanah');
@@ -337,12 +339,10 @@ Route::post('/barcodescanned',['as'=>'barcode.scanned','uses'=>'KhazanahControll
//Operasi //Operasi
Route::get('/operasi/kelulusan','OperasiController@kelulusan')->name('operasi.kelulusan')->middleware('auth','operasi'); 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',['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::post('/operasi/createkelulusan-by-khazanah',['as'=>'operasi.createkelulusan-by-khazanah','uses'=>'OperasiController@createkelulusanByKhazanah'])->middleware('auth', 'khazanah');
Route::get('/operasi/getkelulusan',['as'=>'operasi.getkelulusan','uses'=>'OperasiController@getkelulusan'])->middleware('auth','teller'); Route::get('/operasi/getkelulusan',['as'=>'operasi.getkelulusan','uses'=>'OperasiController@getkelulusan'])->middleware('auth','teller');
Route::put('/operasi/updatekelulusan',['as'=>'operasi.updatekelulusan','uses'=>'OperasiController@updatekelulusan'])->middleware('auth','operasi'); Route::put('/operasi/updatekelulusan',['as'=>'operasi.updatekelulusan','uses'=>'OperasiController@updatekelulusan'])->middleware('auth','operasi');
Route::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/parameter','OperasiController@parameter')->name('parameter')->middleware('auth','operasi');
Route::get('/operasi/hargaemas',['as'=>'operasi.hargaemas','uses'=>'OperasiController@hargaemas'])->middleware('auth','operasi'); Route::get('/operasi/hargaemas',['as'=>'operasi.hargaemas','uses'=>'OperasiController@hargaemas'])->middleware('auth','operasi');
Route::post('/operasi/hargaemas/update',['as'=>'hargaemas.update','uses'=>'OperasiController@updatehargaemas'])->middleware('auth','operasi'); Route::post('/operasi/hargaemas/update',['as'=>'hargaemas.update','uses'=>'OperasiController@updatehargaemas'])->middleware('auth','operasi');
@@ -360,6 +360,8 @@ Route::post('operasi/kakitangan/edit/store',['as'=>'operasi.kakitangan.edit.stor
Route::get('/operasi/margin',['as'=>'operasi.margin','uses'=>'OperasiController@margin'])->middleware('auth','operasi'); Route::get('/operasi/margin',['as'=>'operasi.margin','uses'=>'OperasiController@margin'])->middleware('auth','operasi');
Route::get('/operasi/marginmutu',['as'=>'operasi.marginmutu','uses'=>'OperasiController@marginmutu'])->middleware('auth','operasi');
Route::get('/operasi/marginmutu/edit',['as'=>'operasi.marginmutu.edit','uses'=>'OperasiController@editMarginMutu'])->middleware('auth','operasi');
Route::get('/komoditi',['as'=>'komuditi','uses'=>'KomuditiController@index']); Route::get('/komoditi',['as'=>'komuditi','uses'=>'KomuditiController@index']);
Route::get('/komoditi/rekod',['as'=>'rekod.komoditi','uses'=>'KomuditiController@rekodKomoditi']); Route::get('/komoditi/rekod',['as'=>'rekod.komoditi','uses'=>'KomuditiController@rekodKomoditi']);
@@ -498,3 +500,20 @@ Route::get('/event/tellercash',['as'=>'event.tellercash','uses'=>'EventTriggerCo
Route::get('/perubatan',['as'=>'perubatan','uses'=>'PerubatanController@index'])->middleware('auth','operasi'); 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::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'); 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');