diff --git a/app/Http/Controllers/PembiayaanOnlineController.php b/app/Http/Controllers/PembiayaanOnlineController.php index 18ea958c..a8a24bfb 100644 --- a/app/Http/Controllers/PembiayaanOnlineController.php +++ b/app/Http/Controllers/PembiayaanOnlineController.php @@ -156,7 +156,6 @@ class PembiayaanOnlineController extends Controller 'kodbank' => $request->input('kodbank'), 'noakaun' => $request->input('noakaun'), 'nama_bank' => $request->input('nama_bank'), - 'nama_akaun' => $request->input('nama_akaun'), 'nota' => $request->input('nota'), 'update_customer_bank' => true, ]; @@ -174,6 +173,19 @@ class PembiayaanOnlineController extends Controller $payload['bukti_akaun_type'] = $file->getMimeType() ?: 'application/octet-stream'; } + if ($request->hasFile('borang')) { + $file = $request->file('borang'); + if (!$file->isValid()) { + return redirect()->back()->with('error', 'Fail borang pengesahan tidak sah.'); + } + if ($file->getSize() > 4 * 1024 * 1024) { + return redirect()->back()->with('error', 'Saiz fail maksimum 4MB.'); + } + $payload['borang_data'] = base64_encode(file_get_contents($file->getRealPath())); + $payload['borang_filename'] = $file->getClientOriginalName(); + $payload['borang_type'] = $file->getMimeType() ?: 'application/octet-stream'; + } + $res = $this->api() ->asForm() ->put($api_url . '/api/pembiayaan-online/' . $kodcaw . '/lines/' . $id, $payload); @@ -394,6 +406,22 @@ class PembiayaanOnlineController extends Controller return $this->streamBase64File($file, 'slip-bank-' . $id); } + /** + * PC: view uploaded Borang Pengesahan Penerimaan Pembiayaan Secara Atas Talian. + */ + public function viewBorang($id) + { + $this->abortUnlessPembiayaanOnline(); + return $this->streamLineFile( + $this->kodcaw(), + $id, + '/borang', + 'Borang pengesahan tidak dijumpai.', + 'Fail borang pengesahan kosong.', + 'borang-pengesahan-' . $id + ); + } + /** * PC: view SAG for a queue line (does not mark SAG as printed). */ @@ -426,6 +454,21 @@ class PembiayaanOnlineController extends Controller return $this->streamBase64File($file, 'slip-bank-' . $id); } + /** + * Operasi: view uploaded Borang Pengesahan Penerimaan Pembiayaan Secara Atas Talian. + */ + public function operasiViewBorang($kodcaw, $id) + { + return $this->streamLineFile( + $kodcaw, + $id, + '/borang', + 'Borang pengesahan tidak dijumpai.', + 'Fail borang pengesahan kosong.', + 'borang-pengesahan-' . $id + ); + } + /** * Operasi: view SAG for a batch line. */ @@ -434,6 +477,26 @@ class PembiayaanOnlineController extends Controller return $this->renderLineSag($kodcaw, $id); } + protected function streamLineFile($kodcaw, $id, $path, $missingMessage, $emptyMessage, $fallbackName) + { + $res = $this->api() + ->get(config('api.url') . '/api/pembiayaan-online/' . $kodcaw . '/lines/' . $id . $path); + + if (!$res->successful()) { + $body = $res->json(); + $msg = is_array($body) && isset($body['message']) ? $body['message'] : $missingMessage; + return redirect()->back()->with('error', $msg); + } + + $payload = $res->json(); + $file = $payload['file'] ?? null; + if (!$file || empty($file['data'])) { + return redirect()->back()->with('error', $emptyMessage); + } + + return $this->streamBase64File($file, $fallbackName); + } + protected function streamBase64File(array $file, $fallbackName) { $raw = $file['data']; diff --git a/resources/views/pembiayaan_online/operasi/batch.blade.php b/resources/views/pembiayaan_online/operasi/batch.blade.php index 402f70c7..62ca9d12 100644 --- a/resources/views/pembiayaan_online/operasi/batch.blade.php +++ b/resources/views/pembiayaan_online/operasi/batch.blade.php @@ -74,7 +74,7 @@ id="batch_lines" class="table-sm text-center" :filename="'Batch_' . ($batch['batch_no'] ?? $batch['id'])" - :columns="['Bil', 'Status', 'SAG', 'Pelanggan', 'No KP', 'Bank', 'No Akaun', 'Nama Akaun', 'Pinjaman (RM)', 'Rujukan Bayaran', 'Dokumen', 'Tindakan']" + :columns="['Bil', 'Status', 'SAG', 'Pelanggan', 'No KP', 'Bank', 'No Akaun', 'Pinjaman (RM)', 'Rujukan Bayaran', 'Dokumen', 'Tindakan']" :skipExport="['Dokumen', 'Tindakan']" > @foreach($lines as $line) @@ -94,7 +94,6 @@ {{ $line['nokp'] ?? '-' }} {{ $line['nama_bank'] ?? $line['kodbank'] ?? '-' }} {{ $line['noakaun'] ?? '-' }} - {{ $line['nama_akaun'] ?? '-' }} {{ number_format((float)($line['pinjaman'] ?? 0), 2) }} {{ $line['no_rujukan_bayaran'] ?? '-' }} @@ -113,6 +112,13 @@ @else Tiada slip @endif + @if(!empty($line['borang_file_id'])) + + Borang Pengesahan + + @endif @if(in_array($st, ['IN_BATCH', 'OPS_REVIEW'], true)) diff --git a/resources/views/pembiayaan_online/pc/batch.blade.php b/resources/views/pembiayaan_online/pc/batch.blade.php index c7245caa..b6105b3e 100644 --- a/resources/views/pembiayaan_online/pc/batch.blade.php +++ b/resources/views/pembiayaan_online/pc/batch.blade.php @@ -70,6 +70,13 @@ @else Tiada slip @endif + @if(!empty($line['borang_file_id'])) + + Borang Pengesahan + + @endif @endforeach diff --git a/resources/views/pembiayaan_online/pc/senarai.blade.php b/resources/views/pembiayaan_online/pc/senarai.blade.php index 2840c22d..d2bff4df 100644 --- a/resources/views/pembiayaan_online/pc/senarai.blade.php +++ b/resources/views/pembiayaan_online/pc/senarai.blade.php @@ -274,11 +274,11 @@ data-nokp="{{ $line['nokp'] ?? '' }}" data-namabank="{{ $line['nama_bank'] ?? $line['kodbank'] ?? '' }}" data-noakaun="{{ $line['noakaun'] ?? '' }}" - data-namaakaun="{{ $line['nama_akaun'] ?? '' }}" data-pinjaman="{{ number_format((float)($line['pinjaman'] ?? 0), 2) }}" data-nota="{{ $line['nota'] ?? '' }}" data-sebab="{{ $line['reject_reason'] ?? '' }}" - data-bukti-akaun="{{ $line['bukti_akaun_file_id'] ?? '' }}"> + data-bukti-akaun="{{ $line['bukti_akaun_file_id'] ?? '' }}" + data-borang-file="{{ $line['borang_file_id'] ?? '' }}"> Semak @endif @@ -286,11 +286,11 @@ data-id="{{ $line['id'] }}" data-kodbank="{{ $line['kodbank'] ?? '' }}" data-noakaun="{{ $line['noakaun'] ?? '' }}" - data-namaakaun="{{ $line['nama_akaun'] ?? '' }}" data-namabank="{{ $line['nama_bank'] ?? '' }}" data-nota="{{ $line['nota'] ?? '' }}" data-norujukan="{{ $line['norujukan'] ?? '' }}" - data-bukti-akaun="{{ $line['bukti_akaun_file_id'] ?? '' }}"> + data-bukti-akaun="{{ $line['bukti_akaun_file_id'] ?? '' }}" + data-borang-file="{{ $line['borang_file_id'] ?? '' }}"> Edit @@ -390,10 +390,6 @@ -
- - -
PDF / imej slip akaun bank pelanggan (maks 4MB)
+
+ + + + PDF / imej borang yang ditandatangani pelanggan (maks 4MB). Kosongkan jika tidak mahu ganti fail sedia ada. +
@@ -462,10 +469,6 @@ No Akaun - - Nama Akaun - - Pinjaman RM @@ -485,9 +488,12 @@ Saya sahkan maklumat pelanggan, bank dan amaun adalah betul.
- +
@@ -576,7 +582,6 @@ $('#verifyNokp').text($(this).data('nokp') || '-'); $('#verifyBank').text($(this).data('namabank') || '-'); $('#verifyNoakaun').text($(this).data('noakaun') || '-'); - $('#verifyNamaakaun').text($(this).data('namaakaun') || '-'); $('#verifyPinjaman').text($(this).data('pinjaman') || '0.00'); $('#verifyNota').text($(this).data('nota') || '-'); if (sebab) { @@ -592,6 +597,11 @@ } else { $('#verifyBuktiAkaunLink').hide(); } + if ($(this).data('borangFile')) { + $('#verifyBorangLink').attr('href', "{{ url('/pembiayaan-online/pc/lines') }}/" + id + "/borang").show(); + } else { + $('#verifyBorangLink').hide(); + } $('#verifyModal').modal('show'); }); @@ -605,10 +615,10 @@ $('#editNorujukan').text($(this).data('norujukan')); $('#editKodbank').val($(this).data('kodbank')); $('#editNoakaun').val($(this).data('noakaun')); - $('#editNamaakaun').val($(this).data('namaakaun')); $('#editNamabank').val($(this).data('namabank')); $('#editNota').val($(this).data('nota')); $('#editBuktiAkaun').val(''); + $('#editBorang').val(''); $('#editSagFrame').attr('src', "{{ url('/pembiayaan-online/pc/lines') }}/" + id + "/sag"); if ($(this).data('buktiAkaun')) { $('#editBuktiAkaunLink').attr('href', "{{ url('/pembiayaan-online/pc/lines') }}/" + id + "/bukti-akaun"); @@ -616,6 +626,12 @@ } else { $('#editBuktiAkaunExisting').hide(); } + if ($(this).data('borangFile')) { + $('#editBorangLink').attr('href', "{{ url('/pembiayaan-online/pc/lines') }}/" + id + "/borang"); + $('#editBorangExisting').show(); + } else { + $('#editBorangExisting').hide(); + } $('#editModal').modal('show'); }); diff --git a/resources/views/print/borang_batch_pembiayaan_online.blade.php b/resources/views/print/borang_batch_pembiayaan_online.blade.php index 977bddb7..9ba46d28 100644 --- a/resources/views/print/borang_batch_pembiayaan_online.blade.php +++ b/resources/views/print/borang_batch_pembiayaan_online.blade.php @@ -258,7 +258,7 @@ No. KP Bank No. Akaun - Nama Akaun + No. Telefon Pinjaman (RM) @@ -271,7 +271,7 @@ {{ $line['nokp'] ?? '-' }} {{ $line['nama_bank'] ?? ($line['kodbank'] ?? '-') }} {{ $line['noakaun'] ?? '-' }} - {{ $line['nama_akaun'] ?? '-' }} + {{ !empty($line['telefon']) ? $line['telefon'] : '-' }} {{ number_format((float) ($line['pinjaman'] ?? 0), 2) }} @empty @@ -306,7 +306,7 @@
-
Tandatangan Operasi
+
Disemak oleh

Nama: {{ $opsBy }}

Jawatan: Operasi

@@ -314,10 +314,10 @@
-
Pengurus Besar
+
Disahkan oleh

Nama:

-

Cop:

+

Jawatan:

Tarikh:

diff --git a/routes/web.php b/routes/web.php index 64bf6c4c..55286f3f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -212,6 +212,7 @@ Route::put('/pembiayaan-online/pc/lines/{id}',['as'=>'pembiayaan.online.pc.updat Route::post('/pembiayaan-online/pc/lines/{id}/verify',['as'=>'pembiayaan.online.pc.verify','uses'=>'PembiayaanOnlineController@verifyLine'])->middleware('auth','khazanah'); Route::post('/pembiayaan-online/pc/lines/{id}/unverify',['as'=>'pembiayaan.online.pc.unverify','uses'=>'PembiayaanOnlineController@unverifyLine'])->middleware('auth','khazanah'); Route::get('/pembiayaan-online/pc/lines/{id}/bukti-akaun',['as'=>'pembiayaan.online.pc.bukti.akaun','uses'=>'PembiayaanOnlineController@viewBuktiAkaun'])->middleware('auth','khazanah'); +Route::get('/pembiayaan-online/pc/lines/{id}/borang',['as'=>'pembiayaan.online.pc.borang','uses'=>'PembiayaanOnlineController@viewBorang'])->middleware('auth','khazanah'); Route::get('/pembiayaan-online/pc/lines/{id}/sag',['as'=>'pembiayaan.online.pc.sag','uses'=>'PembiayaanOnlineController@viewSag'])->middleware('auth','khazanah'); Route::post('/pembiayaan-online/pc/batches/submit',['as'=>'pembiayaan.online.pc.submit','uses'=>'PembiayaanOnlineController@submitBatch'])->middleware('auth','khazanah'); Route::get('/pembiayaan-online/pc/batches/{batchId}',['as'=>'pembiayaan.online.pc.batch','uses'=>'PembiayaanOnlineController@showBatch'])->middleware('auth','khazanah'); @@ -238,6 +239,7 @@ Route::post('/pembiayaan-online/operasi/{kodcaw}/batches/{batchId}/approve',['as Route::post('/pembiayaan-online/operasi/{kodcaw}/lines/{id}/paid',['as'=>'pembiayaan.online.operasi.paid','uses'=>'PembiayaanOnlineController@operasiMarkPaid'])->middleware('auth','operasi'); Route::post('/pembiayaan-online/operasi/{kodcaw}/batches/{batchId}/paid',['as'=>'pembiayaan.online.operasi.paid.batch','uses'=>'PembiayaanOnlineController@operasiMarkPaidBatch'])->middleware('auth','operasi'); Route::get('/pembiayaan-online/operasi/{kodcaw}/lines/{id}/bukti-akaun',['as'=>'pembiayaan.online.operasi.bukti.akaun','uses'=>'PembiayaanOnlineController@operasiViewBuktiAkaun'])->middleware('auth','operasi'); +Route::get('/pembiayaan-online/operasi/{kodcaw}/lines/{id}/borang',['as'=>'pembiayaan.online.operasi.borang','uses'=>'PembiayaanOnlineController@operasiViewBorang'])->middleware('auth','operasi'); Route::get('/pembiayaan-online/operasi/{kodcaw}/lines/{id}/sag',['as'=>'pembiayaan.online.operasi.sag','uses'=>'PembiayaanOnlineController@operasiViewSag'])->middleware('auth','operasi'); Route::get('/permohonan/rekod',['as'=>'permohonan.rekod','uses' => 'KhazanahController@RekodPermohonan'])->middleware('auth','khazanah'); Route::post('/permohonan/simpan',['as'=>'permohonan.simpan','uses' => 'KhazanahController@SimpanPermohonan'])->middleware('auth','khazanah');