102 lines
3.6 KiB
PHP
102 lines
3.6 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
require_once __DIR__ . '/../db/config.php';
|
|
|
|
if (!function_exists('ensure_schema')) {
|
|
function ensure_schema(): void {
|
|
$pdo = db();
|
|
$pdo->exec("
|
|
CREATE TABLE IF NOT EXISTS departments (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(120) NOT NULL,
|
|
code VARCHAR(20) NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
");
|
|
|
|
$pdo->exec("
|
|
CREATE TABLE IF NOT EXISTS positions (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(120) NOT NULL,
|
|
level VARCHAR(60) DEFAULT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
");
|
|
|
|
$pdo->exec("
|
|
CREATE TABLE IF NOT EXISTS employees (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
employee_code VARCHAR(30) NOT NULL,
|
|
full_name VARCHAR(160) NOT NULL,
|
|
email VARCHAR(160) DEFAULT NULL,
|
|
phone VARCHAR(40) DEFAULT NULL,
|
|
status VARCHAR(40) NOT NULL DEFAULT 'Aktif',
|
|
employment_type VARCHAR(60) DEFAULT 'Kontrak',
|
|
hire_date DATE DEFAULT NULL,
|
|
dept_id INT DEFAULT NULL,
|
|
position_id INT DEFAULT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
INDEX idx_dept (dept_id),
|
|
INDEX idx_position (position_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
");
|
|
}
|
|
}
|
|
|
|
if (!function_exists('seed_demo_data')) {
|
|
function seed_demo_data(): void {
|
|
$pdo = db();
|
|
|
|
$deptCount = (int)$pdo->query("SELECT COUNT(*) FROM departments")->fetchColumn();
|
|
if ($deptCount === 0) {
|
|
$stmt = $pdo->prepare("INSERT INTO departments (name, code) VALUES (?, ?)");
|
|
$rows = [
|
|
['HR & People Ops', 'HR'],
|
|
['Finance', 'FIN'],
|
|
['Technology', 'TECH'],
|
|
['Operations', 'OPS'],
|
|
];
|
|
foreach ($rows as $row) {
|
|
$stmt->execute($row);
|
|
}
|
|
}
|
|
|
|
$posCount = (int)$pdo->query("SELECT COUNT(*) FROM positions")->fetchColumn();
|
|
if ($posCount === 0) {
|
|
$stmt = $pdo->prepare("INSERT INTO positions (name, level) VALUES (?, ?)");
|
|
$rows = [
|
|
['HR Manager', 'Lead'],
|
|
['Recruiter', 'Staff'],
|
|
['Software Engineer', 'Staff'],
|
|
['Finance Analyst', 'Staff'],
|
|
];
|
|
foreach ($rows as $row) {
|
|
$stmt->execute($row);
|
|
}
|
|
}
|
|
|
|
$empCount = (int)$pdo->query("SELECT COUNT(*) FROM employees")->fetchColumn();
|
|
if ($empCount === 0) {
|
|
$deptMap = $pdo->query("SELECT id, code FROM departments")->fetchAll(PDO::FETCH_KEY_PAIR);
|
|
$posMap = $pdo->query("SELECT id, name FROM positions")->fetchAll(PDO::FETCH_KEY_PAIR);
|
|
$stmt = $pdo->prepare("
|
|
INSERT INTO employees (employee_code, full_name, email, phone, status, employment_type, hire_date, dept_id, position_id)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
");
|
|
$samples = [
|
|
['EMP-001', 'Anisa Putri', 'anisa@company.id', '0812-100-200', 'Aktif', 'Kontrak', '2024-05-10', $deptMap['HR'], $posMap['HR Manager']],
|
|
['EMP-002', 'Rafi Nugraha', 'rafi@company.id', '0812-301-222', 'Aktif', 'Tetap', '2023-11-02', $deptMap['TECH'], $posMap['Software Engineer']],
|
|
['EMP-003', 'Sinta Rahma', 'sinta@company.id', '0813-403-900', 'Probation', 'Kontrak', '2025-01-08', $deptMap['OPS'], $posMap['Recruiter']],
|
|
['EMP-004', 'Dimas Prakoso', 'dimas@company.id', '0812-112-555', 'Aktif', 'Tetap', '2022-06-19', $deptMap['FIN'], $posMap['Finance Analyst']],
|
|
];
|
|
foreach ($samples as $row) {
|
|
$stmt->execute($row);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
ensure_schema();
|
|
seed_demo_data();
|