The till is the easy part
Every retail ERP demo starts at the point of sale, because that’s where it looks good. Scan, pay, receipt. ERPNext has POS Profiles, POS Invoices and closing entries per shift. Odoo’s Point of Sale is one of its strongest apps. Selling a pair of shoes has been solved for a long time.
What separates a chain that trusts its numbers from one that doesn’t is the unglamorous stuff. How stock moves between stores. Who confirms it arrived. Whether a return was genuine. How a promotion hits the margin. That’s where we spend most of our time with retailers.
Rebalancing stock across four shops, worked through
Here’s a scenario that comes up constantly. You have four stores and a jacket that costs you $38. In size M, Store A has 14 on hand and sold 2 in the last four weeks. Store C has 1 on hand and sold 9.
The buyer’s replenishment report sees Store C running out and suggests a purchase order. Meanwhile Store A is sitting on months of stock.
A rebalancing module works on weeks of cover instead. Say the target is three weeks. Store C sells about 2.25 a week, so it wants 7 and has 1, a shortfall of 6. Store A sells 0.5 a week, so it wants 2 and has 14, a surplus of 12. The module proposes moving 6 from A to C. The area manager, Leila, approves it on her phone on Monday morning. Store A’s staff pick and dispatch, and the stock sits in an in-transit warehouse until Store C scans every jacket in.
That’s $228 of stock that didn’t need buying, on one size of one style. Run it across the range every week and it adds up. And because receiving is scanned, the two missing jackets from the earlier example get caught on Tuesday instead of at stocktake.
On ERPNext this uses Material Transfer stock entries through a transit warehouse, plus a new Transfer Proposal DocType and a scheduled job in hooks.py. On Odoo it’s an ir.cron that creates internal transfers between warehouses, with an approval state added to stock.picking.
Standard POS and inventory: leave most of it alone
We say this to almost every retailer. Don’t customise the cashier screen unless you really must. It’s the part that changes most between versions, and every tweak there is something to retest after an upgrade.
Things that work out of the box and rarely need code include item variants for size and colour, pricing rules and discounts, loyalty programs, gift cards (in Odoo), cash-up and shift closing, and stock reconciliation after a count. If your request is really a setting, our ERPNext customization and Odoo customization pages will help you tell the difference.
Where retail customisation earns its money
The modules that pay for themselves in retail sit behind the counter:
- Transfer proposals and scanned receiving, as in the example above.
- Return controls that flag receipt-less returns by customer phone number or card across stores.
- Style-level reporting that rolls SKUs up to style and season, so buyers can see sell-through the way they plan.
- Shrinkage by cause, separating damaged, expired, theft and admin error at stock count time.
- Supplier returns for faulty stock, tracked until the credit note lands.
Most of these extend the inventory management module and the point of sale module rather than replacing them.
What belongs outside the ERP
Some things are better bought. Footfall counters, CCTV analytics, workforce scheduling for large store teams and full e-commerce storefronts all have specialist products that do the job better than a custom module would. Connect them through the API and keep the ERP as the record of stock and money. If you’re weighing whether to build more than that, read build vs buy for ERP before deciding.