Complete port of all 163 API endpoints from Lucee/CFML to PHP 8.3. Shared helpers in api/helpers.php (DB, auth, request/response, security). PDO prepared statements throughout. Same JSON response shapes as CFML.
51 lines
1.4 KiB
PHP
51 lines
1.4 KiB
PHP
<?php
|
|
require_once __DIR__ . '/../helpers.php';
|
|
runAuth();
|
|
|
|
$data = readJsonBody();
|
|
$businessID = (int) ($data['BusinessID'] ?? 0);
|
|
|
|
if ($businessID <= 0) {
|
|
apiAbort(['OK' => false, 'ERROR' => 'BusinessID is required']);
|
|
}
|
|
|
|
$todayStart = gmdate('Y-m-d') . ' 00:00:00';
|
|
$todayEnd = gmdate('Y-m-d') . ' 23:59:59';
|
|
|
|
// Orders today
|
|
$qOrdersToday = queryOne(
|
|
"SELECT COUNT(*) AS cnt FROM Orders
|
|
WHERE BusinessID = ? AND SubmittedOn >= ? AND SubmittedOn <= ?",
|
|
[$businessID, $todayStart, $todayEnd]
|
|
);
|
|
|
|
// Revenue today
|
|
$qRevenueToday = queryOne(
|
|
"SELECT COALESCE(SUM(li.Quantity * li.Price), 0) AS total
|
|
FROM Orders o
|
|
JOIN OrderLineItems li ON li.OrderID = o.ID
|
|
WHERE o.BusinessID = ? AND o.SubmittedOn >= ? AND o.SubmittedOn <= ? AND o.StatusID >= 1",
|
|
[$businessID, $todayStart, $todayEnd]
|
|
);
|
|
|
|
// Pending orders (status 1 = submitted, 2 = preparing)
|
|
$qPendingOrders = queryOne(
|
|
"SELECT COUNT(*) AS cnt FROM Orders WHERE BusinessID = ? AND StatusID IN (1, 2)",
|
|
[$businessID]
|
|
);
|
|
|
|
// Active menu items
|
|
$qMenuItems = queryOne(
|
|
"SELECT COUNT(*) AS cnt FROM Items WHERE BusinessID = ? AND IsActive = 1 AND ParentItemID > 0",
|
|
[$businessID]
|
|
);
|
|
|
|
jsonResponse([
|
|
'OK' => true,
|
|
'STATS' => [
|
|
'ordersToday' => (int) $qOrdersToday['cnt'],
|
|
'revenueToday' => (float) $qRevenueToday['total'],
|
|
'pendingOrders' => (int) $qPendingOrders['cnt'],
|
|
'menuItems' => (int) $qMenuItems['cnt'],
|
|
],
|
|
]);
|