At the hotel here we have daily specials that are updated at least twice a day for lunch and dinner. Sometimes also do afternoon specials.
I didnt want access to management section and navigation action couldnt be selective enough to just one specific order tag group.
So my solution is to use a custom entity screen;
Currently i have slots for 4 starters, 6 mains and 4 desserts.
The first two columns are just labels calling the setting values for the name and price of the specials.
Then two buttons for update and clear.
Settings are stored in pairs so for 1st starter would be SpecialStarter1Name and SpecialStarter1Price.
The buttons have comman names of UpdateSpecial and ClearSpecial. Then each row has command value for the special number ie. SpecialStarter1 and SpecialMain3
These buttons go to these rules;
The UpdateSpecial command rule has two update global program settings actions where name is the numbered special name suffixed by Name and Price to create the pair of settings.
The values are set by a pair of [?Prompt] functions. (plan to add validation on the price either with mask or other automation to make sure its a number.
This then results in the following prompt;
Clear empties the setting values for the two settings for that numbered special setting.
Then using these settings and custom menu item buttons and couple of short scripts these settings are then used to mimic actual products of those names without updating products etc.
Starter as an example, I have 4 custom menu buttons;
They have command names and values as below;
This script called from the header dynamically sets the header using the corasponding setting values;
function specialMenuItemHeader(specialName,specialPrice){
if ( specialName == '' || specialPrice == '' ){
return '';
} else {
return specialName+'\r£'+specialPrice;
}
}
So if name and price is set it shows a formatted name and price for header and if not it shows nothing.
All special custom buttons trigger the same rule;
The rule constraints cover command names for starters, mains and desserts and checks the corasponding setting name and price are not null so if not set it doesnt add the product with 0 value…
The add order actions add a ‘dummy’ special product for starter/main/dessert. Which is defined by an action constraint using a script to trim the number from the command value to match say ‘SpecialStarter’
It adds the product and sets the price using the setting name based on command value with Price suffix.
Then the order tag action adds an order tag for specials which is a fee tag using the setting for name.
I formatted the display format to invisible colour with 0 size to hie visually as best as possible as this tag will be used to visually replace the actual order/product name.
This order is actually a product of ‘Special Starter’
To achieve this I have used order state display format and another script to set the name using either the order name or the special free tag depending on the product.
This would usually be New state but i have created a custom state flow to set special formatting for other parts of my setup so mine is FNew (Formatted New)
This would need to be applied to all order state formats to set for new, submitted and void orders etc.
This is that script;
It checks if the product is a Special which needs name replacing which is it is it uses the input Special Free Tag value.
The other section is what I use to seperate product name and portion for non normal portions with a space rather than with a . like default.
Like this for example where the product is Carlsberg and portion is Pint.
So using similar principle for prints the printer templates will have a ternary expression to show either the normal order name or for specials the special free tag in place of the order name.;
This ticket for example;
Would print like this without the order name adjustment, with Special Starter for order and Starter 1 as an order tag;
First setting an empty section for [ORDER TAGS:Special Tag] hides the special tag;
Then by changing the [ORDERS] and [ORDERS:Gift] sections using a ternary expression to check the order product name to again display either the normal name or the special tag if a special product.
This is the exact same ticket.
These adaptions are more applicable to the kitchen printer but normal receipt is also then kept clean and in similar format to any other product.