From effe268e3ba929b3876daee8aee489a21b2f8ab6 Mon Sep 17 00:00:00 2001 From: ISMAIL MASSERAN Date: Thu, 3 Sep 2026 15:34:52 +0800 Subject: [PATCH] DONE: confirmation and list online form --- app/Http/Controllers/GadaianController.php | 115 ++++++ .../PembiayaanOnlineController.php | 93 +++++ .../views/components/datatable.blade.php | 137 +++++++ .../views/components/print/footer.blade.php | 44 +++ .../views/components/print/header.blade.php | 101 +++++ .../components/print/watermark.blade.php | 25 ++ resources/views/customers/v1/info.blade.php | 4 + resources/views/customers/v2/info.blade.php | 175 ++++----- .../borang_batch_pembiayaan_online.blade.php | 354 ++++++++++++++++++ .../dummy/borang_pengesahan_online.blade.php | 322 ++++++++++++++++ resources/views/gadaian/v2/index.blade.php | 38 ++ .../pembiayaan_online/operasi/batch.blade.php | 5 + .../borang_batch_pembiayaan_online.blade.php | 336 +++++++++++++++++ .../print/borang_pengesahan_online.blade.php | 302 +++++++++++++++ routes/web.php | 12 + 15 files changed, 1976 insertions(+), 87 deletions(-) create mode 100644 resources/views/components/datatable.blade.php create mode 100644 resources/views/components/print/footer.blade.php create mode 100644 resources/views/components/print/header.blade.php create mode 100644 resources/views/components/print/watermark.blade.php create mode 100644 resources/views/dummy/borang_batch_pembiayaan_online.blade.php create mode 100644 resources/views/dummy/borang_pengesahan_online.blade.php create mode 100644 resources/views/print/borang_batch_pembiayaan_online.blade.php create mode 100644 resources/views/print/borang_pengesahan_online.blade.php diff --git a/app/Http/Controllers/GadaianController.php b/app/Http/Controllers/GadaianController.php index 2dff3673..2ac08566 100644 --- a/app/Http/Controllers/GadaianController.php +++ b/app/Http/Controllers/GadaianController.php @@ -259,6 +259,121 @@ class GadaianController extends Controller return redirect()->route('customer_info'); } + public function printBorangPengesahanOnline($norujukan) + { + $auth_user = Auth::user(); + $kodcaw = $auth_user['cawangan']; + + $onlineResp = Http::withOptions(['verify' => config('app.api_verify')]) + ->get(config('api.url') . '/api/pembiayaan-online/' . $kodcaw . '/by-norujukan/' . $norujukan); + + if (!$onlineResp->successful()) { + abort(404, 'Pembiayaan online tidak dijumpai.'); + } + + $line = $onlineResp->json(); + if (!is_array($line) || empty($line['norujukan'])) { + abort(404, 'Pembiayaan online tidak dijumpai.'); + } + + return $this->renderBorangPengesahanOnline($line, $kodcaw); + } + + public function previewBorangPengesahanOnline(Request $request) + { + $auth_user = Auth::user(); + $kodcaw = $auth_user['cawangan']; + + $line = [ + 'norujukan' => $request->input('norujukan'), + 'nokp' => $request->input('nokp'), + 'nopelanggan' => $request->input('nopelanggan'), + 'nama_pelanggan' => $request->input('nama_pelanggan'), + 'pinjaman' => $request->input('pinjaman'), + 'kodbank' => $request->input('kodbank'), + 'nama_bank' => $request->input('nama_bank'), + 'noakaun' => $request->input('noakaun'), + 'nama_akaun' => $request->input('nama_akaun'), + 'created_by' => $auth_user['name'] ?? '', + 'created_at' => Carbon::now()->toDateTimeString(), + ]; + + if (empty($line['norujukan']) || empty($line['noakaun'])) { + abort(422, 'Sila lengkapkan maklumat bank sebelum cetak borang.'); + } + + return $this->renderBorangPengesahanOnline($line, $kodcaw); + } + + private function renderBorangPengesahanOnline(array $line, $kodcaw) + { + $auth_user = Auth::user(); + + $cawanganResp = Http::withOptions(['verify' => config('app.api_verify')]) + ->get(config('api.url') . '/api/cawangan/detail/' . $kodcaw) + ->json(); + $cawangan_detail = (is_array($cawanganResp) && isset($cawanganResp[0])) + ? $cawanganResp[0] + : (is_array($cawanganResp) ? $cawanganResp : []); + + $nokpRaw = $line['nokp'] ?? ''; + $customer = []; + if ($nokpRaw !== '') { + $customerResp = Http::withOptions(['verify' => config('app.api_verify')]) + ->get(config('api.url') . '/api/customers/' . $nokpRaw) + ->json(); + if (is_array($customerResp)) { + $customer = $customerResp; + } + } + + $cawangan = $cawangan_detail['namacaw'] + ?? $cawangan_detail['details_caw'] + ?? $kodcaw; + $alamat1 = $cawangan_detail['alamat1'] ?? ''; + $alamat2 = $cawangan_detail['alamat2'] ?? ''; + $notel = $cawangan_detail['notel'] ?? ''; + + $nama = $line['nama_pelanggan'] ?? ($customer['nama'] ?? ''); + $nokp = !empty($customer['kpbaru']) ? $customer['kpbaru'] : ($customer['kplama'] ?? $nokpRaw); + $nopelanggan = $line['nopelanggan'] ?? ($customer['nopelanggan'] ?? ''); + $telefon = $customer['telefon'] ?? ''; + $teller = $line['created_by'] ?? ($auth_user['name'] ?? ''); + $bank = $line['nama_bank'] ?? ($line['kodbank'] ?? ''); + $noakaun = $line['noakaun'] ?? ''; + $nama_akaun = $line['nama_akaun'] ?? $nama; + $pinjaman = number_format((float) ($line['pinjaman'] ?? 0), 2); + $norujukan = $line['norujukan'] ?? ''; + + $tarikhSumber = $line['created_at'] ?? null; + try { + $tarikh = $tarikhSumber + ? Carbon::parse($tarikhSumber)->format('d/m/Y') + : Carbon::now()->format('d/m/Y'); + } catch (\Exception $e) { + $tarikh = Carbon::now()->format('d/m/Y'); + } + + return view('print.borang_pengesahan_online', compact( + 'cawangan', + 'kodcaw', + 'alamat1', + 'alamat2', + 'notel', + 'norujukan', + 'tarikh', + 'teller', + 'nama', + 'nokp', + 'nopelanggan', + 'telefon', + 'pinjaman', + 'bank', + 'noakaun', + 'nama_akaun' + )); + } + public function editstore(Request $request) { $auth_user = Auth::user(); diff --git a/app/Http/Controllers/PembiayaanOnlineController.php b/app/Http/Controllers/PembiayaanOnlineController.php index f7414a21..ef11bd52 100644 --- a/app/Http/Controllers/PembiayaanOnlineController.php +++ b/app/Http/Controllers/PembiayaanOnlineController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Http; @@ -346,6 +347,98 @@ class PembiayaanOnlineController extends Controller ]); } + /** + * Operasi: printable batch kelulusan form. + */ + public function operasiPrintBatch($kodcaw, $batchId) + { + $api_url = config('api.url'); + + $detail = $this->api() + ->get($api_url . '/api/pembiayaan-online/operasi/' . $kodcaw . '/batches/' . $batchId) + ->json(); + + if (!is_array($detail) || empty($detail['batch'])) { + return redirect() + ->route('pembiayaan.online.operasi') + ->with('error', 'Batch tidak dijumpai.'); + } + + $batch = $detail['batch']; + $lines = $detail['lines'] ?? []; + if (!is_array($lines)) { + $lines = []; + } + + $cawanganResp = $this->api() + ->get($api_url . '/api/cawangan/detail/' . $kodcaw) + ->json(); + $cawangan_detail = (is_array($cawanganResp) && isset($cawanganResp[0])) + ? $cawanganResp[0] + : (is_array($cawanganResp) ? $cawanganResp : []); + + $cawangan = $cawangan_detail['namacaw'] + ?? $cawangan_detail['details_caw'] + ?? $cawangan_detail['nama'] + ?? $kodcaw; + $alamat1 = $cawangan_detail['alamat1'] ?? ''; + $alamat2 = $cawangan_detail['alamat2'] ?? ''; + $notel = $cawangan_detail['notel'] ?? ''; + + $batchNo = $batch['batch_no'] ?? '-'; + $slot = $batch['slot'] ?? '-'; + $status = $batch['status'] ?? '-'; + $dihantarOleh = $batch['pc_submitted_by'] ?? '-'; + + $jumlah = (float) ($batch['jumlah_keseluruhan'] ?? 0); + if ($jumlah <= 0 && count($lines) > 0) { + $jumlah = (float) collect($lines)->sum(function ($line) { + return (float) ($line['pinjaman'] ?? 0); + }); + } + + $opsBy = Auth::user()['name'] ?? ''; + foreach ($lines as $line) { + if (!empty($line['ops_by'])) { + $opsBy = $line['ops_by']; + break; + } + } + + $tarikh = $this->formatPrintDate($batch['tarikh'] ?? null); + $dihantarPada = $this->formatPrintDate($batch['submitted_at'] ?? null, true); + + return view('print.borang_batch_pembiayaan_online', compact( + 'cawangan', + 'kodcaw', + 'alamat1', + 'alamat2', + 'notel', + 'tarikh', + 'batchNo', + 'slot', + 'status', + 'dihantarOleh', + 'dihantarPada', + 'opsBy', + 'lines', + 'jumlah' + )); + } + + protected function formatPrintDate($value, $withTime = false) + { + if ($value === null || $value === '' || $value === '-') { + return '-'; + } + + try { + return Carbon::parse($value)->format($withTime ? 'd/m/Y H:i' : 'd/m/Y'); + } catch (\Exception $e) { + return (string) $value; + } + } + public function operasiApproveLine(Request $request, $kodcaw, $id) { $res = $this->api() diff --git a/resources/views/components/datatable.blade.php b/resources/views/components/datatable.blade.php new file mode 100644 index 00000000..fbe981b6 --- /dev/null +++ b/resources/views/components/datatable.blade.php @@ -0,0 +1,137 @@ +@props([ + 'id', + 'columns' => [], + 'exportable' => true, + 'filename' => '', + 'skipExport' => ['Bil', 'Cetak'], +]) + + + + + +
+ merge(['class' => 'table table-striped table-hover nowrap']) }} + style="width:100%" + data-exportable="{{ $exportable ? 1 : 0 }}" + data-export-filename="{{ $filename !== '' ? $filename : $id }}" + > + + + @foreach ($columns as $column) + + @endforeach + + + + {{ $slot }} +
{{ $column }}
+
diff --git a/resources/views/components/print/footer.blade.php b/resources/views/components/print/footer.blade.php new file mode 100644 index 00000000..3c21f8bd --- /dev/null +++ b/resources/views/components/print/footer.blade.php @@ -0,0 +1,44 @@ +@props([ + 'showCopies' => true, +]) + + + +
merge(['class' => 'print-footer']) }}> + @if($showCopies) +
+ Salinan: Kad Pengenalan    Akaun Bank/ Slip/ Penyata Bank +
+ @endif + + @if(trim($slot) !== '') +
+ {{ $slot }} +
+ @endif +
diff --git a/resources/views/components/print/header.blade.php b/resources/views/components/print/header.blade.php new file mode 100644 index 00000000..cd65e30a --- /dev/null +++ b/resources/views/components/print/header.blade.php @@ -0,0 +1,101 @@ +@props([ + 'cawangan' => '', + 'kodcaw' => '', + 'alamat1' => '', + 'alamat2' => '', + 'notel' => '', + 'tarikh' => '', + 'norujukan' => '', + 'rujukanLabel' => 'No. Rujukan SAG', + 'showDummyBadge' => false, +]) + + + +
merge(['class' => 'print-header']) }}> +
+

KOPERASI PERMODALAN KELANTAN BERHAD (D-5-0228)

+

Ar-Rahn {{ $cawangan }}

+

{{ $alamat1 }}

+

{{ $alamat2 }}

+

Tel: {{ $notel }}

+
+
+ KPKB + Ar-Rahn +
+
+ @if($kodcaw || $cawangan) +
+ Cawangan
+ {{ trim(implode(' — ', array_filter([$kodcaw, $cawangan]))) }} +
+ @endif + @if($tarikh) +
Tarikh
{{ $tarikh }}
+ @endif + @if($norujukan) +
{{ $rujukanLabel }}
{{ $norujukan }}
+ @endif + {{ $slot }} + @if($showDummyBadge) +
CONTOH SAHAJA
+ @endif +
+
diff --git a/resources/views/components/print/watermark.blade.php b/resources/views/components/print/watermark.blade.php new file mode 100644 index 00000000..38e1b73c --- /dev/null +++ b/resources/views/components/print/watermark.blade.php @@ -0,0 +1,25 @@ + + + diff --git a/resources/views/customers/v1/info.blade.php b/resources/views/customers/v1/info.blade.php index 59cd4265..2dcdd490 100644 --- a/resources/views/customers/v1/info.blade.php +++ b/resources/views/customers/v1/info.blade.php @@ -21,6 +21,10 @@ + @if(session()->has('message')) +
{{ session('message') }}
+ @endif + @if(!empty($customer_info['photo_base64']))
diff --git a/resources/views/customers/v2/info.blade.php b/resources/views/customers/v2/info.blade.php index 8a3dd9b0..729ef101 100644 --- a/resources/views/customers/v2/info.blade.php +++ b/resources/views/customers/v2/info.blade.php @@ -22,6 +22,10 @@ + @if(session()->has('message')) +
{{ session('message') }}
+ @endif + @if(!empty($customer_info['photo_base64']))
@@ -359,7 +363,7 @@
@@ -787,27 +741,32 @@ } }); - $('a[data-toggle="tab"]').on('shown.bs.tab', function(e) { - // here is the new selected tab id - var selectedTabId = e.target.id; - + $('a[data-toggle="tab"]').on('shown.bs.tab', function () { + if (typeof adjustErahnDatatables === 'function') { + adjustErahnDatatables(); + } }); - var tablegadai = $('#myTable').DataTable({ - "scrollX": false, - order: [ - [1, 'desc'] + var tablegadai = initErahnDatatable('#myTable', { + order: [[1, 'desc']], + columnDefs: [ + { targets: 0, orderable: false, width: '40px' }, + { targets: -1, orderable: false, searchable: false, width: '70px' } ] }); - var xtawarruq = $('#xtawarruq').DataTable({ - "scrollX": false + var xtawarruq = initErahnDatatable('#xtawarruq', { + columnDefs: [ + { targets: 0, orderable: false, width: '40px' } + ] }); - var tabledahtebus = $('#dahtebusTable').DataTable({}); + var tabledahtebus = initErahnDatatable('#dahtebusTable'); - var tablelelong = $('#lelongTable').DataTable({ - "scrollX": false + var tablelelong = initErahnDatatable('#lelongTable', { + columnDefs: [ + { targets: -1, orderable: false, searchable: false, width: '80px' } + ] }); var historybayarandatatable = $('#tablehistorybayaran').DataTable({ @@ -822,6 +781,41 @@ minimumFractionDigits: 2 }); + function urlBorangOnline(norujukan) { + return '{{ url("/gadai/borang-pengesahan-online") }}/' + encodeURIComponent(norujukan); + } + + function cetakBorangOnlineCell(gadai_detail) { + var cara = String(gadai_detail['cara_terima'] || '').toUpperCase(); + if (cara !== 'ONLINE') { + return ''; + } + return ''; + } + + function cetakBorangOnlineSelected() { + var selected = $('input[name="belum"]:checked'); + if (!selected.length) { + Swal.fire({ + icon: 'warning', + title: 'Sila pilih SAG', + text: 'Pilih pembiayaan untuk cetak borang pengesahan.' + }); + return; + } + var cara = String(selected.data('cara-terima') || '').toUpperCase(); + if (cara !== 'ONLINE') { + Swal.fire({ + icon: 'info', + title: 'Bukan pembiayaan online', + text: 'Borang ini hanya untuk SAG yang terima pembiayaan secara online.' + }); + return; + } + window.open(urlBorangOnline(selected.val()), '_blank'); + } + function getGadaiByNorujukan(norujukan) { console.log(norujukan); let gadai_tawarruq = fetch(api_url + '/api/gadai/norujukan/' + norujukan); @@ -1223,8 +1217,8 @@ let table_norujukan = gadai_detail["norujukan"]; tablegadai.row.add([ - '', + '', '' + taglel + '
', + cetakBorangOnlineCell(gadai_detail), ]).draw(); } } else if (jenistebus == "sudah_tebus") { @@ -1560,6 +1555,9 @@ success: function(data) { $('#myTable').parents('div.dataTables_wrapper').first().show(); gadaiTable(data, "belum_tebus"); + if (typeof adjustErahnDatatables === 'function') { + adjustErahnDatatables(); + } } }); @@ -2816,6 +2814,9 @@ url: api_url + "/api/customers/" + noic + "/gadai/belum_tebus/" + kodcaw, success: function(data) { gadaiTable(data, "belum_tebus"); + if (typeof adjustErahnDatatables === 'function') { + adjustErahnDatatables(); + } } }); } diff --git a/resources/views/dummy/borang_batch_pembiayaan_online.blade.php b/resources/views/dummy/borang_batch_pembiayaan_online.blade.php new file mode 100644 index 00000000..077471ac --- /dev/null +++ b/resources/views/dummy/borang_batch_pembiayaan_online.blade.php @@ -0,0 +1,354 @@ + + + + + + Dummy — Borang Kelulusan Batch Pembiayaan Online + + + +@php + $cawangan = 'KOTA BHARU 2'; + $kodcaw = 'KB2'; + $alamat1 = 'Lot 123, Jalan Sultan Yahya Petra'; + $alamat2 = '15200 Kota Bharu, Kelantan'; + $notel = '09-123 4567'; + $tarikh = '03/09/2026'; + $batchNo = 'KB2-PO-20260903-B1-001'; + $slot = 'BATCH1'; + $status = 'SUBMITTED'; + $dihantarOleh = 'NUR AINA BINTI HASSAN'; + $dihantarPada = '03/09/2026 10:42'; + $opsBy = 'MOHD FAIZ BIN ISMAIL'; + + $lines = [ + ['norujukan' => 'KB2-260903-0001', 'nama' => 'AHMAD BIN ABDULLAH', 'nokp' => '900101-03-1234', 'bank' => 'MAYBANK', 'noakaun' => '123456789012', 'nama_akaun' => 'AHMAD BIN ABDULLAH', 'pinjaman' => 15000.00], + ['norujukan' => 'KB2-260903-0004', 'nama' => 'SITI MARIAM BINTI YUSOF', 'nokp' => '850215-03-5678', 'bank' => 'CIMB', 'noakaun' => '800123456789', 'nama_akaun' => 'SITI MARIAM BINTI YUSOF', 'pinjaman' => 8200.50], + ['norujukan' => 'KB2-260903-0007', 'nama' => 'MOHD RAZAK BIN ALI', 'nokp' => '780930-03-1122', 'bank' => 'BANK ISLAM', 'noakaun' => '140234567890', 'nama_akaun' => 'MOHD RAZAK BIN ALI', 'pinjaman' => 5000.00], + ['norujukan' => 'KB2-260903-0010', 'nama' => 'FATIMAH BINTI OMAR', 'nokp' => '920408-03-3344', 'bank' => 'RHB', 'noakaun' => '212345678901', 'nama_akaun' => 'FATIMAH BINTI OMAR', 'pinjaman' => 12500.00], + ['norujukan' => 'KB2-260903-0012', 'nama' => 'HASSAN BIN IBRAHIM', 'nokp' => '700112-03-5566', 'bank' => 'MAYBANK', 'noakaun' => '156789012345', 'nama_akaun' => 'HASSAN BIN IBRAHIM', 'pinjaman' => 3400.00], + ]; + $jumlah = array_sum(array_column($lines, 'pinjaman')); +@endphp + +
+
+ DUMMY FORM + — reka bentuk borang kelulusan batch pembiayaan online (Operasi). Data ini contoh sahaja. +
+ +
+ +
+
+ + +
+

Borang Kelulusan Pembiayaan Online
Senarai Batch Pembayaran

+

Untuk semakan Operasi dan kelulusan Pengurus Besar. Bukan untuk tandatangan pelanggan.

+
+ +
+
A. Maklumat Batch
+ + + + + + + + + + + + + + + + + + + + + + + + + +
No. Batch{{ $batchNo }}Cawangan{{ $kodcaw }} — {{ $cawangan }}
Tarikh / Slot{{ $tarikh }}  ·  {{ $slot }}Status Batch{{ $status }}
Dihantar Oleh (PC){{ $dihantarOleh }}Dihantar Pada{{ $dihantarPada }}
Bilangan Rekod{{ count($lines) }}Jumlah KeseluruhanRM {{ number_format($jumlah, 2) }}
+
+ +
+
B. Senarai Penerima Dalam Batch
+ + + + + + + + + + + + + + + @foreach($lines as $i => $line) + + + + + + + + + + + @endforeach + + + + + + + +
BilNo. SAGPelangganNo. KPBankNo. AkaunNama AkaunPinjaman (RM)
{{ $i + 1 }}{{ $line['norujukan'] }}{{ $line['nama'] }}{{ $line['nokp'] }}{{ $line['bank'] }}{{ $line['noakaun'] }}{{ $line['nama_akaun'] }}{{ number_format($line['pinjaman'], 2) }}
JUMLAH{{ number_format($jumlah, 2) }}
+
+ +
+
C. Pengesahan Operasi
+
+ Dengan ini disahkan bahawa senarai di Bahagian B telah disemak dan amaun pembiayaan + sebanyak RM {{ number_format($jumlah, 2) }} ({{ count($lines) }} rekod) + bagi batch {{ $batchNo }} cawangan {{ $cawangan }} adalah lengkap + untuk proses pembayaran ke akaun bank pelanggan. +
    +
  1. Maklumat SAG, nama, no. KP, bank dan no. akaun telah disemak terhadap rekod sistem.
  2. +
  3. Pembayaran akan dikreditkan ke akaun penerima seperti senarai, bukan tunai di kaunter.
  4. +
  5. Sebarang ralat akaun yang dikesan selepas kelulusan hendaklah dilaporkan serta-merta.
  6. +
+
+
+ +
+
+
Tandatangan Operasi
+
+

Nama: {{ $opsBy }}

+

Jawatan: Operasi

+

Tarikh: {{ $tarikh }}

+
+
+
+
Pengurus Besar
+
+

Nama:

+

Cop / Paraf:

+

Tarikh:

+
+
+
+ + + Nota: +

1. Borang ini dicetak dari skrin Operasi — Pembiayaan Online (Batch) untuk kelulusan pembayaran.

+

2. Hanya dua tandatangan diperlukan: Operasi dan Pengurus Besar.

+

3. Simpan salinan bersama bukti pindahan bank selepas status PAID.

+
+
+
+ + diff --git a/resources/views/dummy/borang_pengesahan_online.blade.php b/resources/views/dummy/borang_pengesahan_online.blade.php new file mode 100644 index 00000000..acdc772f --- /dev/null +++ b/resources/views/dummy/borang_pengesahan_online.blade.php @@ -0,0 +1,322 @@ + + + + + + Dummy — Borang Pengesahan Pembiayaan Online + + + +@php + // Dummy data — replace later with real gadai / customer / bank values + $cawangan = 'KOTA BHARU 2'; + $kodcaw = 'KB2'; + $alamat1 = 'Lot 123, Jalan Sultan Yahya Petra'; + $alamat2 = '15200 Kota Bharu, Kelantan'; + $notel = '09-123 4567'; + $norujukan = 'KB2-260903-0001'; + $tarikh = '03/09/2026'; + $teller = 'SITI AMINAH BINTI ALI'; + $nama = 'AHMAD BIN ABDULLAH'; + $nokp = '900101-03-1234'; + $nopelanggan = 'KB2001234'; + $telefon = '012-3456789'; + $pinjaman = '15,000.00'; + $bank = 'Malayan Banking Berhad (MAYBANK)'; + $noakaun = '123456789012'; + $nama_akaun = 'AHMAD BIN ABDULLAH'; +@endphp + +
+
+ DUMMY FORM + — reka bentuk borang pengesahan pembiayaan online. Data ini contoh sahaja. +
+ +
+ +
+
+ + +
+

Borang Pengesahan Penerimaan Pembiayaan
Secara Online (Akaun Bank)

+

Untuk diisi dan ditandatangani oleh pelanggan semasa transaksi gadai.

+
+ +
+
A. Maklumat Pelanggan
+ + + + + + + + + + + + + + + + + +
Nama Pelanggan{{ $nama }}
No. MyKad / Passport{{ $nokp }}No. Pelanggan{{ $nopelanggan }}
No. Telefon{{ $telefon }}Cawangan{{ $cawangan }}
+
+ +
+
B. Maklumat Pembiayaan
+ + + + + + + + + + + + + + + + + +
No. Surat Akuan Gadai{{ $norujukan }}
Amaun PembiayaanRM {{ $pinjaman }}
Cara Terima PembiayaanOnline (kredit ke akaun bank) — bukan tunai
Teller{{ $teller }}
+
+ +
+
C. Maklumat Akaun Bank Penerima
+ + + + + + + + + + + + + +
Nama Bank{{ $bank }}
No. Akaun{{ $noakaun }}
Nama Pemegang Akaun{{ $nama_akaun }}
+
+ +
+
D. Akuan Pelanggan
+
+ Saya, {{ $nama }} (No. KP: {{ $nokp }}), dengan ini mengesahkan bahawa: +
    +
  1. Maklumat akaun bank di Bahagian C adalah benar, tepat, dan milik saya sendiri.
  2. +
  3. Saya memohon supaya amaun pembiayaan gadai sebanyak RM {{ $pinjaman }} dikreditkan ke akaun tersebut dan bukan diterima secara tunai.
  4. +
  5. Saya faham kredit ke akaun tertakluk kepada semakan Pengurus Cawangan dan proses pembayaran pihak Koperasi.
  6. +
  7. Saya bertanggungjawab sepenuhnya jika maklumat akaun tidak tepat, dan tidak akan menuntut ganti rugi atas kelewatan atau ralat yang berpunca daripadanya.
  8. +
+
+
+ +
+
+
Tandatangan Pelanggan
+
+

Nama: {{ $nama }}

+

No. KP: {{ $nokp }}

+

Tarikh: {{ $tarikh }}

+
+
+
+
Tandatangan Teller
+
+

Nama: {{ $teller }}

+

Cop / Paraf:

+

Tarikh: {{ $tarikh }}

+
+
+
+
Pengurus Cawangan
+
+

Nama:

+

Cop cawangan:

+

Tarikh:

+
+
+
+ + + Nota: +

1. Borang ini dicetak semasa pelanggan memilih cara terima pembiayaan secara Online.

+

2. Pembiayaan akan dikreditkan ke akaun selepas semakan PC. Pelanggan tidak menerima wang tunai di kaunter.

+

3. Sila pastikan nama pemegang akaun sepadan dengan nama pelanggan pada MyKad.

+
+
+
+ + diff --git a/resources/views/gadaian/v2/index.blade.php b/resources/views/gadaian/v2/index.blade.php index 9238a6e2..455b8ac0 100644 --- a/resources/views/gadaian/v2/index.blade.php +++ b/resources/views/gadaian/v2/index.blade.php @@ -290,6 +290,7 @@
Batal +
@@ -1271,6 +1272,7 @@ } else { $('#cara_terima_section').hide(); $('#bank_online_section').hide(); + $('#cetak_borang_online').hide(); $('#cara_terima_tunai').prop('checked', true); } } @@ -1278,11 +1280,13 @@ function toggleBankOnlineSection() { if ($('input[name="cara_terima"]:checked').val() === 'ONLINE') { $('#bank_online_section').show(); + $('#cetak_borang_online').show(); var nama = $('#gadai_kodbank option:selected').data('nama') || ''; $('#gadai_nama_bank').val(nama); refreshModalOnlineStatus(); } else { $('#bank_online_section').hide(); + $('#cetak_borang_online').hide(); } } @@ -1294,6 +1298,40 @@ $('#gadai_nama_bank').val($('#gadai_kodbank option:selected').data('nama') || ''); }); + $(document).on('click', '#cetak_borang_online', function () { + var kodbank = $('#gadai_kodbank').val(); + var noakaun = ($('#gadai_noakaun').val() || '').trim(); + var namaAkaun = ($('#gadai_nama_akaun').val() || '').trim(); + var namaBank = $('#gadai_kodbank option:selected').data('nama') || $('#gadai_nama_bank').val() || ''; + var pinjaman = String($('#pinjaman').val() || '').replace(/,/g, ''); + + if (!kodbank || !noakaun) { + Swal.fire({ + icon: 'warning', + title: 'Maklumat bank tidak lengkap', + text: 'Sila lengkapkan bank dan no. akaun sebelum cetak borang. Anda boleh betulkan dan cetak semula tanpa tekan Terima.' + }); + return; + } + + var form = $('
', { + method: 'POST', + action: '{{ route("gadai.print.borang.online.preview") }}', + target: '_blank' + }); + form.append($('', { type: 'hidden', name: '_token', value: '{{ csrf_token() }}' })); + form.append($('', { type: 'hidden', name: 'norujukan', value: $('#norujukan_gadai').val() || $('#norujukan').val() || '' })); + form.append($('', { type: 'hidden', name: 'nokp', value: $('#nokp').val() || '' })); + form.append($('', { type: 'hidden', name: 'nopelanggan', value: $('#nopelanggan').val() || '' })); + form.append($('', { type: 'hidden', name: 'nama_pelanggan', value: $('input[name="nama_pelanggan"]').val() || '' })); + form.append($('', { type: 'hidden', name: 'pinjaman', value: pinjaman })); + form.append($('', { type: 'hidden', name: 'kodbank', value: kodbank })); + form.append($('', { type: 'hidden', name: 'nama_bank', value: namaBank })); + form.append($('', { type: 'hidden', name: 'noakaun', value: noakaun })); + form.append($('', { type: 'hidden', name: 'nama_akaun', value: namaAkaun })); + form.appendTo('body').trigger('submit').remove(); + }); + async function getModalOnline() { let kodcaw = $('#kodcaw').val(); let apiUrl = api_url + '/api/modal-online/' + kodcaw; diff --git a/resources/views/pembiayaan_online/operasi/batch.blade.php b/resources/views/pembiayaan_online/operasi/batch.blade.php index fd0e14d6..bff70354 100644 --- a/resources/views/pembiayaan_online/operasi/batch.blade.php +++ b/resources/views/pembiayaan_online/operasi/batch.blade.php @@ -45,6 +45,11 @@
Senarai Dalam Batch
+ + Cetak Borang + Kembali @if($pendingCount > 0) + + + + + Borang Kelulusan Batch — {{ $batchNo }} + + + + + +
+
Borang Kelulusan Batch Pembiayaan Online
+ +
+ +
+
+ + +
+

Borang Kelulusan Pembiayaan Online
Senarai Batch Pembayaran

+

Untuk semakan Operasi dan kelulusan Pengurus Besar. Bukan untuk tandatangan pelanggan.

+
+ +
+
A. Maklumat Batch
+ + + + + + + + + + + + + + + + + + + + + + + + + +
No. Batch{{ $batchNo }}Cawangan{{ $kodcaw }} — {{ $cawangan }}
Tarikh / Slot{{ $tarikh }}  ·  {{ $slot }}Status Batch{{ $status }}
Dihantar Oleh (PC){{ $dihantarOleh }}Dihantar Pada{{ $dihantarPada }}
Bilangan Rekod{{ count($lines) }}Jumlah KeseluruhanRM {{ number_format((float) $jumlah, 2) }}
+
+ +
+
B. Senarai Penerima Dalam Batch
+ + + + + + + + + + + + + + + @forelse($lines as $i => $line) + + + + + + + + + + + @empty + + + + @endforelse + + + + + + + +
BilNo. SAGPelangganNo. KPBankNo. AkaunNama AkaunPinjaman (RM)
{{ $i + 1 }}{{ $line['norujukan'] ?? '-' }}{{ $line['nama_pelanggan'] ?? '-' }}{{ $line['nokp'] ?? '-' }}{{ $line['nama_bank'] ?? ($line['kodbank'] ?? '-') }}{{ $line['noakaun'] ?? '-' }}{{ $line['nama_akaun'] ?? '-' }}{{ number_format((float) ($line['pinjaman'] ?? 0), 2) }}
Tiada rekod dalam batch.
JUMLAH{{ number_format((float) $jumlah, 2) }}
+
+ +
+
C. Pengesahan Operasi
+
+ Dengan ini disahkan bahawa senarai di Bahagian B telah disemak dan amaun pembiayaan + sebanyak RM {{ number_format((float) $jumlah, 2) }} ({{ count($lines) }} rekod) + bagi batch {{ $batchNo }} cawangan {{ $cawangan }} adalah lengkap + untuk proses pembayaran ke akaun bank pelanggan. +
    +
  1. Maklumat SAG, nama, no. KP, bank dan no. akaun telah disemak terhadap rekod sistem.
  2. +
  3. Pembayaran akan dikreditkan ke akaun penerima seperti senarai, bukan tunai di kaunter.
  4. +
  5. Sebarang ralat akaun yang dikesan selepas kelulusan hendaklah dilaporkan serta-merta.
  6. +
+
+
+ +
+
+
Tandatangan Operasi
+
+

Nama: {{ $opsBy }}

+

Jawatan: Operasi

+

Tarikh: {{ $tarikh }}

+
+
+
+
Pengurus Besar
+
+

Nama:

+

Cop / Paraf:

+

Tarikh:

+
+
+
+ + + Nota: +

1. Borang ini dicetak dari skrin Operasi — Pembiayaan Online (Batch) untuk kelulusan pembayaran.

+

2. Hanya dua tandatangan diperlukan: Operasi dan Pengurus Besar.

+

3. Simpan salinan bersama bukti pindahan bank selepas status PAID.

+
+
+
+ + diff --git a/resources/views/print/borang_pengesahan_online.blade.php b/resources/views/print/borang_pengesahan_online.blade.php new file mode 100644 index 00000000..b6c98b97 --- /dev/null +++ b/resources/views/print/borang_pengesahan_online.blade.php @@ -0,0 +1,302 @@ + + + + + + Borang Pengesahan Online — {{ $norujukan }} + + + + + +
+
Borang Pengesahan Pembiayaan Online
+ +
+ +
+
+ + +
+

Borang Pengesahan Penerimaan Pembiayaan
Secara Online (Akaun Bank)

+

Untuk diisi dan ditandatangani oleh pelanggan semasa transaksi gadai.

+
+ +
+
A. Maklumat Pelanggan
+ + + + + + + + + + + + + + + + + +
Nama Pelanggan{{ $nama }}
No. MyKad / Passport{{ $nokp }}No. Pelanggan{{ $nopelanggan }}
No. Telefon{{ $telefon }}Cawangan{{ $cawangan }}
+
+ +
+
B. Maklumat Pembiayaan
+ + + + + + + + + + + + + + + + + +
No. Surat Akuan Gadai{{ $norujukan }}
Amaun PembiayaanRM {{ $pinjaman }}
Cara Terima PembiayaanOnline (kredit ke akaun bank) — bukan tunai
Teller{{ $teller }}
+
+ +
+
C. Maklumat Akaun Bank Penerima
+ + + + + + + + + + + + + +
Nama Bank{{ $bank }}
No. Akaun{{ $noakaun }}
Nama Pemegang Akaun{{ $nama_akaun }}
+
+ +
+
D. Akuan Pelanggan
+
+ Saya, {{ $nama }} (No. KP: {{ $nokp }}), dengan ini mengesahkan bahawa: +
    +
  1. Maklumat akaun bank di Bahagian C adalah benar, tepat, dan milik saya sendiri.
  2. +
  3. Saya memohon supaya amaun pembiayaan gadai sebanyak RM {{ $pinjaman }} dikreditkan ke akaun tersebut dan bukan diterima secara tunai.
  4. +
  5. Saya faham kredit ke akaun tertakluk kepada semakan Pengurus Cawangan dan proses pembayaran pihak Koperasi.
  6. +
  7. Saya bertanggungjawab sepenuhnya jika maklumat akaun tidak tepat, dan tidak akan menuntut ganti rugi atas kelewatan atau ralat yang berpunca daripadanya.
  8. +
+
+
+ +
+
+
Tandatangan Pelanggan
+
+

Nama: {{ $nama }}

+

No. KP: {{ $nokp }}

+

Tarikh: {{ $tarikh }}

+
+
+
+
Tandatangan Teller
+
+

Nama: {{ $teller }}

+

Cop / Paraf:

+

Tarikh: {{ $tarikh }}

+
+
+
+
Pengurus Cawangan
+
+

Nama:

+

Cop cawangan:

+

Tarikh:

+
+
+
+ + + Nota: +

1. Borang ini dicetak semasa pelanggan memilih cara terima pembiayaan secara Online.

+

2. Pembiayaan akan dikreditkan ke akaun selepas semakan PC. Pelanggan tidak menerima wang tunai di kaunter.

+

3. Sila pastikan nama pemegang akaun sepadan dengan nama pelanggan pada MyKad.

+
+
+
+ + diff --git a/routes/web.php b/routes/web.php index e16df247..d7254bd1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -19,6 +19,15 @@ Route::get('/health', function () { return response()->json(['status' => 'ok']); }); +// Dummy print form — no auth, for layout design only +Route::get('/dummy/borang-pengesahan-online', function () { + return view('dummy.borang_pengesahan_online'); +}); + +Route::get('/dummy/borang-batch-pembiayaan-online', function () { + return view('dummy.borang_batch_pembiayaan_online'); +}); + Route::get('/',['as'=>'login','uses'=>'HomeController@index']); Route::get('/testtry',function(ImbangdugaServices $imbangduga){ @@ -113,6 +122,8 @@ Route::post('/profile/edit/store',['as'=>'profile.editstore','uses'=>'UserContro Route::get('/customer/search',['as'=>'customer.search','uses'=>'CustomersController@search'])->middleware('auth','teller'); Route::post('/customer/store',['as'=>'customer.store','uses'=>'CustomersController@store'])->middleware('auth','teller'); Route::post('/gadai/store',['as'=>'gadai.store','uses'=>'GadaianController@store'])->middleware('auth','teller'); +Route::get('/gadai/borang-pengesahan-online/{norujukan}',['as'=>'gadai.print.borang.online','uses'=>'GadaianController@printBorangPengesahanOnline'])->middleware('auth','teller'); +Route::post('/gadai/borang-pengesahan-online/preview',['as'=>'gadai.print.borang.online.preview','uses'=>'GadaianController@previewBorangPengesahanOnline'])->middleware('auth','teller'); Route::get('/gadai/batal',['as'=>'gadai.batal','uses'=>'GadaianController@batal'])->middleware('auth','teller'); Route::get('/customer/otp',['as'=>'customer.otp','uses'=>'CustomersController@getOTP'])->middleware('auth','teller'); Route::get('/getwakil',['as'=>'wakil.search','uses'=>'PenebusanController@getWakil'])->middleware('auth','teller'); @@ -194,6 +205,7 @@ Route::get('/pembiayaan-online/operasi/eod',['as'=>'pembiayaan.online.operasi.eo Route::post('/pembiayaan-online/operasi/eod/close-all',['as'=>'pembiayaan.online.operasi.eod.closeall','uses'=>'PembiayaanOnlineController@operasiCloseAllModal'])->middleware('auth','operasi'); Route::post('/pembiayaan-online/operasi/eod/{kodcaw}/close',['as'=>'pembiayaan.online.operasi.eod.close','uses'=>'PembiayaanOnlineController@operasiCloseModal'])->middleware('auth','operasi'); Route::get('/pembiayaan-online/operasi/{kodcaw}/batches/{batchId}',['as'=>'pembiayaan.online.operasi.batch','uses'=>'PembiayaanOnlineController@operasiShowBatch'])->middleware('auth','operasi'); +Route::get('/pembiayaan-online/operasi/{kodcaw}/batches/{batchId}/print',['as'=>'pembiayaan.online.operasi.batch.print','uses'=>'PembiayaanOnlineController@operasiPrintBatch'])->middleware('auth','operasi'); Route::post('/pembiayaan-online/operasi/{kodcaw}/lines/{id}/approve',['as'=>'pembiayaan.online.operasi.approve','uses'=>'PembiayaanOnlineController@operasiApproveLine'])->middleware('auth','operasi'); Route::post('/pembiayaan-online/operasi/{kodcaw}/lines/{id}/reject',['as'=>'pembiayaan.online.operasi.reject','uses'=>'PembiayaanOnlineController@operasiRejectLine'])->middleware('auth','operasi'); Route::post('/pembiayaan-online/operasi/{kodcaw}/batches/{batchId}/approve',['as'=>'pembiayaan.online.operasi.approve.batch','uses'=>'PembiayaanOnlineController@operasiApproveBatch'])->middleware('auth','operasi');