#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 lt_ItemID_TemplateItemID. * * 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 = queryTimed(" SELECT m.ItemID, m.Name, m.ParentItemID, p.Name as ParentName FROM Items m INNER JOIN Items p ON p.ItemID = m.ParentItemID INNER JOIN Categories c ON c.ID = p.CategoryID WHERE c.BusinessID = :businessID AND m.ParentItemID > 0 AND p.ParentItemID = 0 AND (m.IsModifierTemplate IS NULL OR m.IsModifierTemplate = 0) AND m.IsActive = 1 ORDER BY m.Name ", { 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 = queryTimed(" DELETE FROM Items WHERE ParentItemID = :orphanID ", { orphanID: orphan.ItemID }, { datasource: "payfrit" }); // Delete the orphan itself qDeleteOrphan = queryTimed(" DELETE FROM Items WHERE ID = :orphanID ", { orphanID: orphan.ItemID }, { datasource: "payfrit" }); arrayAppend(response.deleted, { "ItemID": orphan.ItemID, "Name": orphan.Name, "WasUnder": orphan.ParentName }); } catch (any deleteErr) { arrayAppend(response.errors, { "ItemID": orphan.ItemID, "Name": orphan.Name, "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));