response = { "OK": false, "steps": [] }; try { // Keep only Lazy Daisy (BusinessID 37) keepBusinessID = 37; // First, reassign all beacons to Lazy Daisy queryExecute(" UPDATE lt_Beacon_Businesses_ServicePoints SET BusinessID = :keepID ", { keepID: keepBusinessID }, { datasource: "payfrit" }); response.steps.append("Reassigned all beacons to Lazy Daisy"); // Get list of businesses to delete qBiz = queryExecute(" SELECT BusinessID, BusinessName FROM Businesses WHERE BusinessID != :keepID ", { keepID: keepBusinessID }, { datasource: "payfrit" }); deletedBusinesses = []; for (i = 1; i <= qBiz.recordCount; i++) { arrayAppend(deletedBusinesses, qBiz.BusinessName[i]); } response.steps.append("Found " & qBiz.recordCount & " businesses to delete"); // Delete related data first (foreign key constraints) // Delete ItemTemplateLinks for items from other businesses queryExecute(" DELETE itl FROM ItemTemplateLinks itl JOIN Items i ON i.ItemID = itl.ItemID WHERE i.ItemBusinessID != :keepID ", { keepID: keepBusinessID }, { datasource: "payfrit" }); response.steps.append("Deleted ItemTemplateLinks for other businesses"); // Delete Items for other businesses qItems = queryExecute(" SELECT COUNT(*) as cnt FROM Items WHERE ItemBusinessID != :keepID ", { keepID: keepBusinessID }, { datasource: "payfrit" }); queryExecute(" DELETE FROM Items WHERE ItemBusinessID != :keepID ", { keepID: keepBusinessID }, { datasource: "payfrit" }); response.steps.append("Deleted " & qItems.cnt & " items from other businesses"); // Delete Categories for other businesses queryExecute(" DELETE FROM Categories WHERE CategoryBusinessID != :keepID ", { keepID: keepBusinessID }, { datasource: "payfrit" }); response.steps.append("Deleted categories from other businesses"); // Delete Hours for other businesses queryExecute(" DELETE FROM Hours WHERE HoursBusinessID != :keepID ", { keepID: keepBusinessID }, { datasource: "payfrit" }); response.steps.append("Deleted hours from other businesses"); // Delete Employees for other businesses (skip if table doesn't exist) try { queryExecute(" DELETE FROM Employees WHERE EmployeeBusinessID != :keepID ", { keepID: keepBusinessID }, { datasource: "payfrit" }); response.steps.append("Deleted employees from other businesses"); } catch (any e) { response.steps.append("Skipped employees (table may not exist)"); } // Delete ServicePoints for other businesses (skip if table doesn't exist) try { queryExecute(" DELETE FROM ServicePoints WHERE ServicePointBusinessID != :keepID ", { keepID: keepBusinessID }, { datasource: "payfrit" }); response.steps.append("Deleted service points from other businesses"); } catch (any e) { response.steps.append("Skipped service points (table may not exist)"); } // Delete Stations for other businesses (skip if table doesn't exist) try { queryExecute(" DELETE FROM Stations WHERE StationBusinessID != :keepID ", { keepID: keepBusinessID }, { datasource: "payfrit" }); response.steps.append("Deleted stations from other businesses"); } catch (any e) { response.steps.append("Skipped stations (table may not exist)"); } // Finally delete the businesses themselves queryExecute(" DELETE FROM Businesses WHERE BusinessID != :keepID ", { keepID: keepBusinessID }, { datasource: "payfrit" }); response.steps.append("Deleted " & arrayLen(deletedBusinesses) & " businesses"); // Get beacon status qBeacons = queryExecute(" SELECT lt.BeaconID, b.BeaconUUID, lt.BusinessID, biz.BusinessName, lt.ServicePointID FROM lt_Beacon_Businesses_ServicePoints lt JOIN Beacons b ON b.BeaconID = lt.BeaconID JOIN Businesses biz ON biz.BusinessID = lt.BusinessID ", {}, { datasource: "payfrit" }); beacons = []; for (i = 1; i <= qBeacons.recordCount; i++) { arrayAppend(beacons, { "BeaconID": qBeacons.BeaconID[i], "UUID": qBeacons.BeaconUUID[i], "BusinessID": qBeacons.BusinessID[i], "BusinessName": qBeacons.BusinessName[i], "ServicePointID": qBeacons.ServicePointID[i] }); } response.OK = true; response.deletedBusinesses = deletedBusinesses; response.beacons = beacons; } catch (any e) { response.error = e.message; if (len(e.detail)) { response.detail = e.detail; } } writeOutput(serializeJSON(response));