Files
accounting_dev_v2/application/migrations/20260904000200_expand_item_barcode_status.php
2026-09-11 16:03:00 +07:00

38 lines
1.4 KiB
PHP

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Migration_Expand_item_barcode_status extends CI_Migration
{
public function up()
{
if (!$this->db->table_exists('item_barcodes')) {
return;
}
// Database produksi lama hanya mengenal status barcode siap pakai.
// `pending` diperlukan untuk barang yang sudah diterima secara fisik,
// tetapi belum boleh dipakai/dijual sebelum serial number dilengkapi.
$this->db->query("ALTER TABLE item_barcodes
MODIFY status ENUM('pending','available','reserved','installed','sold_out')
NOT NULL DEFAULT 'available'");
if ($this->db->table_exists('goods_receipt_lines') &&
$this->db->table_exists('purchase_order_lines') &&
$this->db->field_exists('source_receipt_line_id', 'item_barcodes')) {
$this->db->query("UPDATE item_barcodes ib
JOIN goods_receipt_lines grl ON grl.id=ib.source_receipt_line_id
JOIN purchase_order_lines pol ON pol.id=grl.po_line_id
SET ib.status='pending'
WHERE pol.need_serial_number=1
AND (ib.serial_number IS NULL OR ib.serial_number='')
AND ib.qty_sisa>0");
}
}
public function down()
{
// Tidak dipersempit kembali karena dapat merusak barcode pending yang
// telah menjadi bagian audit trail penerimaan.
}
}