151 lines
6.3 KiB
PHP
151 lines
6.3 KiB
PHP
<?php
|
|
session_start();
|
|
if (!isset($_SESSION['user_id'])) {
|
|
header('Location: login.php');
|
|
exit;
|
|
}
|
|
require_once 'db/config.php';
|
|
|
|
try {
|
|
$pdo = db();
|
|
|
|
// Default status filter
|
|
$status_filter = $_GET['status'] ?? null;
|
|
|
|
$sql = 'SELECT id, request_number, request_title, status, requester_name, issued_date, department_name, approval_level_pending FROM ChangeRequests';
|
|
$params = [];
|
|
|
|
// Role-based filtering for default view
|
|
if (isset($_SESSION['role']) && $_SESSION['role'] === 'Admin' && empty($status_filter)) {
|
|
$status_filter = 'Pending Approval';
|
|
}
|
|
|
|
if ($status_filter && $status_filter !== 'All') {
|
|
$sql .= ' WHERE status = :status';
|
|
$params[':status'] = $status_filter;
|
|
}
|
|
|
|
$sql .= ' ORDER BY issued_date DESC';
|
|
|
|
$stmt = $pdo->prepare($sql);
|
|
$stmt->execute($params);
|
|
$requests = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
} catch (PDOException $e) {
|
|
die("Database error: " . $e->getMessage());
|
|
}
|
|
|
|
function getStatusColor($status) {
|
|
switch ($status) {
|
|
case 'Draft':
|
|
return 'grey';
|
|
case 'Pending Approval':
|
|
return 'orange';
|
|
case 'Approved':
|
|
return 'green';
|
|
case 'Rejected':
|
|
return 'red';
|
|
case 'In Progress':
|
|
return 'blue';
|
|
case 'Completed':
|
|
return 'purple';
|
|
default:
|
|
return 'black';
|
|
}
|
|
}
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Change Requests Dashboard</title>
|
|
<style>
|
|
body { font-family: Inter, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; background-color: #F7F9FC; color: #333; margin: 0; padding: 20px; }
|
|
.container { max-width: 1200px; margin: 0 auto; background-color: #FFFFFF; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); padding: 20px; }
|
|
h1 { color: #4A90E2; }
|
|
table { width: 100%; border-collapse: collapse; margin-top: 20px; }
|
|
th, td { padding: 12px; border-bottom: 1px solid #ddd; text-align: left; vertical-align: middle; }
|
|
th { background-color: #f2f2f2; }
|
|
.status { padding: 5px 10px; border-radius: 15px; color: white; font-weight: bold; }
|
|
.actions form { display: inline-block; margin-right: 5px; }
|
|
.actions button {
|
|
padding: 6px 12px;
|
|
border: none;
|
|
border-radius: 4px;
|
|
cursor: pointer;
|
|
color: white;
|
|
font-weight: bold;
|
|
}
|
|
.actions button[value="approve"] { background-color: #50E3C2; }
|
|
.actions button[value="reject"] { background-color: #E35050; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<div style="text-align: right; margin-bottom: 20px;">
|
|
Logged in as <strong><?php echo htmlspecialchars($_SESSION['username']); ?></strong> | <a href="logout.php">Logout</a>
|
|
</div>
|
|
<h1>Program Change Requests Dashboard</h1>
|
|
<div class="filters" style="margin-bottom: 20px;">
|
|
<strong>Filter by status:</strong>
|
|
<a href="request_dashboard.php?status=All">All</a> |
|
|
<a href="request_dashboard.php?status=Pending Approval">Pending Approval</a> |
|
|
<a href="request_dashboard.php?status=Approved">Approved</a> |
|
|
<a href="request_dashboard.php?status=Rejected">Rejected</a>
|
|
</div>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Request No.</th>
|
|
<th>Title</th>
|
|
<th>Requester</th>
|
|
<th>Department</th>
|
|
<th>Issued Date</th>
|
|
<th>Status</th>
|
|
<th>Pending Approval From</th>
|
|
<th>Actions</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php if (empty($requests)): ?>
|
|
<tr>
|
|
<td colspan="8" style="text-align:center;">No change requests found.</td>
|
|
</tr>
|
|
<?php else: ?>
|
|
<?php foreach ($requests as $request): ?>
|
|
<tr>
|
|
<td><?php echo htmlspecialchars($request['request_number'] ?? 'N/A'); ?></td>
|
|
<td><a href="view_request.php?id=<?php echo $request['id']; ?>"><?php echo htmlspecialchars($request['request_title']); ?></a></td>
|
|
<td><?php echo htmlspecialchars($request['requester_name']); ?></td>
|
|
<td><?php echo htmlspecialchars($request['department_name']); ?></td>
|
|
<td><?php echo htmlspecialchars($request['issued_date']); ?></td>
|
|
<td>
|
|
<span class="status" style="background-color: <?php echo getStatusColor($request['status']); ?>;">
|
|
<?php echo htmlspecialchars(str_replace('_', ' ', $request['status'])); ?>
|
|
</span>
|
|
</td>
|
|
<td><?php echo htmlspecialchars($request['approval_level_pending']); ?></td>
|
|
<td class="actions">
|
|
<?php
|
|
if ($request['status'] === 'Pending Approval' &&
|
|
isset($_SESSION['role']) && $_SESSION['role'] === $request['approval_level_pending'] &&
|
|
isset($_SESSION['department']) && $_SESSION['department'] === $request['department_name']):
|
|
?>
|
|
<form action="approve_request.php" method="POST">
|
|
<input type="hidden" name="request_id" value="<?php echo $request['id']; ?>">
|
|
<button type="submit" name="action" value="approve">Approve</button>
|
|
<button type="submit" name="action" value="reject">Reject</button>
|
|
</form>
|
|
<?php endif; ?>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<a href="dashboard.php">Menu</a>
|
|
</div>
|
|
</body>
|
|
</html>
|