Files
2026-09-11 16:03:00 +07:00

11 lines
3.5 KiB
PHP

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Payablecheck extends CI_Controller
{
public function __construct(){parent::__construct();if(!is_cli())show_404();}
public function schema(){foreach(array('items','item_barcodes','warehouses','stock_logs','item_movements','accounts')as$t){echo"---$t---\n";foreach($this->db->field_data($t)as$f)echo$f->name.' | '.$f->type.' | '.$f->max_length."\n";}echo'legacy_purchase_movements='.$this->db->where('movement_type','purchase')->count_all_results('item_movements')."\n";echo'legacy_purchase_journals='.$this->db->where_in('ref_type',array('new_items','stock_logs'))->count_all_results('journals')."\n";}
public function accounts(){foreach($this->db->group_start()->like('nama_akun','hutang')->or_like('nama_akun','utang')->or_like('nama_akun','pembelian')->or_like('nama_akun','persediaan')->group_end()->order_by('kode_akun')->get('accounts')->result()as$a)echo$a->id.' | '.$a->kode_akun.' | '.$a->nama_akun."\n";}
public function integrity(){$checks=array('duplicate_supplier_invoice'=>"SELECT COUNT(*) total FROM(SELECT supplier_id,supplier_invoice_no FROM supplier_invoices GROUP BY supplier_id,supplier_invoice_no HAVING COUNT(*)>1)x",'over_received_po'=>"SELECT COUNT(*) total FROM purchase_order_lines WHERE received_qty>qty+0.0001",'over_invoiced_po'=>"SELECT COUNT(*) total FROM purchase_order_lines WHERE invoiced_qty>received_qty+0.0001",'overpaid_supplier_invoice'=>"SELECT COUNT(*) total FROM supplier_invoices WHERE paid_amount>total+0.01 OR balance<0",'overallocated_supplier_payment'=>"SELECT COUNT(*) total FROM(SELECT p.id FROM supplier_payments p JOIN supplier_payment_allocations a ON a.supplier_payment_id=p.id GROUP BY p.id,p.amount HAVING SUM(a.amount)>p.amount+0.01)x",'duplicate_receipt_stock'=>"SELECT COUNT(*) total FROM(SELECT ref_id,item_id FROM stock_logs WHERE ref_type='goods_receipt' GROUP BY ref_id,item_id HAVING COUNT(*)>1)x",'unbalanced_purchase_journals'=>"SELECT COUNT(*) total FROM(SELECT j.id FROM journals j JOIN journal_details d ON d.journal_id=j.id WHERE j.ref_type IN('supplier_invoice','supplier_payment','supplier_debit_note','supplier_opening_balance') GROUP BY j.id HAVING ABS(SUM(d.debit)-SUM(d.kredit))>0.01)x");$fail=0;foreach($checks as$n=>$q){$v=(int)$this->db->query($q)->row()->total;echo($v?'[FAIL] ':'[OK] ').$n.'='.$v."\n";if($v)$fail++;}foreach(array('accounts_payable','purchase_input_tax','supplier_advances','payable_opening_balance')as$k){$v=$this->db->where(array('mapping_key'=>$k,'is_active'=>1))->count_all_results('system_account_mappings');echo($v?'[OK] ':'[FAIL] ').'mapping_'.$k."\n";if(!$v)$fail++;}if($fail)exit(1);}
public function invoice_payment_values(){$q="SELECT si.id,si.internal_no,si.status,si.total invoice_total,si.paid_amount invoice_paid,si.balance,po.id po_id,po.po_no,po.subtotal,po.tax_total,po.shipping_cost,po.insurance_cost,po.service_fee,po.discount_amount,po.cashback_amount,po.total po_total,po.paid_amount po_paid,(SELECT COALESCE(SUM(pol2.line_total),0) FROM purchase_order_lines pol2 WHERE pol2.purchase_order_id=po.id) item_total,(SELECT COALESCE(SUM(sp.amount),0) FROM supplier_payments sp WHERE sp.purchase_order_id=po.id AND sp.status='posted') payment_total FROM supplier_invoices si JOIN supplier_invoice_lines sil ON sil.supplier_invoice_id=si.id JOIN purchase_order_lines pol ON pol.id=sil.po_line_id JOIN purchase_orders po ON po.id=pol.purchase_order_id GROUP BY si.id ORDER BY si.id DESC";foreach($this->db->query($q)->result()as$r)echo json_encode($r,JSON_UNESCAPED_UNICODE)."\n";}
}