db->table_exists('assets')) return; if ($this->db->table_exists('legacy_migration_adjustments')) { $this->db->query("INSERT IGNORE INTO legacy_migration_adjustments(entity_type,entity_id,field_name,old_value,new_value,reason,adjusted_at) SELECT 'asset',id,'qty',IF(qty IS NULL,'NULL',CAST(qty AS CHAR)),'1','Qty aset legacy kosong dinormalisasi menjadi satu unit',NOW() FROM assets WHERE qty IS NULL OR qty<=0"); } // Aset lama tanpa kolom qty berasal dari satu baris per aset, sehingga satu // baris tersebut secara aman diperlakukan sebagai satu unit. $this->db->query('UPDATE assets SET qty=1 WHERE qty IS NULL OR qty<=0'); $this->db->query('UPDATE assets SET harga_per_unit=COALESCE(nilai_perolehan,0) WHERE harga_per_unit IS NULL'); $this->db->query('UPDATE assets SET nilai_perolehan=COALESCE(harga_per_unit*qty,0) WHERE nilai_perolehan IS NULL'); $this->db->query('UPDATE assets SET nilai_residu=0 WHERE nilai_residu IS NULL'); $this->db->query('UPDATE assets SET penyusutan_per_bulan=0 WHERE penyusutan_per_bulan IS NULL'); $this->db->query('UPDATE assets SET akumulasi_penyusutan=0 WHERE akumulasi_penyusutan IS NULL'); $this->db->query('UPDATE assets SET nilai_buku=GREATEST(COALESCE(nilai_perolehan,0)-COALESCE(akumulasi_penyusutan,0),0) WHERE nilai_buku IS NULL'); $this->db->query("ALTER TABLE assets MODIFY qty DECIMAL(18,4) NOT NULL DEFAULT 1, MODIFY harga_per_unit DECIMAL(18,2) NOT NULL DEFAULT 0, MODIFY nilai_perolehan DECIMAL(18,2) NOT NULL DEFAULT 0, MODIFY nilai_residu DECIMAL(18,2) NOT NULL DEFAULT 0, MODIFY penyusutan_per_bulan DECIMAL(18,2) NOT NULL DEFAULT 0, MODIFY akumulasi_penyusutan DECIMAL(18,2) NOT NULL DEFAULT 0, MODIFY nilai_buku DECIMAL(18,2) NOT NULL DEFAULT 0"); } public function down() { // Presisi desimal tidak diturunkan kembali agar nilai accounting tidak rusak. } }