Kitchen/Bar Display using Task Printer - separate displays for Food and Drink

Creating a Kitchen (Food) and Bar (Drink) Display using Task Types and the Custom Task Printer, with separate displays for Food and Beverage. The display(s) are Custom Entity Screens containing Task Editor Widget(s).

:bulb: This setup also includes task updates for Void and Cancel Void.

:warning: Requires SambaPOS 5.1.55 or higher.

Tutorial Quick Links:

Task Types
Printers, Printer Templates, Print Jobs
Entity Screen Configuration
Automation
Entity Screen Design

DB Tools Import File (Easy Setup)


Result:

Food Orders are each listed separately on their own card (first 4 columns). Drink Orders are combined onto single cards (right-most column). All cards have Timer Formats that update automatically, providing visual Alerts when the Orders are beyond certain time limits.

7 Likes

#Task Types

Create 2 Task Types: 1 for Food, and 1 for Drink, for example:

FoodDisplayTask
BeverageDisplayTask

Add Custom Fields to each of the Task Types, for the following (optional):

Customer
Table
Color
Id

The Customer field can be used to store the Customer Entity (optional).
The Table field can be used to store the Table Entity (optional).

The Color field is a special field that is used to change the background color of the Task Card.

The Id field is a special field that will be used to reference the Task using a unique Identifier that we will assign, so that we can submit updates to the Task.

:bulb: If you do not want to see these Custom Fields appear on the Task Card, then do not define them here. Leave the Custom Field list empty, and we can still make assignments to these variables.

#Printers, Printer Templates, Print Jobs

We need to define 2 Printers, 2 Printer Templates, and 2 Print Jobs to separate Food and Drink.

##Printers

Create a Printer for each of the Task Types.

:warning: You must put a DOT ( . ) in the Printer Share Name / Port Name field. If you do not do this, the Printer will not function!

Printer Type: Custom Printer - Task Printer

Click the Settings link, and set the Task Type field to match the Task Type that you defined on the previous step.

###Food Printer

###Beverage Printer


##Printer Templates

###Food Template

[LAYOUT]
{ORDERS}

[ORDERS]
++{ORDER TIME} {ENTITY NAME:Table} {ENTITY NAME:Customer}
(Id={NAME}-{ORDER UID})
(Color=#FF333333)
<bold>[=('{QUANTITY}'>1 ? ('{QUANTITY}'+'  ').substr(0,2) : '  ')] {PRODUCT NAME}</bold>
[='{PORTION}'=='' ? '' : '<font Consolas>  <color #FF55FF33><size 17><bold>{PORTION}</bold></size></color></font>']
{SORTED ORDER TAGS}

[ORDERS:Gift]
++{ORDER TIME} {ENTITY NAME:Table} {ENTITY NAME:Customer}
(Id={NAME}-{ORDER UID})
(Color=#FF333333)
<bold>[=('{QUANTITY}'>1 ? ('{QUANTITY}'+'  ').substr(0,2) : '  ')] {PRODUCT NAME}</bold>
[='{PORTION}'=='' ? '' : '<font Consolas>  <color #FF55FF33><size 17><bold>{PORTION}</bold></size></color></font>']
{SORTED ORDER TAGS}

[ORDERS:Void]
++{ORDER TIME} {ENTITY NAME:Table} {ENTITY NAME:Customer}
(Id={NAME}-{ORDER UID})
(Color=Red)
<bold>[=('{QUANTITY}'>1 ? ('{QUANTITY}'+'  ').substr(0,2) : '  ')] {PRODUCT NAME}</bold>
[='{PORTION}'=='' ? '' : '<font Consolas>  <color #FF55FF33><size 17><bold>{PORTION}</bold></size></color></font>']
{SORTED ORDER TAGS}

[SORTED ORDER TAGS:VIP Discount]
-- do not print

[SORTED ORDER TAGS:Happy Hour Discount]
-- do not print

[SORTED ORDER TAGS:Sides]
<size 14><color #FFFFAA55><font Consolas>   [=('{ORDER TAG QUANTITY}'>1 ? {ORDER TAG QUANTITY} : ' ')] {ORDER TAG NAME}</font></color></size>

[SORTED ORDER TAGS:Bread]
-- do not print

[SORTED ORDER TAGS:Meat]
<size 14><color #FFCCCCFF><font Consolas>   [=('{ORDER TAG QUANTITY}'>1 ? {ORDER TAG QUANTITY} : ' ')] {ORDER TAG NAME}</font></color></size>

[SORTED ORDER TAGS:Cheese]
<size 14><color Yellow><font Consolas>   [=('{ORDER TAG QUANTITY}'>1 ? {ORDER TAG QUANTITY} : ' ')] {ORDER TAG NAME}</font></color></size>

[SORTED ORDER TAGS:EXTRA Addons]
<size 14><color #FF55FF55><font Consolas>   [=('{ORDER TAG QUANTITY}'>1 ? {ORDER TAG QUANTITY} : ' ')] {ORDER TAG NAME}</font></color></size>

[SORTED ORDER TAGS:Veggies]
<size 14><color #FFCCFFCC><font Consolas>   [=('{ORDER TAG QUANTITY}'>1 ? {ORDER TAG QUANTITY} : ' ')] {ORDER TAG NAME}</font></color></size>

[SORTED ORDER TAGS:Condiments]
<size 14><color #FFFFCCCC><font Consolas>   [=('{ORDER TAG QUANTITY}'>1 ? {ORDER TAG QUANTITY} : ' ')] {ORDER TAG NAME}</font></color></size>

[SORTED ORDER TAGS GROUP|EXTRA Addons,Sauteed,OTS,Sides]

[SORTED ORDER TAGS GROUP:EXTRA Addons]
<size 14><color LightSalmon>     ~~~ ADDONS ~~~</color></size>

[SORTED ORDER TAGS GROUP:Sauteed]
<size 14><color LightSalmon>     ~~~ SAUTEED ~~~</color></size>

[SORTED ORDER TAGS GROUP:OTS]
<size 14><color LightSalmon>     ~~~ ON THE SIDE ~~~</color></size>

[SORTED ORDER TAGS GROUP:Sides]
<size 14><color LightSalmon>     ~~~ SIDES ~~~</color></size>

Special Template Fields in the above Template:

[ORDERS]
++{ORDER TIME} {ENTITY NAME:Table} {ENTITY NAME:Customer}
(Id={NAME}-{ORDER UID})
(Color=#FF333333)
  • Lines prefixed with ++ become Header lines in the Task Card. They will appear in Bold.
  • Task Field values are assigned using the syntax: (<fieldName>=<value>)
  • Id is a field that we define to contain a unique Identifier for the Task Order. We will use this to update the Task using this Id field when necessary. For example, we need this value set in the Template so we can update the Task when an Order is Voided.
  • Color is a special field we defined that allows us to set the background color of the Task Card.

We use the same syntax for Voided Orders, but we change the Color field to Red:

[ORDERS:Void]
++{ORDER TIME} {ENTITY NAME:Table} {ENTITY NAME:Customer}
(Id={NAME}-{ORDER UID})
(Color=Red)

###Beverage Template

[LAYOUT]
++{TIME} {ENTITY NAME:Table} {ENTITY NAME:Customer}
{ORDERS}

[ORDERS GROUP|PRODUCT GROUP]
<color Orange><size 12><font Consolas>[='~~~ {GROUP KEY} ~~~~~~~~~~~~~~~~~~~~~~~~~'.substr(0,40)]</font></size></color>

[ORDERS]
<color White><bold><size 16><font Consolas>[=('{QUANTITY}'+'  ').substr(0,2)] {PRODUCT NAME}</font></size></bold></color>[='{PORTION}'=='' ? '' : '<font Consolas> <color #FF55FF33><size 14><italic>{PORTION}</italic></size></color></font>']
{SORTED ORDER TAGS}

[ORDERS:Gift]
<color White><bold><size 16><font Consolas>[=('{QUANTITY}'+'  ').substr(0,2)] {PRODUCT NAME}</font></size></bold></color>[='{PORTION}'=='' ? '' : '<font Consolas> <color #FF55FF33><size 14><italic>{PORTION}</italic></size></color></font>'] <bold> FREE</bold>
{SORTED ORDER TAGS}

[ORDERS:Void]
<color White><bold><size 16><font Consolas>[=('{QUANTITY}'+'  ').substr(0,2)] {PRODUCT NAME}</font></size></bold></color>[='{PORTION}'=='' ? '' : '<font Consolas> <color #FF55FF33><size 14><italic>{PORTION}</italic></size></color></font>'] <bold> VOID</bold>
{SORTED ORDER TAGS}

[SORTED ORDER TAGS]
<size 14><color Yellow><font Consolas>    [=('{ORDER TAG QUANTITY}'>1 ? {ORDER TAG QUANTITY} : ' ')] {ORDER TAG NAME}</font></color></size>

[SORTED ORDER TAGS:VIP Discount]
-- do not print

[SORTED ORDER TAGS:Happy Hour Discount]
-- do not print


##Print Jobs

We use the Product Group Code to filter the types of Products that the Print Jobs will be allowed to print. You could also use the Product Tags to accomplish the same thing.

###Food Print Job

###Beverage Print Job

1 Like

#Entity Screen Configuration

Define the Custom Entity Screen(s) that will contain your Task Editor Widget(s).

You can use a single screen containing 2 Wdigets (1 for Food & 1 for Drink), or you may choose to define 2 separate Screens (1 for Food & 1 for Drink) and place a single Task Editor Widget on each.

For this example, we have a single Screen containing 2 Widgets:

#Automation

##Automation Command

Create a button to navigate to the Kitchen Display.


##Actions

###Navigate Module Action

This Action is used to display the Kitchen Display screen.

###Update Order State Action

This Action will update the Order State called KDStatus. This is how we will determine if the Order has been Printed, so that we don’t print the Order multiple times.

State Name: KDStatus
Current State: [:CurrentState]
State: [:NewState]

###Execute Print Job Actions

These Actions will be used to fire the Print Jobs for Food and Drink. We need to define 2 Actions, since we have 2 different Print Jobs.

Print Job Name (Food): Print Kitchen Display Tasks - Food
Print Job Name (Drink): Print Kitchen Display Tasks - Beverages
Print Ticket: True
Order State Name: KDStatus
Order State: [:state]
Copies: 1


##Rules

###Order Added to Ticket Rules

Create 2 Rules to set the initial KDStatus State - 1 Rule for Food, and 1 Rule for Drink.

We want to keep Food and Drink States separate, so we will be using the following KDStatus States:

Food:

FNotPrinted
FPrinting
FPrinted

Drink:

BNotPrinted
BPrinting
BPrinted

###Rules to update KDStatus State when the Ticket is Closed

Food:

Drink:

###Rule to Print Food Orders

###Rule to reset KDStatus State when Order is Voided or a Void is Canceled (Food)

1 Like

#Entity Screen Design

:bulb: You will need to perform these steps 2 times. Once for Food (FoodDisplayTask) and once for Drink (BeverageDisplayTask).

Navigate to your Kitchen Display screen.
Right-click and choose Design Mode.
Right-click and choose Add Widget > Task Editor.
Click on the Task Editor Widget, then Right-click and choose Settings.

Configure the settings for the Task Editor Widget as shown.

:warning: Ensure you select a value for Task Type Name Value

Task Type Name Value (Food): FoodDisplayTask
Task Type Name Value (Drink): BeverageDisplayTask

Column Count (Food): 4
Column Count (Drink): 1

Task Commands (Food):

Select All Orders=Select All
Toggle Order=Toggle
Mark as Completed=Complete

Task Commands (Drink):

Select All=Select All
Toggle=Toggle
Served=Complete

Duration Format (Food and/or Drink)

0-5: <color LightGreen><size 15>New Ticket</size></color>
5-10: <block 4 Yellow><color Black><size 15>  Order is <m:> minutes old  </size></color></block>
10-60:<block 4 red><bold><color white><size 15>  ATTENTION: <m:> minutes passed!!!  </size></color></bold></block>
60:<date:>

6 Likes

… reserved for updates …

@QMcKay I NOTICED THIS WORKING ONLY IN DARK THEME, AND HOW TO PRINT ALL ORDERS OF THE TICKETS IN ONE CARD AS ITS CONFUSED ME 20 TICKETS ,EACH 2-4 80 CARDS , THANKS FOR THE POST

The Tutorial uses Print methods (Rules) designed to separate Food orders onto separate cards. It combines Drink orders onto single cards. I designed it this way because that is how I want it for my venue. It also gives opportunity to show 2 different methods, which you can extrapolate for your own needs.

So if you want Food to be combined on 1 card (the same as Drink), use the same Rules for Food as you do for Drink.

If the colors do not work in Light Theme, then change them in the Printer Templates.

You need to modify the setup as you see fit, for your needs.

1 Like

@QMcKay oops sorry may be need to change text color in template not tried yet…

This is specific for orders display if you want entire ticket in cards then you need to modify the template.

Exactly. If you want to do Ticket-level display, then you are almost better off using the Ticket Lister Wdiget - that is what it was designed for.

That quote is from a previous discussion, but it references a request.

I have this implemented on a live setup to a small 10" Asus T100. Because of the screen size, I can only show about 4 orders so that it is legible.

Regardless of that, I would like to request that we can change the order of the Tasks to display the Oldest first, and the Newest last. If we have 4 orders to prepare, then another 2 orders come in, it will bump the first orders off the screen. For me (and I surmise many others), it would be much more useful to place newest Orders last.

@emre, any chance you can give us a switch/checkbox to alter the default behavior? Or is there some other way you can think of to allow for having Oldest First, Newest Last?

That way, when the Kitchen is working on an Order, they don’t need to “track” it’s movement as it gets “bumped” down on the display. It just isn’t natural…

2 Likes

Almost got this to work perfect with one exception, my food printing looks werid, seems it’s not interpreting the colors properly, etc. I copied and pasted as seen here:

One more question, in my normal KDS setup when someone marks something as complete it sets the table entity to a new color.

Since this is a printer type setup is that still possible? The complete button does it have some action I can associate with it so that I can change an entity status or is this strictly one way since it’s print based?

Remove the Custom Fields from your Task Types.

Define Automation Commands for Task Complete Commands in the Task Editor Widget Settings. These will fire when the task has been marked as complete, and you can handle the command via a Rule to perform other actions, including updating Entity State.

1 Like