Add menu list and MenuID filter to items.cfm API

Returns active menus in response so mobile apps can show menu
selector chips. Accepts optional MenuID param to filter items
to a specific menu.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
John Mizerek 2026-01-28 20:54:37 -08:00
parent 9091461079
commit 3b48c3331d

View file

@ -38,6 +38,12 @@
<cfset OrderTypeID = val(data.OrderTypeID)> <cfset OrderTypeID = val(data.OrderTypeID)>
</cfif> </cfif>
<!--- Optional MenuID for menu filtering (0 = all active menus) --->
<cfset requestedMenuID = 0>
<cfif structKeyExists(data, "MenuID")>
<cfset requestedMenuID = val(data.MenuID)>
</cfif>
<cfif BusinessID LTE 0> <cfif BusinessID LTE 0>
<cfset apiAbort({ "OK": false, "ERROR": "missing_businessid", "MESSAGE": "BusinessID is required.", "DETAIL": "" })> <cfset apiAbort({ "OK": false, "ERROR": "missing_businessid", "MESSAGE": "BusinessID is required.", "DETAIL": "" })>
</cfif> </cfif>
@ -46,6 +52,7 @@
<cfset currentTime = timeFormat(now(), "HH:mm:ss")> <cfset currentTime = timeFormat(now(), "HH:mm:ss")>
<cfset currentDayID = dayOfWeek(now())> <cfset currentDayID = dayOfWeek(now())>
<cfset menuList = []>
<cftry> <cftry>
<!--- Check if new schema is active (ItemBusinessID column exists and has data) ---> <!--- Check if new schema is active (ItemBusinessID column exists and has data) --->
<cfset newSchemaActive = false> <cfset newSchemaActive = false>
@ -82,10 +89,11 @@
<!--- Use Categories table with ItemCategoryID ---> <!--- Use Categories table with ItemCategoryID --->
<!--- First, find which menus are currently active based on day/time ---> <!--- First, find which menus are currently active based on day/time --->
<cfset activeMenuIds = ""> <cfset activeMenuIds = "">
<cfset menuList = []>
<cftry> <cftry>
<cfset qActiveMenus = queryExecute( <cfset qActiveMenus = queryExecute(
" "
SELECT MenuID FROM Menus SELECT MenuID, MenuName FROM Menus
WHERE MenuBusinessID = :bizId WHERE MenuBusinessID = :bizId
AND MenuIsActive = 1 AND MenuIsActive = 1
AND (MenuDaysActive & :dayBit) > 0 AND (MenuDaysActive & :dayBit) > 0
@ -93,6 +101,7 @@
(MenuStartTime IS NULL OR MenuEndTime IS NULL) (MenuStartTime IS NULL OR MenuEndTime IS NULL)
OR (TIME(:currentTime) >= MenuStartTime AND TIME(:currentTime) <= MenuEndTime) OR (TIME(:currentTime) >= MenuStartTime AND TIME(:currentTime) <= MenuEndTime)
) )
ORDER BY MenuSortOrder, MenuName
", ",
{ {
bizId: { value = BusinessID, cfsqltype = "cf_sql_integer" }, bizId: { value = BusinessID, cfsqltype = "cf_sql_integer" },
@ -101,7 +110,19 @@
}, },
{ datasource = "payfrit" } { datasource = "payfrit" }
)> )>
<cfif requestedMenuID GT 0>
<!--- User selected a specific menu --->
<cfset activeMenuIds = requestedMenuID>
<cfelse>
<cfset activeMenuIds = valueList(qActiveMenus.MenuID)> <cfset activeMenuIds = valueList(qActiveMenus.MenuID)>
</cfif>
<!--- Build menu list for the response --->
<cfloop query="qActiveMenus">
<cfset arrayAppend(menuList, {
"MenuID": qActiveMenus.MenuID,
"MenuName": qActiveMenus.MenuName
})>
</cfloop>
<cfcatch> <cfcatch>
<!--- Menus table might not exist yet ---> <!--- Menus table might not exist yet --->
</cfcatch> </cfcatch>
@ -510,7 +531,9 @@
"Items": rows, "Items": rows,
"COUNT": arrayLen(rows), "COUNT": arrayLen(rows),
"SCHEMA": newSchemaActive ? "unified" : "legacy", "SCHEMA": newSchemaActive ? "unified" : "legacy",
"BRANDCOLOR": brandColor "BRANDCOLOR": brandColor,
"Menus": menuList,
"SelectedMenuID": requestedMenuID
})> })>
<cfcatch> <cfcatch>