63 lines
11 KiB
PHP
63 lines
11 KiB
PHP
<?php
|
|
$company=$pdf_company;
|
|
$currencyCode=isset($pdf_currency->code)?$pdf_currency->code:($company->base_currency??'IDR');
|
|
$currencySymbol=isset($pdf_currency->symbol)&&trim((string)$pdf_currency->symbol)!==''?$pdf_currency->symbol:'Rp';
|
|
$allocatedTotal=0;foreach($allocations as$allocation)$allocatedTotal+=(float)$allocation->amount;
|
|
$sourceTotal=0;foreach($sources as$source)$sourceTotal+=(float)$source->amount;
|
|
$advance=max(0,round((float)$payment->jumlah-$allocatedTotal,2));
|
|
function receiptMoney($value){return number_format((float)$value,2,',','.');}
|
|
function receiptDate($value){
|
|
if(!$value)return'-';$time=strtotime($value);if(!$time)return$value;
|
|
$months=array(1=>'Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember');
|
|
return date('j',$time).' '.$months[(int)date('n',$time)].' '.date('Y',$time);
|
|
}
|
|
function receiptWords($number){
|
|
$number=abs((int)$number);$base=array('','satu','dua','tiga','empat','lima','enam','tujuh','delapan','sembilan','sepuluh','sebelas');
|
|
if($number<12)return$base[$number];
|
|
if($number<20)return receiptWords($number-10).' belas';
|
|
if($number<100)return trim(receiptWords(intdiv($number,10)).' puluh '.receiptWords($number%10));
|
|
if($number<200)return trim('seratus '.receiptWords($number-100));
|
|
if($number<1000)return trim(receiptWords(intdiv($number,100)).' ratus '.receiptWords($number%100));
|
|
if($number<2000)return trim('seribu '.receiptWords($number-1000));
|
|
if($number<1000000)return trim(receiptWords(intdiv($number,1000)).' ribu '.receiptWords($number%1000));
|
|
if($number<1000000000)return trim(receiptWords(intdiv($number,1000000)).' juta '.receiptWords($number%1000000));
|
|
if($number<1000000000000)return trim(receiptWords(intdiv($number,1000000000)).' miliar '.receiptWords($number%1000000000));
|
|
return trim(receiptWords(intdiv($number,1000000000000)).' triliun '.receiptWords($number%1000000000000));
|
|
}
|
|
$amountWords=ucfirst(receiptWords((int)floor((float)$payment->jumlah))).' rupiah';
|
|
?>
|
|
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Bukti Penerimaan <?=html_escape($payment->payment_no)?></title>
|
|
<style>
|
|
@page{margin:25px 30px 35px}body{font-family:DejaVu Sans,sans-serif;font-size:9px;color:#172033;line-height:1.45;margin:0}.header{width:100%;border-collapse:collapse;margin-bottom:16px}.header td{vertical-align:top}.brand{width:62%}.logo{float:left;width:58px;height:58px;object-fit:contain;margin-right:10px}.company-name{font-size:14px;font-weight:700;color:#172b4d;margin-bottom:2px}.company-legal{font-size:8px;color:#667085;margin-bottom:3px}.company-contact{font-size:8px;color:#475467;line-height:1.4}.document{text-align:right}.document-title{font-size:18px;font-weight:700;color:#172b4d;letter-spacing:.03em}.document-number{font-size:10px;font-weight:700;margin-top:3px}.status{display:inline-block;background:#e8f7ef;color:#087443;border:1px solid #a9dfc4;padding:3px 9px;margin-top:7px;font-size:7.5px;font-weight:700;letter-spacing:.08em}.accent{height:3px;background:#f47b20;margin-bottom:15px}.amount-panel{width:100%;border-collapse:collapse;background:#172b4d;color:#fff;margin-bottom:14px}.amount-panel td{padding:12px 14px}.amount-label{font-size:7.5px;letter-spacing:.12em;color:#d7e0ef}.amount-value{text-align:right;font-size:17px;font-weight:700}.info{width:100%;border-collapse:collapse;margin-bottom:15px}.info td{width:50%;vertical-align:top;border:1px solid #d9e0ea;padding:10px 11px}.info td+td{border-left:0}.eyebrow{font-size:7px;color:#667085;font-weight:700;letter-spacing:.1em;text-transform:uppercase;margin-bottom:4px}.customer{font-size:11px;font-weight:700;color:#172b4d;margin-bottom:3px}.meta{width:100%;border-collapse:collapse}.meta td{border:0!important;padding:1px 0!important;font-size:8.5px}.meta .label{width:42%;color:#667085}.meta .value{text-align:right;font-weight:600}.section{margin-top:14px}.section-title{font-size:10px;font-weight:700;color:#172b4d;margin:0 0 6px}.section-subtitle{font-size:7.5px;color:#667085;font-weight:400}.grid{width:100%;border-collapse:collapse}.grid th{background:#f1f4f8;color:#344054;font-size:7px;letter-spacing:.06em;text-transform:uppercase;text-align:left}.grid th,.grid td{border:1px solid #d9e0ea;padding:6px 7px}.grid .number{width:24px;text-align:center}.right{text-align:right!important}.center{text-align:center!important}.strong{font-weight:700;color:#172b4d}.empty{text-align:center;color:#667085;padding:12px!important}.summary{width:46%;margin:8px 0 0 auto;border-collapse:collapse}.summary td{padding:3px 2px}.summary td:last-child{text-align:right}.summary .grand td{border-top:1px solid #98a2b3;padding-top:6px;font-size:10px;font-weight:700;color:#172b4d}.words{border-left:3px solid #f47b20;background:#fff8f1;padding:8px 10px;margin-top:13px;color:#344054}.words-label{font-size:7px;color:#a14b0b;letter-spacing:.08em;font-weight:700;text-transform:uppercase}.notes{margin-top:10px;padding:8px 10px;border:1px solid #d9e0ea;background:#fafbfc}.signatures{width:100%;border-collapse:collapse;margin-top:27px;text-align:center}.signatures td{width:50%;height:72px;vertical-align:top;color:#475467}.signature-name{font-weight:700;color:#172b4d;border-top:1px solid #98a2b3;padding-top:4px;margin:42px auto 0;width:70%}.legal-note{font-size:7.5px;color:#667085;text-align:center;border-top:1px solid #e4e7ec;padding-top:7px;margin-top:12px}.footer{position:fixed;left:0;right:0;bottom:-22px;font-size:7px;color:#98a2b3}.footer-right{float:right}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<table class="header"><tr><td class="brand">
|
|
<?php if(!empty($pdf_logo_data)):?><img class="logo" src="<?=$pdf_logo_data?>" alt="Logo"><?php endif?>
|
|
<div class="company-name"><?=html_escape($company->name??'Perusahaan')?></div>
|
|
<?php if(!empty($company->legal_name)&&$company->legal_name!==$company->name):?><div class="company-legal"><?=html_escape($company->legal_name)?></div><?php endif?>
|
|
<div class="company-contact"><?=nl2br(html_escape($company->address?:'-'))?><br>Telp: <?=html_escape($company->phone?:'-')?><?php if(!empty($company->email)):?> | <?=html_escape($company->email)?><?php endif?></div>
|
|
</td><td class="document"><div class="document-title">BUKTI PENERIMAAN</div><div class="document-number"><?=html_escape($payment->payment_no)?></div><span class="status">PEMBAYARAN TERCATAT</span></td></tr></table>
|
|
<div class="accent"></div>
|
|
|
|
<table class="amount-panel"><tr><td><div class="amount-label">TOTAL DANA DITERIMA</div><div><?=html_escape($currencyCode)?> • <?=receiptDate($payment->tanggal)?></div></td><td class="amount-value"><?=html_escape($currencySymbol)?> <?=receiptMoney($payment->jumlah)?></td></tr></table>
|
|
|
|
<table class="info"><tr><td><div class="eyebrow">Diterima dari</div><div class="customer"><?=html_escape($payment->customer_name)?></div><div><?=nl2br(html_escape($payment->customer_address?:'-'))?></div><?php if(!empty($payment->customer_phone)||!empty($payment->customer_email)):?><div style="margin-top:3px;color:#667085"><?=html_escape($payment->customer_phone?:'-')?><?php if(!empty($payment->customer_email)):?> • <?=html_escape($payment->customer_email)?><?php endif?></div><?php endif?></td><td><div class="eyebrow">Informasi penerimaan</div><table class="meta"><tr><td class="label">Tanggal</td><td class="value"><?=receiptDate($payment->tanggal)?></td></tr><tr><td class="label">Referensi</td><td class="value"><?=html_escape($payment->reference_no?:'-')?></td></tr><tr><td class="label">Metode</td><td class="value"><?=html_escape($payment->metode==='multi_account'?'Multi Akun':ucwords(str_replace('_',' ',$payment->metode?:'Pembayaran'))) ?></td></tr><tr><td class="label">Status</td><td class="value">TERCATAT</td></tr></table></td></tr></table>
|
|
|
|
<div class="section"><div class="section-title">Alokasi Pembayaran <span class="section-subtitle">— rincian tagihan yang dilunasi</span></div><table class="grid"><thead><tr><th class="number">No.</th><th>Nomor Invoice</th><th>Tanggal Invoice</th><th>Jatuh Tempo</th><th class="right">Nilai Dialokasikan</th></tr></thead><tbody><?php foreach($allocations as$i=>$allocation):?><tr><td class="number"><?=$i+1?></td><td class="strong"><?=html_escape($allocation->no_invoice)?></td><td><?=receiptDate($allocation->invoice_date)?></td><td><?=receiptDate($allocation->jatuh_tempo)?></td><td class="right strong"><?=html_escape($currencySymbol)?> <?=receiptMoney($allocation->amount)?></td></tr><?php endforeach?><?php if(!$allocations):?><tr><td colspan="5" class="empty">Pembayaran belum dialokasikan ke invoice tertentu.</td></tr><?php endif?></tbody></table><?php if($advance>.001):?><table class="summary"><tr><td>Alokasi invoice</td><td><?=receiptMoney($allocatedTotal)?></td></tr><tr><td>Uang muka customer</td><td><?=receiptMoney($advance)?></td></tr><tr class="grand"><td>Total diterima</td><td><?=html_escape($currencySymbol)?> <?=receiptMoney($payment->jumlah)?></td></tr></table><?php endif?></div>
|
|
|
|
<div class="section"><div class="section-title">Sumber Penerimaan <span class="section-subtitle">— akun tujuan pencatatan dana</span></div><table class="grid"><thead><tr><th class="number">No.</th><th>Kode Akun</th><th>Nama Akun Kas/Bank</th><th class="right">Nominal</th></tr></thead><tbody><?php foreach($sources as$i=>$source):?><tr><td class="number"><?=$i+1?></td><td><?=html_escape($source->kode_akun)?></td><td class="strong"><?=html_escape($source->nama_akun)?></td><td class="right strong"><?=html_escape($currencySymbol)?> <?=receiptMoney($source->amount)?></td></tr><?php endforeach?><?php if(!$sources):?><tr><td colspan="4" class="empty">Sumber penerimaan tidak tersedia.</td></tr><?php endif?></tbody><tfoot><tr><td colspan="3" class="right strong">TOTAL PENERIMAAN</td><td class="right strong"><?=html_escape($currencySymbol)?> <?=receiptMoney($sourceTotal)?></td></tr></tfoot></table></div>
|
|
|
|
<div class="words"><div class="words-label">Terbilang</div><b><?=html_escape($amountWords)?></b></div>
|
|
<div class="notes"><div class="eyebrow">Catatan pembayaran</div><?=nl2br(html_escape($payment->notes?:'Tidak ada catatan tambahan.'))?></div>
|
|
|
|
<table class="signatures"><tr><td>Dicatat oleh<div class="signature-name"><?=html_escape($payment->creator_name?:'-')?></div><div>Finance / Administrasi</div></td><td>Pihak Pembayar<div class="signature-name"><?=html_escape($payment->customer_name)?></div><div>Customer</div></td></tr></table>
|
|
<div class="legal-note">Dokumen ini merupakan bukti penerimaan pembayaran yang tercatat pada sistem <?=html_escape($company->name??'perusahaan')?> dengan nomor referensi unik <?=html_escape($payment->payment_no)?>.</div>
|
|
<div class="footer"><span>Dicetak <?=date('d-m-Y H:i')?> • <?=html_escape($payment->payment_no)?></span><span class="footer-right"><?=html_escape($company->company_code??'')?></span></div>
|
|
</body>
|
|
</html>
|