Files
accounting_dev_v2/application/views/sales/index.php
T
2026-09-12 01:45:03 +07:00

26 lines
9.6 KiB
PHP

<?php
$csrfName=$this->security->get_csrf_token_name();$csrfHash=$this->security->get_csrf_hash();$p=$permissions;
$section=isset($section)?$section:'summary';
$pageTitle=$section==='delivery'?'Pengiriman / Surat Jalan':($section==='return'?'Retur Penjualan & Refund':'Ringkasan Penjualan');
$pageIntro=$section==='delivery'?'Kelola bukti pengiriman, posting pengeluaran stok, dan Surat Jalan dari invoice yang telah disetujui.':($section==='return'?'Kelola pengajuan retur, pemeriksaan barang kembali, pengembalian stok, credit note, dan refund secara tertelusur.':'Pusat pemantauan invoice, pengiriman, piutang, dan retur tanpa form transaksi yang tumpang tindih.');
function saleMoney($v){return'Rp '.number_format((float)$v,2,',','.');}
function saleStatus($v){$m=array('draft'=>'Draft','submitted'=>'Menunggu Approval','approved'=>'Disetujui','posted'=>'Posted','unpaid'=>'Belum Lunas','partial'=>'Sebagian','paid'=>'Lunas','received'=>'Diterima','completed'=>'Selesai','partially_returned'=>'Retur Sebagian','returned'=>'Diretur','credit_note'=>'Credit Note','restock'=>'Kembali ke Stok','quarantine'=>'Karantina','damaged'=>'Rusak','refund'=>'Refund','replacement'=>'Penggantian');return$m[$v]??ucwords(str_replace('_',' ',$v));}
?>
<link rel="stylesheet" href="<?=base_url('assets/css/sales-professional.css').'?v='.filemtime(FCPATH.'assets/css/sales-professional.css')?>">
<link rel="stylesheet" href="<?=base_url('assets/css/invoices-professional.css').'?v='.filemtime(FCPATH.'assets/css/invoices-professional.css')?>">
<style>.sales-page[data-section="summary"] #salesDelivery,.sales-page[data-section="delivery"] .sales-metrics,.sales-page[data-section="delivery"] #salesReturn,.sales-page[data-section="return"] .sales-metrics,.sales-page[data-section="return"] #salesDelivery{display:none!important}</style>
<section class="sales-page" data-section="<?=html_escape($section)?>">
<header class="sales-hero"><div><span>SIKLUS PENJUALAN</span><h2><?=html_escape($pageTitle)?></h2><p><?=html_escape($pageIntro)?></p></div><?php if($section==='return'&&$p['create']):?><a class="btn btn-primary" href="<?=base_url('sales/deliveries')?>"><i class="bi bi-arrow-counterclockwise"></i> Ajukan dari Surat Jalan</a><?php elseif($section==='delivery'):?><a class="btn btn-outline-primary" href="<?=base_url('invoices')?>"><i class="bi bi-receipt"></i> Lihat Invoice</a><?php elseif($p['create']):?><a class="btn btn-primary" href="<?=base_url('invoices/create')?>"><i class="bi bi-plus-lg"></i> Buat Invoice</a><?php endif?></header>
<?php $this->load->view('sales/_section_nav',array('sales_section'=>$section,'sales_summary'=>$summary)); ?>
<div class="sales-metrics"><article><small>Penjualan bulan ini</small><strong><?=saleMoney($summary['month_sales'])?></strong></article><article><small>Invoice belum lunas</small><strong><?=$summary['open_invoice']?></strong><span><?=$summary['overdue']?> jatuh tempo</span></article><article><small>Draft / approval</small><strong><?=$summary['draft']?></strong><span><a href="<?=base_url('invoices')?>">Buka daftar invoice</a></span></article><article><small>Operasional</small><strong><?=$summary['delivery']+$summary['return']?></strong><span><?=$summary['delivery']?> pengiriman · <?=$summary['return']?> retur</span></article></div>
<div class="row g-3">
<div class="col-12" id="salesDelivery"><div class="card"><div class="card-header"><div><b>Pengiriman / Surat Jalan</b><small>Posting Surat Jalan adalah satu-satunya proses pengurangan stok fisik.</small></div><a class="btn btn-sm btn-outline-primary" href="<?=base_url('invoices')?>">Lihat Invoice</a></div><div class="table-responsive"><table class="table align-middle mb-0"><thead><tr><th>Surat Jalan</th><th>Customer / Invoice</th><th>Tanggal</th><th>Gudang</th><th>Status</th><th>Aksi</th></tr></thead><tbody><?php foreach($deliveries as$d):?><tr><td><b><?=html_escape($d->delivery_no)?></b></td><td><?=html_escape($d->customer_name)?><small><?=html_escape($d->no_invoice?:'-')?></small></td><td><?=html_escape($d->delivery_date)?></td><td><?=html_escape($d->warehouse_name?:'-')?></td><td><span class="status status-<?=html_escape($d->status)?>"><?=saleStatus($d->status)?></span></td><td class="actions"><button class="btn btn-sm btn-outline-primary detail-delivery" data-id="<?=$d->id?>">Detail</button><?php if($p['export']):?><button class="btn btn-sm btn-outline-danger pdf-open" data-url="<?=base_url('sales/delivery_pdf/'.$d->id)?>">PDF</button><?php endif?><?php if($d->status==='draft'&&$p['post']):?><button class="btn btn-sm btn-success sale-action" data-url="<?=base_url('sales/post_delivery/'.$d->id)?>" data-confirm="Posting Surat Jalan dan keluarkan stok?">Post Pengiriman</button><?php endif?><?php if(in_array($d->status,array('posted','partially_returned'),true)&&$p['create']):?><button class="btn btn-sm btn-warning new-return" data-id="<?=$d->id?>">Ajukan Retur</button><?php endif?></td></tr><?php endforeach?><?php if(!$deliveries):?><tr><td colspan="6" class="empty">Belum ada dokumen pengiriman.</td></tr><?php endif?></tbody></table></div></div></div>
<div class="col-12" id="salesReturn"><div class="card"><div class="card-header"><div><b>Retur Penjualan & Refund</b><small>Retur ditelusuri dari Surat Jalan dan barcode yang benar-benar dikirim.</small></div></div><div class="table-responsive"><table class="table align-middle mb-0"><thead><tr><th>Dokumen</th><th>Customer / Sumber</th><th>Tanggal</th><th>Penyelesaian</th><th>Status</th><th>Aksi</th></tr></thead><tbody><?php foreach($returns as$r):?><tr><td><b><?=html_escape($r->return_no)?></b></td><td><?=html_escape($r->customer_name)?><small><?=html_escape(($r->no_invoice?:'-').' / '.($r->delivery_no?:'-'))?></small></td><td><?=html_escape($r->return_date)?></td><td><?=saleStatus($r->resolution)?></td><td><span class="status status-<?=html_escape($r->status)?>"><?=saleStatus($r->status)?></span></td><td class="actions"><button class="btn btn-sm btn-outline-primary detail-return" data-id="<?=$r->id?>">Detail</button><?php if($p['export']):?><button class="btn btn-sm btn-outline-danger pdf-open" data-url="<?=base_url('sales/return_pdf/'.$r->id)?>">PDF</button><?php endif?><?php if($r->status==='draft'&&$p['create']):?><button class="btn btn-sm btn-primary sale-action" data-url="<?=base_url('sales/submit_return/'.$r->id)?>" data-confirm="Ajukan retur ini?">Ajukan</button><?php endif?><?php if($r->status==='submitted'&&$p['approve']):?><button class="btn btn-sm btn-success sale-action" data-url="<?=base_url('sales/approve_return/'.$r->id)?>" data-confirm="Setujui retur ini?">Setujui</button><?php endif?><?php if($r->status==='approved'&&$p['post']):?><button class="btn btn-sm btn-info sale-action" data-url="<?=base_url('sales/receive_return/'.$r->id)?>" data-confirm="Konfirmasi barang diterima dan diperiksa?">Terima</button><?php endif?><?php if($r->status==='received'&&$p['post']):?><button class="btn btn-sm btn-success sale-action" data-url="<?=base_url('sales/post_return/'.$r->id)?>" data-confirm="Posting stok dan penyelesaian retur?">Post Retur</button><?php endif?></td></tr><?php endforeach?><?php if(!$returns):?><tr><td colspan="6" class="empty">Belum ada retur penjualan.</td></tr><?php endif?></tbody></table></div></div></div>
</div>
</section>
<div class="modal fade" id="detailModal" tabindex="-1"><div class="modal-dialog modal-xl modal-dialog-centered modal-dialog-scrollable"><div class="modal-content"><div class="modal-header"><h5 class="modal-title">Detail Dokumen</h5><button class="btn-close" data-bs-dismiss="modal"></button></div><div class="modal-body" id="detailBody"></div></div></div></div>
<div class="modal fade" id="pdfModal" tabindex="-1"><div class="modal-dialog modal-xl modal-dialog-centered"><div class="modal-content"><div class="modal-header"><h5>Pratinjau PDF</h5><button class="btn-close" data-bs-dismiss="modal"></button></div><div class="modal-body p-0"><iframe title="Pratinjau PDF"></iframe></div></div></div></div>
<div class="modal fade" id="returnModal" tabindex="-1" data-bs-backdrop="static" data-bs-keyboard="false"><div class="modal-dialog modal-xl modal-dialog-centered modal-dialog-scrollable"><div class="modal-content"><form id="returnForm" enctype="multipart/form-data"><div class="modal-header"><h5>Pengajuan Retur Penjualan</h5><button class="btn-close" data-bs-dismiss="modal"></button></div><div class="modal-body"><input type="hidden" name="<?=$csrfName?>" value="<?=$csrfHash?>"><input type="hidden" name="sales_delivery_id"><div class="row g-3"><div class="col-md-3"><label>Tanggal retur</label><input type="date" name="return_date" value="<?=date('Y-m-d')?>" class="form-control" required></div><div class="col-md-4"><label>Penyelesaian</label><select name="resolution" class="form-select"><option value="credit_note">Credit Note</option><option value="restock">Kembali ke stok</option><option value="quarantine">Karantina</option><option value="damaged">Rusak</option><option value="refund">Refund</option><option value="replacement">Penggantian</option></select></div><div class="col-md-5"><label>Kategori masalah</label><input name="problem_category" class="form-control"></div><div class="col-12"><label>Alasan</label><textarea name="reason" class="form-control" required></textarea></div></div><div id="returnLines" class="mt-3"></div></div><div class="modal-footer"><button type="button" class="btn btn-light" data-bs-dismiss="modal">Batal</button><button class="btn btn-primary">Simpan Draft Retur</button></div></form></div></div></div>
<script>window.SALES_PAGE=<?=json_encode(array('base'=>base_url(),'csrfName'=>$csrfName,'csrfHash'=>$csrfHash,'sourceOrder'=>0,'focus'=>$focus,'accounts'=>array()),JSON_UNESCAPED_SLASHES)?>;</script>
<script src="<?=base_url('assets/js/sales-professional.js').'?v='.filemtime(FCPATH.'assets/js/sales-professional.js')?>"></script>