payfrit-api/api/orders/getPendingForUser.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

78 lines
2.6 KiB
PHP

<?php
require_once __DIR__ . '/../helpers.php';
runAuth();
/**
* Get pending orders for a user at a specific business
* GET: ?UserID=int&BusinessID=int
* Returns orders with status 1-3 (Submitted, Preparing, Ready)
*/
$response = ['OK' => false];
try {
$UserID = (int) ($_GET['UserID'] ?? 0);
$BusinessID = (int) ($_GET['BusinessID'] ?? 0);
if ($UserID <= 0) {
$response['ERROR'] = 'missing_user';
$response['MESSAGE'] = 'UserID is required';
jsonResponse($response);
}
if ($BusinessID <= 0) {
$response['ERROR'] = 'missing_business';
$response['MESSAGE'] = 'BusinessID is required';
jsonResponse($response);
}
$qOrders = queryTimed("
SELECT
o.ID, o.UUID, o.OrderTypeID, o.StatusID, o.SubmittedOn,
o.ServicePointID,
sp.Name AS Name,
b.Name AS BizName,
(SELECT COALESCE(SUM(oli.Price * oli.Quantity), 0)
FROM OrderLineItems oli
WHERE oli.OrderID = o.ID AND oli.IsDeleted = 0 AND oli.ParentOrderLineItemID = 0) AS Subtotal
FROM Orders o
LEFT JOIN ServicePoints sp ON sp.ID = o.ServicePointID
LEFT JOIN Businesses b ON b.ID = o.BusinessID
WHERE o.UserID = ? AND o.BusinessID = ? AND o.StatusID IN (1, 2, 3)
ORDER BY o.SubmittedOn DESC
LIMIT 5
", [$UserID, $BusinessID]);
$orders = [];
foreach ($qOrders as $row) {
$statusName = match ((int) $row['StatusID']) {
1 => 'Submitted', 2 => 'Preparing', 3 => 'Ready for Pickup', default => '',
};
$orderTypeName = match ((int) $row['OrderTypeID']) {
1 => 'Dine-In', 2 => 'Takeaway', 3 => 'Delivery', default => '',
};
$orders[] = [
'OrderID' => (int) $row['ID'],
'UUID' => $row['UUID'],
'OrderTypeID' => (int) $row['OrderTypeID'],
'OrderTypeName' => $orderTypeName,
'StatusID' => (int) $row['StatusID'],
'StatusName' => $statusName,
'SubmittedOn' => toISO8601($row['SubmittedOn']),
'ServicePointID' => (int) ($row['ServicePointID'] ?? 0),
'Name' => trim($row['Name'] ?? '') !== '' ? $row['Name'] : '',
'Subtotal' => (float) $row['Subtotal'],
];
}
$response['OK'] = true;
$response['ORDERS'] = $orders;
$response['HAS_PENDING'] = count($orders) > 0;
} catch (Exception $e) {
$response['ERROR'] = 'server_error';
$response['MESSAGE'] = $e->getMessage();
}
jsonResponse($response);