34627-vm/db/setup.php
Flatlogic Bot 2be5f009ee dua
2025-10-03 14:19:02 +00:00

146 lines
6.5 KiB
PHP

<?php
// db/setup.php
// This script initializes the database and tables.
// Run it once from the command line: php db/setup.php
// --- Database Credentials (temporary for setup) ---
define('DB_HOST', '127.0.0.1');
define('DB_NAME', 'asset_management');
define('DB_USER', 'asset_admin');
define('DB_PASS', 'password');
define('DB_CHARSET', 'utf8mb4');
header('Content-Type: text/plain');
try {
// Connect without specifying a database to create it
$dsn_init = "mysql:host=" . DB_HOST . ";charset=" . DB_CHARSET;
$pdo_init = new PDO($dsn_init, DB_USER, DB_PASS);
$pdo_init->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");
}
?>