38815-vm/dashboard.php
2026-02-27 16:48:03 +00:00

222 lines
6.6 KiB
PHP

<?php
session_start();
require 'db/config.php';
$db = db();
if (!isset($_SESSION['user_id'])) {
header('Location: index.php');
exit;
}
$role = $_SESSION['role'];
$userName = $_SESSION['user_name'];
$userId = $_SESSION['user_id'];
// Get assigned processes for worker
$assignedProcesses = [];
if ($role === 'worker') {
$stmt = $db->prepare("SELECT assigned_processes FROM users WHERE id = ?");
$stmt->execute([$userId]);
$res = $stmt->fetch();
$assignedProcesses = json_decode($res['assigned_processes'] ?? '[]', true);
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>M-TRACK | Dashboard</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
:root {
--sidebar-width: 240px;
--bg: #f8fafc;
--primary: #1e293b;
--accent: #3b82f6;
--text: #334155;
--border: #e2e8f0;
}
body {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
background-color: var(--bg);
color: var(--text);
}
.sidebar {
width: var(--sidebar-width);
position: fixed;
top: 0;
bottom: 0;
left: 0;
background-color: var(--primary);
color: white;
z-index: 1000;
padding: 1.5rem 1rem;
}
.sidebar h2 {
font-size: 1.25rem;
font-weight: 700;
margin-bottom: 2rem;
padding: 0 0.5rem;
letter-spacing: -0.025em;
}
.nav-pills .nav-link {
color: #94a3b8;
font-weight: 500;
font-size: 0.875rem;
padding: 0.625rem 0.75rem;
margin-bottom: 0.25rem;
border-radius: 4px;
}
.nav-pills .nav-link:hover {
color: white;
background-color: rgba(255,255,255,0.05);
}
.nav-pills .nav-link.active {
color: white;
background-color: var(--accent);
}
.main-content {
margin-left: var(--sidebar-width);
padding: 2.5rem;
}
.top-bar {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
}
.top-bar h1 {
font-size: 1.5rem;
font-weight: 700;
color: var(--primary);
margin: 0;
}
.user-pill {
background: white;
border: 1px solid var(--border);
padding: 0.375rem 1rem;
border-radius: 9999px;
font-size: 0.875rem;
font-weight: 500;
display: flex;
align-items: center;
gap: 0.5rem;
}
.card {
background: white;
border: 1px solid var(--border);
border-radius: 4px;
box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);
margin-bottom: 1.5rem;
}
.card-header {
background: white;
border-bottom: 1px solid var(--border);
padding: 1rem 1.25rem;
font-weight: 600;
font-size: 0.875rem;
color: var(--primary);
}
.badge-process {
background: #e2e8f0;
color: #475569;
font-weight: 600;
font-size: 0.75rem;
padding: 0.25rem 0.625rem;
border-radius: 4px;
margin-right: 0.5rem;
}
</style>
</head>
<body>
<div class="sidebar">
<h2>M-TRACK</h2>
<nav class="nav nav-pills flex-column">
<a class="nav-link active" href="#"><i class="bi bi-grid-fill me-2"></i> Dashboard</a>
<?php if ($role === 'admin'): ?>
<a class="nav-link" href="#"><i class="bi bi-briefcase me-2"></i> Jobs</a>
<a class="nav-link" href="#"><i class="bi bi-boxes me-2"></i> Inventory</a>
<a class="nav-link" href="#"><i class="bi bi-people me-2"></i> Users</a>
<?php else: ?>
<a class="nav-link" href="#"><i class="bi bi-list-task me-2"></i> My Queue</a>
<?php endif; ?>
<hr class="my-4 border-secondary opacity-25">
<a class="nav-link text-danger" href="logout.php"><i class="bi bi-box-arrow-right me-2"></i> Logout</a>
</nav>
</div>
<div class="main-content">
<div class="top-bar">
<h1><?= $role === 'admin' ? 'Operations Overview' : 'Work Queue' ?></h1>
<div class="user-pill">
<i class="bi bi-person-circle text-muted"></i>
<?= htmlspecialchars($userName) ?>
<span class="text-muted text-uppercase" style="font-size: 0.625rem;"><?= $role ?></span>
</div>
</div>
<?php if ($role === 'worker'): ?>
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header">
Active Processes:
<?php foreach ($assignedProcesses as $proc): ?>
<span class="badge-process"><?= strtoupper($proc) ?></span>
<?php endforeach; ?>
</div>
<div class="card-body py-5 text-center">
<div class="mb-3 text-muted" style="font-size: 2rem;"><i class="bi bi-clipboard-check"></i></div>
<h5 class="text-muted">No pending operations for your assigned processes.</h5>
<p class="text-muted small">New jobs will appear here when ready for production.</p>
</div>
</div>
</div>
</div>
<?php else: ?>
<div class="row">
<div class="col-md-3">
<div class="card text-center p-3">
<div class="text-muted small fw-bold text-uppercase mb-1">Active Jobs</div>
<div class="h3 fw-bold mb-0">0</div>
</div>
</div>
<div class="col-md-3">
<div class="card text-center p-3">
<div class="text-muted small fw-bold text-uppercase mb-1">Pending Ops</div>
<div class="h3 fw-bold mb-0">0</div>
</div>
</div>
<div class="col-md-3">
<div class="card text-center p-3">
<div class="text-muted small fw-bold text-uppercase mb-1">Inventory Alerts</div>
<div class="h3 fw-bold mb-0">0</div>
</div>
</div>
<div class="col-md-3">
<div class="card text-center p-3">
<div class="text-muted small fw-bold text-uppercase mb-1">Active Workers</div>
<div class="h3 fw-bold mb-0">2</div>
</div>
</div>
</div>
<div class="card mt-4">
<div class="card-header">Production Status</div>
<div class="card-body py-5 text-center">
<h5 class="text-muted">No production data available yet.</h5>
<button class="btn btn-sm btn-primary mt-2">Create First Job</button>
</div>
</div>
<?php endif; ?>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>