How to Create a Refund Item Button?

It is possible to create a refund item button in ticket so you can change previously sold items with new items.

First of all we’ll start by creating a new automation command.

We’ll map this automation command to ticket lines.

This button should be visible for only new added lines and it will be enabled if item not gifted or voided.

After Saving it we’ll create a new action.

Price should be negative so we’ll use [=0-Order.Price] expression. Also We should set Increase Inventory setting to True.

And we need a Rule to execute this command.

We’ll update Order’s gift state to Refund to prevent it from accidentally gifted or voided.

Also we need to map this rule.

We don’t need a cancel Refund button since we’ll only use it for new orders and we can use “Cancel” button to Cancel that line.

Let’s say customer bought two Cookies and paid it. After a short while she wanted to change one cookie with one muffin.

We’ll create a new ticket, add Cookies and click Refund button while Cookies highlighted. We’ll also add Muffins on same ticket.

As you can see ticket balance displays ,25. So she needs to pay ,25 more.


Hi Emre, is it working also on V3?

Not tried but it should work.

i followed this guide on V3.034, the only thing is that no matter what i selected an item and didnt see the Refund button,
if you have time for this i will be mostly gratefull

Visible states of automation command controls how it appears. Also be sure Visibility setting is “Order Line”

can someone please tell me the funtionality of the refund button. when is it supppose to be used once ticket close or payment settled?

The idea behind this implementation is not to alter the original Ticket; instead, a new Ticket is created.

The item to be refunded is added to this new ticket.
Select (highlight) the item.
Click the Refund button.
Settle the Ticket (i.e. with Cash).
The amount of the item is removed/deducted from the Cash Account.
And (optionally) the item inventory is increased, since the item is put back in stock.

Items are purchased, and the Ticket is Settled:

Customer wants to return an item - New Ticket created, item added to Ticket, and Refunded:

Account Screen shows Cash Refund:

Now that I look at this, I see some issues with the Accounts… the Cash Account is correct, but the Sales and Receivables Accounts are incorrect, in my opinion.

Sales balance should be 80 (same as Cash), not 160.
Receivables balance should be 0, not 80.

I believe an enhanced setup for this should be done, to reverse the Sale.

Here is the way I have it set up:

Set the Refund Item Automation Command to have Visible State as Status=Submitted.
Set the Refund Item Action Price field to 0.
Ensure Tickets > Ticket Types > Ticket has Allow Zero Priced Orders checked.

Then, implement this Tutorial:


ok so when we create new ticket how will be select and relate to the previous sale done?

The New Ticket isn’t related to the Old Ticket at all, other than it would have one or more of the same items on it, to be refunded. That’s the way the original setup is explained.

The alternate setup that I’ve shown is exactly the same Ticket, and that’s why I prefer it. It also doesn’t mess up the Account Balances.

I noticed after refunding an order that the sales total and cash income in work period report doesn’t match total sales in item sales report.

How to fix it?

work period report (incorrect grand total and cash income)

item sales report (correct sales ($520.70)

@fickle_123, that’s the point I was trying to make regarding the original setup. The Account debits/credits for the Sales and Receivables Accounts are inverted during a return/refund, and in my opinion, this is incorrect.

The difference (537.60 - 520.70 = 16.90) is equal to your Returns balance, which is not reflected in the Income Cash balance, nor in the Sales balance. I believe both Cash & Sales are incorrect, while the Sales by Item Group balance is correct. If anyone disagrees, please tell me why.

This is exactly the reason I provided an alternate setup (the setup that I use).

If it creates a confusion I’ll be glad to correct that. Thank you in advance for helping me on this.

In this tutorial I wanted to recommend a simple solution for one of the biggest issues in retail. Receiving an item back and giving another item instead. Can we call it a Replace?

I think a good alternative will be creating a specific ticket type for refunds, create specific payment types for refund tickets and also create specific accounts for refunds. (Inverse of Sales account). When something needs to be refunded manager creates a refund ticket, add items and select a permitted payment type for refunds. Negative pricing is useful for replace operations. If you don’t need it a specific ticket type will work better.

I like where you’re going with this @emre, regarding creating a different Ticket Type, and Refund Accounts and Transactions.

Keep in mind though, a Refund is not a Replace. If someone buys 6 cans of soda, and then they decide to return 2 cans (unopened), they want their Cash Refunded, not a Replacement (or substitution) for the returned soda.

1 Like

I have setup the refund button as per emre’s instructions, am i right i thinking this only works as an actual replace transaction so refunding an item but having another sale item on the same ticket? If i use this button as it is now will that make the accounts incorrect as you stated above? Should i use @QMcKay setup instead?

@emre will a setup be created for refunds using a refund ticket type?


Here is the alternate method that I use…

1 Like

@QMcKay, Hi, I noticed that you implemented a wifi password button. I would like to know how it works as i intend to implement same. Thanks

Full Tutorial here… some things will need to be changed depending on your Router Model and Firmware if you want to include the ability to update the Password on the Router (as opposed to just display it).

It is somewhat advanced if you want to be able to alter the password on the router, so please proceed with caution. The simple non-invasive method is presented in the first post, and the more advanced method is presented in a post near the end of the thread.

Same thread, later post has and advanced method…

I moved 6 posts to a new topic: Automation Command not working on Account Screen?

Hi guys, first I want to say that the software and the community is incredible…

If a ticket with service charges is submitted and closed, and I need to refund this whole ticket including the charges or only the charges, how can I accomplish that? Many thanks!