119 lines
5.1 KiB
PHP
119 lines
5.1 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 `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`),
|
|
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
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
";
|
|
|
|
$pdo->exec($sql);
|
|
echo "Tables `kantor`, `kategori_aset`, 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";
|
|
}
|
|
|
|
// 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");
|
|
}
|
|
?>
|