prepare("SELECT assigned_processes FROM users WHERE id = ?");
$stmt->execute([$userId]);
$res = $stmt->fetch();
$assignedProcesses = json_decode($res['assigned_processes'] ?? '[]', true);
}
// Stats for Admin
$stats = [
'active_jobs' => 0,
'pending_ops' => 0,
'inventory_alerts' => 0,
'active_workers' => 0
];
if ($role === 'admin') {
$stats['active_jobs'] = $db->query("SELECT COUNT(*) FROM jobs WHERE status = 'in_progress'")->fetchColumn();
$stats['pending_ops'] = $db->query("SELECT COUNT(*) FROM operations WHERE status = 'pending'")->fetchColumn();
$stats['inventory_alerts'] = $db->query("SELECT COUNT(*) FROM inventory WHERE stock_level <= reorder_level")->fetchColumn();
$stats['active_workers'] = $db->query("SELECT COUNT(DISTINCT assigned_worker_id) FROM operations WHERE status = 'in_progress'")->fetchColumn();
// Fetch recent jobs
$recentJobs = $db->query("SELECT * FROM jobs ORDER BY created_at DESC LIMIT 5")->fetchAll();
}
// Queue for Worker or Admin View
$queue = [];
if ($role === 'worker') {
if (!empty($assignedProcesses)) {
$placeholders = implode(',', array_fill(0, count($assignedProcesses), '?'));
$stmt = $db->prepare("
SELECT o.*, c.name as component_name, j.name as job_name
FROM operations o
JOIN components c ON o.component_id = c.id
JOIN jobs j ON c.job_id = j.id
WHERE o.status IN ('pending', 'in_progress', 'stalled')
AND o.process_type IN ($placeholders)
ORDER BY o.priority DESC, o.created_at ASC
");
$stmt->execute($assignedProcesses);
$queue = $stmt->fetchAll();
}
} else {
// Admin sees all in-progress or stalled ops
$queue = $db->query("
SELECT o.*, c.name as component_name, j.name as job_name, u.name as worker_name
FROM operations o
JOIN components c ON o.component_id = c.id
JOIN jobs j ON c.job_id = j.id
LEFT JOIN users u ON o.assigned_worker_id = u.id
WHERE o.status IN ('in_progress', 'stalled')
ORDER BY o.created_at ASC
")->fetchAll();
}
?>