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 WHERE is_deleted = 0 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 / Customer Name) if (!empty($_GET['search'])) { $searchTerm = $_GET['search']; if (is_numeric($searchTerm)) { $where[] = "(o.id = :search_exact OR o.customer_name LIKE :search_like)"; $params[':search_exact'] = $searchTerm; $params[':search_like'] = "%$searchTerm%"; } else { $where[] = "o.customer_name LIKE :search"; $params[':search'] = "%$searchTerm%"; } } $where_clause = !empty($where) ? 'WHERE ' . implode(' AND ', $where) : ''; // Calculate Total Sum and Total Commission and Total VAT for filtered orders $sum_query = "SELECT SUM(total_amount) as total_sum, SUM(commission_amount) as total_commission, SUM(vat) as total_vat FROM orders o $where_clause"; $stmt_sum = $pdo->prepare($sum_query); $stmt_sum->execute($params); $sum_data = $stmt_sum->fetch(PDO::FETCH_ASSOC); $total_sum = (float)($sum_data['total_sum'] ?? 0); $total_commission = (float)($sum_data['total_commission'] ?? 0); $total_vat_sum = (float)($sum_data['total_vat'] ?? 0); // Main Query $query = "SELECT o.*, ot.name as outlet_name, pt.name as payment_type_name, u.username as cashier_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 LEFT JOIN users u ON o.user_id = u.id $where_clause ORDER BY o.created_at DESC"; $orders_pagination = paginate_query($pdo, $query, $params); $orders = $orders_pagination['data']; $settings = get_company_settings(); $commission_enabled = !empty($settings['commission_enabled']); 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 VAT
Total Orders
Date Range
-
-
ID Outlet Cashier Customer Type VAT Total Commission Payment Status Time Actions
# @
Guest
'bg-info', 'takeaway' => 'bg-success', 'delivery' => 'bg-warning', 'drive-thru' => 'bg-primary', default => 'bg-secondary' }; ?> 'bg-success', 'credit card' => 'bg-primary', 'loyalty redeem' => 'bg-warning', 'bank transfer' => 'bg-info', 'unpaid' => 'bg-secondary', default => 'bg-secondary' }; ?>
No active orders found matching your criteria.