#serializeJSON({"OK": false, "ERROR": "admin_only"})# /** * Delete orphan Items at ParentID=0 * Orphan = ParentID=0, no children, not in ItemTemplateLinks */ response = { "OK": false, "deleted": 0, "orphans": [] }; try { // Find orphans qOrphans = queryExecute(" SELECT i.ItemID, i.ItemName, i.ItemBusinessID FROM Items i WHERE i.ItemParentItemID = 0 AND NOT EXISTS ( SELECT 1 FROM Items child WHERE child.ItemParentItemID = i.ItemID ) AND NOT EXISTS ( SELECT 1 FROM ItemTemplateLinks tl WHERE tl.TemplateItemID = i.ItemID ) ORDER BY i.ItemBusinessID, i.ItemName ", {}, { datasource: "payfrit" }); orphanIDs = []; for (orphan in qOrphans) { arrayAppend(response.orphans, { "ItemID": orphan.ItemID, "ItemName": orphan.ItemName, "BusinessID": orphan.ItemBusinessID }); arrayAppend(orphanIDs, orphan.ItemID); } // Delete them by ID list if (arrayLen(orphanIDs) > 0) { queryExecute(" DELETE FROM Items WHERE ItemID IN (#arrayToList(orphanIDs)#) ", {}, { datasource: "payfrit" }); } response["deleted"] = arrayLen(orphanIDs); response["OK"] = true; } catch (any e) { response["ERROR"] = e.message; response["DETAIL"] = e.detail; } writeOutput(serializeJSON(response));