#serializeJSON({"OK": false, "ERROR": "admin_only"})# /** * Delete Orphan Modifiers for In and Out Burger (BusinessID=17) * * This script deletes duplicate modifier items that are no longer needed * because we now use ItemTemplateLinks. * * The orphan items are level-1 modifiers (direct children of parent items) * that have been replaced by template links. */ response = { "OK": false, "deleted": [], "errors": [] }; try { businessID = 17; // In and Out Burger // Get all level-1 modifiers that are NOT templates // These are the duplicates we want to delete qOrphans = queryExecute(" SELECT m.ItemID, m.ItemName, m.ItemParentItemID, p.ItemName as ParentName FROM Items m INNER JOIN Items p ON p.ItemID = m.ItemParentItemID INNER JOIN Categories c ON c.CategoryID = p.ItemCategoryID WHERE c.CategoryBusinessID = :businessID AND m.ItemParentItemID > 0 AND p.ItemParentItemID = 0 AND (m.ItemIsModifierTemplate IS NULL OR m.ItemIsModifierTemplate = 0) AND m.ItemIsActive = 1 ORDER BY m.ItemName ", { businessID: businessID }, { datasource: "payfrit" }); arrayAppend(response.deleted, "Found " & qOrphans.recordCount & " orphan modifiers to delete"); // First, delete all children of orphan items (level 3+) for (orphan in qOrphans) { try { // Delete children of this orphan (options within the modifier group) qDeleteChildren = queryExecute(" DELETE FROM Items WHERE ItemParentItemID = :orphanID ", { orphanID: orphan.ItemID }, { datasource: "payfrit" }); // Delete the orphan itself qDeleteOrphan = queryExecute(" DELETE FROM Items WHERE ItemID = :orphanID ", { orphanID: orphan.ItemID }, { datasource: "payfrit" }); arrayAppend(response.deleted, { "ItemID": orphan.ItemID, "ItemName": orphan.ItemName, "WasUnder": orphan.ParentName }); } catch (any deleteErr) { arrayAppend(response.errors, { "ItemID": orphan.ItemID, "ItemName": orphan.ItemName, "Error": deleteErr.message }); } } response["deletedCount"] = arrayLen(response.deleted) - 1; // Subtract the "Found X" message response["errorCount"] = arrayLen(response.errors); response["OK"] = true; } catch (any e) { response["ERROR"] = e.message; response["DETAIL"] = e.detail; } writeOutput(serializeJSON(response));