From 41ef1631ef1971e36c9b4594201509f1417f8971 Mon Sep 17 00:00:00 2001 From: John Mizerek Date: Wed, 28 Jan 2026 18:01:51 -0800 Subject: [PATCH] Allow menu deletion when categories exist - unassign instead of block Co-Authored-By: Claude Opus 4.5 --- api/menu/menus.cfm | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/api/menu/menus.cfm b/api/menu/menus.cfm index 35d1eaa..d8ee5fe 100644 --- a/api/menu/menus.cfm +++ b/api/menu/menus.cfm @@ -190,27 +190,32 @@ try { apiAbort({ "OK": false, "ERROR": "missing_menu_id", "MESSAGE": "MenuID is required" }); } - // Check if menu has categories + // Check if menu has categories/items for warning qCatCheck = queryExecute(" SELECT COUNT(*) as cnt FROM Categories - WHERE CategoryMenuID = :menuID - ", { menuID: menuID }, { datasource: "payfrit" }); + WHERE CategoryMenuID = :menuID AND CategoryBusinessID = :businessID + ", { menuID: menuID, businessID: businessID }, { datasource: "payfrit" }); + // Unassign categories from this menu if (qCatCheck.cnt > 0) { - apiAbort({ - "OK": false, - "ERROR": "menu_has_categories", - "MESSAGE": "Cannot delete menu with categories. Move or delete categories first.", - "CATEGORY_COUNT": qCatCheck.cnt - }); + queryExecute(" + UPDATE Categories SET CategoryMenuID = 0 + WHERE CategoryMenuID = :menuID AND CategoryBusinessID = :businessID + ", { menuID: menuID, businessID: businessID }, { datasource: "payfrit" }); } + // Soft-delete the menu queryExecute(" UPDATE Menus SET MenuIsActive = 0 WHERE MenuID = :menuID AND MenuBusinessID = :businessID ", { menuID: menuID, businessID: businessID }, { datasource: "payfrit" }); - response = { "OK": true, "MenuID": menuID, "ACTION": "deleted" }; + response = { + "OK": true, + "MenuID": menuID, + "ACTION": "deleted", + "CategoriesUnassigned": qCatCheck.cnt + }; break; case "reorder":