109 lines
4.4 KiB
PHP
109 lines
4.4 KiB
PHP
<?php
|
|
require 'db/config.php';
|
|
$db = db();
|
|
|
|
try {
|
|
// 1. Jobs
|
|
$db->exec("CREATE TABLE IF NOT EXISTS jobs (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
quantity INT DEFAULT 1,
|
|
due_date DATE DEFAULT NULL,
|
|
serial_number VARCHAR(100) UNIQUE,
|
|
status ENUM('planned', 'in_progress', 'completed') DEFAULT 'planned',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
)");
|
|
|
|
// 2. Components (BOM structure)
|
|
$db->exec("CREATE TABLE IF NOT EXISTS components (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
job_id INT NOT NULL,
|
|
parent_id INT DEFAULT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
status ENUM('pending', 'in_progress', 'completed') DEFAULT 'pending',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (job_id) REFERENCES jobs(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (parent_id) REFERENCES components(id) ON DELETE CASCADE
|
|
)");
|
|
|
|
// 3. Operations
|
|
$db->exec("CREATE TABLE IF NOT EXISTS operations (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
component_id INT NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
process_type VARCHAR(100) NOT NULL, -- e.g. cutting, welding
|
|
status ENUM('pending', 'in_progress', 'stalled', 'completed') DEFAULT 'pending',
|
|
assigned_worker_id INT DEFAULT NULL,
|
|
priority INT DEFAULT 0,
|
|
start_time DATETIME DEFAULT NULL,
|
|
end_time DATETIME DEFAULT NULL,
|
|
stall_reason TEXT DEFAULT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (component_id) REFERENCES components(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (assigned_worker_id) REFERENCES users(id) ON DELETE SET NULL
|
|
)");
|
|
|
|
// 4. Inventory
|
|
$db->exec("CREATE TABLE IF NOT EXISTS inventory (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
category ENUM('material', 'consumable', 'hardware') NOT NULL,
|
|
stock_level DECIMAL(10,2) DEFAULT 0,
|
|
reorder_level DECIMAL(10,2) DEFAULT 0,
|
|
unit VARCHAR(50) DEFAULT 'pcs',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
)");
|
|
|
|
// 5. Inventory Transactions
|
|
$db->exec("CREATE TABLE IF NOT EXISTS inventory_transactions (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
inventory_id INT NOT NULL,
|
|
type ENUM('in', 'out') NOT NULL,
|
|
quantity DECIMAL(10,2) NOT NULL,
|
|
user_id INT NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (inventory_id) REFERENCES inventory(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (user_id) REFERENCES users(id)
|
|
)");
|
|
|
|
// 6. Time Study Events
|
|
$db->exec("CREATE TABLE IF NOT EXISTS time_study_events (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
operation_id INT NOT NULL,
|
|
user_id INT NOT NULL,
|
|
event_type ENUM('start', 'stalled', 'completed', 'resume') NOT NULL,
|
|
reason TEXT DEFAULT NULL,
|
|
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (operation_id) REFERENCES operations(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (user_id) REFERENCES users(id)
|
|
)");
|
|
|
|
echo "Manufacturing core tables created successfully.\n";
|
|
|
|
// Seed some initial data if empty
|
|
$stmt = $db->query("SELECT COUNT(*) FROM jobs");
|
|
if ($stmt->fetchColumn() == 0) {
|
|
// Sample Job
|
|
$db->exec("INSERT INTO jobs (name, quantity, due_date, serial_number, status) VALUES ('Project ALPHA', 10, '2026-03-15', 'SN-001', 'planned')");
|
|
$jobId = $db->lastInsertId();
|
|
|
|
// Sample Component
|
|
$db->exec("INSERT INTO components (job_id, name, status) VALUES ($jobId, 'Main Chassis', 'pending')");
|
|
$compId = $db->lastInsertId();
|
|
|
|
// Sample Operations
|
|
$db->exec("INSERT INTO operations (component_id, name, process_type, status, priority) VALUES ($compId, 'Cut steel plate', 'cutting', 'pending', 1)");
|
|
$db->exec("INSERT INTO operations (component_id, name, process_type, status, priority) VALUES ($compId, 'Weld corners', 'welding', 'pending', 2)");
|
|
|
|
// Sample Inventory
|
|
$db->exec("INSERT INTO inventory (name, category, stock_level, reorder_level) VALUES ('Steel Plate 5mm', 'material', 50, 10)");
|
|
$db->exec("INSERT INTO inventory (name, category, stock_level, reorder_level) VALUES ('Welding Rods', 'consumable', 100, 20)");
|
|
|
|
echo "Sample manufacturing data seeded.\n";
|
|
}
|
|
|
|
} catch (Exception $e) {
|
|
echo "Error: " . $e->getMessage() . "\n";
|
|
}
|
|
|