prepare("UPDATE orders SET status = ? WHERE id = ?"); $stmt->execute([$new_status, $order_id]); header("Location: orders.php?" . http_build_query($_GET)); // Keep filters exit; } // Handle stopping all promotions if (isset($_POST['action']) && $_POST['action'] === 'stop_promotions') { if (!has_permission('manage_products')) { header("Location: orders.php?error=permission_denied"); exit; } // Set promo_date_to to yesterday for all currently active promotions $stmt = $pdo->prepare("UPDATE products SET promo_date_to = DATE_SUB(CURDATE(), INTERVAL 1 DAY) WHERE (promo_date_to >= CURDATE() OR promo_date_to IS NULL) AND promo_discount_percent IS NOT NULL"); $stmt->execute(); header("Location: orders.php?success=promotions_stopped"); exit; } // Handle Delete Order if (isset($_GET['delete'])) { if (!has_permission('manage_orders')) { header("Location: orders.php?error=permission_denied"); exit; } $id = (int)$_GET['delete']; $pdo->beginTransaction(); try { $pdo->prepare("DELETE FROM order_items WHERE order_id = ?")->execute([$id]); $pdo->prepare("DELETE FROM orders WHERE id = ?")->execute([$id]); $pdo->commit(); header("Location: orders.php?success=order_deleted"); } catch (Exception $e) { $pdo->rollBack(); header("Location: orders.php?error=delete_failed"); } exit; } // Fetch Outlets for Filter $outlets = $pdo->query("SELECT id, name FROM outlets ORDER BY name")->fetchAll(PDO::FETCH_ASSOC); // Build Query with Filters $params = []; $where = []; // Filter: Outlet if (!empty($_GET['outlet_id'])) { $where[] = "o.outlet_id = :outlet_id"; $params[':outlet_id'] = $_GET['outlet_id']; } // Filter: Date Range if (!empty($_GET['start_date'])) { $where[] = "DATE(o.created_at) >= :start_date"; $params[':start_date'] = $_GET['start_date']; } if (!empty($_GET['end_date'])) { $where[] = "DATE(o.created_at) <= :end_date"; $params[':end_date'] = $_GET['end_date']; } // Filter: Search (Order No) if (!empty($_GET['search'])) { if (is_numeric($_GET['search'])) { $where[] = "o.id = :search"; $params[':search'] = $_GET['search']; } } $where_clause = !empty($where) ? 'WHERE ' . implode(' AND ', $where) : ''; // Calculate Total Sum for filtered orders $sum_query = "SELECT SUM(total_amount) as total_sum FROM orders o $where_clause"; $stmt_sum = $pdo->prepare($sum_query); $stmt_sum->execute($params); $total_sum = $stmt_sum->fetchColumn() ?: 0; // Main Query $query = "SELECT o.*, ot.name as outlet_name, pt.name as payment_type_name, (SELECT GROUP_CONCAT(CONCAT(p.name, ' x', oi.quantity) SEPARATOR ', ') FROM order_items oi JOIN products p ON oi.product_id = p.id WHERE oi.order_id = o.id) as items_summary FROM orders o LEFT JOIN outlets ot ON o.outlet_id = ot.id LEFT JOIN payment_types pt ON o.payment_type_id = pt.id $where_clause ORDER BY o.created_at DESC"; $orders_pagination = paginate_query($pdo, $query, $params); $orders = $orders_pagination['data']; // Add total sum to pagination object for rendering $orders_pagination['total_amount_sum'] = $total_sum; include 'includes/header.php'; ?>

Order Management

Live
Access Denied: You do not have permission to perform this action.
Error: Failed to delete order.
All running promotions have been stopped successfully.
Order has been deleted successfully.
Total Revenue
Total Orders
Date Range
-
-
ID Outlet Customer Type Source Items Total Payment Status Time Actions
#
Guest
'bg-info', 'takeaway' => 'bg-success', 'delivery' => 'bg-warning', 'drive-thru' => 'bg-primary', default => 'bg-secondary' }; ?> Table 'bg-success', 'credit card' => 'bg-primary', 'loyalty redeem' => 'bg-warning', 'unpaid' => 'bg-secondary', default => 'bg-secondary' }; ?>
No active orders found matching your criteria.