24 Commits

Author SHA1 Message Date
nurafrinaalimi16 7175d0dbcf sag new version - syariah formatted 2026-05-24 16:40:39 +08:00
nurafrinaalimi16 15575dc8c0 fix no passport on laporan senarai pelanggan baru 2026-05-13 15:15:17 +08:00
nurafrinaalimi16 03a0142066 fix overlap logo with address on surat wakil 2026-02-19 11:12:41 +08:00
nurafrinaalimi16 5e7fe8c3ab disable logs for kadar anggota 2025-12-14 10:30:08 +08:00
nurafrinaalimi16 358baf3453 fix nota marhun 2025-12-10 16:11:17 +08:00
nurafrinaalimi16 7eebd79397 fix format sag upon bos request 2025-12-09 12:02:11 +08:00
nurafrinaalimi16 f7dd2fae7b update resit tebus as per bos request 2025-11-24 10:48:08 +08:00
nurafrinaalimi16 b8cc3f38cc fix komen pusher 2025-11-17 15:50:12 +08:00
nurafrinaalimi16 c06e33bc1c fix kplama for gadaian kadar anggota 2025-11-16 23:52:14 +08:00
nurafrinaalimi16 b95f68bd3f hide button lulus if operasi approved 2025-11-15 22:46:54 +08:00
nurafrinaalimi16 c989197e76 add margin on salinan pejabat sag 2025-11-15 22:38:39 +08:00
nurafrinaalimi16 e3424e9161 edit kadar ujrah table for anggota on SAG 2025-11-15 20:23:51 +08:00
nurafrinaalimi16 da06ff709c tambah margin and remove arrahn careline on sag 2025-11-12 21:32:58 +08:00
nurafrinaalimi16 d6b4685f54 add status approval anggota for operasi 2025-11-11 22:38:02 +08:00
nurafrinaalimi16 173ce892b9 add column nama at operasi approval 2025-11-11 12:07:24 +08:00
nurafrinaalimi16 6af434360d fix bug endpoint 2025-11-11 00:20:59 +08:00
nurafrinaalimi16 aaf784ad79 fix button only for X0301 2025-11-10 23:58:46 +08:00
nurafrinaalimi16 3456059db4 fix button assign anggota 2025-11-10 23:46:10 +08:00
nurafrinaalimi16 cd9f83e21f enable i/duga biasa 2025-11-10 23:30:36 +08:00
nurafrinaalimi16 1e174a48b6 enable route panjar 2025-11-10 23:20:12 +08:00
nurafrinaalimi16 80b8fd3a24 enable panjar for kopkb 2025-11-10 23:18:16 +08:00
nurafrinaalimi16 71990e7582 update new format sag from syariah 2025-11-10 18:47:48 +08:00
nurafrinaalimi16 31dc30ed60 update all blade views for kadar anggota koperasi 2025-11-10 18:46:37 +08:00
nurafrinaalimi16 bb8bcae8e8 update all controller frontend for kadar anggota koperasi 2025-11-10 18:41:42 +08:00
21 changed files with 5516 additions and 3401 deletions
+46
View File
@@ -0,0 +1,46 @@
<?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,
];
}
}
+266 -41
View File
@@ -14,6 +14,7 @@ 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;
@@ -24,7 +25,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.
@@ -46,76 +47,233 @@ class CustomersController extends Controller
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();
$customer_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/customers/'. Session::get('noic'))->json(); // 🔹 Panggil maklumat cawangan
// dd($customer_info); $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])
$pekerjaan = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/pekerjaan')->json(); ->get($api_url . '/api/cawangan/' . $auth_user['cawangan'])
->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'];
$bakilelong = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/bakilelong/cawangan/' . $auth_user['cawangan'] . '/' . Session::get('noic') . '/baki')->json(); // 🔹 Panggil baki lelong
$rugilelong = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/bakilelong/cawangan/' . $auth_user['cawangan'] . '/' . Session::get('noic') . '/rugi')->json(); $bakilelong = Http::withOptions(['verify' => config('app.api_verify')])
->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') ? 'customers.v1.info' : 'customers.v2.info'; $customer_page = ($cawangan_info['version'] == 'v1')
? 'customers.v1.info'
: 'customers.v2.info';
$getApprovalError = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/getApproval',[ // Logik papar butang "Assign sebagai Anggota"
$showAssignAnggotaBtn = false;
$noic = Session::get('noic');
if (!empty($customer_info)) {
$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'], 'kodcaw' => $auth_user['cawangan'],
'teller' => $auth_user['name'], 'teller' => $auth_user['name'],
])->json(); ])
->json();
if ($request->tebus_auto_tawarruq_berjaya === 'true') { 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('cawangan_info','api_url','customer_info','bakilelong','rugilelong','min_komoditi','pekerjaan','getApprovalError')); return view($customer_page, compact(
'cawangan_info',
'api_url',
'customer_info',
'bakilelong',
'rugilelong',
'min_komoditi',
'pekerjaan',
'getApprovalError',
'showAssignAnggotaBtn'
));
} }
public function search(Request $request){
// dd($request->all()); public function search(Request $request)
{
$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();
$blacklist = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/customer/blacklist',[ // Dapatkan maklumat asas
'nokp' => $noic $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])
])->json(); ->get($api_url . '/api/cawangan/' . $auth_user['cawangan'])
// if($customers_info){ ->json();
// $customer_info = $customers_info[0];
// }else{ $bank = Http::withOptions(['verify' => config('app.api_verify')])
// $customer_info = $customers_info; ->get($api_url . '/api/bank')
// } ->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;
// SEMAK STATUS ANGGOTA DAN PELANGGAN
$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) { if ($customer_info) {
// Ada maklumat pelanggan
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')); return view('customers.' . $cawangan_info['version'] . '.index', compact(
'blacklist_search',
'customer_info',
'search',
'noic',
'cawangan_info',
'bank',
'api_url',
'idtype',
'isAnggota',
'isPelanggan',
'isNewCustomer',
'showAssignAnggotaBtn',
'showDaftarPelangganBtn',
'auth_user'
));
} else { } else {
// Simpan dalam session & redirect ke paparan info pelanggan
Session::put('customer_info', $customer_info); Session::put('customer_info', $customer_info);
return redirect()->route('customer_info')->with( ['customer_info' => $customer_info,'cawangan_info'=>$cawangan_info,'api_url'=>$api_url]); 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'
));
} }
} }
@@ -180,8 +338,7 @@ class CustomersController extends Controller
if ($latest_customer == null) { if ($latest_customer == null) {
$nosiri_latest = 1; $nosiri_latest = 1;
} } else {
else{
$nosiri_latest = $latest_customer['nosiri'] + 1; $nosiri_latest = $latest_customer['nosiri'] + 1;
} }
@@ -199,7 +356,6 @@ class CustomersController extends Controller
'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'], [
@@ -238,7 +394,8 @@ class CustomersController extends Controller
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();
@@ -253,13 +410,68 @@ class CustomersController extends Controller
$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","B","C","D","E","F","G","H","J","K","L","M", "A",
"N","P","Q","R","S","T","U","V","W","X","Y","Z", "B",
"a","b","c","d","e","f","g","h","i","j","k","m", "C",
"n","o","p","q","r","s","t","u","v","w","x","y","z", "D",
"1","2","3","4","5","6","7","8","9"); "E",
"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));
@@ -349,4 +561,17 @@ class CustomersController extends Controller
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.');
}
}
} }
+128 -52
View File
@@ -18,6 +18,8 @@ use Carbon\Carbon;
use App\Http\Controllers\AliranTunaiController; use App\Http\Controllers\AliranTunaiController;
use App\User; use App\User;
use Illuminate\Support\Facades\Log;
class GadaianController extends Controller class GadaianController extends Controller
{ {
public $AliranTunaiController; public $AliranTunaiController;
@@ -26,11 +28,12 @@ class GadaianController extends Controller
public function __construct() public function __construct()
{ {
$this->middleware('auth'); $this->middleware('auth');
$this->customerService = New CustomerService(); $this->customerService = new CustomerService();
$this->AliranTunaiController = New AliranTunaiController(); $this->AliranTunaiController = new AliranTunaiController();
} }
public function index(Request $request){ public function index(Request $request)
{
$api_url = config('api.url'); $api_url = config('api.url');
$current = Carbon::now(); $current = Carbon::now();
@@ -95,7 +98,8 @@ class GadaianController extends Controller
return view('gadaian.' . $cawangan_info['version'] . '.index', compact('customer_info', 'limit_pinjaman_semasa', 'cawangan_info', 'norujukan', 'api_url', 'current')); return view('gadaian.' . $cawangan_info['version'] . '.index', compact('customer_info', 'limit_pinjaman_semasa', 'cawangan_info', 'norujukan', 'api_url', 'current'));
} }
public function edit(Request $request,$norujukan){ public function edit(Request $request, $norujukan)
{
$api_url = config('api.url'); $api_url = config('api.url');
$current = Carbon::now(); $current = Carbon::now();
@@ -122,7 +126,8 @@ class GadaianController extends Controller
return view('gadaian.' . $cawangan_info['version'] . '.edit', compact('customer_info', 'gadaiannorujukan', 'limit_pinjaman_semasa', 'cawangan_info', 'norujukan', 'api_url')); return view('gadaian.' . $cawangan_info['version'] . '.edit', compact('customer_info', 'gadaiannorujukan', 'limit_pinjaman_semasa', 'cawangan_info', 'norujukan', 'api_url'));
} }
public function editmarhun(Request $request){ public function editmarhun(Request $request)
{
$api_url = config('api.url'); $api_url = config('api.url');
@@ -135,7 +140,8 @@ class GadaianController extends Controller
return $gadaiannorujukan; return $gadaiannorujukan;
} }
public function ubahmarhun(Request $request){ public function ubahmarhun(Request $request)
{
$api_url = config('api.url'); $api_url = config('api.url');
@@ -153,10 +159,14 @@ class GadaianController extends Controller
return redirect()->back(); return redirect()->back();
} }
public function store(Request $request){ public function store(Request $request)
{
$auth_user = Auth::user(); $auth_user = Auth::user();
//$total_nilai_marhun = $request->total_nilai_marhun; //$total_nilai_marhun = $request->total_nilai_marhun;
//need to get total nilai marhun by api get from table marhun //need to get total nilai marhun by api get from table marhun
//Log::info('[DEBUG-GADAI] Request Input Data', $request->all());
$marhun = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/marhun/gadai/' . $auth_user['cawangan'] . '/' . $request->norujukan_gadai)->json(); $marhun = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/marhun/gadai/' . $auth_user['cawangan'] . '/' . $request->norujukan_gadai)->json();
$total_nilai_marhun = $marhun; $total_nilai_marhun = $marhun;
$total_nilai_marhun = str_replace(',', '', $total_nilai_marhun); $total_nilai_marhun = str_replace(',', '', $total_nilai_marhun);
@@ -171,6 +181,7 @@ class GadaianController extends Controller
$keuntungan12bulan = $keuntungan_sebln * 12; $keuntungan12bulan = $keuntungan_sebln * 12;
$hargajualan = $request->pinjaman + $keuntungan12bulan; $hargajualan = $request->pinjaman + $keuntungan12bulan;
//Log::info('DEBUG NOKP:' . $request->nokp);
$gadai = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/gadai/norujukan/' . $auth_user['cawangan'] . '/' . $request->norujukan_gadai, [ $gadai = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/gadai/norujukan/' . $auth_user['cawangan'] . '/' . $request->norujukan_gadai, [
'kodcaw' => $auth_user['cawangan'], 'kodcaw' => $auth_user['cawangan'],
'nilaimarhun' => round($total_nilai_marhun, 2), 'nilaimarhun' => round($total_nilai_marhun, 2),
@@ -189,6 +200,7 @@ class GadaianController extends Controller
'ujrah' => $ujrah, 'ujrah' => $ujrah,
'onepercent' => $onepercent, 'onepercent' => $onepercent,
'margin_semasa' => $margin_pinjaman, 'margin_semasa' => $margin_pinjaman,
'nokp' => $request->nokp,
])->json(); ])->json();
@@ -210,7 +222,8 @@ class GadaianController extends Controller
return redirect()->route('customer_info'); return redirect()->route('customer_info');
} }
public function editstore(Request $request){ public function editstore(Request $request)
{
$auth_user = Auth::user(); $auth_user = Auth::user();
$total_nilai_marhun = $request->total_nilai_marhun; $total_nilai_marhun = $request->total_nilai_marhun;
@@ -257,7 +270,8 @@ class GadaianController extends Controller
return redirect()->route('customer_info'); return redirect()->route('customer_info');
} }
public function batal(Request $request){ public function batal(Request $request)
{
$norujukan = $request->norujukan; $norujukan = $request->norujukan;
$auth_user = Auth::user(); $auth_user = Auth::user();
@@ -267,7 +281,8 @@ class GadaianController extends Controller
return redirect()->route('customer_info'); return redirect()->route('customer_info');
} }
public function batalmarhun(Request $request){ public function batalmarhun(Request $request)
{
$norujukan = $request->norujukan; $norujukan = $request->norujukan;
$auth_user = Auth::user(); $auth_user = Auth::user();
@@ -278,7 +293,8 @@ class GadaianController extends Controller
// return redirect()->route('customer_info'); // return redirect()->route('customer_info');
} }
public function cetakSAG(Request $request){ public function cetakSAG(Request $request)
{
$auth_user = Auth::user(); $auth_user = Auth::user();
$gadai = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/gadai/norujukan/cetak/' . $auth_user['cawangan'] . '/' . $request->norujukan_modal); $gadai = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/gadai/norujukan/cetak/' . $auth_user['cawangan'] . '/' . $request->norujukan_modal);
@@ -286,7 +302,8 @@ class GadaianController extends Controller
return redirect()->route('home'); return redirect()->route('home');
} }
public function serahMarhun(Request $request){ public function serahMarhun(Request $request)
{
$auth_user = Auth::user(); $auth_user = Auth::user();
$norujukan_serah = $request->norujukanpilih; $norujukan_serah = $request->norujukanpilih;
@@ -310,7 +327,8 @@ class GadaianController extends Controller
return redirect()->route('home'); return redirect()->route('home');
} }
public function printSAG(Request $request){ public function printSAG(Request $request)
{
$norujukan = $request->norujukan_modal; $norujukan = $request->norujukan_modal;
$auth_user = Auth::user(); $auth_user = Auth::user();
$auth_username = $auth_user['name']; $auth_username = $auth_user['name'];
@@ -320,13 +338,11 @@ class GadaianController extends Controller
$gadai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/gadai/norujukan/' . $auth_user['cawangan'] . '/' . $norujukan)->json(); $gadai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/gadai/norujukan/' . $auth_user['cawangan'] . '/' . $norujukan)->json();
$gadai_detail = $gadai[0]; $gadai_detail = $gadai[0];
if(isset($request->jenisprint)) if (isset($request->jenisprint)) {
{
$cetak_sag = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/gadai/norujukan/cetak/' . $auth_user['cawangan'] . '/' . $norujukan, [ $cetak_sag = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/gadai/norujukan/cetak/' . $auth_user['cawangan'] . '/' . $norujukan, [
'penilai' => $auth_user['name'] 'penilai' => $auth_user['name']
]); ]);
} }
$kakitangan = User::where([['role_harian', 'khazanah'], ['cawangan', $kodcaw]])->first(); $kakitangan = User::where([['role_harian', 'khazanah'], ['cawangan', $kodcaw]])->first();
@@ -484,8 +500,7 @@ class GadaianController extends Controller
$transaction = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/transaction/' . $id)->json(); $transaction = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/transaction/' . $id)->json();
foreach($transaction as $trans) foreach ($transaction as $trans) {
{
$totaltransaction += $trans['duit_masuk']; $totaltransaction += $trans['duit_masuk'];
} }
@@ -528,8 +543,7 @@ class GadaianController extends Controller
$transaction = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/transaction/' . $id)->json(); $transaction = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/transaction/' . $id)->json();
foreach($transaction as $trans) foreach ($transaction as $trans) {
{
$totaltransaction += $trans['duit_masuk']; $totaltransaction += $trans['duit_masuk'];
} }
@@ -577,8 +591,7 @@ class GadaianController extends Controller
$transaction_tebus = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/transaction/one/' . $id)->json(); $transaction_tebus = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/transaction/one/' . $id)->json();
foreach($transaction as $trans) foreach ($transaction as $trans) {
{
$totaltransaction += $trans['duit_masuk']; $totaltransaction += $trans['duit_masuk'];
} }
@@ -643,15 +656,12 @@ class GadaianController extends Controller
// dd($penebusan['nowakil']); // dd($penebusan['nowakil']);
if($penebusan['nowakil'] != 0) if ($penebusan['nowakil'] != 0) {
{
$wakil = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/getwakil/' . $auth_user['cawangan'] . '/code/' . $penebusan['nowakil'])->json(); $wakil = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/getwakil/' . $auth_user['cawangan'] . '/code/' . $penebusan['nowakil'])->json();
if (sizeof($wakil) != 0) if (sizeof($wakil) != 0)
$wakil = $wakil[0]; $wakil = $wakil[0];
} } else {
else
{
$wakil = []; $wakil = [];
} }
@@ -682,9 +692,7 @@ class GadaianController extends Controller
if (sizeof($wakil) != 0) { if (sizeof($wakil) != 0) {
$wakil = $wakil[0]; $wakil = $wakil[0];
} }
} } else {
else
{
$wakil = []; $wakil = [];
} }
@@ -720,17 +728,14 @@ class GadaianController extends Controller
// dd($penebusan['nowakil']); // dd($penebusan['nowakil']);
$surat_wakil = []; $surat_wakil = [];
if($penebusan['nowakil'] != 0) if ($penebusan['nowakil'] != 0) {
{
$wakil = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/getwakil/' . $auth_user['cawangan'] . '/code/' . $penebusan['nowakil'])->json(); $wakil = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/getwakil/' . $auth_user['cawangan'] . '/code/' . $penebusan['nowakil'])->json();
if (sizeof($wakil) != 0) { if (sizeof($wakil) != 0) {
$wakil = $wakil[0]; $wakil = $wakil[0];
$surat_wakil = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/getsuratwakil/' . $auth_user['cawangan'] . '/' . $id)->json(); $surat_wakil = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/getsuratwakil/' . $auth_user['cawangan'] . '/' . $id)->json();
} }
} } else {
else
{
$wakil = []; $wakil = [];
} }
@@ -747,28 +752,23 @@ class GadaianController extends Controller
$gadai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/gadai/norujukan/' . $request->norujukan)->json(); $gadai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/gadai/norujukan/' . $request->norujukan)->json();
if(sizeof($gadai) > 0) if (sizeof($gadai) > 0) {
{
$history = $gadai[0][0]['historygadaian']; $history = $gadai[0][0]['historygadaian'];
$dahtebus = $gadai[0][0]['sttebus']; $dahtebus = $gadai[0][0]['sttebus'];
$norujukan = $gadai[0][0]['norujukan']; $norujukan = $gadai[0][0]['norujukan'];
} }
$count = 0; $count = 0;
$arrayhist = []; $arrayhist = [];
while($history != "0" && $history != '' || $dahtebus == 'T') while ($history != "0" && $history != '' || $dahtebus == 'T') {
{ if ($history != "0" && $history != '') {
if($history != "0" && $history != '')
{
$gadai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/gadai/norujukan/' . $history)->json(); $gadai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/gadai/norujukan/' . $history)->json();
$tebus = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/listpenebusanhistory/' . $auth_user['cawangan'], [ $tebus = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/listpenebusanhistory/' . $auth_user['cawangan'], [
"norujukan" => $history "norujukan" => $history
])->json(); ])->json();
if(sizeof($gadai) > 0) if (sizeof($gadai) > 0) {
{
if ($history == $gadai[0][0]['historygadaian']) if ($history == $gadai[0][0]['historygadaian'])
$history = 0; $history = 0;
else { else {
@@ -778,9 +778,7 @@ class GadaianController extends Controller
} }
$count++; $count++;
} else {
}
else{
$gadai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/gadai/norujukan/' . $norujukan)->json(); $gadai = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/gadai/norujukan/' . $norujukan)->json();
$tebus = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/listpenebusanhistory/' . $auth_user['cawangan'], [ $tebus = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/listpenebusanhistory/' . $auth_user['cawangan'], [
"norujukan" => $norujukan "norujukan" => $norujukan
@@ -810,12 +808,9 @@ class GadaianController extends Controller
"norujukan" => $norujukan "norujukan" => $norujukan
])->json(); ])->json();
if(sizeof($kelulusan) > 0) if (sizeof($kelulusan) > 0) {
{
$kelulusan = $kelulusan['benar']; $kelulusan = $kelulusan['benar'];
} } else {
else
{
$kelulusan = ''; $kelulusan = '';
} }
@@ -869,6 +864,87 @@ class GadaianController extends Controller
return response()->json($createlulus, 201); return response()->json($createlulus, 201);
} }
public function createkelulusanAnggota(Request $request)
{
$auth_user = Auth::user();
$api_url = config('api.url');
$verify_ssl = config('app.api_verify');
// 🔸 Validasi asas
$request->validate([
'norujukan' => 'required|string',
'noic' => 'required|string',
'komen' => 'required|string',
'teller' => 'required|string',
]);
$norujukan = $request->norujukan;
$current = Carbon::now();
// 1️⃣ Dapatkan info cawangan
$cawangan_info = Http::withOptions(['verify' => $verify_ssl])
->get("{$api_url}/api/cawangan/{$auth_user->cawangan}")
->json();
if (empty($cawangan_info)) {
return response()->json(['message' => 'Maklumat cawangan tidak ditemui.'], 404);
}
// 2️⃣ Dapatkan siri terkini (supaya sistem tahu kelulusan ke berapa)
$getsiri = Http::withOptions(['verify' => $verify_ssl])
->get("{$api_url}/api/ListLatestLulus/{$auth_user->cawangan}/{$norujukan}")
->json();
$siri = isset($getsiri['siri']) ? ((int) $getsiri['siri'] + 1) : 1;
$createlulus = Http::withOptions(['verify' => config('app.api_verify')])->post(config('api.url') . '/api/CreateLulus/' . $auth_user['cawangan'] . '/' . $norujukan, [
'mohon' => $request->mohon,
'teller' => $auth_user['name'],
'komen' => $request->komen,
'status' => $request->status,
'ansuran' => $request->ansuran,
'tagoperasi' => ($request->tagoperasi) ? $request->tagoperasi : 0,
])->json();
// 3️⃣ Hantar permohonan ke API utama
$payload = [
'komen' => $request->komen,
'dategadai' => $current->toDateString(),
'bilgadai' => 1,
'siri' => $siri,
'status' => 'TUNGGU KELULUSAN OPERASI',
'teller' => $request->teller,
'peloperasi' => 'operasi',
'mohon' => 'Assign Anggota',
'noic' => $request->noic,
'jenistebus' => 'A', // “A” = anggota
'tagoperasi' => 1, // 1 = tunggu kelulusan operasi
];
$createLulus = Http::withOptions(['verify' => $verify_ssl])
->post("{$api_url}/api/CreateKelulusanAnggota/{$auth_user->cawangan}/{$norujukan}/roles/operasi", $payload)
->json();
// 4️⃣ Jika API gagal
if (isset($createLulus['error']) || !$createLulus) {
return response()->json([
'message' => 'Gagal menghantar permohonan kelulusan operasi.',
'error' => $createLulus['error'] ?? $createLulus
], 500);
}
// 5️⃣ Trigger event untuk notifikasi operasi
event(new StatusLiked($auth_user->cawangan, $auth_user->name));
// 6️⃣ Hantar respon berjaya
return response()->json([
'message' => 'Permohonan kelulusan operasi (Assign Anggota) berjaya dihantar.',
'siri' => $siri,
'api_response' => $createLulus,
], 201);
}
///END KELULUSAN/// ///END KELULUSAN///
} }
+4 -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'));
} }
+169 -36
View File
@@ -7,6 +7,7 @@ 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;
@@ -25,7 +26,8 @@ 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();
@@ -35,15 +37,12 @@ class OperasiController extends Controller
$arraykelulusan = []; $arraykelulusan = [];
foreach($kelulusan as $index=>$lulus) foreach ($kelulusan as $index => $lulus) {
{ foreach ($lulus['kelulusanall'] as $index => $kel) {
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']]); 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'] ?? '-')]);
} }
} }
@@ -63,12 +62,9 @@ class OperasiController extends Controller
$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 = '';
} }
@@ -84,8 +80,7 @@ class OperasiController extends Controller
$norujukan = $request->norujukan; $norujukan = $request->norujukan;
if($request->pembatalan == null) if ($request->pembatalan == null) {
{
if (!$request->taglulus) { if (!$request->taglulus) {
$updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusanKomen/' . $request->kodcaw . '/' . $norujukan, [ $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusanKomen/' . $request->kodcaw . '/' . $norujukan, [
"komen" => $request->komenkelulusan, "komen" => $request->komenkelulusan,
@@ -108,13 +103,10 @@ 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 {
else
{
if (!$request->taglulus) { if (!$request->taglulus) {
$updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusanKomen/' . $request->kodcaw . '/' . $norujukan, [ $updatelulus = Http::withOptions(['verify' => config('app.api_verify')])->put(config('api.url') . '/api/UpdateKelulusanKomen/' . $request->kodcaw . '/' . $norujukan, [
"komen" => $request->komenkelulusan, "komen" => $request->komenkelulusan,
@@ -136,8 +128,7 @@ 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));
} }
} }
@@ -148,6 +139,89 @@ class OperasiController extends Controller
return response()->json($updatelulus, 200); return response()->json($updatelulus, 200);
} }
public function updatekelulusananggota(Request $request)
{
$auth_user = Auth::user();
$api_url = config('api.url');
// Data asas
$nokp = $request->nokp;
$kodcaw = $request->kodcaw;
$komen = $request->komenkelulusan;
$namaoperasi = $request->namaoperasi;
$taglulus = $request->taglulus; // contoh: 'Y' = lulus, 'N' = batal
// 1️⃣ Tentukan status kelulusan
$status = ($taglulus == 'Y') ? 1 : 2; // 1 = Lulus, 2 = Batal/Tolak
try {
// 2️⃣ Panggil API baru — ikut route baru dengan {kodcaw}
$endpoint = $api_url . '/api/UpdateKelulusanAnggota/' . $kodcaw;
$payload = [
'nokp' => $nokp,
'komenkelulusan' => $komen,
'namaoperasi' => $namaoperasi,
'sahkan' => $status
];
Log::info('Menghantar permintaan ke API UpdateKelulusanAnggota', [
'endpoint' => $endpoint,
'payload' => $payload
]);
$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);
}
}
public function createkelulusan(Request $request) public function createkelulusan(Request $request)
{ {
$auth_user = Auth::user(); $auth_user = Auth::user();
@@ -162,8 +236,7 @@ class OperasiController extends Controller
$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;
@@ -190,18 +263,70 @@ class OperasiController extends Controller
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()
@@ -223,7 +348,8 @@ class OperasiController extends Controller
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();
@@ -243,10 +369,8 @@ 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) {
foreach($k['kelulusanall'] as $index1=>$kel)
{
$komen = explode("|", $kel['komen']); $komen = explode("|", $kel['komen']);
$results = array_search("", $komen, true); $results = array_search("", $komen, true);
@@ -255,12 +379,10 @@ class OperasiController extends Controller
} }
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()
@@ -268,4 +390,15 @@ class OperasiController extends Controller
$auth_user = Auth::user(); $auth_user = Auth::user();
event(new KomoditiNotify('lulus', $auth_user['cawangan'])); event(new KomoditiNotify('lulus', $auth_user['cawangan']));
} }
public function kelulusananggota(Request $request)
{
$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();
$arraykelulusan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/list/approval/anggota')->json();
return view('operasi.kelulusan_anggota', compact('cawangan_info', 'api_url', 'arraykelulusan'));
}
} }
+24
View File
@@ -0,0 +1,24 @@
<?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.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

+65 -17
View File
@@ -72,11 +72,26 @@
</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 --}}
@if(isset($showDaftarPelangganBtn) && $showDaftarPelangganBtn)
<button type="button" style="margin:auto" class="btn btn-success" onclick="newcustomer()">
Daftar Pelanggan Daftar Pelanggan
</button> </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> </div>
@endif @endif
</div> </div>
</div> </div>
<!-- Modal No KP --> <!-- Modal No KP -->
@@ -478,42 +493,75 @@
</div> </div>
</div> </div>
</div> </div>
<script> <script>
var api_url = "<?php echo $api_url ?>"; var api_url = @json($api_url ?? '');
var search = "<?php echo $search ?>"; var search = @json($search ?? false);
var type_id = "<?php echo $idtype ?>"; var type_id = @json($idtype ?? '');
var blacklist_search = "<?php echo $blacklist_search ?>"; var isAnggota = @json($isAnggota ?? false);
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();
identifyIC(noic);
if(search == true){ var noic = $('#noic').val();
if(blacklist_search == true){ if (typeof identifyIC === 'function') {
identifyIC(noic);
}
// Debug: Papar semua nilai dalam console
console.log({
search,
blacklist_search,
showAssignAnggotaBtn,
showDaftarPelangganBtn
});
// Logik amaran SweetAlert
if("{{ auth()->user()->cawangan }}" == 'X0301'){
if (search === true) {
if (blacklist_search === true) {
Swal.fire({ Swal.fire({
icon: 'warning', icon: 'warning',
title: 'Amaran!', title: 'Amaran!',
text: 'Pelanggan telah disenarai hitamkan dari Pembiayaan' text: 'Pelanggan telah disenarai hitamkan dari Pembiayaan.'
}); });
event.preventDefault(); }
return false; else if (isAnggota && !isPelanggan) {
}else{ 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({ Swal.fire({
icon: 'info', icon: 'info',
title: 'Pelanggan Tiada Dalam Rekod!', title: 'Pelanggan Tiada Dalam Rekod!',
text: 'Sila Daftar Pelanggan' text: 'Sila Daftar Pelanggan.'
}); });
event.preventDefault();
return false;
} }
}
} }
}); });
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('/');
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -876,7 +876,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 }}",
@@ -187,6 +187,7 @@
<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>
@@ -586,6 +587,7 @@
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
}, },
@@ -625,6 +627,9 @@
$('#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;
@@ -638,6 +643,7 @@
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,
@@ -274,11 +274,9 @@
<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-8"> <div class="col-md-12">
<div class="card"> <div class="card">
<nav aria-label="breadcrumb"> <nav aria-label="breadcrumb">
@@ -14,6 +14,7 @@
</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>
@@ -189,6 +189,10 @@
<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,518 @@
@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
@@ -201,7 +201,7 @@
@foreach($senaraipelanggan as $index=>$item) @foreach($senaraipelanggan as $index=>$item)
<tr> <tr>
<td>{{ $counter }}</td> <td>{{ $counter }}</td>
<td>{{$item['kpbaru']}}</td> <td>{{ !empty($item['kpbaru']) ? $item['kpbaru'] : $item['kplama'] }}</td>
<td>{{ $item['nama']}}</td> <td>{{ $item['nama']}}</td>
</tr> </tr>
@@ -625,7 +625,7 @@
<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">: RM {{ number_format($gadai['bakipjm'], 2) }} </td> <td style="width:10px">: <strong>RM {{ number_format($gadai['bakipjm'], 2) }} </td></strong>
</tr> </tr>
<tr> <tr>
<td style="width:10px">Keuntungan</td> <td style="width:10px">Keuntungan</td>
@@ -647,7 +647,10 @@
{{ number_format($totalrebate['ujrah'], 2) }} </td> {{ number_format($totalrebate['ujrah'], 2) }} </td>
</tr> </tr>
<tr> <tr>
<td></td> <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>
@@ -855,7 +858,7 @@
<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">: RM {{ number_format($gadai['bakipjm'], 2) }} </td> <td style="width:10px">: <strong>RM {{ number_format($gadai['bakipjm'], 2) }} </strong></td>
</tr> </tr>
<tr> <tr>
<td style="width:10px">Keuntungan</td> <td style="width:10px">Keuntungan</td>
@@ -876,6 +879,12 @@
<td style="width:10px">: RM <td style="width:10px">: RM
{{ number_format($totalrebate['ujrah'], 2) }} </td> {{ number_format($totalrebate['ujrah'], 2) }} </td>
</tr> </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>
<td></td> <td></td>
</tr> </tr>
File diff suppressed because it is too large Load Diff
+5 -3
View File
@@ -12,17 +12,19 @@
<style> <style>
.grid-container { .grid-container {
display: grid; display: grid;
grid: 75px / 33% 33% 33%; grid-template-columns: 45% 25% 30%;
align-items: start;
padding-top: 10px; padding-top: 10px;
} }
#header_surat1 { #header_surat1 {
font-family: Arial, Helvetica, sans-serif; font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%; width: 100%;
font-size: 10px; font-size: 10px;
padding-right: 10px;
} }
#header_surat1 p { #header_surat1 p {
margin: 2px; margin: 2px;
} }
@@ -107,7 +109,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="text-wrap:nowrap">KOPERASI PERMODALAN KELANTAN BERHAD (D-5-0228)</p> <p style="word-break: break-word;">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>
+7 -1
View File
@@ -110,6 +110,7 @@ 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');
//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');
@@ -185,7 +186,7 @@ Route::get('/capaian',['as'=>'khazanah.capaian','uses'=>'KhazanahController@capa
Route::get('/alirantunai',['as'=>'khazanah.alirantunai','uses'=>'KhazanahController@alirantunai'])->middleware('auth','khazanah'); Route::get('/alirantunai',['as'=>'khazanah.alirantunai','uses'=>'KhazanahController@alirantunai'])->middleware('auth','khazanah');
Route::get('/pelangganan',['as'=>'khazanah.pelangganan','uses'=>'KhazanahController@pelanggan'])->middleware('auth','khazanah'); Route::get('/pelangganan',['as'=>'khazanah.pelangganan','uses'=>'KhazanahController@pelanggan'])->middleware('auth','khazanah');
Route::get('/bajet',['as'=>'khazanah.bajet','uses'=>'KhazanahController@bajet'])->middleware('auth','khazanah'); Route::get('/bajet',['as'=>'khazanah.bajet','uses'=>'KhazanahController@bajet'])->middleware('auth','khazanah');
//Route::get('/panjar',['as'=>'khazanah.panjar','uses'=>'KhazanahController@panjar'])->middleware('auth','khazanah'); Route::get('/panjar',['as'=>'khazanah.panjar','uses'=>'KhazanahController@panjar'])->middleware('auth','khazanah');
Route::get('/getkelulusan',['as'=>'khazanah.getkelulusan','uses'=>'KhazanahController@getkelulusan'])->middleware('auth','teller'); Route::get('/getkelulusan',['as'=>'khazanah.getkelulusan','uses'=>'KhazanahController@getkelulusan'])->middleware('auth','teller');
Route::post('/createkelulusan',['as'=>'khazanah.createkelulusan','uses'=>'KhazanahController@createkelulusan'])->middleware('auth','teller'); Route::post('/createkelulusan',['as'=>'khazanah.createkelulusan','uses'=>'KhazanahController@createkelulusan'])->middleware('auth','teller');
Route::put('/updatekelulusan',['as'=>'khazanah.updatekelulusan','uses'=>'KhazanahController@updatekelulusan'])->middleware('auth','khazanah'); Route::put('/updatekelulusan',['as'=>'khazanah.updatekelulusan','uses'=>'KhazanahController@updatekelulusan'])->middleware('auth','khazanah');
@@ -203,6 +204,8 @@ 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');
@@ -334,9 +337,12 @@ 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::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');