payfrit-api/api/portal/stats.php
John Mizerek 1f81d98c52 Initial PHP API migration from CFML
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.
2026-03-14 14:26:59 -07:00

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'],
],
]);