Restrict multi-copy printing for better POS security

This topic may seem off for this community; but I think it impacts users seriously so maybe anyone with some insight on this may help the community.

At pos; since the printing is handled by os/browser; its possible for a cashier to enter 2 in the print quantity; keep one aside and later use it to move stock out the store either in person or using a friend; its a very simple and almost unstoppable scenario considering many shops can’t afford alarms; stamping invoices is another issue; but that will still be done by humans so problems could persist.

If anyone has any experience with restricting printer copies or a plugin/extension for any of the popular browsers; it will be highly beneficial.

Apart from keying in 2, the cashier can print the last invoice as many times as he wants by just clicking the print button.

In a serious retail environment, this issue makes ERPNext virtually unuseable.

Maybe its not meant to be used as a real point of sale solution??

Yep! Another fine point! That print button should be disabled and that pop up closed automatically. These are simple tweaks in my opinion; if the core development team can give this print issue focus - 'Cus I think it’s being overlooked!!

For the number of copies; I found a usable solution using a firefox; for security reasons; especially as this is an open forum; I can’t state the details; send a mail anyone interested.

I also think the fixes should be offered as script updates that can be added by system administrators.

Please team; this is a serious security flaw for erpnext, think about it; as good as it is in other areas; this one is important; in retail this can make erpnext a reject as @olamide_shodunke has rightly stated.‎ let’s have the print button disabled by the time the cashier comes back to the pos screen after printing!!!


  1. Disable print on submitted invoice after first print
  2. Remove print button and let submit send directly to default printer!!! i.e integrate print and submit at POS; its retail, this will be faster and completely free of fraud.

Kent@Live Mail

This issue can’t be over-emphasized, it crucial; the low responses makes it appear obvious there are a few people using this in pure retail!

Please; for the new POS; remove that print button after invoice is submitted; submit should just print automatically to default printer; if the browser is a restriction; firefox will handle a dialog-less; direct to printer functionality; tested and works; the only thing is just to ensure that print button is unavailable for submitted pos invoice when ROLE = Accounts User; simple!

For the older POS, the print and New popup should be gone on returning from print and the printer icon + menu>print function all disabled for the submitted invoice once user role = Accounts User

I anyone on the team can issue us a working script to add to the module files; it will be a very welcome improvement.

If the Menu>print function would be a problem as its from the frappe framework then let’s look at a hard-coded role check like…

If role == “Accounts User” && doc.status == 1
(do print disable function)

Thanks. Anyone from the dev team please offer us snippets and help us with directions where to insert.

*PROPOSING Print Count feature.

Again… there may be a challenge with the above proposal in my last reply; since the invoice has already been submitted before print in the current setup. Now what if we have a hidden field ‘Print Count’ that keeps a count of every time the invoice is printed. Now a user with a certain role cannot print an invoice when the count is = 1. So the print buttons are disabled by the framework for such a role; while higher roles can print. If there’s a problem in-store that needs a reprint; the rightful authority will do that. Also we should just have the submit button do both automatically; just for pos. I know the team is considering flexibility; but at pos; this level of flexibility is not required. 100% of the times in the retail environment; invoices will be printed. If there’s time; the dev team can even think of adding a Demo and Live mode in accounts settings for POS so the demo mode works flexibly and Live mode uses print counting, one submit button that also print to default and no print buttons anywhere on pos screen!

This functionality will be so desirable even for all other modules; this will be a simple way to manage printing.

Fantastic @noetico

Could not have said it better .

I am of the opinion that ERPnext could be amazing in a retail environment if only focus could be placed on the peculiar needs of retailers.

This is one of the major ones

HI @noetico, are you based in Nigeria ???

Yes @olamide_shodunke;

For the team; summarily; let’s have the PRINT button get DISABLED along with the other fields in the sales invoice once it’s submitted. So after the first click; its disabled. Maybe someone can help with this.


Here are the steps to secure the POS

  1. Hide the breadcrumbs: got to assets folder and edit the desk.min.css; set display values for #nav-breadcrumb to none; default is inline-block. This is good for users in pre v7; as the cashier cannot click the breadcrumb to access the list and reprint.

  2. Edit Sales_invoice.js; look at the are …on_submit (image attached) set the code as I have attached.

Overall effect; you have a single conclude button that prints and opens a new invoice so the previous invoice is gone, the popup is gone and a new invoice is created. Simple solution and works flawlessly.

Couple this with a fine plugin for firefox and you have a secure pos, ready for retail.

Please share; this is critical for retail. thank you