This repository has been archived on 2026-03-21. You can view files and clone it, but cannot push or open issues or pull requests.
payfrit-biz/api/admin/fixOrder.cfm
2026-02-15 16:34:55 -08:00

108 lines
3.7 KiB
Text

<cfsetting showdebugoutput="false">
<cfcontent type="application/json; charset=utf-8">
<cfscript>
// Fix order that missed webhook - updates status and creates kitchen task
// Usage: ?businessId=55 (defaults to most recent order)
function readJsonBody() {
var raw = getHttpRequestData().content;
if (isNull(raw)) raw = "";
if (!len(trim(raw))) return {};
try {
var data = deserializeJSON(raw);
if (isStruct(data)) return data;
} catch (any e) {}
return {};
}
data = readJsonBody();
businessId = val(structKeyExists(url, "businessId") ? url.businessId : (structKeyExists(data, "businessId") ? data.businessId : 55));
orderId = val(structKeyExists(url, "orderId") ? url.orderId : (structKeyExists(data, "orderId") ? data.orderId : 0));
// Find order
if (orderId > 0) {
qOrder = queryExecute("
SELECT o.ID, o.UUID, o.UserID, o.BusinessID, o.StatusID, o.ServicePointID, o.PaymentStatus,
u.FirstName, sp.Name AS ServicePointName
FROM Orders o
LEFT JOIN Users u ON u.ID = o.UserID
LEFT JOIN ServicePoints sp ON sp.ID = o.ServicePointID
WHERE o.ID = :orderId
LIMIT 1
", { orderId: { value: orderId, cfsqltype: "cf_sql_integer" } }, { datasource: "payfrit" });
} else {
qOrder = queryExecute("
SELECT o.ID, o.UUID, o.UserID, o.BusinessID, o.StatusID, o.ServicePointID, o.PaymentStatus,
u.FirstName, sp.Name AS ServicePointName
FROM Orders o
LEFT JOIN Users u ON u.ID = o.UserID
LEFT JOIN ServicePoints sp ON sp.ID = o.ServicePointID
WHERE o.BusinessID = :businessId
ORDER BY o.ID DESC
LIMIT 1
", { businessId: { value: businessId, cfsqltype: "cf_sql_integer" } }, { datasource: "payfrit" });
}
if (qOrder.recordCount == 0) {
writeOutput(serializeJSON({ "OK": false, "MESSAGE": "No orders found" }));
abort;
}
orderId = qOrder.ID;
businessId = qOrder.BusinessID;
result = {
"OrderID": orderId,
"UserName": qOrder.FirstName,
"CurrentStatus": qOrder.StatusID,
"PaymentStatus": qOrder.PaymentStatus,
"ServicePointID": qOrder.ServicePointID,
"ServicePointName": qOrder.ServicePointName
};
// Update order status to Submitted (1) if it's still Cart (0)
if (qOrder.StatusID == 0) {
queryExecute("
UPDATE Orders
SET StatusID = 1,
PaymentStatus = 'paid',
SubmittedOn = NOW()
WHERE ID = :orderId
", { orderId: { value: orderId, cfsqltype: "cf_sql_integer" } }, { datasource: "payfrit" });
result["StatusUpdated"] = true;
} else {
result["StatusUpdated"] = false;
}
// Check if kitchen task exists
qTask = queryExecute("
SELECT ID FROM Tasks WHERE OrderID = :orderId
", { orderId: { value: orderId, cfsqltype: "cf_sql_integer" } }, { datasource: "payfrit" });
if (qTask.recordCount == 0) {
// Create kitchen task
tableName = len(trim(qOrder.ServicePointName)) ? qOrder.ServicePointName : "Table";
taskTitle = "Prepare Order ##" & orderId & " for " & tableName;
queryExecute("
INSERT INTO Tasks (
BusinessID, OrderID, Title, CreatedOn, ClaimedByUserID, TaskTypeID
) VALUES (
:businessId, :orderId, :title, NOW(), 0, 1
)
", {
businessId: { value: businessId, cfsqltype: "cf_sql_integer" },
orderId: { value: orderId, cfsqltype: "cf_sql_integer" },
title: { value: taskTitle, cfsqltype: "cf_sql_varchar" }
}, { datasource: "payfrit" });
result["TaskCreated"] = true;
} else {
result["TaskCreated"] = false;
result["ExistingTaskID"] = qTask.ID;
}
result["OK"] = true;
result["MESSAGE"] = "Order fixed";
writeOutput(serializeJSON(result));
</cfscript>