prepare("SELECT SUM(total_amount) FROM orders WHERE DATE(created_at) = ? AND status != 'cancelled'"); $stmt->execute([$today]); $revenueToday = $stmt->fetchColumn() ?: 0; // Total Orders Today $stmt = $pdo->prepare("SELECT COUNT(*) FROM orders WHERE DATE(created_at) = ? AND status != 'cancelled'"); $stmt->execute([$today]); $ordersToday = $stmt->fetchColumn(); // Total Revenue This Month $stmt = $pdo->prepare("SELECT SUM(total_amount) FROM orders WHERE DATE_FORMAT(created_at, '%Y-%m') = ? AND status != 'cancelled'"); $stmt->execute([$thisMonth]); $revenueThisMonth = $stmt->fetchColumn() ?: 0; // Total Expenses This Month $stmt = $pdo->prepare("SELECT SUM(amount) FROM expenses WHERE DATE_FORMAT(expense_date, '%Y-%m') = ?"); $stmt->execute([$thisMonth]); $expensesThisMonth = $stmt->fetchColumn() ?: 0; // Estimated Net Profit This Month $netProfitThisMonth = $revenueThisMonth - $expensesThisMonth; // Active Outlets $outletsCount = $pdo->query("SELECT COUNT(*) FROM outlets")->fetchColumn(); // Total Products $productsCount = $pdo->query("SELECT COUNT(*) FROM products")->fetchColumn(); // 1. Sales Trend (Last 12 Months) $salesTrendQuery = " SELECT DATE_FORMAT(created_at, '%b %Y') as month_label, SUM(total_amount) as total, DATE_FORMAT(created_at, '%Y-%m') as sort_key FROM orders WHERE status != 'cancelled' AND created_at >= DATE_SUB(NOW(), INTERVAL 12 MONTH) GROUP BY month_label, sort_key ORDER BY sort_key ASC"; $salesTrend = $pdo->query($salesTrendQuery)->fetchAll(); // 2. Sales by Category (Pie Chart) $salesByCategoryQuery = " SELECT c.name as category_name, SUM(oi.quantity * oi.unit_price) as total_sales FROM order_items oi JOIN products p ON oi.product_id = p.id JOIN categories c ON p.category_id = c.id JOIN orders o ON oi.order_id = o.id WHERE o.status != 'cancelled' GROUP BY c.name ORDER BY total_sales DESC"; $salesByCategory = $pdo->query($salesByCategoryQuery)->fetchAll(); // 3. Sales by Order Type (Pie Chart) $salesByTypeQuery = " SELECT order_type, SUM(total_amount) as total FROM orders WHERE status != 'cancelled' GROUP BY order_type"; $salesByType = $pdo->query($salesByTypeQuery)->fetchAll(); // 4. Top 5 Items Sold $topItemsQuery = " SELECT p.name, SUM(oi.quantity) as total_qty FROM order_items oi JOIN products p ON oi.product_id = p.id JOIN orders o ON oi.order_id = o.id WHERE o.status != 'cancelled' GROUP BY p.name ORDER BY total_qty DESC LIMIT 5"; $topItems = $pdo->query($topItemsQuery)->fetchAll(); // 5. Value Add: Average Order Value $stmt = $pdo->query("SELECT AVG(total_amount) FROM orders WHERE status != 'cancelled'"); $avgOrderValue = $stmt->fetchColumn() ?: 0; // Recent Orders $recentOrders = $pdo->query("SELECT o.*, (SELECT GROUP_CONCAT(p.name SEPARATOR ', ') FROM order_items oi JOIN products p ON oi.product_id = p.id WHERE oi.order_id = o.id) as items FROM orders o ORDER BY created_at DESC LIMIT 5")->fetchAll(); } include 'includes/header.php'; ?>
No data available
No data available
| ID | Total | Status | Date |
|---|---|---|---|
| #= $order['id'] ?> | = format_currency($order['total_amount']) ?> | = ucfirst($order['status']) ?> | = date('M d, H:i', strtotime($order['created_at'])) ?> |
| No recent orders found. | |||
Welcome to the Admin Panel, = htmlspecialchars($userName) ?>!