- Add uploadHeader.cfm API for 1200px header images - Add saveBrandColor.cfm API for hex color storage - Add Branding section to menu builder sidebar - Fix header upload path and permissions - Various beacon and service point API improvements Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
127 lines
4.8 KiB
Text
127 lines
4.8 KiB
Text
<cfsetting showdebugoutput="false">
|
|
<cfsetting enablecfoutputonly="true">
|
|
<cfcontent type="application/json; charset=utf-8" reset="true">
|
|
|
|
<cfscript>
|
|
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));
|
|
</cfscript>
|