From 05e0776f6d3ba882769bf839652afb9a037b9458 Mon Sep 17 00:00:00 2001 From: ISMAIL MASSERAN Date: Thu, 24 Sep 2026 11:26:35 +0800 Subject: [PATCH] DONE: update .env for production --- .env.example | 5 +- .env.production | 4 +- README.md | 8 +- app/Http/Controllers/OperasiController.php | 74 ++++-------- app/Services/NotificationService.php | 28 +++++ .../views/operasi/rekodtelahlulus.blade.php | 113 ++++++++++++------ routes/web.php | 1 + 7 files changed, 134 insertions(+), 99 deletions(-) diff --git a/.env.example b/.env.example index 7248b2d3..9fd98981 100644 --- a/.env.example +++ b/.env.example @@ -1,10 +1,10 @@ APP_NAME=Laravel APP_ENV=local +APP_VERSION=v3.3 APP_KEY=base64:FFRogE6mJj8FaDSSHl/KpXpzqi2M+P4plxVSRgVM8JI= APP_DEBUG=true APP_URL=http://localhost API_URL=http://localhost:8000 -API_ARRAHNBID=http://lelong.test/api/ LOG_CHANNEL=stack @@ -47,7 +47,6 @@ MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" MYKAD_READER_PORT=17321 -MYKAD_READER_ENABLED_CAWANGAN='' # IF NO CAWANGAN STATED, ALL CAWANGAN IS ENABLED +MYKAD_READER_ENABLED_CAWANGAN='' -# Shared with api_arrahn so the API can write staff inbox rows INTERNAL_NOTIFICATION_SECRET= diff --git a/.env.production b/.env.production index c2dc2498..d8af1227 100644 --- a/.env.production +++ b/.env.production @@ -47,4 +47,6 @@ MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" MYKAD_READER_PORT=17321 -MYKAD_READER_ENABLED_CAWANGAN='' # IF NO CAWANGAN STATED, ALL CAWANGAN IS ENABLED \ No newline at end of file +MYKAD_READER_ENABLED_CAWANGAN='' + +INTERNAL_NOTIFICATION_SECRET="nIDTe(u@6[)VLJyd" \ No newline at end of file diff --git a/README.md b/README.md index ca86015c..aa55a871 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,7 @@ CREATE USER 'kaunteruser'@'localhost' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON kaunter_erahn.* TO 'kaunteruser'@'%'; FLUSH PRIVILEGES; -``` - -# ADDITIONAL NOTE - -## customers/v2/index.blade.php is modal to register customer - -## Min Komoditi = RM5000 +``` # System Flowchart diff --git a/app/Http/Controllers/OperasiController.php b/app/Http/Controllers/OperasiController.php index 42af1c42..173271c7 100644 --- a/app/Http/Controllers/OperasiController.php +++ b/app/Http/Controllers/OperasiController.php @@ -2,7 +2,6 @@ namespace App\Http\Controllers; - //Events use App\Events\OperasiNotice; use App\Events\StatusLiked; @@ -225,51 +224,19 @@ class OperasiController extends Controller '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.', @@ -278,10 +245,6 @@ class OperasiController extends Controller } } - - - - public function createkelulusan(Request $request) { $auth_user = Auth::user(); @@ -659,26 +622,35 @@ class OperasiController extends Controller $api_url = config('api.url'); $cawangan_info = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/' . $auth_user['cawangan'])->json(); - //declare array baru - $arraykelulusan = []; + $dateTo = Carbon::now()->toDateString(); + $dateFrom = Carbon::now()->subDays(30)->toDateString(); - $kelulusan = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/ListOperasiKelulusan/')->json(); + return view('operasi.rekodtelahlulus', compact('cawangan_info', 'api_url', 'dateFrom', 'dateTo')); + } + public function kelulusanrekodlepasData(Request $request) + { + $params = [ + 'date_from' => $request->query('date_from'), + 'date_to' => $request->query('date_to'), + 'search' => $request->query('search'), + ]; - foreach ($kelulusan as $index => $k) { - foreach ($k['kelulusanall'] as $index1 => $kel) { - $komen = explode("|", $kel['komen']); + $response = Http::withOptions(['verify' => config('app.api_verify')]) + ->get(config('api.url') . '/api/ListOperasiKelulusan/', array_filter($params, function ($value) { + return $value !== null && $value !== ''; + })); - $results = array_search("", $komen, true); - if ($results !== false) { - 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'],]); - } + if (!$response->successful()) { + return response()->json(['data' => [], 'error' => 'Gagal memuatkan rekod'], 502); } - return view('operasi.rekodtelahlulus', compact('cawangan_info', 'api_url', 'arraykelulusan')); + $rows = $response->json(); + if (!is_array($rows)) { + $rows = []; + } + + return response()->json(['data' => $rows]); } public function notifyKomoditi() diff --git a/app/Services/NotificationService.php b/app/Services/NotificationService.php index bb2953f6..0d9747b9 100644 --- a/app/Services/NotificationService.php +++ b/app/Services/NotificationService.php @@ -14,6 +14,7 @@ class NotificationService const TYPE_PEMBIAYAAN_REJECTED_PC = 'pembiayaan_online.rejected_pc'; const TYPE_PEMBIAYAAN_PAID_PC = 'pembiayaan_online.paid_pc'; const TYPE_GADAI_KELULUSAN = 'gadai.kelulusan'; + const TYPE_ANGGOTA_PENDING_OPERASI = 'anggota.pending_operasi'; const TYPE_ALIRAN_TUNAI_PENDING = 'aliran_tunai.pending_khazanah'; const TYPE_ALIRAN_TUNAI_DECIDED = 'aliran_tunai.decided_teller'; const GADAI_KELULUSAN_MIN = 10000; @@ -366,6 +367,33 @@ class NotificationService ]; } + if ($type === self::TYPE_ANGGOTA_PENDING_OPERASI) { + $nokp = !empty($data['nokp']) ? $data['nokp'] : ''; + $nama = isset($data['nama']) ? trim((string) $data['nama']) : ''; + $teller = isset($data['teller']) ? trim((string) $data['teller']) : ''; + $komen = isset($data['komen']) ? trim((string) $data['komen']) : ''; + $namaCaw = !empty($data['cawangan_nama']) ? $data['cawangan_nama'] : $kodcaw; + $who = $nama !== '' ? $nama : 'pelanggan'; + if ($nokp !== '') { + $who .= ' ('.$nokp.')'; + } + + return [ + 'type' => $type, + 'cawangan' => $kodcaw, + 'title' => 'Permohonan assign anggota', + 'body' => sprintf( + '%s — %s%s%s', + $namaCaw, + $who, + $teller !== '' ? ' — '.$teller : '', + $komen !== '' ? ' — '.$komen : '' + ), + 'url' => '/operasi/kelulusan/anggota', + 'data' => $data, + ]; + } + if ($type === self::TYPE_GADAI_KELULUSAN) { $norujukan = !empty($data['norujukan']) ? $data['norujukan'] : 'gadai'; $amaun = number_format(isset($data['pinjaman']) ? (float) $data['pinjaman'] : 0, 2); diff --git a/resources/views/operasi/rekodtelahlulus.blade.php b/resources/views/operasi/rekodtelahlulus.blade.php index 9cd1a619..d1c7670a 100644 --- a/resources/views/operasi/rekodtelahlulus.blade.php +++ b/resources/views/operasi/rekodtelahlulus.blade.php @@ -13,56 +13,95 @@ -
- -
-
+
+
+
+ +
-
+
+ +
-
+
+
- - - - - - - - - - - - - - - @foreach($arraykelulusan as $index=>$k) - - - - - - - - - - - @endforeach - -
No RujukanStatusKomenNilai PembiayaanNilai MarhunBeratMarginPelulus
{{ $k['norujukan'] }}{{ $k['status'] }}{{ $k['komen'] }}{{ $k['pinjaman'] }}{{ $k['nilaimarhun'] }}{{ $k['berat'] }}{{ $k['margin'] }}{{ $k['pelulus'] }}
- +
@endsection diff --git a/routes/web.php b/routes/web.php index 14dcc76a..fe0ddba8 100644 --- a/routes/web.php +++ b/routes/web.php @@ -176,6 +176,7 @@ Route::get('/khazanahtebus',['as'=>'khazanah.tebus','uses'=>'KhazanahController@ Route::get('/kelulusan','KhazanahController@kelulusan')->middleware('auth','khazanah'); Route::get('/kelulusanrekodlepas',['as'=>'khazanah.rekodlepas','uses'=>'KhazanahController@kelulusanrekodlepas'])->middleware('auth','khazanah'); Route::get('/kelulusanrekodlepasoperasi',['as'=>'operasi.rekodlepas','uses'=>'OperasiController@kelulusanrekodlepas'])->middleware('auth','operasi'); +Route::get('/kelulusanrekodlepasoperasi/data',['as'=>'operasi.rekodlepas.data','uses'=>'OperasiController@kelulusanrekodlepasData'])->middleware('auth','operasi'); Route::get('/pendahuluan',['as'=>'khazanah.pendahulu','uses'=>'KhazanahController@pendahuluan'])->middleware('auth','khazanah'); Route::get('/serahan',['as'=>'khazanah.serahan','uses'=>'KhazanahController@serahan'])->middleware('auth','khazanah'); Route::get('/laporanscanbarcode',['as'=>'laporanscanbarcode','uses'=>'KhazanahController@LaporanSemakBarcode'])->middleware('auth','khazanah');