Files
accounting_dev_v2/application/migrations/20260906000500_fixed_asset_decimal_values.php
T
2026-09-11 16:03:00 +07:00

38 lines
2.2 KiB
PHP

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Migration_Fixed_asset_decimal_values extends CI_Migration
{
public function up()
{
if (!$this->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.
}
}