function apiAbort(obj){ writeOutput(serializeJSON(obj)); abort; } if (!structKeyExists(request,"UserID") || !isNumeric(request.UserID) || request.UserID LTE 0){ apiAbort({OK=false,ERROR="not_logged_in"}); } if (!structKeyExists(request,"BusinessID") || !isNumeric(request.BusinessID) || request.BusinessID LTE 0){ apiAbort({OK=false,ERROR="no_business_selected"}); } SELECT lt.lt_Beacon_Businesses_ServicePointID AS lt_Beacon_Businesses_ServicePointID, lt.BeaconID AS BeaconID, b.BeaconName AS BeaconName, lt.ServicePointID AS ServicePointID, sp.ServicePointName AS ServicePointName, lt.lt_Beacon_Businesses_ServicePointNotes AS lt_Beacon_Businesses_ServicePointNotes, lt.CreatedAt AS CreatedAt FROM lt_Beacon_Businesses_ServicePoints lt INNER JOIN Beacons b ON b.BeaconID = lt.BeaconID AND b.BusinessID = lt.BusinessID INNER JOIN ServicePoints sp ON sp.ServicePointID = lt.ServicePointID AND sp.BusinessID = lt.BusinessID WHERE lt.BusinessID = ORDER BY lt.lt_Beacon_Businesses_ServicePointID DESC assignments = []; i = 1; for (i = 1; i <= q.recordCount; i = i + 1){ // Build keys EXACTLY as the admin UI expects (case-sensitive in JS) row = { "lt_Beacon_Businesses_ServicePointID": q["lt_Beacon_Businesses_ServicePointID"][i], "BeaconID": q["BeaconID"][i], "BeaconName": q["BeaconName"][i], "ServicePointID": q["ServicePointID"][i], "ServicePointName": q["ServicePointName"][i], "lt_Beacon_Businesses_ServicePointNotes": q["lt_Beacon_Businesses_ServicePointNotes"][i], "CreatedAt": q["CreatedAt"][i] }; arrayAppend(assignments, row); } out = { "OK": true, "ERROR": "", "BUSINESSID": (request.BusinessID & ""), "COUNT": arrayLen(assignments), "ASSIGNMENTS": assignments }; #serializeJSON(out)#