153 lines
6.2 KiB
PHP
153 lines
6.2 KiB
PHP
<?php
|
|
$page_title = 'Dashboard';
|
|
require_once __DIR__ . '/partials/header.php';
|
|
require_once __DIR__ . '/db/config.php';
|
|
|
|
$user_id = $_SESSION['user_id'];
|
|
$user_role = $_SESSION['user_role'];
|
|
|
|
$pdo = db();
|
|
|
|
// Initialize counts
|
|
$pending_orders_count = 0;
|
|
$pending_replies_count = 0;
|
|
$shipped_orders_month_count = 0;
|
|
|
|
try {
|
|
// --- Fetch Dashboard Counts ---
|
|
$conditions = '';
|
|
$params = [];
|
|
if ($user_role === 'Sales Rep') {
|
|
$conditions = " WHERE sales_rep_id = :user_id";
|
|
$params[':user_id'] = $user_id;
|
|
}
|
|
|
|
// Pending Orders Count
|
|
$stmt = $pdo->prepare("SELECT COUNT(*) FROM orders " . $conditions . " AND status = 'Pending'");
|
|
$stmt->execute($params);
|
|
$pending_orders_count = $stmt->fetchColumn();
|
|
|
|
// Pending Replies Count (Orders with status 'Query' or 'Query Replied')
|
|
$stmt = $pdo->prepare("SELECT COUNT(*) FROM orders " . $conditions . " AND (status = 'Query' OR status = 'Query Replied')");
|
|
$stmt->execute($params);
|
|
$pending_replies_count = $stmt->fetchColumn();
|
|
|
|
// Shipped Orders This Month Count
|
|
$current_month_start = date('Y-m-01 00:00:00');
|
|
$current_month_end = date('Y-m-t 23:59:59');
|
|
|
|
$shipped_sql = "SELECT COUNT(*) FROM orders " . $conditions . " AND status = 'Shipped' AND created_at >= :start_date AND created_at <= :end_date";
|
|
$shipped_params = $params;
|
|
$shipped_params[':start_date'] = $current_month_start;
|
|
$shipped_params[':end_date'] = $current_month_end;
|
|
|
|
$stmt = $pdo->prepare($shipped_sql);
|
|
$stmt->execute($shipped_params);
|
|
$shipped_orders_month_count = $stmt->fetchColumn();
|
|
|
|
// --- Fetch Order List ---
|
|
$orders = [];
|
|
$sql = "SELECT o.id, o.order_number, o.order_date, o.order_text, o.status, u.name as sales_rep_name
|
|
FROM orders o
|
|
JOIN users u ON o.sales_rep_id = u.id";
|
|
|
|
if ($user_role === 'Sales Rep') {
|
|
$sql .= " WHERE o.sales_rep_id = :user_id";
|
|
$stmt = $pdo->prepare($sql);
|
|
$stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT);
|
|
} else {
|
|
// Dispatch and Admin can see all orders
|
|
$stmt = $pdo->prepare($sql);
|
|
}
|
|
$stmt->execute();
|
|
$orders = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
} catch (PDOException $e) {
|
|
error_log("Database error fetching dashboard data or orders: " . $e->getMessage());
|
|
echo '<div class="alert alert-danger" role="alert">Error loading dashboard data. Please try again later.</div>';
|
|
}
|
|
|
|
?>
|
|
|
|
<div class="row mb-4">
|
|
<div class="col-md-4">
|
|
<div class="card border-0 shadow-sm text-primary-emphasis bg-primary-subtle">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Pending Orders</h5>
|
|
<p class="card-text h2"><?php echo htmlspecialchars($pending_orders_count); ?></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="card border-0 shadow-sm text-warning-emphasis bg-warning-subtle">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Pending Replies</h5>
|
|
<p class="card-text h2"><?php echo htmlspecialchars($pending_replies_count); ?></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<div class="card border-0 shadow-sm text-success-emphasis bg-success-subtle">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Shipped This Month</h5>
|
|
<p class="card-text h2"><?php echo htmlspecialchars($shipped_orders_month_count); ?></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-12 mb-4">
|
|
<div class="card border-0 shadow-sm">
|
|
<div class="card-body">
|
|
<h1 class="h4 mb-0">Welcome, <?php echo htmlspecialchars($_SESSION['user_name']); ?>!</h1>
|
|
<p class="text-muted">Your current role: <?php echo htmlspecialchars($user_role); ?></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-12">
|
|
<div class="card border-0 shadow-sm">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Order List</h5>
|
|
<?php if (empty($orders)): ?>
|
|
<p>No orders found.</p>
|
|
<?php else: ?>
|
|
<div class="table-responsive">
|
|
<table class="table table-hover">
|
|
<thead>
|
|
<tr>
|
|
<th>Order Number</th>
|
|
<th>Date</th>
|
|
<th>Sales Rep</th>
|
|
<th>Text</th>
|
|
<th>Status</th>
|
|
<th>Actions</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($orders as $order): ?>
|
|
<tr>
|
|
<td><?php echo htmlspecialchars($order['order_number']); ?></td>
|
|
<td><?php echo htmlspecialchars($order['order_date']); ?></td>
|
|
<td><?php echo htmlspecialchars($order['sales_rep_name']); ?></td>
|
|
<td><?php echo htmlspecialchars(substr($order['order_text'], 0, 50)); ?>...</td>
|
|
<td><span class="badge bg-secondary"><?php echo htmlspecialchars($order['status']); ?></span></td>
|
|
<td>
|
|
<a href="#" class="btn btn-sm btn-outline-primary">View</a>
|
|
<?php if ($user_role === 'Sales Rep' && $order['sales_rep_id'] == $user_id): ?>
|
|
<a href="#" class="btn btn-sm btn-outline-secondary">Edit</a>
|
|
<?php endif; ?>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<?php require_once __DIR__ . '/partials/footer.php'; ?>
|