input->get('step')?:'order';if(!in_array($step,array('order','payment','receipt','invoice'),true))$step='order';
$paymentAccounts=$this->db->where(array('is_active'=>1,'allow_posting'=>1))->group_start()->like('nama_akun','kas')->or_like('nama_akun','bank')->group_end()->order_by('kode_akun')->get('accounts')->result();
$bankChargeMapping=$this->db->get_where('system_account_mappings',array('mapping_key'=>'bank_charge_expense','is_active'=>1))->row();$bankChargeAccountId=$bankChargeMapping?(int)$bankChargeMapping->account_id:0;
$bankChargeAccounts=$this->db->where(array('is_active'=>1,'allow_posting'=>1,'tipe'=>'expense'))->order_by('kode_akun')->get('accounts')->result();
$payments=$this->db->select('sp.*,po.po_no,s.name supplier_name')->from('supplier_payments sp')->join('purchase_orders po','po.id=sp.purchase_order_id','left')->join('suppliers s','s.id=sp.supplier_id')->order_by('sp.id','DESC')->limit(200)->get()->result();
$invoiceReceipts=$this->db->select('gr.*,po.po_no,s.name')->from('goods_receipts gr')->join('purchase_orders po','po.id=gr.purchase_order_id')->join('suppliers s','s.id=gr.supplier_id')->where('gr.status','posted')->where_in('po.status',array('partially_received','received'))->where("EXISTS(SELECT 1 FROM goods_receipt_lines grl WHERE grl.goods_receipt_id=gr.id AND grl.qty-COALESCE((SELECT SUM(prl.shipped_qty) FROM purchase_return_lines prl JOIN purchase_returns pr ON pr.id=prl.purchase_return_id WHERE prl.receipt_line_id=grl.id AND pr.status IN('shipped','waiting_supplier','partially_resolved','resolved')),0)>COALESCE((SELECT SUM(sil.qty) FROM supplier_invoice_lines sil WHERE sil.receipt_line_id=grl.id),0))",null,false)->order_by('gr.id','DESC')->get()->result();
$paymentItems=array();$paymentItemRows=$this->db->select('pol.purchase_order_id,pol.description,pol.qty,pol.unit_price,pol.tax_amount,pol.line_total,pol.tracking_type,k.kode_barang,k.nama nama_barang')->from('purchase_order_lines pol')->join('kode_barang k','k.id=pol.kode_barang_id','left')->order_by('pol.purchase_order_id')->order_by('pol.id')->get()->result();foreach($paymentItemRows as$paymentItem)$paymentItems[$paymentItem->purchase_order_id][]=$paymentItem;
$returnBarcodes=$this->db->select('ib.id,ib.barcode,ib.serial_number,ib.qty_sisa,ib.source_receipt_line_id,pol.tracking_type')->from('item_barcodes ib')->join('goods_receipt_lines grl','grl.id=ib.source_receipt_line_id')->join('purchase_order_lines pol','pol.id=grl.po_line_id')->where('ib.qty_sisa >',0)->order_by('ib.barcode')->get()->result_array();
$budgetCompanyId=(int)$this->session->userdata('company_id');$poBudgetAccounts=$this->db->select('id,kode_akun,nama_akun')->where(array('company_id'=>$budgetCompanyId,'tipe'=>'expense','is_active'=>1,'allow_posting'=>1))->order_by('kode_akun')->get('accounts')->result_array();
function p_action($route,$id,$label,$ci,$step,$class='outline-primary'){return'
';}
function p_docs($type,$id,$status=null){$ci=&get_instance();$master=$ci->session->userdata('role')==='Admin';$canReturnView=$master||check_permission('purchase_returns','can_view');$canReturnCreate=$master||check_permission('purchase_returns','can_create');$canRefundView=$master||check_permission('purchase_refunds','can_view');$canRefundCreate=$master||check_permission('purchase_refunds','can_create');$canDebitView=$master||check_permission('supplier_debit_notes','can_view');$canDebitCreate=$master||check_permission('supplier_debit_notes','can_create');$detailClass=$type==='purchase_order'?'purchase-order-detail':($type==='supplier_payment'?'purchase-payment-detail':($type==='goods_receipt'?'purchase-receipt-detail':($type==='supplier_invoice'?'purchase-invoice-detail':'purchase-detail')));$pdfUrl=$type==='supplier_payment'?'purchasedocuments/payment_bank_pdf/'.$id:($type==='goods_receipt'?'purchasedocuments/receipt_pdf/'.$id:($type==='supplier_invoice'?'purchasedocuments/invoice_pdf/'.$id:'purchasedocuments/pdf/'.$type.'/'.$id));$links=array();if($type==='purchase_order'&&in_array($status,array('approved','partially_received','received'),true)){if($canReturnCreate)$links[]=array('Ajukan Retur','return&po_id='.$id);if($canRefundCreate)$links[]=array('Ajukan Refund','refund&po_id='.$id);if($canReturnView||$canRefundView)$links[]=array('Lihat Retur/Refund Terkait','history&po_id='.$id);}elseif($type==='goods_receipt'&&$status==='posted'){if($canReturnCreate){$links[]=array('Retur Barang','return&receipt_id='.$id);$links[]=array('Laporkan Kekurangan','return&category=specification&receipt_id='.$id);$links[]=array('Laporkan Barang Rusak','return&category=damaged&receipt_id='.$id);}if($canReturnView){$links[]=array('Catat Barang Pengganti','replacement&receipt_id='.$id);$links[]=array('Lihat Retur Terkait','history&receipt_id='.$id);}}elseif($type==='supplier_invoice'&&in_array($status,array('partial','paid'),true)){if($canDebitCreate)$links[]=array('Buat Debit Note','debit_note&invoice_id='.$id);if($canRefundCreate)$links[]=array('Ajukan Refund','refund&invoice_id='.$id);if($canDebitView||$canRefundView)$links[]=array('Lihat Penyesuaian Tagihan','history&invoice_id='.$id);}elseif($type==='supplier_payment'&&$status==='posted'){if($canRefundCreate)$links[]=array('Ajukan Refund','refund&payment_id='.$id);if($canRefundView)$links[]=array('Lihat Refund Terkait','history&payment_id='.$id);}$context='';if($links){$context=' ';foreach($links as$link)$context.=''.$link[0].'';$context.='';}$pdf=$master||check_permission('purchases','can_export')?' PDF':'';return''.$pdf.$context;}
?>
Workflow Pembelian
Alur normal dari permintaan sampai finalisasi Invoice Supplier.