[Enhancement Proposal] Add Functions to Item Cart Area in Existing Offline POS

Hello Community,

We are looking to refactor the whole POS module of ERPnext, As the POS was build with basic requirements and it have worked very well for most of our clients but there is a need to have more features in order to make it usable by most types of Retail outlets (Pharmacy and Optic Store for Batch and Supermarkets for Smooth Sales)

Currently our clients are facing some challenges with POS sales process which we plan to solve in the Proposed Enhancement plan.


1. Sales Process requires multiple clicks.
Ex.* Scan items, Then (Click1)Pay,

  • then if it is not the Default MOP then (Click2) on ‘C’
  • then (click 3) on ‘C’ of Card MOP
  • then (Click4) on the MOP input field
  • (Click5) Submit
  • then (Click6) Print
  • then (Click7) New

2. Unconsolidated Item Scanning.
If salesperson is selling Item A with 2 different Batch then it is not possible in the current POS Module. - If those who have bought medicines in India and got a Receipt there you will see 2 lines of Item A with line1 showing Batch-1 and Line-2 showing Batch-2. Unconsolidated item scanning is present in the ERPnext Sales Invoice method.

3. Waste of Space with Item blank Image view.
Instead we can utilise it for other buttons like the Pay button which needs scrolling down to be pressed with cursor. remove Collapsible section and make it fixed.

4. Offline Sync Delay.
Reason: One of our client have around 50k items with 90k customer which is working fine on the current offline POS with refactored Customer search algorithm to search by name, Mobile number, Civil ID, email and Customer ID. But the Sync takes around 13mins. This cause delay when new customers are created through POS side.

5. Shorcut Keys.
In the current offline POS we have added shortcut keys for Pay button= F9, Submit = Ctl+S and Print = Ctrl+P and New = Ctrl+b using JS but these are still multiple keys.

6. Sales return
Currently we made a Checkbox to make sales return but it can only return full amount in Cash.
Sales Return types, Cash Return or Store Credit.

7. Clear Details of Item in the Item Cart Row.
As the item card Area is so small it is hard to put everything in that. Currently user have to click on the item to see its UOM, Quantity, Pricelist Rate, Discount, Rate and Amount Etc.

8. POS Closing/Daily/Shift Closing.
There is no proper shift or day closing in ERPnext, So we created a POS Closing Voucher which check if any draft POS Closing Voucher when the POS is opened and if not then it will ask for POS opening cash amount. then at the end of the shift/day the pos closing voucher fetches total sales, total cash mop, card, etc and all invoices, total returns, average sales for the shift/day, total quantity sold.

9. Multiple POS in the same outlet causing Lose of invoices.
Some invoices are just disposed but the browser when syncing at the same time. This only happens when there are multiple POS in the same Outlet with the sane naming series and same POS Profile. This have a workaround by one of the community member which is not 100% successful.

10. Login without Internet at all
In order to start the POS, we need internet connection but in rare case if there is not Internet at all then the pos screen can never be opened.

11. Note/Comment/Remark Field from the POS view so user can add some text info.

12. Item Description to be Shown and be editable field in case user want to edit.

13. Approval Number for different types of payment.
MOP which needs to have a approval number will need a text field. Ex. Card payments, Online Wallet Payments.

14. Cash Reconciliation Report
Currently we make a report using Report builder with MOP and MOP Amount but in cash it always shows Amount and Change column separately. So we made custom report just for Daily Sales with Cash MOP.

15. Shift/Day Closing to have Accounting Entry for Cash sales.
We make Sales - Cash account in Chart of Accounts and use it with the Cash MOP. Currently we ask accountants to make Sales-Cash to Cash or Sales-Cash to Bank etc journal entry manually but what we plan to do is once Shift/Day Closing is submitted it will pass a JV for Sale-Cash to actual Cash account. This keeps the Cash ledger clean with only 1 or 2 transfer a Day for Cash Sale instead of have all the sales invoice directly connected to the default cash account.

Some of the above have been resolved with the above mentioned workarounds but to resolve the second point we need to refactor the Item cart Area which needs us to re-write the whole calculation methods.

So instead we plan to Redesign the whole POS with a stable browser DB, Maybe PouchDB.

Here is our proposal to the Community and the Core Team.
We would like to Redesign the whole POS but will need support and some funding too. Without the funding we will only achieve the points which are important for us, which is not our aim. Our Aim is to get it ready for us as well as the ERPNext Core so everyone can make use of it.

I request everyone to share their feedback on this topic and push it forward. I will be updating more point to this and get a Scope of work ready, so everyone will get clear understanding and if there are any other issues faced by other users then they can add it here and I will add it to the points.

We will be setting a deadline for this SOW, so we can start work on this. Estimated time required for development is 2 months.

9T9 IT Team.


Reserved to put Solutions of the above mentioned challenges

Type of Contribution:

  1. Developer
  2. Sponsor/Funding
  3. Tester

Will be updating the Time and Cost Estimation soon along with the draft SOW.


Seen one old discussion here for the POS improvement. implementing some of the ideas from that along with your points and a POS interface change will also be a big change. here is the discussion.

and I would like to contribute on funding part too. let me know how we can do that… thanks a lot

1 Like

Thank you for the Link. we were also part of this discussion and contributors but it is over as their updates is already a part of the current POS.
That the reason a new Thread is created.

Thank you. I will add your name to the list of contributors and once the whole SOW is finalised then We will share the total cost and see how much contributors can contribute

1 Like

Hi @fkardame

Thanks a lot for bringing this up. I will be happy to contribute towards this development as well. One simple but VERY important feature I think you should add is being able to include some free text on the POS Screen:

  1. General Comment/Remark field: This could be mapped to the comments section in the invoice or better still a new standard field ‘Remarks’ could be added in the Sales Invoice DocType for this purpose

  2. Item Description field: This should be available for each selected Item and mapped to the ‘Description’ field in the Item row of Sales Invoice

These fields are important because sometimes, the cashiers need (or are required) to make certain notes on either the individual items or the transaction and currently, there’s no way to do this on the POS. They need to switch to the Sales Invoice list, locate the correct invoice, Cancel, Amend, Edit, Save, and finally Submit… Needless to say, this is highly ridiculous!

I hope we can get some more valuable feedback from people who are into core retail so that this effort can get us to a fully functional and stable level

@olamide_shodunke Please chime in! :smiley:

Kind regards,

1 Like

Totally agreed :smiley: Thanks for adding in. Also this reminds me of Card payment needs a Approval Number for some clients.

Oh… and please also fix the Offline POS Name. For some reason, it seems a decision was made to use Date&Time as the Offline POS Name (POS No) rather than the string of numbers that was used previously. This current approach is both confusing and tacky!

A proper ID should be generated which can be used to track the invoice after it has synced


Yes we’re still using the old method.

1 Like

You should definitely include me in this project and am willing to contribute financially if quality control can be assured .

@fkardame I seem to have had some issues with your Bahrain POS …almost all the nice features you stated as part of it did not work.

You have highlighted all the current headaches of the current PoS, It would be interesting if the following can be added

  1. Functional loyalty feature when using offline mode.
  2. Ability to do returns from the PoS page


1 Like

We have this in production with 6 of our clients and everything that I have mentioned as the workaround is our own fix. There is no complain from the users so far except for point no. 2

This is working but only for full cash return.

We have achieve this already for one of our optical store client, along with a gift card module which have expiry date.

1 Like

Thanks @fkardame

For the return… in a retail environment return for store credit is more the norm than cash.

Can we add full return functionality as part of what we hope to achieve ?

If we can assure quality control I am very ready to contribute financially and in testing

Yes we had looked into this and it looks like the server side issue which can be solved, as we have done some testing on it.

I would appreciate if you can share your view on Sales Return.

Hello, first of all very good initiative.

The issue of return, should not be solved from the POS
only. We have been demonstrating for some time through detailed issues and even a possible PR (deprecated because it is supposed to be redesigning incoming payment functionalities) to be able to use a credit note to pay.

Something so basic and elemental (among other points about return) that we can’t attract attention.

Seeing the amount of functionalities that are manifested in V12, that do not make the block of use of the system as if it can be the management of credit and return for a retail, puzzles us as are the priorities to mature the system (the same claim we have been doing with very serious multicurrency issues).

By the way, we could join the collaborative project with code.


Currently we made a MOP called credit note which just act as the credit and debit amount. But in this way we dont come to know which customer have how much balance etc.

For multicurrency in POS we made alternate MOP which is not the base currency and these currency have seperate accounts in Chart of Account. This helps in maintaining seperate cash currency and its accounts

Will be happy to collaborate.


Many moons ago during the mid-point of version 9 erpnext, I paid a developer team to create many of the things you are trying to accomplish. When v10 was announced we paid to have all of the work moved to that newer repository and reworked to function in v10. They were all submitted as PRs to the core but only a few were actually accepted and incorporated into v10 POS. Their code is publicly posted in github if you think it will be helpful.

Here are the highlights:

  • Free Text field added to the top of the POS screen for entering PO#'s or credit card validation codes, etc.
  • Item search optimized to search for barcodes first, then Item codes, then descriptions. This was to speed up the very cumbersome old process and better allow for barcode scanners to work with the system.
  • Customer search Was expanded to include the address of the customer in the drop down results. This was to cover for things like B2B sales where the customer has multiple outlets with the same name all over town. It is important to charge sales to the right sub-customer in these cases.
  • Multiple scans of the same item or barcode in a given transaction would automatically increment the count of any existing item line in the cart instead of adding another line to the receipt.
  • A new filed was added to “Cutsomer” to be a Customer ID. The Customer ID would then appear in a line above the regular “Customer” filed on the POS screen. This Customer ID filed was also searchable and could be used to populate the customer information if it was known to the retail clerk. This was in preparation for customer ID cards to come later. The Customer ID also allowed us to then mass export the sales invoice transactions to a 3rd party accounting system (Sage Accounting) using a custom report format (also in the github repository)
  • To handle the end of day reporting and cashier closeouts (shift changes), we had a new version of the Sales Register Report created that had code behind it to restrict the user to be only able to print out the new Sales Register for their login, but the accounting department could print out anybody’s report or a combined report. The coulmuns were changed to include the new Customer ID as well as the sales divided into columns for each of the MOPs (credit card, cash, store credit, etc.).

All of these have been acitve in my v10 clients now for over a year with several hundreds of thousands of sales invoices flawlessly made and transferred to an alternative accounting system. Here is what the top of our v10 POS looks with the extra fields"

I am not sure if any of it would be useful to you in this new effort though because of the massive changes that have been made in how permissions work. Much of what we did was based on the older v10 permissions structure and they would require much rework to even move to v11, much less any new refactoring model. However, I wanted to make you aware that the code existed in case it would be helpful as a guide to any of your goals.

Please be aware that none of the work we did focused on the “Offline POS” functions because at the time they were not stable. Some of the things we discovered that needed attention in the offline functions were:

  • The ability for the POS offline to network with some additional sub-server function within the local account location so that invoice numbers could properly be applied to offline invoices and keep continuity with the live system.
  • The ability to keep the offline invoices in a secure state so the use could not clear the browser cache and hide fraudulent sales from the system. (Although we thought if we implemented the sub-server function this might solve that problem).
  • The ability to allow returns in offline mode without the required previous invoice information.

Since we had good internet connections locally we simply forced everyone to only use POS as an online feature and disabled offline mode completely.

If you PM me I can contact the developer and have the links to the code sent to you. I do not track them myself as I am not a developer, just an implementer and consultant.


1 Like

Hey, thank for the detailed reply and yes it would be helpful for us to go through the existing codes.

Will PM you.

@olamide_shodunke we have a few instances of @fkardame Bahrain POS deployed and it has been working thus far. Been in production for about a month.


What functions are useful for you from our app?

The main reason we used it was for the UOM conversion and the oping and closing vouchers.

Thats good to hear that our app is useful for community members. :smiley:

1 Like