Just curious, but why “green”? If the screen only contains complete Kitchen Orders that are ready to go, what is the point of making them “green”?
Anyway …
##Task Type

##Actions
We will use this Action to Execute some JScript Functions.
##KD ExecScript [Execute Script] (Action)##
| Action Name: | KD ExecScript |
| Action Type: | Execute Script |
###Parameters:###
| Function: | [:handler.func] |
| Command: | [:cmd] |
| Run In Background: | [:runBG] |
We will use this Action to execute other Automation Commands.
##KD ExecAMC [Execute Automation Command] (Action)##
| Action Name: | KD ExecAMC |
| Action Type: | Execute Automation Command |
###Parameters:###
| Automation Command Name: | [:AMCname] |
| Command Value: | [:AMCvalue] |
| Background: | [:runBG] |
| Delay: | [:delay] |
We will use this Action to Duplicate a Task.
##KD Set Widget Value [Set Widget Value] (Action)##
| Action Name: | KD Set Widget Value |
| Action Type: | Set Widget Value |
###Parameters:###
| Widget Name: | [:widgetName] |
| Value: | [:value] |
##Script
This Script uses new GraphQL functions available only in v5.1.60 or higher. Be sure to upgrade to 5.1.60 or this will not work.
##TSK Task Type Functions [tasks] (Script)##
| Script Name: | TSK Task Type Functions |
| Script Handler: | tasks |
Script:
function getTaskbyIdentifier(taskType,ident,field) {
// getTaskbyIdentifier('KD Task GUI - Food','27751-Qure Burger.Burger-12837-j9tXI2XMRkq7Q446SFfroQ')
taskType = typeof taskType==='undefined' ? '' : taskType;
ident = typeof ident==='undefined' ? '' : ident;
field = typeof field==='undefined' ? 'name' : field;
if (taskType=='' || ident=='') {
return false;
}
var qry = '{task:getTask(taskType:"'+taskType+'",identifier:"'+ident+'"){id,name,identifier,content}}';
var r = gql.Exec(qry);
r = JSON.parse(r);
var task = r.data.task;
//dlg.ShowMessage("tt:"+taskType+"\rid:"+ident+"\rname:"+task.name);
return task[field];
}
function addTask(taskType,name,content,ident,color,taskTypeOld) {
// addTask('KD Waiter - Food','','blah','27751-Qure Burger.Burger-12837-j9tXI2XMRkq7Q446SFfroQ','#FFFFFF00')
taskType = typeof taskType==='undefined' ? '' : taskType;
taskTypeOld = typeof taskTypeOld==='undefined' ? '' : taskTypeOld;
taskTypeOld = taskTypeOld=='' ? 'KD Task GUI - Food' : taskTypeOld;
ident = typeof ident==='undefined' ? '' : ident;
name = typeof name==='undefined' || name=='' ? getTaskbyIdentifier(taskTypeOld,ident,'name') : name;
color = typeof color==='undefined' ? '' : color;
var oldContent = getTaskbyIdentifier(taskTypeOld,ident,'content');
oldContent = oldContent.replace(/"/g,"'");
oldContent = oldContent.replace(/\r\n/g,'<!rn>');
content = oldContent + '<!rn>' + content;
//dlg.ShowMessage("tt:"+taskType+"\rid:"+ident+"\rname:"+name+"\rcontent:"+content);
if (taskType=='' || name=='') {
return false;
}
var qry='mutation m {addTask (task:{taskType:"'+taskType+'",name:"'+name+'",content:"'+content+'",isCompleted:false,identifier:"'+ident+'",customData:[{name:"Color",value:"'+color+'"}]}){id,name,isCompleted,content,identifier,customData{name,value}}}';
var r = gql.Exec(qry);
r = JSON.parse(r);
var task = r.data.addTask;
return task.name;
}
function updateTask(taskType,name,ident,color,content) {
// updateTask('KD Waiter - Food','','27755-Poutine-12841-swifCxkYVk6UDrmcd0JUmg','#FFFFFF00')
taskType = typeof taskType==='undefined' ? '' : taskType;
ident = typeof ident==='undefined' ? '' : ident;
name = typeof name==='undefined' || name=='' ? getTaskbyIdentifier(taskType,ident,'name') : name;
color = typeof color==='undefined' ? '' : color;
content = typeof content==='undefined' ? '' : content;
//dlg.ShowMessage("tt:"+taskType+"\rid:"+ident+"\rname:"+name+"\rcontent:"+content);
if (taskType=='' || name=='') {
return false;
}
var qry='mutation m {updateTask (taskType:"'+taskType+'",identifier:"'+ident+'",task:{taskType:"'+taskType+'",isCompleted:false,identifier:"'+ident+'",customData:[{name:"Color",value:"'+color+'"}]}){id,name,isCompleted,content,identifier,customData{name,value}}}';
var r = gql.Exec(qry);
r = JSON.parse(r);
var task = r.data.updateTask;
return task.name;
}
##Rule
This Rule will be fired when you complete a KD Food Task.
##KD Ready - Food [Automation Command Executed] (Rule)##
| Rule Name: | KD Ready - Food |
| Event Name: | Automation Command Executed |
| Rule Tags: | |
Custom Constraint List (1):
Automation Command Name | Equals | KD Ready - Food |
##Actions (2):##
KD Set Widget Value
Constraint: (none)
| widgetName: | KD Task Editor - Food |
| value: | Duplicate>KD Waiter - Food |
KD ExecAMC
Constraint: (none)
| AMCname: | KD Waiter Color - Food |
| AMCvalue: | [:CommandValue] |
| runBG: | True |
| delay: | 1 |
##Mappings##
Mappings
| Terminal | User Role | Department | Ticket Type |
* | * | * | * |
This Rule will be fired after the first Rule, to update the Task Card Color.
##KD Waiter Color - Food [Automation Command Executed] (Rule)##
| Rule Name: | KD Waiter Color - Food |
| Event Name: | Automation Command Executed |
| Rule Tags: | |
Custom Constraint List (1):
Automation Command Name | Equals | KD Waiter Color - Food |
##Actions (1):##
KD ExecScript
Constraint: (none)
| handler.func: | tasks.updateTask('KD Waiter - Food','','[:CommandValue]','#55007700') |
| cmd: | |
| runBG: | |
##Mappings##
Mappings
| Terminal | User Role | Department | Ticket Type |
* | * | * | * |
##Some things to note:
The Food Task Widget needs to have this in Task Complete Commands:
KD Ready - Food:[Id]
So when a Food Task is marked as complete on the KD, an Automation Command will be fired named KD Ready - Food and it will pass along with it, then Id (identifier) of the Task as the [:CommandValue].
The Rule named KD Ready - Food handles the Automation Command, and it uses the Set Widget Value Action to Duplicate the KD Food Task to become a KD Waiter Task Type (Duplicate>KD Waiter - Food). The Widget Name in this case is the Name of the Task Editor Widget for your KD Food Display:
KD Task Editor - Food
The Rule then:executes another Automation Command named KD Waiter Color - Food.
The Rule named KD Waiter Color - Food handles the above Automation Command, and executes a JScript Function:
tasks.updateTask('KD Waiter - Food','','[:CommandValue]','#55007700')
There are 4 parameters to the updateTask function:
tasks.updateTask(taskType, name(optional/blank), identifier, color)
Mapped out:
taskType = 'KD Waiter - Food' // our new "Waiter" Task Type for Food
name = '' // when left blank, the Task Name will not change
identifier = '[:CommandValue]'
color = '#55007700' // Green - really, this is the only thing we are updating
I named the new Waiter Task as “KD Waiter - Food”. Adjust those parameters as necessary for your setup.
Obviously, you will need to create a new custom Entity Screen for the Waiter Display, and add a Task Editor Widget to it for the new Task Type “KD Waiter - Food”.