✌ V5 Feature Compilation


#26

##5.1.26##

Update Program Setting Action contains a new Update Type: Delete

The Delete update type removes a setting from the database.


Menu Numberpad Height % can be changed per-Category


Menu Item buttons supports displaying values for reporting tags and global printing tags

For example: {SETTING:X}, {CALL:X}


New tag {REPORT INVENTORY:<inventory item name>:<warehouse name>}

Other than reporting we can also use this tag to display inventory level on specific menu item buttons or test specific inventory levels on the fly.

:warning: IMPORTANT: Inventory level calculation needs to process all Tickets and all Inventory Transactions created in current work period (for each inventory item). So to avoid unnecessary network traffic try to use this feature for only a few menu items that really have mission critical meaning.


{WORKPERIOD ID}, {FIRST TICKET NO}, {LAST TICKET NO} report tags implemented

These tags can be useful for creating more complete Work Period Reports for accounting and auditing purposes.


Order State Formatting

  • Display Format is used while displaying product names
  • Quantity Format used while displaying quantities
  • Price Format used while displaying prices
  • {0} indicates placeholder for formatted value

Example:

<color #FF888888><italic>{0}</italic></color>

:warning: When you override Submitted state format you should also set a display format for Gift & Void states otherwise they’ll appear in submitted color as these orders already have that state.


Header setting added to Menu Categories

Now you can individually change how categories appear without changing category name. You can also choose to display Text only, Image only, or both.


[ORDERS:INDEX:x] section tag added

Useful to change formatting for orders that have a specific index. For example, in this Ticket, the Order at Index 3 is displayed on the Customer Display in bold red…

Template:

[ORDERS:INDEX:1]
<div id="orderline" style="width:99%; font-size:16px; border-top:solid 1px #BBB; padding:3px;">
  <div id="prodimg" style="width:15%; display:inline-block; vertical-align:middle"><img src="D:\Programs\POS\images\[='{ITEM TAG:ProdImage}' !='' ? '{ITEM TAG:ProdImage}' : 'znoimage-th.jpg']">&nbsp;</div>
  <div id="prodqty" style="width:5%; display:inline-block; vertical-align:middle">{QUANTITY}</div>
  <div id="prodname" style="width:45%; display:inline-block; overflow:hidden; vertical-align:middle;color:#FF0000"><b>{NAME}</b></div>
  <div id="prodprice" style="width:13%; display:inline-block; text-align:right; vertical-align:middle">{PRICE}</div>
  <div id="prodamount" style="width:15%; display:inline-block; text-align:right; vertical-align:middle">{TOTAL AMOUNT}</div>
</div>
<div style="width:99%; text-align:left; font-size:10px;">{ORDER TAGS}</div>

[ORDERS]
<div id="orderline" style="width:99%; font-size:16px; border-top:solid 1px #BBB; padding:3px;">
  <div id="prodimg" style="width:15%; display:inline-block; vertical-align:middle"><img src="D:\Programs\POS\images\[='{ITEM TAG:ProdImage}' !='' ? '{ITEM TAG:ProdImage}' : 'znoimage-th.jpg']">&nbsp;</div>
  <div id="prodqty" style="width:5%; display:inline-block; vertical-align:middle">{QUANTITY}</div>
  <div id="prodname" style="width:45%; display:inline-block; overflow:hidden; vertical-align:middle">{NAME}</div>
  <div id="prodprice" style="width:13%; display:inline-block; text-align:right; vertical-align:middle">{PRICE}</div>
  <div id="prodamount" style="width:15%; display:inline-block; text-align:right; vertical-align:middle">{TOTAL AMOUNT}</div>
</div>
<div style="width:99%; text-align:left; font-size:10px;">{ORDER TAGS}</div>

Last Update Time Desc sorting option added to printer templates

An example use of this sorting option is a Customer Display Template where you want the most recent order to appear at the top, and the earliest order to appear at the bottom.


Automatic sizing menu buttons optimized

Generates better button layouts while searching products on POS screen.


State settings refresh when user logs in

For example, {:ISCURRENTWORKPERIODOPEN} will be refreshed on User Login.


Gift Button Question
#27

##5.1.27##

Create Account Transaction Document Action has new parameter: Date

Default will use current Date/Time, but you can force a Date/Time in the Past or Future via this parameter.

One example usage is when you want your Reporting to show Employee Wage Payments on certain dates, but today is not that date.


#28

5.1.28

  • Scrolling features improved for Touch Screens
  • Regular Expression validation added for Entity custom fields.
  • Entity Custom Field query fields will accept {CALL:X} function to supply values via JScript.
  • Menu & Category editing grid replaced with new grid. You can select multiple cells to edit multiple values at once.
  • Validation & Query features enabled for Batch Entity editor.
  • Google Calendar API add-on module added.
  • [ORDER TAGS GROUP|] section added to printer templates for grouping order tags on printing.
  • Add limit payment processor supports limiting by ticket amount.
  • You can enable visual printing setting for custom reports to print reports as seen exactly on the screen. Will be useful to print reports that contains grids.

#29

5.1.29

You’ll be able to format / validate free tags by using regular expressions. In this example free tag entry area will only accept upper case letters.


split this topic #30

2 posts were split to a new topic: Ask Question Background color


#31

5.1.30/31

Automatic Sub-menu Selection

Create a Category containing only Sub-menus with no items at the root Category - it selects the first Sub-menu, as defined by the Item Sort Order.


Category Display Format


#32

5.1.32

HTML <table> Tag support in HTML Printers

It is possible to use html table tag inside html printer templates.
This allows us to use variable-width fonts. Will be useful for foreign languages and also allow fine tuning for layouts. For example we’ll be able to align order quantities properly.


Custom report detail tags accept line format and line splitter parameters.

 {REPORT TICKET DETAILS:T.TicketNumber,T.TotalAmount:Ticket.Id > 0:#{0} - ${1}:<br/>}
  • This report tag will return 2 values. Number and Amount. When no format defined it will return pipe delimited values as required by custom report table formats.
  • Line format is 3rd section and configured as #{0} - ${1}.
  • That means {0} will replace with first value and {1} replace with second value.
  • 114|39.00 value becomes #114 - $39.00
  • Line splitter is 4th section and configured as <br/>.
  • It will merge report lines with <br/> instead of new line character.
  • If report returns two lines result becomes #114 - $39.00<br/>#115 - $49.00

This feature will be useful while using custom report tags as button formats or other places that accepts formatting tags.


We’ll be able to setup a default state for new created entities.

In this sample all new Customers will have CStatus=Active state.

We can setup more states by adding them with semicolon character like CStatus=Active;Status=Available


In batch entity editor screen we can use Update Entity State function to update states for multiple entities. It will update only selected entities. We can select all visible entities by using right click > Select All command.

It will be useful to update current entities when we create a new entity state.


To be able to use Entity Search screen’s empty space better I’ve implemented a new feature called Entity Search Details. We’ll setup detail screen template in Entity Screen > Details section.

We can use formatting tags and reporting tags here.

This template will appear when we have a single entity displayed in Entity Search screen.

Regular Search

Single Entity View
When a single entity displays empty space used to display details screen.

Image fetched from gravatar.com website. You can use customer e-mails to display Gravatar profile image. Here is the function I’ve created to read image from gravatar.com. This will convert e-mail to a gravatar url.

function Get(email)
{
   if(email == undefined || email == '')  return "http://www.gravatar.com/avatar/00000000000000000000000000000000";
   while (email.indexOf(' ')>=0)
   {email = email.replace(' ','');}
   email = email.toLowerCase();
   var hash = Helper.Md5(email);
   return "http://www.gravatar.com/avatar/"+hash;
}

You’ll be able to configure state specific entity display templates.

Here I’ve configured a custom display template for New Orders state. Entities that have New Orders state will appear with that custom formatting.

This is configured template as Display Format

We can enable / disable formatting for specific entity screens. You need to enable this setting to enable formatting.

This feature will also work for Entity Grid Widget and Entity Button Widget.

Use this feature wisely as it triggers a new formatting task for each button on every screen refresh. This setting is also available for 5.1.31 version but don’t test it as it does not have required optimizations.


Character Set ISO-15924 support?
Select All Entities by Default for Entity Screens
Ticket Print template issue in arabic language
#33

5.1.34

State Display Coloring and Formatting

NOTE: The formats override the Color.


#34

5.1.38/39/40

Save Ticket Action

I’ve radically changed how we save Tickets to detect some rare multi terminal issues . With that change I’ve also implemented Save Ticket action. That action will persist ticket to database and read ticket’s latest state from database. You can use it to save new tickets to update ticket ids, save moved tickets automatically or refresh tickets inside rules. I’ve basically implemented it to call it before printing tickets to ensure we’re printing latest version of ticket. Not essential but if you have automation rules that may change tickets from other terminals (for example if kitchen may change ticket’s tags or states while ticket is open on another terminal) you can use it to ensure a final refresh.


###Custom Report Expression Syntax improvement

We already support two summary expression syntax. Third one is new.

[T.Field1.Sum]*[T.Field2.Sum]                   Multiplies Field1.Sum by Field2.Sum. 
([T.Field1]*[T.Field2]).Sum                     Sum of Field1 * Field2.
[([T.Field1]*[T.Field2]).Sum]/[T.Field2.Sum]    Divides sum of Field1 * Field2 by sum of field 2.

This syntax will allow us to use an summary expression inside a summary expression. You’ve noticed that will be useful to calculate weighted averages.


###New Ticket Creation Method

A new Ticket Creating Method implemented for departments called Ticket Selection. Might not have a wide usage but that was a nice V2 feature. It basically uses Ticket List View as primary view. Useful for small venues that have 5~6 tables but does not need table based tracking. It will list open tickets for the department. You can click a ticket to display or use menu buttons to create a new ticket.


Terminal and Product Tag mapping for print jobs.

I’ve noticed mapping products to printers by product group is a lot of job especially if you have many product groups. Now you can Create a product group for printing and map products by custom product tags. Mapping to terminals is also added so you won’t need to create multiple rules for each terminals for terminal based printing.


Payment Descriptions

We’ll be able to store cc info within payment. That will be displayed on settle screen and new printing tags added to print that info on bills.


Decimal Places

We’ll be able to change stored decimal places count on database and also displayed decimal place count on screen.


Order Tag Improvements.

Rate-based Order Tag Calculation

Rate based order tag price calculation and order tag formatting feature explained here. [New 5.1.38] Rate based Order tag Prices

It is amazing to see how much people uses order based discounts. In our country it is generally ticket based. For some places a different price list does the job for most cases. I still don’t know if it is a killer feature o not but I’ve added rate based calculation for order tag prices.

Rate based order tag price calculation is cumulative. I mean sum of order’s price and other order tags before rate tag used for calculation. So placing discount tag to last place on order tag group list will use other order tag prices while calculating price. Adding, removing tags, changing order quantity or price will also update amount.

That will have no connection to accounting but we can still use order tag template tags for reporting or printing needs.

I hope that will help order based discount or servicing amount implementation.

Order Tag Description field

Additionally Description field for order tags added so you can use that field for adding more info about order tags. For example you can store second language names here and use them for kitchen printing.

Related actions and printing tags also improved to support these features.


Order Tag Group Formatting


Inventory Reporting tags

{REPORT COST:X}                   To read cost for product X. Use <ProductName>.<PortionName> syntax as X.
{REPORT CONSUMPTION DETAILS:X}    Reports inventory item consumption details.
{REPORT COST DETAILS:([^}]+)}     Reports product cost details.

For people who loves to use SQL we’ll also start storing average product price in [CostItems] table so you can easily calculate profits.

You can check database field names to get a hint. We may provide additional values.

For example Report Order Details supports T.x or O.x to read both Ticket and Order values. For Inventory, try these:

    C.StartDate
    C.EndDate
    C.Name
    C.Unit
    C.Inventory
    C.Warehouse
    C.Consumption

#35

5.1.41/42/43

Create Recipes Tool

Creates 1:1:1 mappings of Products to Inventory Items to Recipes.


Print Report Action has Printer Name parameter

Allows for sending Reports to specific Printers - for example, an A4/Letter Printer.


#36

5.1.44

Create Account Transaction Document Action supports AccountId

This makes setup simpler for Automation Commands on Account Screens…


Order Tag Header Field

Overrides display format of Order Tag Button.


#37

5.1.45

Custom Automation Command Buttons for Menus

This allows us to place a Button inside a Menu to perform some function… without the need of having it associated with a Product.


This can be used to create a Retail Setup, which contains no Menu Items per-say (i.e. no buttons are shown for products - instead they all have scannable barcodes). Instead the Menu simply contains Retail Functions. @RickH is building one here …


#38

5.1.46

Add Task Action

This will be a very powerful tool for multiple uses including storing data from Tweets, Order Level Tracking and interaction similar to Ticket Lister but per order, and possibly even more.

Refresh Widgets

This Action will refresh specified widget and will communicate via Message Server to update all terminals widgets.

Example of Add Task action used to show Tweets as they come in via the Twitter Device:


Data Export

We can export Report Data to CSV or XML.

###Orders XML

<orders>
{REPORT ORDER DETAILS: 
  O.MenuItemName,
  O.Quantity,
  O.Price,
  ([O.Quantity]*[O.Price]-[O.ExactTotal]),
  O.ExactTotal
:O.MenuItemName.Contains("Toasted")
:  <order>
    <name>"{0}"</name>
    <quantity>{1}</quantity>
    <price>{2}</price>
    <service>{3}</service>
    <total>{4}</total>
  </order>}
</orders>

###Orders CSV with Summary

Report
Index;Name;Quantity;Price;Service;ExactTotal
{REPORT ORDER DETAILS: 
  <row>,
  O.MenuItemName,
  O.Quantity,
  O.Price,
  ([O.Quantity]*[O.Price]-[O.ExactTotal]),
  O.ExactTotal,
:
:"{0}";"{1}";"{2}";"{3}";"{4}";"{5}"}
;;;;;=SUM(F3:F<row-1>)

###Orders CSV Group

[Report:1,1,1,1,1,1]
Index;Name;Quantity;Price;Service;ExactTotal
@Breakfast,Wraps,Soup
{REPORT ORDER DETAILS: 
  O.ItemGroup,
  O.MenuItemName,
  O.Quantity,
  O.Price,
  ([O.Quantity]*[O.Price]-[O.ExactTotal]),
  O.ExactTotal,
:(MG=$1)
:"{0}";"{1}";"{2}";"{3}";"{4}";"{5}"}
"$1 Total";;;;;=SUM(F<row-{REPORT ORDER COUNT:(MG=$1)}>:F<row-1>)

###SYNTAX
{REPORT ORDER DETAILS:::}



We can prepare CSV files that support Excel functions.

<row> tag will replace with row index. We can use expressions like <row+2> or <row-1> to reference previous, next rows…

Excel displays it fine.

PS: Because of Excel’s language settings (TR) I’ve used ; as delimiter.

Data Export Action.

  • You can use printer tags like {CALL:X} or {DATE:X} in file names.
  • If you type a printer name as file name it will just print that export as it seen on screen. That might be useful to send data to web services via url printer or send data to serial port with port printer.

Data Export links in Report Explorer


closed #39