CI=&get_instance();} public function build(array $header,array $lines) { // Beberapa service sudah membentuk redaksi bisnis yang siap ditampilkan. // Flag ini hanya melewati formatter global; flag tidak ikut disimpan ke DB // karena JournalService menyaring field header sebelum insert. if(!empty($header['natural_description']))return trim((string)$header['keterangan']); $type=isset($header['ref_type'])?(string)$header['ref_type']:''; if($type===''||$type==='manual_journal')return trim((string)$header['keterangan']); $total=0;foreach($lines as$line)$total+=isset($line['debit'])?(float)$line['debit']:0; $labels=array('payroll'=>'Posting Payroll','payroll_payment'=>'Pembayaran Payroll','invoice'=>'Posting Invoice Penjualan','customer_payment'=>'Penerimaan Pembayaran Pelanggan','credit_note'=>'Credit Note Penjualan','customer_refund'=>'Refund Pelanggan','receivable_writeoff'=>'Penghapusan Piutang','invoice_reversal'=>'Reversal Invoice','journal_reversal'=>'Reversal Jurnal','stock_logs'=>'Mutasi Persediaan','invoice_details'=>'Penjualan Item Invoice','asset_acquisition'=>'Perolehan Aset','asset_depreciation'=>'Penyusutan Aset','asset_disposal'=>'Pelepasan/Penjualan Aset','asset_addition'=>'Penambahan Nilai Aset','asset_impairment'=>'Impairment Aset','asset_revaluation'=>'Revaluasi Aset','asset_lost'=>'Aset Hilang','asset_damaged'=>'Aset Rusak','cash_transaction'=>'Transaksi Kas/Bank','cash_transfer'=>'Transfer Antar Rekening','supplier_invoice'=>'Posting Tagihan Supplier','supplier_payment'=>'Pembayaran Supplier','supplier_opening_balance'=>'Saldo Awal Hutang Supplier','purchase_return'=>'Retur Pembelian','supplier_debit_note'=>'Debit Note Supplier'); $parts=array('[AUTO] '.(isset($labels[$type])?$labels[$type]:ucwords(str_replace('_',' ',$type)))); $document=$this->document($type,isset($header['ref_id'])?$header['ref_id']:null); if(!$document['number']&&!empty($header['no_ref']))$document['number']=$header['no_ref']; if($type==='customer_payment'&&!$document['party']&&preg_match('/#(\d+)/',(string)$header['keterangan'],$match)){$customer=$this->CI->db->select('nama')->get_where('customers',array('id'=>(int)$match[1]))->row();if($customer)$document['party']=$customer->nama;} if($type==='supplier_payment'&&!$document['party']&&preg_match('/#(\d+)/',(string)$header['keterangan'],$match)){$supplier=$this->CI->db->select('name')->get_where('suppliers',array('id'=>(int)$match[1]))->row();if($supplier)$document['party']=$supplier->name;} if($document['number'])$parts[]='Dokumen: '.$document['number']; if($document['party'])$parts[]='Pihak: '.$document['party']; $parts[]='Tanggal transaksi: '.$header['tanggal']; $parts[]='Nilai jurnal: Rp '.number_format($total,2,',','.'); $parts[]='Sumber: '.$type.'#'.(isset($header['ref_id'])&&$header['ref_id']!==null?$header['ref_id']:'-'); $original=trim((string)$header['keterangan']);if($original!==''&&stripos($original,'[AUTO]')!==0)$parts[]='Rincian: '.$original; return implode(' | ',$parts); } private function document($type,$id) { $result=array('number'=>null,'party'=>null);if(!$id)return$result; if(in_array($type,array('invoice','invoice_reversal','receivable_writeoff','credit_note'),true)){$row=$this->CI->db->select('invoices.no_invoice,customers.nama')->from('invoices')->join('customers','customers.id=invoices.customer_id','left')->where('invoices.id',(int)$id)->get()->row();if($row)return array('number'=>$row->no_invoice,'party'=>$row->nama);} if($type==='journal_reversal'){$row=$this->CI->db->select('no_ref')->get_where('journals',array('id'=>(int)$id))->row();if($row)$result['number']=$row->no_ref;} if($type==='supplier_invoice'){$row=$this->CI->db->select('supplier_invoices.internal_no,supplier_invoices.supplier_invoice_no,suppliers.name')->from('supplier_invoices')->join('suppliers','suppliers.id=supplier_invoices.supplier_id')->where('supplier_invoices.id',(int)$id)->get()->row();if($row)return array('number'=>$row->internal_no.'/'.$row->supplier_invoice_no,'party'=>$row->name);} if($type==='supplier_opening_balance'){$row=$this->CI->db->select('supplier_code,name')->get_where('suppliers',array('id'=>(int)$id))->row();if($row)return array('number'=>'OPEN-'.$row->supplier_code,'party'=>$row->name);} return$result; } }