DONE: add export customer info feature, fix floating point issue in komuditi
This commit is contained in:
@@ -581,4 +581,113 @@ class CustomersController extends Controller
|
|||||||
return redirect()->back()->with('error', 'Gagal mengemaskini status anggota. Sila cuba semula.');
|
return redirect()->back()->with('error', 'Gagal mengemaskini status anggota. Sila cuba semula.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function printMaklumat(Request $request)
|
||||||
|
{
|
||||||
|
$noic = $request->query('noic') ?: Session::get('noic');
|
||||||
|
if (empty($noic)) {
|
||||||
|
return redirect('/pelanggan');
|
||||||
|
}
|
||||||
|
|
||||||
|
$auth_user = Auth::user();
|
||||||
|
$api_url = config('api.url');
|
||||||
|
$verify = ['verify' => config('app.api_verify')];
|
||||||
|
$kodcaw = $auth_user['cawangan'];
|
||||||
|
|
||||||
|
$customer = Http::withOptions($verify)->get($api_url . '/api/customers/' . $noic)->json();
|
||||||
|
if (!is_array($customer) || (empty($customer['nama']) && empty($customer['nopelanggan']) && empty($customer['kpbaru']) && empty($customer['kplama']))) {
|
||||||
|
abort(404, 'Pelanggan tidak dijumpai.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$cawanganResp = Http::withOptions($verify)->get($api_url . '/api/cawangan/detail/' . $kodcaw)->json();
|
||||||
|
$cawangan_detail = (is_array($cawanganResp) && isset($cawanganResp[0]))
|
||||||
|
? $cawanganResp[0]
|
||||||
|
: (is_array($cawanganResp) ? $cawanganResp : []);
|
||||||
|
|
||||||
|
$banks = Http::withOptions($verify)->get($api_url . '/api/bank')->json();
|
||||||
|
$pekerjaanList = Http::withOptions($verify)->get($api_url . '/api/pekerjaan')->json();
|
||||||
|
|
||||||
|
$poskodKod = $customer['poskod'] ?? '';
|
||||||
|
$poskod = [];
|
||||||
|
if ($poskodKod !== '' && $poskodKod !== null) {
|
||||||
|
$poskodResp = Http::withOptions($verify)->get($api_url . '/api/poskod/' . $poskodKod)->json();
|
||||||
|
if (is_array($poskodResp)) {
|
||||||
|
$poskod = $poskodResp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$daerahNama = 'NIL';
|
||||||
|
$negeriNama = 'NIL';
|
||||||
|
if (!empty($poskod['koddaerah'])) {
|
||||||
|
$daerahResp = Http::withOptions($verify)->get($api_url . '/api/daerah/' . $poskod['koddaerah'])->json();
|
||||||
|
$daerahNama = is_array($daerahResp) ? ($daerahResp['namadaerah'] ?? 'NIL') : 'NIL';
|
||||||
|
}
|
||||||
|
if (!empty($poskod['kodnegeri'])) {
|
||||||
|
$negeriResp = Http::withOptions($verify)->get($api_url . '/api/negeri/' . $poskod['kodnegeri'])->json();
|
||||||
|
$negeriNama = is_array($negeriResp) ? ($negeriResp['negeri'] ?? 'NIL') : 'NIL';
|
||||||
|
}
|
||||||
|
|
||||||
|
$bankNama = $this->lookupListValue($banks, 'abbreviation', $customer['kodbank'] ?? null, 'name');
|
||||||
|
$pekerjaanNama = $this->lookupListValue($pekerjaanList, 'kodkerja', $customer['kodkerja'] ?? null, 'keterangan');
|
||||||
|
if (($customer['kodkerja'] ?? '') == '6' && !empty($customer['nota_pekerjaan'])) {
|
||||||
|
$pekerjaanNama = $customer['nota_pekerjaan'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$photo_svg = '<svg xmlns="http://www.w3.org/2000/svg" width="240" height="320" viewBox="0 0 240 320">'
|
||||||
|
. '<rect fill="#d9dee5" width="240" height="320"/>'
|
||||||
|
. '<circle cx="120" cy="118" r="52" fill="#8b949e"/>'
|
||||||
|
. '<ellipse cx="120" cy="286" rx="90" ry="92" fill="#8b949e"/>'
|
||||||
|
. '</svg>';
|
||||||
|
$photo_src = 'data:image/svg+xml;base64,' . base64_encode($photo_svg);
|
||||||
|
if (!empty($customer['photo_base64'])) {
|
||||||
|
$mime = $customer['photo_mime'] ?? 'image/jpeg';
|
||||||
|
$photo_src = 'data:' . $mime . ';base64,' . $customer['photo_base64'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('print.maklumat_pelanggan', [
|
||||||
|
'cawangan' => $cawangan_detail['namacaw'] ?? ($cawangan_detail['details_caw'] ?? $kodcaw),
|
||||||
|
'kodcaw' => $kodcaw,
|
||||||
|
'alamat1' => $cawangan_detail['alamat1'] ?? '',
|
||||||
|
'alamat2' => $cawangan_detail['alamat2'] ?? '',
|
||||||
|
'notel' => $cawangan_detail['notel'] ?? '',
|
||||||
|
'tarikh' => Carbon::now()->format('d/m/Y'),
|
||||||
|
'nama' => $this->printBlank($customer['nama'] ?? null),
|
||||||
|
'nokp' => $this->printBlank(!empty($customer['kpbaru']) ? $customer['kpbaru'] : ($customer['kplama'] ?? $noic)),
|
||||||
|
'nopelanggan' => $this->printBlank($customer['nopelanggan'] ?? null),
|
||||||
|
'status' => (!empty($customer['tag_anggota']) && $customer['tag_anggota'] == 1) ? 'Anggota Koperasi' : 'Pelanggan',
|
||||||
|
'telefon' => $this->printBlank($customer['telefon'] ?? null),
|
||||||
|
'telefon2' => $this->printBlank($customer['telefon2'] ?? null),
|
||||||
|
'alamat' => $this->printBlank($customer['alamat1'] ?? null),
|
||||||
|
'poskod' => $this->printBlank($customer['poskod'] ?? null),
|
||||||
|
'daerah' => $daerahNama,
|
||||||
|
'negeri' => $negeriNama,
|
||||||
|
'bank' => $this->printBlank($bankNama),
|
||||||
|
'noakaun' => $this->printBlank($customer['noakaun'] ?? null),
|
||||||
|
'pekerjaan' => $this->printBlank($pekerjaanNama),
|
||||||
|
'nota' => $this->printBlank($customer['nota'] ?? null),
|
||||||
|
'photo_src' => $photo_src,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function printBlank($value)
|
||||||
|
{
|
||||||
|
if ($value === null) {
|
||||||
|
return 'NIL';
|
||||||
|
}
|
||||||
|
$value = is_string($value) ? trim($value) : $value;
|
||||||
|
return $value === '' ? 'NIL' : $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function lookupListValue($list, $key, $match, $nameKey)
|
||||||
|
{
|
||||||
|
if (!is_array($list) || $match === null || $match === '' || $match === '-') {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
foreach ($list as $item) {
|
||||||
|
if (is_array($item) && ($item[$key] ?? null) == $match) {
|
||||||
|
return $item[$nameKey] ?? '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -171,6 +171,11 @@
|
|||||||
<i class="fas fa-info-circle me-1"></i> Maklumat Pelanggan
|
<i class="fas fa-info-circle me-1"></i> Maklumat Pelanggan
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
<button class="btn btn-info d-flex align-items-center" data-toggle="modal"
|
||||||
|
data-target="#export_maklumat_modal" style="margin-right: 12px;">
|
||||||
|
<i class="fas fa-print me-1"></i> Cetak Maklumat Pelanggan
|
||||||
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Butang Assign Sebagai Anggota -->
|
<!-- Butang Assign Sebagai Anggota -->
|
||||||
@@ -635,6 +640,33 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="modal fade" id="export_maklumat_modal" tabindex="-1" aria-labelledby="export_maklumat_modalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-xl modal-dialog-centered" style="max-width: 920px;">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="export_maklumat_modalLabel">Eksport Maklumat Pelanggan</h5>
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
|
<span aria-hidden="true">×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body p-0" style="height: 80vh; background: #e8eaed;">
|
||||||
|
<iframe id="export_maklumat_iframe"
|
||||||
|
src="about:blank"
|
||||||
|
title="Maklumat Pelanggan"
|
||||||
|
style="width: 100%; height: 100%; border: 0;"></iframe>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$('#export_maklumat_modal').on('show.bs.modal', function () {
|
||||||
|
$('#export_maklumat_iframe').attr('src', '{{ route('customer.print.maklumat', ['noic' => $noic]) }}');
|
||||||
|
});
|
||||||
|
$('#export_maklumat_modal').on('hidden.bs.modal', function () {
|
||||||
|
$('#export_maklumat_iframe').attr('src', 'about:blank');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
<div class="modal fade" id="opt_modal" tabindex="-1" aria-labelledby="opt_modalLabel" aria-hidden="true">
|
<div class="modal fade" id="opt_modal" tabindex="-1" aria-labelledby="opt_modalLabel" aria-hidden="true">
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
|
|||||||
@@ -0,0 +1,292 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ms">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Dummy — Maklumat Pelanggan</title>
|
||||||
|
<style>
|
||||||
|
* { box-sizing: border-box; }
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
background: #e8eaed;
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
color: #111;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbar {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
z-index: 10;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 12px;
|
||||||
|
padding: 10px 16px;
|
||||||
|
background: #1f3a5f;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
.toolbar b { letter-spacing: 0.04em; }
|
||||||
|
.toolbar .hint { opacity: 0.85; }
|
||||||
|
.toolbar button {
|
||||||
|
border: 0;
|
||||||
|
background: #fff;
|
||||||
|
color: #1f3a5f;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 8px 16px;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sheet-wrap {
|
||||||
|
padding: 24px 0 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sheet {
|
||||||
|
width: 210mm;
|
||||||
|
min-height: 297mm;
|
||||||
|
margin: 0 auto;
|
||||||
|
background: #fff;
|
||||||
|
padding: 14mm 14mm 16mm;
|
||||||
|
box-shadow: 0 2px 12px rgba(0,0,0,.18);
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
text-align: center;
|
||||||
|
margin: 14px 0 4px;
|
||||||
|
}
|
||||||
|
.title h1 {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 14px;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
.title p {
|
||||||
|
margin: 4px 0 0;
|
||||||
|
font-size: 10px;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 1fr) 32mm;
|
||||||
|
gap: 12px;
|
||||||
|
align-items: start;
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.photo-box {
|
||||||
|
width: 32mm;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.photo-box img {
|
||||||
|
display: block;
|
||||||
|
width: 32mm;
|
||||||
|
height: 42mm;
|
||||||
|
object-fit: cover;
|
||||||
|
border: 1px solid #111;
|
||||||
|
background: #eef1f4;
|
||||||
|
}
|
||||||
|
.photo-box .caption {
|
||||||
|
margin-top: 4px;
|
||||||
|
font-size: 8.5px;
|
||||||
|
color: #444;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section {
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
.section-title {
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: bold;
|
||||||
|
background: #eef1f4;
|
||||||
|
border: 1px solid #111;
|
||||||
|
border-bottom: 0;
|
||||||
|
padding: 5px 8px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.fields {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
table.fields th,
|
||||||
|
table.fields td {
|
||||||
|
border: 1px solid #111;
|
||||||
|
padding: 6px 8px;
|
||||||
|
vertical-align: top;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
table.fields th {
|
||||||
|
width: 28%;
|
||||||
|
font-weight: normal;
|
||||||
|
background: #fafbfc;
|
||||||
|
color: #222;
|
||||||
|
}
|
||||||
|
|
||||||
|
@page {
|
||||||
|
size: A4;
|
||||||
|
margin: 10mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
body { background: #fff; }
|
||||||
|
.toolbar { display: none !important; }
|
||||||
|
.sheet-wrap { padding: 0; }
|
||||||
|
.sheet {
|
||||||
|
width: auto;
|
||||||
|
min-height: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
@php
|
||||||
|
$cawangan = 'KOTA BHARU 2';
|
||||||
|
$kodcaw = 'KB2';
|
||||||
|
$alamat1 = 'Lot 123, Jalan Sultan Yahya Petra';
|
||||||
|
$alamat2 = '15200 Kota Bharu, Kelantan';
|
||||||
|
$notel = '09-123 4567';
|
||||||
|
$tarikh = now()->format('d/m/Y');
|
||||||
|
|
||||||
|
$nama = 'AHMAD BIN ABDULLAH';
|
||||||
|
$nokp = '900101-03-1234';
|
||||||
|
$nopelanggan = 'KB2001234';
|
||||||
|
$telefon = '012-3456789';
|
||||||
|
$telefon2 = '09-765 4321';
|
||||||
|
$alamat = 'Lot 45, Kampung Sireh';
|
||||||
|
$poskod = '15050';
|
||||||
|
$daerah = 'Kota Bharu';
|
||||||
|
$negeri = 'Kelantan';
|
||||||
|
$bank = 'Malayan Banking Berhad (MAYBANK)';
|
||||||
|
$noakaun = '123456789012';
|
||||||
|
$pekerjaan = 'Kakitangan Kerajaan';
|
||||||
|
$nota = 'Pelanggan tetap cawangan KB2.';
|
||||||
|
$status = 'Anggota Koperasi';
|
||||||
|
|
||||||
|
$photo_svg = '<svg xmlns="http://www.w3.org/2000/svg" width="240" height="320" viewBox="0 0 240 320">'
|
||||||
|
. '<rect fill="#d9dee5" width="240" height="320"/>'
|
||||||
|
. '<circle cx="120" cy="118" r="52" fill="#8b949e"/>'
|
||||||
|
. '<ellipse cx="120" cy="286" rx="90" ry="92" fill="#8b949e"/>'
|
||||||
|
. '</svg>';
|
||||||
|
$photo_src = 'data:image/svg+xml;base64,' . base64_encode($photo_svg);
|
||||||
|
@endphp
|
||||||
|
|
||||||
|
<div class="toolbar">
|
||||||
|
<div>
|
||||||
|
<b>DUMMY FORM</b>
|
||||||
|
<span class="hint"> — reka bentuk cetakan A4 maklumat pelanggan. Data ini contoh sahaja.</span>
|
||||||
|
</div>
|
||||||
|
<button type="button" onclick="window.print()">Cetak / Pratinjau</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="sheet-wrap">
|
||||||
|
<div class="sheet">
|
||||||
|
<x-print.header
|
||||||
|
:cawangan="$cawangan"
|
||||||
|
:kodcaw="$kodcaw"
|
||||||
|
:alamat1="$alamat1"
|
||||||
|
:alamat2="$alamat2"
|
||||||
|
:notel="$notel"
|
||||||
|
:tarikh="$tarikh"
|
||||||
|
:norujukan="$nopelanggan"
|
||||||
|
rujukan-label="No. Pelanggan"
|
||||||
|
:show-dummy-badge="true"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div class="title">
|
||||||
|
<h1>Maklumat Pelanggan</h1>
|
||||||
|
<p>Salinan maklumat pengenalan diri pelanggan untuk rujukan cawangan.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="identity">
|
||||||
|
<div>
|
||||||
|
<div class="section-title">A. Pengenalan Diri</div>
|
||||||
|
<table class="fields">
|
||||||
|
<tr>
|
||||||
|
<th>Nama</th>
|
||||||
|
<td>{{ $nama }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>No. Kad Pengenalan</th>
|
||||||
|
<td>{{ $nokp }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>No. Pelanggan</th>
|
||||||
|
<td>{{ $nopelanggan }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Status</th>
|
||||||
|
<td>{{ $status }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="photo-box">
|
||||||
|
<img src="{{ $photo_src }}" alt="Gambar MyKad">
|
||||||
|
<div class="caption">Gambar MyKad</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<div class="section-title">B. Maklumat Hubungan & Alamat</div>
|
||||||
|
<table class="fields">
|
||||||
|
<tr>
|
||||||
|
<th>No. Telefon 1</th>
|
||||||
|
<td>{{ $telefon }}</td>
|
||||||
|
<th style="width:22%">No. Telefon 2</th>
|
||||||
|
<td>{{ $telefon2 }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Alamat</th>
|
||||||
|
<td colspan="3">{{ $alamat }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Poskod</th>
|
||||||
|
<td>{{ $poskod }}</td>
|
||||||
|
<th>Daerah</th>
|
||||||
|
<td>{{ $daerah }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Negeri</th>
|
||||||
|
<td colspan="3">{{ $negeri }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<div class="section-title">C. Bank & Pekerjaan</div>
|
||||||
|
<table class="fields">
|
||||||
|
<tr>
|
||||||
|
<th>Bank</th>
|
||||||
|
<td colspan="3">{{ $bank }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>No. Akaun</th>
|
||||||
|
<td colspan="3">{{ $noakaun }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Pekerjaan</th>
|
||||||
|
<td colspan="3">{{ $pekerjaan }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Nota</th>
|
||||||
|
<td colspan="3">{{ $nota }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<x-print.footer :show-copies="false">
|
||||||
|
<b>Nota:</b>
|
||||||
|
<p>1. Borang ini dicetak dari skrin Maklumat Pelanggan untuk rujukan cawangan.</p>
|
||||||
|
<p>2. Gambar diambil daripada rekod MyKad pelanggan dalam sistem.</p>
|
||||||
|
</x-print.footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,260 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ms">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Maklumat Pelanggan — {{ $nopelanggan }}</title>
|
||||||
|
<style>
|
||||||
|
* { box-sizing: border-box; }
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
background: #e8eaed;
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
color: #111;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbar {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
z-index: 10;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 12px;
|
||||||
|
padding: 10px 16px;
|
||||||
|
background: #1f3a5f;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
.toolbar b { letter-spacing: 0.04em; }
|
||||||
|
.toolbar .hint { opacity: 0.85; }
|
||||||
|
.toolbar button {
|
||||||
|
border: 0;
|
||||||
|
background: #fff;
|
||||||
|
color: #1f3a5f;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 8px 16px;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sheet-wrap {
|
||||||
|
padding: 24px 0 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sheet {
|
||||||
|
width: 210mm;
|
||||||
|
min-height: 297mm;
|
||||||
|
margin: 0 auto;
|
||||||
|
background: #fff;
|
||||||
|
padding: 14mm 14mm 16mm;
|
||||||
|
box-shadow: 0 2px 12px rgba(0,0,0,.18);
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
text-align: center;
|
||||||
|
margin: 14px 0 4px;
|
||||||
|
}
|
||||||
|
.title h1 {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 14px;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
.title p {
|
||||||
|
margin: 4px 0 0;
|
||||||
|
font-size: 10px;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 1fr) 32mm;
|
||||||
|
gap: 12px;
|
||||||
|
align-items: start;
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.photo-box {
|
||||||
|
width: 32mm;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.photo-box img {
|
||||||
|
display: block;
|
||||||
|
width: 32mm;
|
||||||
|
height: 42mm;
|
||||||
|
object-fit: cover;
|
||||||
|
border: 1px solid #111;
|
||||||
|
background: #eef1f4;
|
||||||
|
}
|
||||||
|
.photo-box .caption {
|
||||||
|
margin-top: 4px;
|
||||||
|
font-size: 8.5px;
|
||||||
|
color: #444;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section {
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
.section-title {
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: bold;
|
||||||
|
background: #eef1f4;
|
||||||
|
border: 1px solid #111;
|
||||||
|
border-bottom: 0;
|
||||||
|
padding: 5px 8px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.fields {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
table.fields th,
|
||||||
|
table.fields td {
|
||||||
|
border: 1px solid #111;
|
||||||
|
padding: 6px 8px;
|
||||||
|
vertical-align: top;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
table.fields th {
|
||||||
|
width: 28%;
|
||||||
|
font-weight: normal;
|
||||||
|
background: #fafbfc;
|
||||||
|
color: #222;
|
||||||
|
}
|
||||||
|
|
||||||
|
@page {
|
||||||
|
size: A4;
|
||||||
|
margin: 10mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
body { background: #fff; }
|
||||||
|
.toolbar { display: none !important; }
|
||||||
|
.sheet-wrap { padding: 0; }
|
||||||
|
.sheet {
|
||||||
|
width: auto;
|
||||||
|
min-height: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="toolbar">
|
||||||
|
<div>
|
||||||
|
<b>Maklumat Pelanggan</b>
|
||||||
|
<span class="hint"> — {{ $nama }}</span>
|
||||||
|
</div>
|
||||||
|
<button type="button" onclick="window.print()">Cetak / Pratinjau</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="sheet-wrap">
|
||||||
|
<div class="sheet">
|
||||||
|
<x-print.header
|
||||||
|
:cawangan="$cawangan"
|
||||||
|
:kodcaw="$kodcaw"
|
||||||
|
:alamat1="$alamat1"
|
||||||
|
:alamat2="$alamat2"
|
||||||
|
:notel="$notel"
|
||||||
|
:tarikh="$tarikh"
|
||||||
|
:norujukan="$nopelanggan"
|
||||||
|
rujukan-label="No. Pelanggan"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div class="title">
|
||||||
|
<h1>Maklumat Pelanggan</h1>
|
||||||
|
<p>Salinan maklumat pengenalan diri pelanggan untuk rujukan cawangan.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="identity">
|
||||||
|
<div>
|
||||||
|
<div class="section-title">A. Pengenalan Diri</div>
|
||||||
|
<table class="fields">
|
||||||
|
<tr>
|
||||||
|
<th>Nama</th>
|
||||||
|
<td>{{ $nama }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>No. Kad Pengenalan</th>
|
||||||
|
<td>{{ $nokp }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>No. Pelanggan</th>
|
||||||
|
<td>{{ $nopelanggan }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Status</th>
|
||||||
|
<td>{{ $status }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="photo-box">
|
||||||
|
<img src="{{ $photo_src }}" alt="Gambar MyKad">
|
||||||
|
<div class="caption">Gambar MyKad</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<div class="section-title">B. Maklumat Hubungan & Alamat</div>
|
||||||
|
<table class="fields">
|
||||||
|
<tr>
|
||||||
|
<th>No. Telefon 1</th>
|
||||||
|
<td>{{ $telefon }}</td>
|
||||||
|
<th style="width:22%">No. Telefon 2</th>
|
||||||
|
<td>{{ $telefon2 }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Alamat</th>
|
||||||
|
<td colspan="3">{{ $alamat }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Poskod</th>
|
||||||
|
<td>{{ $poskod }}</td>
|
||||||
|
<th>Daerah</th>
|
||||||
|
<td>{{ $daerah }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Negeri</th>
|
||||||
|
<td colspan="3">{{ $negeri }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<div class="section-title">C. Bank & Pekerjaan</div>
|
||||||
|
<table class="fields">
|
||||||
|
<tr>
|
||||||
|
<th>Bank</th>
|
||||||
|
<td colspan="3">{{ $bank }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>No. Akaun</th>
|
||||||
|
<td colspan="3">{{ $noakaun }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Pekerjaan</th>
|
||||||
|
<td colspan="3">{{ $pekerjaan }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Nota</th>
|
||||||
|
<td colspan="3">{{ $nota }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<x-print.footer :show-copies="false">
|
||||||
|
<b>Nota:</b>
|
||||||
|
<p>1. Borang ini dicetak dari skrin Maklumat Pelanggan untuk rujukan cawangan.</p>
|
||||||
|
<p>2. Gambar diambil daripada rekod MyKad pelanggan dalam sistem.</p>
|
||||||
|
</x-print.footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -28,6 +28,10 @@ Route::get('/dummy/borang-batch-pembiayaan-online', function () {
|
|||||||
return view('dummy.borang_batch_pembiayaan_online');
|
return view('dummy.borang_batch_pembiayaan_online');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Route::get('/dummy/maklumat-pelanggan', function () {
|
||||||
|
return view('dummy.maklumat_pelanggan');
|
||||||
|
});
|
||||||
|
|
||||||
Route::get('/',['as'=>'login','uses'=>'HomeController@index']);
|
Route::get('/',['as'=>'login','uses'=>'HomeController@index']);
|
||||||
|
|
||||||
Route::get('/testtry',function(ImbangdugaServices $imbangduga){
|
Route::get('/testtry',function(ImbangdugaServices $imbangduga){
|
||||||
@@ -102,6 +106,7 @@ Route::get('/home', 'HomeController@index')->name('home');
|
|||||||
//Teller
|
//Teller
|
||||||
Route::get('/pelanggan','CustomersController@index')->middleware('auth','teller');
|
Route::get('/pelanggan','CustomersController@index')->middleware('auth','teller');
|
||||||
Route::get('/customer_info',['as'=>'customer_info','uses'=>'CustomersController@info'])->middleware('auth','teller');
|
Route::get('/customer_info',['as'=>'customer_info','uses'=>'CustomersController@info'])->middleware('auth','teller');
|
||||||
|
Route::get('/customer/maklumat/cetak',['as'=>'customer.print.maklumat','uses'=>'CustomersController@printMaklumat'])->middleware('auth','teller');
|
||||||
Route::get('/gadaian',['as'=>'gadaian','uses'=>'GadaianController@index'])->middleware('auth','teller');
|
Route::get('/gadaian',['as'=>'gadaian','uses'=>'GadaianController@index'])->middleware('auth','teller');
|
||||||
Route::get('/daftar_marhun',['as'=>'daftar_marhun','uses'=>'MarhunController@index'])->middleware('auth','teller');
|
Route::get('/daftar_marhun',['as'=>'daftar_marhun','uses'=>'MarhunController@index'])->middleware('auth','teller');
|
||||||
Route::get('/penebusan/{norujukan}',['as'=>'penebusan','uses' => 'PenebusanController@index'])->middleware('auth');
|
Route::get('/penebusan/{norujukan}',['as'=>'penebusan','uses' => 'PenebusanController@index'])->middleware('auth');
|
||||||
|
|||||||
Reference in New Issue
Block a user