Just curious if anyone has attempted to create a digital menu board that can read the prices from samba?
I actually started looking at this a long time ago, but got busy with other things and abandoned it. Actually, I let it go because I was never going to use it in my venue, but it was worth a quick look to see how simple or complex it would be to generate.
I was using PHP/SQL to generate the list of items on a board.
The tricky part that I ran into was figuring out a good way to Tag the Products so you could control which Products go on which board, in which order to list items on a board, which items you want to use Portions for pricing etc, so it gets a bit complicated and you really need to define some standards around this to produce the desired outcome.
Here is an example where I stopped developing, and you can see the “problems” you soon get into and need to figure a way to deal with using more granular Tagging… this is just a sample for MenuBoard 2 and 3 …
The above is derived using single Custom Product Tag named MenuBoard that is set to a specific number that dictates which Board the Item appears on, for example …
I started to see the complexity of it all when using Portions, because naturally we would not list each Portion and Price on their own single line, but instead we would likely place them all together something like:
Item (Portions) Prices
Orange Juice ................................ (Small/Large) 50/70
I mean, look at this Product and all of the “Portions” … it looks ridiculous because of the way I define some Products so they can have proper Recipes for Inventory Consumption…
And that is just Portion troubles… what about when we want to list Modifiers (Order Tags) that have for “Addons with Prices” to the Item? Then I would need to parse all of that out of the DB for the Mapped Products and figure out how to display them, and where? What if we have a Description Product Tag? Custom Product Tags are stored in JSON format which is notoriously difficult to parse using SQL (but could be done with trivial ease in PHP).
In any case, my current code uses the MenuBoard number for the Product, then links the Product ([MenuItems]
) to the Menu Items ([ScreenMenuItems]
) to ensure it is in fact a “real” Menu Item, and pulls all the Portions ([MenuItemPortions]
) and Pricing ([MenuItemPrices]
). It also derives the BLUE bars based on the Menu Categories ([ScreenMenuCategories]
) for the desired Menu ([ScreenMenus]
) as opposed to the Product GroupCodes ([MenuItems].[GroupCode]
). This is all done with a single Query …
SELECT DISTINCT
pr.[Id]
, pr.[Name] as [Product]
, pr.[Tag]
, m.[Name] as [MenuItem]
, m.[SortOrder] as [SortItem]
, c.[SortOrder] as [SortCat]
, c.[Name] as [Category]
, m.[SubMenuTag] as [SubCat]
, po.[Name] as [Portion]
, pri.[Price]
, substring(pr.[CustomTags],CHARINDEX('MenuBoard',pr.[CustomTags])+LEN('MenuBoard')+8,1) as [MenuBoard]
FROM [MenuItems] pr
LEFT JOIN [MenuItemPortions] po on po.[MenuItemId]=pr.[Id]
LEFT JOIN [ScreenMenuItems] m on m.[MenuItemId]=pr.[Id] AND (m.[ItemPortion]=po.[Name] or m.[ItemPortion] is null)
LEFT JOIN [ScreenMenuCategories] c on c.[Id]=m.[ScreenMenuCategoryId]
LEFT JOIN [MenuItemPrices] pri on pri.[MenuItemPortionId]=po.[Id]
LEFT JOIN [ScreenMenus] s on s.[Id]=c.[ScreenMenuId]
WHERE 1=1
AND s.[Name]='Menu'
AND m.[Name] is not null
AND pri.[Price]>0
AND pr.[CustomTags] like '%MenuBoard%'
AND c.[Name] not like 'QM %'
ORDER BY
substring(pr.[CustomTags],CHARINDEX('MenuBoard',pr.[CustomTags])+LEN('MenuBoard')+8,1)
, c.[SortOrder]
, m.[SubMenuTag]
, m.[SortOrder]
--, pr.[Name]
, pr.[Tag], m.[Name], pri.[Price]