11 lines
1.2 KiB
PHP
11 lines
1.2 KiB
PHP
<?php
|
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
|
class Migration_Reconcile_purchase_stock_ledger extends CI_Migration
|
|
{
|
|
public function up(){
|
|
$this->db->query("INSERT IGNORE INTO inventory_ledger(item_id,warehouse_id,barcode_id,movement_date,direction,qty,unit_cost,value,document_type,document_id,idempotency_key,created_at) SELECT s.item_id,s.warehouse_id,s.barcode_id,DATE(s.created_at),IF(s.tipe='masuk','in','out'),s.qty,COALESCE(NULLIF(s.unit_cost,0),i.harga_beli),s.qty*COALESCE(NULLIF(s.unit_cost,0),i.harga_beli),s.ref_type,s.ref_id,CONCAT('PURCHASE-BACKFILL-STOCK-',s.id),s.created_at FROM stock_logs s JOIN items i ON i.id=s.item_id LEFT JOIN inventory_ledger l ON BINARY l.document_type=BINARY s.ref_type AND l.document_id=s.ref_id AND l.item_id=s.item_id AND l.warehouse_id=s.warehouse_id AND l.qty=s.qty AND l.direction=IF(s.tipe='masuk','in','out') WHERE s.ref_type IN('goods_receipt','purchase_return') AND l.id IS NULL");
|
|
$this->db->query("UPDATE items i SET i.stok=COALESCE((SELECT SUM(IF(l.direction='in',l.qty,-l.qty)) FROM inventory_ledger l WHERE l.item_id=i.id),0)");
|
|
}
|
|
public function down(){throw new RuntimeException('Rekonsiliasi ledger tidak boleh dihapus tanpa audit.');}
|
|
}
|