DONE: update .env for production

This commit is contained in:
ISMAIL MASSERAN
2026-09-24 11:26:35 +08:00
parent 4f90f9969a
commit 05e0776f6d
7 changed files with 134 additions and 99 deletions
+2 -3
View File
@@ -1,10 +1,10 @@
APP_NAME=Laravel APP_NAME=Laravel
APP_ENV=local APP_ENV=local
APP_VERSION=v3.3
APP_KEY=base64:FFRogE6mJj8FaDSSHl/KpXpzqi2M+P4plxVSRgVM8JI= APP_KEY=base64:FFRogE6mJj8FaDSSHl/KpXpzqi2M+P4plxVSRgVM8JI=
APP_DEBUG=true APP_DEBUG=true
APP_URL=http://localhost APP_URL=http://localhost
API_URL=http://localhost:8000 API_URL=http://localhost:8000
API_ARRAHNBID=http://lelong.test/api/
LOG_CHANNEL=stack LOG_CHANNEL=stack
@@ -47,7 +47,6 @@ MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
MYKAD_READER_PORT=17321 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= INTERNAL_NOTIFICATION_SECRET=
+3 -1
View File
@@ -47,4 +47,6 @@ MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
MYKAD_READER_PORT=17321 MYKAD_READER_PORT=17321
MYKAD_READER_ENABLED_CAWANGAN='' # IF NO CAWANGAN STATED, ALL CAWANGAN IS ENABLED MYKAD_READER_ENABLED_CAWANGAN=''
INTERNAL_NOTIFICATION_SECRET="nIDTe(u@6[)VLJyd"
-6
View File
@@ -11,12 +11,6 @@ GRANT ALL PRIVILEGES ON kaunter_erahn.* TO 'kaunteruser'@'%';
FLUSH PRIVILEGES; FLUSH PRIVILEGES;
``` ```
# ADDITIONAL NOTE
## customers/v2/index.blade.php is modal to register customer
## Min Komoditi = RM5000
# System Flowchart # System Flowchart
## Proses Gadaian ## Proses Gadaian
+24 -52
View File
@@ -2,7 +2,6 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
//Events //Events
use App\Events\OperasiNotice; use App\Events\OperasiNotice;
use App\Events\StatusLiked; use App\Events\StatusLiked;
@@ -225,51 +224,19 @@ class OperasiController extends Controller
'sahkan' => $status 'sahkan' => $status
]; ];
Log::info('Menghantar permintaan ke API UpdateKelulusanAnggota', [
'endpoint' => $endpoint,
'payload' => $payload
]);
$response = Http::withOptions(['verify' => config('app.api_verify')]) $response = Http::withOptions(['verify' => config('app.api_verify')])
->put($endpoint, $payload); ->put($endpoint, $payload);
$updatelulus = $response->json(); $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) { 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'; $statusText = ($status == 1) ? 'DILULUSKAN' : 'DITOLAK';
event(new NotifikasiAnggota($nokp, $statusText, $komen, $namaoperasi)); 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()); return response()->json($updatelulus, $response->status());
} catch (\Exception $e) { } catch (\Exception $e) {
Log::error('Ralat UpdateKelulusanAnggota (frontend)', [
'message' => $e->getMessage(),
'line' => $e->getLine()
]);
return response()->json([ return response()->json([
'success' => false, 'success' => false,
'message' => 'Ralat semasa menghantar kelulusan anggota.', 'message' => 'Ralat semasa menghantar kelulusan anggota.',
@@ -278,10 +245,6 @@ class OperasiController extends Controller
} }
} }
public function createkelulusan(Request $request) public function createkelulusan(Request $request)
{ {
$auth_user = Auth::user(); $auth_user = Auth::user();
@@ -659,26 +622,35 @@ class OperasiController extends Controller
$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 $dateTo = Carbon::now()->toDateString();
$arraykelulusan = []; $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'));
foreach ($kelulusan as $index => $k) {
foreach ($k['kelulusanall'] as $index1 => $kel) {
$komen = explode("|", $kel['komen']);
$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'],]); public function kelulusanrekodlepasData(Request $request)
} {
$params = [
'date_from' => $request->query('date_from'),
'date_to' => $request->query('date_to'),
'search' => $request->query('search'),
];
$response = Http::withOptions(['verify' => config('app.api_verify')])
->get(config('api.url') . '/api/ListOperasiKelulusan/', array_filter($params, function ($value) {
return $value !== null && $value !== '';
}));
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() public function notifyKomoditi()
+28
View File
@@ -14,6 +14,7 @@ class NotificationService
const TYPE_PEMBIAYAAN_REJECTED_PC = 'pembiayaan_online.rejected_pc'; const TYPE_PEMBIAYAAN_REJECTED_PC = 'pembiayaan_online.rejected_pc';
const TYPE_PEMBIAYAAN_PAID_PC = 'pembiayaan_online.paid_pc'; const TYPE_PEMBIAYAAN_PAID_PC = 'pembiayaan_online.paid_pc';
const TYPE_GADAI_KELULUSAN = 'gadai.kelulusan'; 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_PENDING = 'aliran_tunai.pending_khazanah';
const TYPE_ALIRAN_TUNAI_DECIDED = 'aliran_tunai.decided_teller'; const TYPE_ALIRAN_TUNAI_DECIDED = 'aliran_tunai.decided_teller';
const GADAI_KELULUSAN_MIN = 10000; 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) { if ($type === self::TYPE_GADAI_KELULUSAN) {
$norujukan = !empty($data['norujukan']) ? $data['norujukan'] : 'gadai'; $norujukan = !empty($data['norujukan']) ? $data['norujukan'] : 'gadai';
$amaun = number_format(isset($data['pinjaman']) ? (float) $data['pinjaman'] : 0, 2); $amaun = number_format(isset($data['pinjaman']) ? (float) $data['pinjaman'] : 0, 2);
@@ -13,56 +13,95 @@
</ol> </ol>
</nav> </nav>
<div class="card-body text-center"> <div class="card-body">
<div class="row mb-3 align-items-end">
<div class="row mb-4"> <div class="col-md-3">
<div class="col-2 justify-content-start"> <label for="date_from">Tarikh Dari</label>
<input type="date" id="date_from" class="form-control" value="{{ $dateFrom }}">
</div> </div>
<div class="col-8 mt-3 justify-content-center"> <div class="col-md-3">
<label for="date_to">Tarikh Hingga</label>
<input type="date" id="date_to" class="form-control" value="{{ $dateTo }}">
</div> </div>
<div class="col-2"> <div class="col-md-3">
<button type="button" id="btn-filter-rekod" class="btn btn-primary mt-3 mt-md-0">Cari</button>
</div> </div>
</div> </div>
<table class='table table-striped table-hover' id='table-kelulusan' style="width:100%;"> <x-datatable
<thead class="thead-dark"> id="table-kelulusan"
<tr> filename="Rekod_Lulus_Operasi"
<th>No Rujukan</th> class="text-center"
<th>Status</th> :columns="['Tarikh', 'No Rujukan', 'Status', 'Komen', 'Nilai Pembiayaan', 'Nilai Marhun', 'Berat', 'Margin', 'Pelulus']"
<th>Komen</th> />
<th>Nilai Pembiayaan</th>
<th>Nilai Marhun</th>
<th>Berat</th>
<th>Margin</th>
<th>Pelulus</th>
</tr>
</thead>
<tbody>
@foreach($arraykelulusan as $index=>$k)
<tr>
<td>{{ $k['norujukan'] }}</td>
<td>{{ $k['status'] }}</td>
<td>{{ $k['komen'] }}</td>
<td>{{ $k['pinjaman'] }}</td>
<td>{{ $k['nilaimarhun'] }}</td>
<td>{{ $k['berat'] }}</td>
<td>{{ $k['margin'] }}</td>
<td>{{ $k['pelulus'] }}</td>
</tr>
@endforeach
</tbody>
</table>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<script> <script>
function escapeHtml(value) {
return $('<div>').text(value == null ? '' : String(value)).html();
}
var tablekelulusan = $('#table-kelulusan').DataTable({ var tablekelulusan = initErahnDatatable('#table-kelulusan', {
"scrollX": true deferRender: true,
order: [[0, 'desc']],
language: {
emptyTable: 'Tiada rekod',
zeroRecords: 'Tiada rekod dijumpai'
}
}); });
function setLoading(isLoading) {
$('#btn-filter-rekod').prop('disabled', isLoading).text(isLoading ? 'Memuatkan...' : 'Cari');
}
function loadRekodLulus() {
var dateFrom = $('#date_from').val();
var dateTo = $('#date_to').val();
setLoading(true);
tablekelulusan.clear().draw();
$.ajax({
url: "{{ route('operasi.rekodlepas.data') }}",
method: 'GET',
data: {
date_from: dateFrom,
date_to: dateTo
},
success: function (response) {
var rows = response.data || [];
var data = rows.map(function (row) {
return [
escapeHtml(row.tarikh || '-'),
escapeHtml(row.norujukan || '-'),
escapeHtml(row.status || '-'),
escapeHtml(row.komen || '-'),
escapeHtml(row.pinjaman || '-'),
escapeHtml(row.nilaimarhun || '-'),
escapeHtml(row.berat || '-'),
escapeHtml(row.margin || '-'),
escapeHtml(row.pelulus || '-')
];
});
tablekelulusan.rows.add(data).draw();
},
error: function () {
Swal.fire({
icon: 'error',
title: 'Ralat',
text: 'Gagal memuatkan rekod lulus.'
});
},
complete: function () {
setLoading(false);
}
});
}
$('#btn-filter-rekod').on('click', loadRekodLulus);
loadRekodLulus();
</script> </script>
@endsection @endsection
+1
View File
@@ -176,6 +176,7 @@ Route::get('/khazanahtebus',['as'=>'khazanah.tebus','uses'=>'KhazanahController@
Route::get('/kelulusan','KhazanahController@kelulusan')->middleware('auth','khazanah'); Route::get('/kelulusan','KhazanahController@kelulusan')->middleware('auth','khazanah');
Route::get('/kelulusanrekodlepas',['as'=>'khazanah.rekodlepas','uses'=>'KhazanahController@kelulusanrekodlepas'])->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',['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('/pendahuluan',['as'=>'khazanah.pendahulu','uses'=>'KhazanahController@pendahuluan'])->middleware('auth','khazanah');
Route::get('/serahan',['as'=>'khazanah.serahan','uses'=>'KhazanahController@serahan'])->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'); Route::get('/laporanscanbarcode',['as'=>'laporanscanbarcode','uses'=>'KhazanahController@LaporanSemakBarcode'])->middleware('auth','khazanah');