It's Friday evening. A cafe that orders from you every week wants 90 bottles of sparkling water, and your system says you have 120. Great, until your staff find only 60 on the shelf and spend twenty minutes looking for the rest in the backroom. Then someone has to remember to reorder. Then finance asks what the stock is worth, and nobody knows until the month-end count.
If you run a retail store with dozens or hundreds of SKUs, that scene probably sounds familiar. The good news: it's exactly the kind of work retail inventory management in Odoo takes off your plate.
We built a small retail store in Odoo 19 to show you how it works end to end: nine products across beverages, snacks and personal care, three suppliers, and one real sales order. Here's what happened.
1. Know exactly where every product sits: stock by location
Most stores don't keep stock in one place. There's the shelf, the backroom, maybe a second storeroom. If your system only knows "WH: 120 units", your team still has to search.
In Odoo, each shelf and storage area is its own location. In our demo, we created:
- Shelf A – Beverages
- Shelf B – Snacks
- Shelf C – Personal Care
- Backroom for overflow
We then added putaway rules by product category. When the supplier delivery arrived, Odoo sent every beverage straight to Shelf A, every snack to Shelf B, and so on. No one had to decide where things go. When Shelf A got too full, a simple internal transfer moved the extra sparkling water and green tea to the Backroom.
Odoo inventory report showing retail stock grouped by shelf and backroom locations
The result is one screen that tells anyone on your team what's on each shelf, and how much sits in reserve.
2. Sell, and have stock updated automatically
Now the café order comes in: 90 Sparkling Water, 45 Cold Brew Coffee, 30 Dried Mango and 12 Hand Soaps.
As soon as the sales order is confirmed, Odoo creates the delivery order. When the team validates it, stock goes down immediately, in the right place. Odoo took 60 bottles from Shelf A and the remaining 30 from the Backroom automatically, because it knows exactly where each unit is.
Odoo moves history showing products picked from Shelf A and Backroom for a customer delivery
Odoo stock by location after a sale, with Shelf A sparkling water at zero
No spreadsheet update. No end-of-day recount. What you see on screen is what's on your shelves.
3. Never run out of best-sellers: automatic replenishment
Here's the part retailers usually love most.
For each product, we set a simple min/max reordering rule. For example, Sparkling Water: keep at least 50, refill up to 150. After the café order, only 30 bottles were left, below the minimum.
Odoo didn't wait for someone to notice. It created the purchase requests (RFQs) by itself, grouped by supplier:
- One RFQ to the beverage supplier for 120 Sparkling Water and 45 Cold Brew Coffee
- One RFQ to the snack supplier for 30 Dried Mango
Each RFQ is linked to the rule and the sales order that triggered it, so your buyer knows exactly why it exists.
Odoo request for quotation created automatically by a min/max reordering rule
Odoo reordering rules showing on-hand stock below minimum and forecast covered by purchase orders
Once the buyer confirmed the orders and the goods were received, stock went straight back to the maximum level.
Odoo reordering rules showing stock restored to maximum after supplier receipts
You decide the rules once. Odoo does the watching every day.
4. Know what your stock is worth, at any moment: perpetual valuation
For the finance team, the big question is always: what is our inventory worth today?
With perpetual inventory valuation, Odoo keeps your accounting in step with your stock. In our demo, we used Average Cost (AVCO):
- When the supplier bills were posted, the value of the goods landed in the stock account.
- When the customer invoice was posted, Odoo automatically moved the cost of the products sold from stock to Cost of Goods Sold, product by product.
Odoo customer invoice journal items showing cost of goods sold and stock account entries
The stock valuation screen then shows the value of every unit still on hand. In our store, 393 units were worth ฿10,375, exactly the balance of the stock account in the books. No manual journal entries, no waiting for month-end.
Odoo stock valuation list showing remaining quantity and value per product receipt
Your margin per sale is visible right away, and your balance sheet is always up to date.
What this means for your store
Put together, these four features turn inventory from a weekly headache into a process that runs by itself:
- Stock by location: your team finds products on the first try
- Automatic stock updates: every sale is reflected on the shelf and in the system
- Automatic replenishment: best-sellers get reordered before they run out
- Perpetual valuation: finance knows what stock is worth, every day
And because everything lives in one system (Sales, Inventory, Purchase and Accounting), nothing has to be typed twice.
Ready to see it with your own products?
At Stenas Digital, we help Thai retailers and distributors set up Odoo around the way they actually work: your shelves, your suppliers, your reorder rules. We handle implementation, data migration and ongoing support, in Thai and English.
Odoo inventory report showing retail stock grouped by shelf and backroom locations
Odoo moves history showing products picked from Shelf A and Backroom for a customer delivery
Odoo stock by location after a sale, with Shelf A sparkling water at zero
Odoo request for quotation created automatically by a min/max reordering rule
Odoo reordering rules showing on-hand stock below minimum and forecast covered by purchase orders
Odoo reordering rules showing stock restored to maximum after supplier receipts
Odoo customer invoice journal items showing cost of goods sold and stock account entries
Odoo stock valuation list showing remaining quantity and value per product receipt