SambaPOS 5.2.13 Beta Release

This isn’t released for testing yet right?

What isnt? Most of this is in beta.

Sorry I meant the promotion feature.

A fresh build of 5.2.13 Beta uploaded to server. Please read first post for release notes. Thanks.

HTML table format fix works perfect thanks again @emre

1 Like

@RickH can you post your template, really like the clean look over epos type, might change over to something similar. Is it html or document?

1 Like

I would like to see this too :smile:

If I may suggest an improvement to prefixes If simple/worth it in programming end. I think prefixes should have a multiplier for price. Having to add every possible combination and price for prefixes and order tags is the biggest pain in the world. Having to change price even is very time consuming when there are multiple prefixes you must change on all combinations. Instead why not add multiplier “extra” prefix charge 2x price… “Add”charge 1x price

2 Likes

…and “No” could be 0x price, so the price is not charged. This would be very convenient

2 Likes

I’ll be away for 2 more days for vacation however wanted to comment this because I wondered why you don’t use quantity tags instead of prefixes. Add 2x cheese and pricing, inventory etc all done.

Interesting, can you allow multiple quantity and prefixes at same time? Right now it’s one or the other unless recently changed

Quantity props are defined in tag level so if you define prefixed tags you should be able to set max min quantities.

If you let me know how you’re planning to use that I can think about inheriting these props from unprefixed tag.

Hi mate its HTML, im using a STAR TSP700II thermal printer with line character set at 43 using 80mm thermal receipt roll paper setting

Its not fully finished yet as it needs tidying up and ive got the “discount” section to look at and havent done anything with entity section yet as that needs re-working but you can see the general idea with what ive done so far from the image of the receipt

Heres the template settings for the above receipt image

[LAYOUT]
-- General layout
<XCT>27,112,0,25,250
<XCT>29,40,76,6,0,48,69,48,48,1,1
<bmp>C:\SambaPOS5\Product Images\SmallLogoBW.jpg</bmp>
<div style="font-size:25px;font-weight:bold;text-align:center;font-family:'Calibri'">SALES RECEIPT</div>
<F>-
<div style="font-size:13px;font-weight:bold;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="25">Qty</td><td width="200">Item Description</td><td width="45">Price</td>
</tr>
</table>
</div>
<F>-
{ORDERS}
<div style="font-size:15px;font-weight:bold;text-align:center;font-family:'Calibri'"><br/>{TICKET QUANTITY SUM}x Items Sold</div>
<F>-
<div style="font-size:13px;font-weight:bold;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="220">Sub Total:</td><td width="45">£[=F(TN('{TICKET TOTAL}')+TN('{ORDER TAG TOTAL:Discount Item Custom Value}')*-1+TN('{ORDER TAG TOTAL:Discount Item Custom Percent}')*-1+TN('{CALCULATION TOTAL:Discount Ticket Total Percent}')*-1+TN('{CALCULATION TOTAL:Staff Discount}')*-1+TN('{CALCULATION TOTAL:Manager Discount}')*-1+TN('{CALCULATION TOTAL:Loyalty Discount}')*-1,'0.00')]</td>
</tr>
</table>
</div>
<F>-
{DISCOUNTS}
<div style="font-size:15px;font-weight:bold;text-align:justify;font-family:'Calibri'">
[<J10>Line Discount Total:|-£[=F(TN('{ORDER TAG TOTAL:Discount Item Custom Value}')*-1+TN('{ORDER TAG TOTAL:Discount Item Custom Percent}')*-1,'0.00')]]
[<J10>Ticket Discount Total:|-£[=F(TN('{CALCULATION TOTAL:Discount Ticket Total Percent}')*-1,'0.00')]]
[<J10>Staff Discount 10%:|-£[=F(TN('{CALCULATION TOTAL:Staff Discount}')*-1,'0.00')]]
[<J10>Owner Discount 100%:|-£[=F(TN('{CALCULATION TOTAL:Manager 0.00Discount}')*-1,'0.00')]]
[<J10>Loyalty Discount 10%:|-£[=F(TN('{CALCULATION TOTAL:Loyalty Discount}')*-1,'0.00')]]
[<J10>Discount Total:|-£[=F(TN('{ORDER TAG TOTAL:Discount Item Custom Value}')*-1+TN('{ORDER TAG TOTAL:Discount Item Custom Percent}')*-1+TN('{CALCULATION TOTAL:Discount Ticket Total Percent}')*-1+TN('{CALCULATION TOTAL:Discount Ticket Total Percent}')*-1+TN('{CALCULATION TOTAL:Staff Discount}')*-1+TN('{CALCULATION TOTAL:Manager Discount}')*-1+TN('{CALCULATION TOTAL:Loyalty Discount}')*-1,'0.00')]
<F>
<J00>===================================]
</div>
<div style="font-size:20px;font-weight:bold;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="201">Total:</td><td width="60">£{TICKET TOTAL}</td>
</tr>
</table>
</div>
{PAYMENTS}
<F>-
<div style="font-size:13px;font-weight:bold;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="220">Tendered Total:</td><td width="45">£{TENDERED TOTAL}</td>
</tr>
</table>
</div>
<div style="font-size:13px;font-weight:bold;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="226">Change:</td><td width="45">£{CHANGE TOTAL}</td>
</tr>
</table>
</div>
<F>-
</div>
<F>
<F>
<div style="font-size:15px;font-weight:bold;text-align:center;font-family:'Calibri'">
<L00><br/>Served By:{USER NAME}
<L00>THANK YOU<br/>
</div>
<EC>
<BAR>{TICKET TAG:Barcode}
<EL>
<F>-
<div style="font-size:13px;font-weight:bold;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="111">TXN:{TICKET ID}</td><td width="111">{TICKET DATE}</td><td width="90">{TIME}</td>
</tr>
</table>
</div>
<F>-
<br/>
<br/>
<br/>
<L>-
{ENTITIES}

[DISCOUNTS]

[PAYMENTS]
<div style="font-size:13px;font-weight:bold;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="220">{PAYMENT NAME}</td><td width="45">£{TENDERED}</td>
</tr>
</table>
</div>
[ORDERS]
-- Default format for orders
<div style="font-size:13px;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="25">{QUANTITY}x</td><td width="200">{ITEM TAG:Receipt Name} {PORTION: }</td><td width="45">£{TOTAL PRICE}</td>
</tr>
</table>
</div>
{ORDER TAGS}
[ORDERS:Gift]
-- Format for gifted orders
<J00>{QUANTITY} {NAME}|**FREE ITEM**

[ORDERS:Void]
-- Nothing will print for void lines

[ORDER TAGS]
-- Format for order tags
<J00> -{ORDER TAG NAME} | -£[=F(TN('{ORDER TAG TOTAL}')*-1),'0.00']
[<J00> -Discount Reason: [{ORDER STATE:DStatus}]]

[ENTITIES:Customers]
-- Customer entity format
<F>
<F>
[ENTITIES:Table]
-- Table entity format
<L00>Table: {ENTITY NAME}
<F>
<F>
1 Like

@RickH why have you encoded all the HTML? It isn’t necessary and makes it more difficult to work with

What I mean is you are using &lt; instead of <, etc.

Here is your template without being encoded. It should work exactly the same…

[LAYOUT]
-- General layout
<XCT>27,112,0,25,250
<XCT>29,40,76,6,0,48,69,48,48,1,1
<bmp>C:\SambaPOS5\Product Images\SmallLogoBW.jpg</bmp>
<div style="font-size:25px;font-weight:bold;text-align:center;font-family:'Calibri'">SALES RECEIPT</div>
<F>-
<div style="font-size:13px;font-weight:bold;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="25">Qty</td><td width="200">Item Description</td><td width="45">Price</td>
</tr>
</table>
</div>
<F>-
{ORDERS}
<div style="font-size:15px;font-weight:bold;text-align:center;font-family:'Calibri'"><br/>{TICKET QUANTITY SUM}x Items Sold</div>
<F>-
<div style="font-size:13px;font-weight:bold;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="220">Sub Total:</td><td width="45">£[=F(TN('{TICKET TOTAL}')+TN('{ORDER TAG TOTAL:Discount Item Custom Value}')*-1+TN('{ORDER TAG TOTAL:Discount Item Custom Percent}')*-1+TN('{CALCULATION TOTAL:Discount Ticket Total Percent}')*-1+TN('{CALCULATION TOTAL:Staff Discount}')*-1+TN('{CALCULATION TOTAL:Manager Discount}')*-1+TN('{CALCULATION TOTAL:Loyalty Discount}')*-1,'0.00')]</td>
</tr>
</table>
</div>
<F>-
{DISCOUNTS}
<div style="font-size:15px;font-weight:bold;text-align:justify;font-family:'Calibri'">
[<J10>Line Discount Total:|-£[=F(TN('{ORDER TAG TOTAL:Discount Item Custom Value}')*-1+TN('{ORDER TAG TOTAL:Discount Item Custom Percent}')*-1,'0.00')]]
[<J10>Ticket Discount Total:|-£[=F(TN('{CALCULATION TOTAL:Discount Ticket Total Percent}')*-1,'0.00')]]
[<J10>Staff Discount 10%:|-£[=F(TN('{CALCULATION TOTAL:Staff Discount}')*-1,'0.00')]]
[<J10>Owner Discount 100%:|-£[=F(TN('{CALCULATION TOTAL:Manager 0.00Discount}')*-1,'0.00')]]
[<J10>Loyalty Discount 10%:|-£[=F(TN('{CALCULATION TOTAL:Loyalty Discount}')*-1,'0.00')]]
[<J10>Discount Total:|-£[=F(TN('{ORDER TAG TOTAL:Discount Item Custom Value}')*-1+TN('{ORDER TAG TOTAL:Discount Item Custom Percent}')*-1+TN('{CALCULATION TOTAL:Discount Ticket Total Percent}')*-1+TN('{CALCULATION TOTAL:Discount Ticket Total Percent}')*-1+TN('{CALCULATION TOTAL:Staff Discount}')*-1+TN('{CALCULATION TOTAL:Manager Discount}')*-1+TN('{CALCULATION TOTAL:Loyalty Discount}')*-1,'0.00')]
<F>
<J00>===================================]
</div>
<div style="font-size:20px;font-weight:bold;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="201">Total:</td><td width="60">£{TICKET TOTAL}</td>
</tr>
</table>
</div>
{PAYMENTS}
<F>-
<div style="font-size:13px;font-weight:bold;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="220">Tendered Total:</td><td width="45">£{TENDERED TOTAL}</td>
</tr>
</table>
</div>
<div style="font-size:13px;font-weight:bold;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="226">Change:</td><td width="45">£{CHANGE TOTAL}</td>
</tr>
</table>
</div>
<F>-
</div>
<F>
<F>
<div style="font-size:15px;font-weight:bold;text-align:center;font-family:'Calibri'">
<L00><br/>Served By:{USER NAME}
<L00>THANK YOU<br/>
</div>
<EC>
<BAR>{TICKET TAG:Barcode}
<EL>
<F>-
<div style="font-size:13px;font-weight:bold;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="111">TXN:{TICKET ID}</td><td width="111">{TICKET DATE}</td><td width="90">{TIME}</td>
</tr>
</table>
</div>
<F>-
<br/>
<br/>
<br/>
<L>-
{ENTITIES}

[DISCOUNTS]

[PAYMENTS]
<div style="font-size:13px;font-weight:bold;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="220">{PAYMENT NAME}</td><td width="45">£{TENDERED}</td>
</tr>
</table>
</div>
[ORDERS]
-- Default format for orders
<div style="font-size:13px;text-align:left;font-family:'Calibri'">
<table>
<tr>
<td width="25">{QUANTITY}x</td><td width="200">{ITEM TAG:Receipt Name} {PORTION: }</td><td width="45">£{TOTAL PRICE}</td>
</tr>
</table>
</div>
{ORDER TAGS}
[ORDERS:Gift]
-- Format for gifted orders
<J00>{QUANTITY} {NAME}|**FREE ITEM**

[ORDERS:Void]
-- Nothing will print for void lines

[ORDER TAGS]
-- Format for order tags
<J00> -{ORDER TAG NAME} | -£[=F(TN('{ORDER TAG TOTAL}')*-1),'0.00']
[<J00> -Discount Reason: [{ORDER STATE:DStatus}]]

[ENTITIES:Customers]
-- Customer entity format
<F>
<F>
[ENTITIES:Table]
-- Table entity format
<L00>Table: {ENTITY NAME}
<F>
<F>
3 Likes

I havent done that, my template is exactly as you posted, it changed it to that when i copied it into the forum, highlighted it and used the </>

Dont know why it copied it in like that

2 Likes

We, as in most restaurants, want to be as specific as possible. x2, x3, x4 is great and all, but what about 1.5x? Or maybe 1.25x? In most cases, nobody goes above x2. I have “NO”, “Very Little”, “Little”, “Extra” as prefixes.

If somehow you can get numbers less than 2, then I would use Quantity Tags.

On inital startup of samba when the login screen appears there is no focus on the input field meaning the only way to login is via physically touching/clicking the numberpad on screen

I can no longer just type on the keyboard when the login screen appears i first have to click in the input field before a keyboard will type, so i assume card swipes/scanning will not work as the field has no focus.

If you log in and then log out it works fine and retains focus, it seems just to be on initial startup you have to click the input field before you can login (unless you directly use the numberpad on screen)

Heres a copy of the log file, which i think is the same as the error that popped up in samba

11/09/2018 00:54
-----------------------------
[General Info]

Application: SambaPOS
Version:     5.2.13
Region:      en
DB:          SQ
Machine:     RICKS-LAPTOP
User:        Rick
Date:        10/09/2018
Time:        23:54

User Explanation:

Rick said ""
-----------------------------

[Exception Info 1]

Top-level Exception
Type:        System.NullReferenceException
Message:     Object reference not set to an instance of an object.
Source:      Samba.Presentation.ClientLibrary
Stack Trace: at Samba.Presentation.ClientLibrary.Modules.PosModule.ScreenMenuItemButton.GetCaption() in C:\Users\vehbi\Source\Repos\sambapos-v5-pro\Samba.Presentation.ClientLibrary\Modules\PosModule\ScreenMenuItemButton.cs:line 71
   at Samba.Presentation.ClientLibrary.Modules.PosModule.ScreenMenuItemButton.<Refresh>d__31.MoveNext() in C:\Users\vehbi\Source\Repos\sambapos-v5-pro\Samba.Presentation.ClientLibrary\Modules\PosModule\ScreenMenuItemButton.cs:line 77
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.<ThrowAsync>b__6_0(Object state)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

-----------------------------

[Assembly Info]

mscorlib, Version=4.0.0.0
Samba.Services, Version=1.0.0.0
Samba.Domain, Version=1.0.0.0
Samba.Infrastructure.Data, Version=1.0.0.0
System.ComponentModel.Composition, Version=4.0.0.0
Samba.Presentation.Services, Version=1.0.0.0
System.Core, Version=4.0.0.0
PresentationCore, Version=4.0.0.0
DevExpress.Xpf.LayoutControl.v16.2, Version=16.2.13.0
System.Xml, Version=4.0.0.0
DevExpress.Xpf.Grid.v16.2, Version=16.2.13.0
System, Version=4.0.0.0
DevExpress.Xpf.Grid.v16.2.Core, Version=16.2.13.0
WindowsBase, Version=4.0.0.0
System.Xaml, Version=4.0.0.0
PresentationFramework, Version=4.0.0.0
Samba.Infrastructure, Version=1.0.0.0
Microsoft.Practices.Prism, Version=4.0.0.0
System.Runtime.Serialization, Version=4.0.0.0
Microsoft.Practices.Prism.MefExtensions, Version=4.0.0.0
DevExpress.Xpf.Core.v16.2, Version=16.2.13.0
System.Windows.Forms, Version=4.0.0.0
System.Drawing, Version=4.0.0.0
Samba.Persistance, Version=1.0.0.0
Stateless, Version=1.0.0.0
PropertyTools, Version=2012.4.14.1
Samba.Localization, Version=1.0.0.0
ReachFramework, Version=4.0.0.0
EntityFramework, Version=6.0.0.0
FluentValidation, Version=3.4.0.0
Microsoft.CSharp, Version=4.0.0.0
Omu.ValueInjecter, Version=2.3.0.0
Microsoft.Practices.ServiceLocation, Version=1.0.0.0
DevExpress.Data.v16.2, Version=16.2.13.0
NCalc, Version=1.3.8.0
WindowsInput, Version=1.0.4.0

-----------------------------

[System Info]

Operating System
-Microsoft Windows 10 Pro
--CodeSet = 1252
--CSDVersion = 
--CurrentTimeZone = 60
--FreePhysicalMemory = 986460
--OSArchitecture = 64-bit
--OSLanguage = 2057
--ServicePackMajorVersion = 0
--ServicePackMinorVersion = 0
--Version = 10.0.17134

Machine
-RICKS-LAPTOP
--Manufacturer = Hewlett-Packard
--Model = HP 650 Notebook PC
--TotalPhysicalMemory = 4176769024
--UserName = RICKS-LAPTOP\Rick

-----------------------------


######################### E N D #########################
11/09/2018 00:54
-----------------------------
[General Info]

Application: SambaPOS
Version:     5.2.13
Region:      en
DB:          SQ
Machine:     RICKS-LAPTOP
User:        Rick
Date:        10/09/2018
Time:        23:54

User Explanation:

Rick said ""
-----------------------------

[Exception Info 1]

Top-level Exception
Type:        System.NullReferenceException
Message:     Object reference not set to an instance of an object.
Source:      Samba.Presentation.ClientLibrary
Stack Trace: at Samba.Presentation.ClientLibrary.Modules.PosModule.ScreenMenuItemButton.GetCaption() in C:\Users\vehbi\Source\Repos\sambapos-v5-pro\Samba.Presentation.ClientLibrary\Modules\PosModule\ScreenMenuItemButton.cs:line 71
   at Samba.Presentation.ClientLibrary.Modules.PosModule.ScreenMenuItemButton.<Refresh>d__31.MoveNext() in C:\Users\vehbi\Source\Repos\sambapos-v5-pro\Samba.Presentation.ClientLibrary\Modules\PosModule\ScreenMenuItemButton.cs:line 77
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.<ThrowAsync>b__6_0(Object state)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

-----------------------------

[Assembly Info]

mscorlib, Version=4.0.0.0
Samba.Services, Version=1.0.0.0
Samba.Domain, Version=1.0.0.0
Samba.Infrastructure.Data, Version=1.0.0.0
System.ComponentModel.Composition, Version=4.0.0.0
Samba.Presentation.Services, Version=1.0.0.0
System.Core, Version=4.0.0.0
PresentationCore, Version=4.0.0.0
DevExpress.Xpf.LayoutControl.v16.2, Version=16.2.13.0
System.Xml, Version=4.0.0.0
DevExpress.Xpf.Grid.v16.2, Version=16.2.13.0
System, Version=4.0.0.0
DevExpress.Xpf.Grid.v16.2.Core, Version=16.2.13.0
WindowsBase, Version=4.0.0.0
System.Xaml, Version=4.0.0.0
PresentationFramework, Version=4.0.0.0
Samba.Infrastructure, Version=1.0.0.0
Microsoft.Practices.Prism, Version=4.0.0.0
System.Runtime.Serialization, Version=4.0.0.0
Microsoft.Practices.Prism.MefExtensions, Version=4.0.0.0
DevExpress.Xpf.Core.v16.2, Version=16.2.13.0
System.Windows.Forms, Version=4.0.0.0
System.Drawing, Version=4.0.0.0
Samba.Persistance, Version=1.0.0.0
Stateless, Version=1.0.0.0
PropertyTools, Version=2012.4.14.1
Samba.Localization, Version=1.0.0.0
ReachFramework, Version=4.0.0.0
EntityFramework, Version=6.0.0.0
FluentValidation, Version=3.4.0.0
Microsoft.CSharp, Version=4.0.0.0
Omu.ValueInjecter, Version=2.3.0.0
Microsoft.Practices.ServiceLocation, Version=1.0.0.0
DevExpress.Data.v16.2, Version=16.2.13.0
NCalc, Version=1.3.8.0
WindowsInput, Version=1.0.4.0

-----------------------------

[System Info]

Operating System
-Microsoft Windows 10 Pro
--CodeSet = 1252
--CSDVersion = 
--CurrentTimeZone = 60
--FreePhysicalMemory = 986608
--OSArchitecture = 64-bit
--OSLanguage = 2057
--ServicePackMajorVersion = 0
--ServicePackMinorVersion = 0
--Version = 10.0.17134

Machine
-RICKS-LAPTOP
--Manufacturer = Hewlett-Packard
--Model = HP 650 Notebook PC
--TotalPhysicalMemory = 4176769024
--UserName = RICKS-LAPTOP\Rick

-----------------------------


######################### E N D #########################

Also Emre, I personally think combos aren’t setup for proper work flow. Whenever customer gives product order they also give modifications right after. Would be awesome if we had easy way to set a combo just like we do products and include items included in combo. Each time a combo item is selected to ask modifiers then move onto next choice. I know Kendash had come up with a way to automate that with multiple menus and rules and actions but in deployment thats really not practical just for a combos feature.

Just a thought if it makes sense to spend time on it on a programming perspective. :slight_smile:

You can always use order tags for combo items. And set combo product.