hr dan payroll

This commit is contained in:
Wian Drs
2026-09-15 10:38:43 +07:00
parent 5e1fd11410
commit 8fedd39d8f
47 changed files with 1409 additions and 370 deletions
@@ -33,9 +33,22 @@ $accountCode=function($value){return preg_replace('/(?:[\.,]0+)$/','',(string)$v
<div class="col-lg-6"><div class="card h-100"><div class="card-header bg-danger text-white"><b>BEBAN</b></div><div class="card-body p-0"><table class="table mb-0"><tbody><?php foreach($expenses as$r):?><tr><td><?=html_escape($accountCode($r['kode_akun']).' · '.$r['nama_akun'])?></td><td class="text-end"><?=$money($r['amount'])?></td></tr><?php endforeach?></tbody><tfoot><tr class="table-danger"><th>TOTAL BEBAN</th><th class="text-end">Rp <?=$money($totalExpense)?></th></tr></tfoot></table></div></div></div>
</div>
<div class="card mt-3"><div class="card-body d-flex justify-content-between align-items-center"><h5 class="mb-0"><?=$netProfit>=0?'LABA BERSIH':'RUGI BERSIH'?></h5><h4 class="mb-0 <?=$netProfit>=0?'text-success':'text-danger'?>">Rp <?=$money(abs($netProfit))?></h4></div></div>
<?php elseif($report==='cash_flow'): ?>
<div class="row g-2 mb-3">
<?php foreach(array('opening_balance'=>'Saldo Awal Kas','operating'=>'Aktivitas Operasi','investing'=>'Aktivitas Investasi','financing'=>'Aktivitas Pendanaan','increase_decrease'=>'Kenaikan / Penurunan Kas','closing_balance'=>'Saldo Akhir Kas')as$key=>$label):?>
<div class="col-md-4 col-xl-2"><div class="card h-100"><div class="card-body"><small class="text-muted"><?=$label?></small><strong class="d-block mt-1 <?=((float)($report_summary[$key]??0))<0?'text-danger':''?>">Rp <?=$money($report_summary[$key]??0)?></strong></div></div></div>
<?php endforeach?>
</div>
<div class="card"><div class="card-header"><b>Detail Transaksi Pembentuk Arus Kas</b><small class="d-block text-muted">Saldo berjalan mencakup seluruh akun kas/bank yang dipilih.</small></div><div class="table-responsive"><table class="table table-sm align-middle mb-0"><thead><tr><th>Tanggal</th><th>Referensi</th><th>Keterangan</th><th>Akun</th><th>Aktivitas</th><th class="text-end">Kas Masuk</th><th class="text-end">Kas Keluar</th><th class="text-end">Saldo</th></tr></thead><tbody><?php foreach($rows as$r):?><tr><td><?=html_escape($r['tanggal'])?></td><td><a href="<?=base_url('jurnal?focus='.$r['journal_id'])?>"><?=html_escape($r['no_ref']?:'#'.$r['journal_id'])?></a></td><td><?=html_escape($r['keterangan'])?></td><td><?=html_escape($r['akun'])?></td><td><?=html_escape($r['aktivitas'])?></td><td class="text-end text-success"><?=$money($r['kas_masuk'])?></td><td class="text-end text-danger"><?=$money($r['kas_keluar'])?></td><td class="text-end fw-semibold"><?=$money($r['saldo_berjalan'])?></td></tr><?php endforeach?><?php if(!$rows):?><tr><td colspan="8" class="text-center text-muted py-4">Tidak ada transaksi kas pada periode ini.</td></tr><?php endif?></tbody><tfoot><tr><th colspan="5">Total Mutasi</th><th class="text-end"><?=$money($report_summary['cash_in']??0)?></th><th class="text-end"><?=$money($report_summary['cash_out']??0)?></th><th class="text-end"><?=$money($report_summary['closing_balance']??0)?></th></tr></tfoot></table></div></div>
<?php elseif($report==='general_ledger'): ?>
<div class="card mb-3"><div class="card-header"><b>Ringkasan Saldo per Akun</b><small class="d-block text-muted">Saldo awal berasal dari seluruh jurnal sebelum periode, bukan dari pagination tampilan.</small></div><div class="table-responsive"><table class="table table-sm mb-0"><thead><tr><th>Akun</th><th class="text-end">Saldo Awal</th><th class="text-end">Total Debit</th><th class="text-end">Total Kredit</th><th class="text-end">Saldo Akhir</th></tr></thead><tbody><?php foreach($report_summary as$r):?><tr><td><?=html_escape($accountCode($r['kode_akun']).' - '.$r['nama_akun'])?></td><td class="text-end"><?=$money($r['saldo_awal'])?></td><td class="text-end"><?=$money($r['total_debit'])?></td><td class="text-end"><?=$money($r['total_kredit'])?></td><td class="text-end fw-bold"><?=$money($r['saldo_akhir'])?></td></tr><?php endforeach?><?php if(!$report_summary):?><tr><td colspan="5" class="text-center text-muted py-4">Tidak ada saldo atau mutasi akun.</td></tr><?php endif?></tbody></table></div></div>
<div class="card"><div class="card-header"><b>Rincian Buku Besar</b></div><div class="table-responsive"><table class="table table-sm align-middle mb-0"><thead><tr><th>Akun</th><th>Tanggal</th><th>Referensi</th><th>Keterangan</th><th class="text-end">Debit</th><th class="text-end">Kredit</th><th class="text-end">Saldo Berjalan</th></tr></thead><tbody><?php foreach($rows as$r):?><tr><td><?=html_escape($accountCode($r['kode_akun']).' - '.$r['nama_akun'])?></td><td><?=html_escape($r['tanggal'])?></td><td><a href="<?=base_url('jurnal?focus='.$r['journal_id'])?>"><?=html_escape($r['no_ref'])?></a></td><td><?=html_escape($r['keterangan'])?></td><td class="text-end"><?=$money($r['debit'])?></td><td class="text-end"><?=$money($r['kredit'])?></td><td class="text-end fw-semibold"><?=$money($r['saldo_berjalan'])?></td></tr><?php endforeach?><?php if(!$rows):?><tr><td colspan="7" class="text-center text-muted py-4">Tidak ada transaksi pada periode ini.</td></tr><?php endif?></tbody></table></div></div>
<?php elseif($report==='receivable_reconciliation'): ?>
<div class="row g-2 mb-3"><div class="col-md-4"><div class="card h-100"><div class="card-body"><small class="text-muted">Subledger Invoice</small><strong class="d-block">Rp <?=$money($report_summary['subledger']??0)?></strong></div></div></div><div class="col-md-4"><div class="card h-100"><div class="card-body"><small class="text-muted">Saldo Buku Besar Piutang</small><strong class="d-block">Rp <?=$money($report_summary['general_ledger']??0)?></strong></div></div></div><div class="col-md-4"><div class="card h-100 border-<?=$report_summary['balanced']?'success':'warning'?>"><div class="card-body"><small class="text-muted">Selisih Belum Terpetakan</small><strong class="d-block <?=$report_summary['balanced']?'text-success':'text-warning'?>">Rp <?=$money($report_summary['difference']??0)?></strong></div></div></div></div>
<div class="card"><div class="card-header"><b>Piutang per Invoice sampai <?=html_escape($filters['to'])?></b><small class="d-block text-muted">Pembayaran, credit note, dan write-off ditelusuri sampai tanggal laporan. Selisih data lama tetap ditampilkan untuk kebutuhan koreksi.</small></div><div class="table-responsive"><table class="table table-sm align-middle mb-0"><thead><tr><th>Customer</th><th>Invoice</th><th>Tanggal</th><th>Jatuh Tempo</th><th class="text-end">Nilai Piutang</th><th class="text-end">Pembayaran</th><th class="text-end">Credit Note</th><th class="text-end">Write-off</th><th class="text-end">Sisa</th><th>Status</th><th>Referensi</th></tr></thead><tbody><?php foreach($rows as$r):?><tr class="<?=!empty($r['reconciliation_adjustment'])?'table-warning':''?>"><td><?=html_escape($r['customer'])?></td><td><?php if(!empty($r['record_id'])):?><a href="<?=base_url('invoices/detail/'.$r['record_id'])?>"><?=html_escape($r['no_invoice'])?></a><?php else:?><?=html_escape($r['no_invoice'])?><?php endif?></td><td><?=html_escape($r['invoice_date']?:'-')?></td><td><?=html_escape($r['due_date']?:'-')?></td><td class="text-end"><?=$money($r['receivable_amount'])?></td><td class="text-end"><?=$money($r['payments'])?></td><td class="text-end"><?=$money($r['credit_notes'])?></td><td class="text-end"><?=$money($r['writeoffs'])?></td><td class="text-end fw-bold"><?=$money($r['remaining_receivable'])?></td><td><?=html_escape($r['status'])?></td><td><?=html_escape($r['transaction_references']?:'-')?></td></tr><?php endforeach?></tbody><tfoot><tr><th colspan="8">Total setelah rekonsiliasi</th><th class="text-end">Rp <?=$money($report_summary['general_ledger']??0)?></th><th colspan="2"></th></tr></tfoot></table></div></div>
<?php else: ?>
<?php $visibleColumns=$rows?array_values(array_filter(array_keys($rows[0]),function($key){return$key!=='record_id';})):array();$documentTypes=array('return_no'=>'purchase_return','refund_no'=>'supplier_refund','debit_note_no'=>'supplier_debit_note'); ?>
<div class="card"><div class="table-responsive"><table class="table table-sm mb-0"><thead><?php if($rows):?><tr><?php foreach($visibleColumns as$h):?><th><?=html_escape(ucwords(str_replace('_',' ',$h)))?></th><?php endforeach?></tr><?php endif?></thead><tbody><?php foreach($rows as$r):?><tr><?php foreach($visibleColumns as$k):$v=$r[$k];?><td class="<?=is_numeric($v)&&!preg_match('/(^id$|_id$|kode_akun$)/',$k)?'text-end':''?>"><?php if($k==='journal_id'&&$v):?><a href="<?=base_url('jurnal/detail/'.$v)?>">#<?=$v?></a><?php elseif(isset($documentTypes[$k])&&!empty($r['record_id'])):?><a href="<?=base_url('purchases/returns?action=history&focus_type='.$documentTypes[$k].'&focus='.$r['record_id'])?>"><?=html_escape($v)?></a><?php elseif($k==='kode_akun'):?><?=html_escape($accountCode($v))?><?php elseif(is_numeric($v)&&!preg_match('/(^id$|_id$|kode_akun$)/',$k)):?><?=$money($v)?><?php else:?><?=html_escape($v===null?'-':$v)?><?php endif?></td><?php endforeach?></tr><?php endforeach?></tbody></table></div></div>
<div class="card"><div class="table-responsive"><table class="table table-sm mb-0"><thead><?php if($rows):?><tr><?php foreach($visibleColumns as$h):?><th><?=html_escape(ucwords(str_replace('_',' ',$h)))?></th><?php endforeach?></tr><?php endif?></thead><tbody><?php foreach($rows as$r):?><tr><?php foreach($visibleColumns as$k):$v=$r[$k];?><td class="<?=is_numeric($v)&&!preg_match('/(^id$|_id$|kode_akun$)/',$k)?'text-end':''?>"><?php if($k==='journal_id'&&$v):?><a href="<?=base_url('jurnal?focus='.$v)?>">#<?=$v?></a><?php elseif(isset($documentTypes[$k])&&!empty($r['record_id'])):?><a href="<?=base_url('purchases/returns?action=history&focus_type='.$documentTypes[$k].'&focus='.$r['record_id'])?>"><?=html_escape($v)?></a><?php elseif($k==='kode_akun'):?><?=html_escape($accountCode($v))?><?php elseif(is_numeric($v)&&!preg_match('/(^id$|_id$|kode_akun$)/',$k)):?><?=$money($v)?><?php else:?><?=html_escape($v===null?'-':$v)?><?php endif?></td><?php endforeach?></tr><?php endforeach?></tbody></table></div></div>
<?php endif; ?>
<div class="mt-3"><b>Subledger:</b> <a href="<?=base_url('receivables')?>">Aging Piutang</a> · <a href="<?=base_url('payables')?>">Aging Hutang</a> · <a href="<?=base_url('inventoryprofessional')?>">Persediaan</a> · <a href="<?=base_url('fixedassets')?>">Aset</a> · <a href="<?=base_url('hrpayroll')?>">Payroll</a> · <a href="<?=base_url('purchases/returns')?>">Retur &amp; Refund</a></div>
</div>