setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Create the database if it doesn't exist $pdo_init->exec("CREATE DATABASE IF NOT EXISTS `" . DB_NAME . "` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"); echo "Database '" . DB_NAME . "' created or already exists.\n"; // Now connect to the newly created database $dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET; $pdo = new PDO($dsn, DB_USER, DB_PASS, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]); // SQL to create tables $sql = " CREATE TABLE IF NOT EXISTS `kantor` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nama_kantor` varchar(255) NOT NULL, `alamat` text DEFAULT NULL, `tipe_kantor` enum('pusat','cabang') NOT NULL DEFAULT 'cabang', `created_at` timestamp NOT NULL DEFAULT current_timestamp(), `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `kategori_aset` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nama_kategori` varchar(255) NOT NULL, `kode_kategori` varchar(10) NOT NULL, `created_at` timestamp NOT NULL DEFAULT current_timestamp(), `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`), UNIQUE KEY `kode_kategori` (`kode_kategori`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nama_lengkap` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `role` enum('super_admin','admin_cabang','pegawai') NOT NULL DEFAULT 'pegawai', `id_kantor` int(11) DEFAULT NULL, `created_at` timestamp NOT NULL DEFAULT current_timestamp(), `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), KEY `id_kantor` (`id_kantor`), CONSTRAINT `users_ibfk_1` FOREIGN KEY (`id_kantor`) REFERENCES `kantor` (`id`) ON DELETE SET NULL ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS `aset` ( `id` int(11) NOT NULL AUTO_INCREMENT, `kode_aset` varchar(255) NOT NULL, `nama_aset` varchar(255) NOT NULL, `id_kategori` int(11) NOT NULL, `id_kantor_lokasi` int(11) NOT NULL, `spesifikasi` text DEFAULT NULL, `tanggal_pembelian` date NOT NULL, `harga_pembelian` decimal(15,2) NOT NULL, `vendor` varchar(255) DEFAULT NULL, `status` enum('Tersedia','Digunakan','Perbaikan','Dihapuskan') NOT NULL DEFAULT 'Tersedia', `id_pengguna_penanggung_jawab` int(11) DEFAULT NULL, `created_at` timestamp NOT NULL DEFAULT current_timestamp(), `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`), UNIQUE KEY `kode_aset` (`kode_aset`), KEY `id_kategori` (`id_kategori`), KEY `id_kantor_lokasi` (`id_kantor_lokasi`), KEY `id_pengguna_penanggung_jawab` (`id_pengguna_penanggung_jawab`), CONSTRAINT `aset_ibfk_1` FOREIGN KEY (`id_kategori`) REFERENCES `kategori_aset` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `aset_ibfk_2` FOREIGN KEY (`id_kantor_lokasi`) REFERENCES `kantor` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT `aset_ibfk_3` FOREIGN KEY (`id_pengguna_penanggung_jawab`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; "; $pdo->exec($sql); echo "Tables `kantor`, `kategori_aset`, `users`, and `aset` created or already exist.\n"; // --- Seed initial data if tables are empty --- $stmt = $pdo->query("SELECT COUNT(*) FROM `kantor`"); if ($stmt->fetchColumn() == 0) { $pdo->exec(" INSERT INTO `kantor` (`nama_kantor`, `alamat`, `tipe_kantor`) VALUES ('Kantor Pusat Jakarta', 'Jl. Jenderal Sudirman Kav. 52-53, Jakarta Selatan', 'pusat'), ('Cabang Surabaya', 'Jl. Basuki Rahmat No. 129, Surabaya', 'cabang'), ('Cabang Bandung', 'Jl. Asia Afrika No. 1, Bandung', 'cabang'); "); echo "Seeded `kantor` table with initial data.\n"; } $stmt = $pdo->query("SELECT COUNT(*) FROM `kategori_aset`"); if ($stmt->fetchColumn() == 0) { $pdo->exec(" INSERT INTO `kategori_aset` (`nama_kategori`, `kode_kategori`) VALUES ('Elektronik', 'ELK'), ('Furnitur', 'FNT'), ('Kendaraan', 'KDR'), ('Peralatan Kantor', 'PKR'); "); echo "Seeded `kategori_aset` table with initial data.\n"; } $stmt = $pdo->query("SELECT COUNT(*) FROM `users`"); if ($stmt->fetchColumn() == 0) { $hashed_password = password_hash('password', PASSWORD_DEFAULT); $pdo->exec(" INSERT INTO `users` (`nama_lengkap`, `email`, `password`, `role`, `id_kantor`) VALUES ('Super Admin', 'admin@example.com', '{$hashed_password}', 'super_admin', 1); "); echo "Seeded `users` table with a super admin user.\n"; } // Seed a sample asset $stmt = $pdo->query("SELECT COUNT(*) FROM `aset`"); if ($stmt->fetchColumn() == 0) { $pdo->exec(" INSERT INTO `aset` (`kode_aset`, `nama_aset`, `id_kategori`, `id_kantor_lokasi`, `spesifikasi`, `tanggal_pembelian`, `harga_pembelian`, `vendor`, `status`) VALUES ('ELK-2025-0001', 'Laptop Dell XPS 15', 1, 1, 'CPU i9, 32GB RAM, 1TB SSD', '2025-01-15', 45000000.00, 'Dell Indonesia', 'Digunakan'); "); echo "Seeded `aset` table with a sample asset.\n"; } echo "\nDatabase setup completed successfully!\n"; } catch (PDOException $e) { die("Database setup failed: " . $e->getMessage() . "\n"); } ?>