
Three Levels of Distributors and No View of Their Stock. Here's How One Odoo ERP Fixed It for a Cosmetics Brand.
Ruelia Professional sells through super-stockists and distributors, and most of its stock sat in their warehouses out of view. We built one distribution management system on Odoo 19 that connects all three levels. Each order is now entered once and copied to the other side automatically, and Ruelia sees partner stock across the whole channel.
Every Order, Every Partner, One System
Ruelia now sees stock at every super-stockist and distributor, and orders between them update both sides on their own.
3
distribution levels on one database
2
brands, BLSPHM and 0.18mm, managed on one system
3
custom modules; the rest is standard Odoo
14
finished SKUs with packaging BoMs
Two Professional Beauty Brands, Sold Through a Three-Level Chain
Ruelia Professional LLP makes professional haircare and skincare under two brands, BLSPHM and 0.18mm. The range covers cleansers, moisturisers, day and night crèmes, body butter, lip balm and a line of 10ml elixirs.
Ruelia doesn't sell straight to shops and salons. It sells to super-stockists, large regional wholesalers that buy in bulk, and they supply the smaller distributors who reach the trade. This model is common across Indian FMCG and cosmetics. Its weak spot is that once stock leaves the brand's warehouse, the brand usually stops seeing it.
Ruelia → Super-Stockists → Distributors → Salons & Retailers
What Ruelia Needed
One system for the brand and every partner.
Stock visible at every level, from one login
Orders entered once, not twice
Distributors buy only from their super-stockist
Price lists locked to sales managers
Each partner’s customers kept private
Packaging planned before every production run
Packaging BOMs planned before production starts
We split the catalogue so packaging never gets mixed up with saleable stock. Packaging sits under its own categories: primary packaging that touches the product (bottles, jars, pumps, caps, lids), secondary packaging (printed boxes, trays) and semi-finished 3ml and 5ml sachets.
Each of 14 finished SKUs has a Bill of Materials, a list of every packaging part needed to make one unit. A 100ml cleanser needs a bottle, a 100ml pump, a printed box, a tray and a BLSPHM seal. A 50ml day crème needs a jar, cap, lid, tray, box, seal and spatula.
Before each production run, the team sees exactly which components are needed, checks what's in stock and buys any shortfall in advance. Planning no longer starts with a manual count.

Every Product Sorted by the Role It Plays
We organised Ruelia's catalogue by what each item does, so packaging parts never mix with the products sold through the chain. Under the BLSPHM category tree, primary packaging (24 items) holds the parts that touch the product, such as bottles, jars, pumps, caps and lids. Secondary packaging (28 items) holds the outer printed boxes and trays that protect and present it. Semi-finished goods (14 items) are the 3ml and 5ml sachets, and the 94 finished SKUs sold through the chain sit in their own saleable category.
Because every item is filed by its role, purchasing can filter packaging by type to see what needs ordering, and stock reports show packaging and finished goods separately.

One company per partner, one database
Each super-stockist and distributor is set up as its own company inside the same Odoo database, with Ruelia as the parent. Every distributor is linked to the super-stockist it buys from, so the system reflects the real chain.
Each partner keeps its own customers, stock and invoices, as if it had a separate system. Ruelia's management switches between all of them from one login. For the first time, Ruelia can see how much stock sits with every partner without asking anyone for a spreadsheet.

Orders entered once, mirrored automatically (custom)
When a super-stockist confirms a purchase order to Ruelia, Odoo creates the matching sales order in Ruelia's company. It works the other way too: when Ruelia confirms a sale to a super-stockist, the matching purchase order appears on their side.
Products, quantities, unit prices and taxes carry across line by line. Each order stores the other side's reference number, so either company can trace a transaction back. Nobody types the same order twice, and both companies' records always match.
Standard multi-company Odoo Community doesn't create these matching orders, so we built a small module for it. Ruelia can switch it on or off in Settings.

Buying stays inside the chain (custom)
When a super-stockist or distributor creates a purchase order, Odoo fills in the vendor as its parent company and locks the field. A distributor can't pick Ruelia or another super-stockist and skip its own.
The same module controls pricing. Each company keeps its own price lists, but only sales managers can change which list applies to a customer. A salesperson can't quietly move an account onto a cheaper list.

Each partner’s customers stay private (custom)
Partners often sell to the same salons and retailers, so customer lists are sensitive. We replaced Odoo's standard contact rule so each partner sees only its own customers, its own user contacts and contacts deliberately shared with everyone.
One super-stockist can't browse another's customers, and a distributor can't see anyone else's. Partners can share one database without exposing their customer lists to each other.

Own warehouse, orders and invoicing per company
Each partner runs its own warehouse in Odoo and receives, stores and moves only its own stock. Goods move in one step, from the receiving dock into stock and from stock to dispatch, which suits Ruelia's current volume without adding extra handling.
Every company manages its own quotations, sales orders, purchase orders and invoices in INR. All of this is standard Odoo, with no custom code.

Your Distribution Chain, on One System
Book a free 45-minute Process Fit Review with our ERP team. We'll walk through your chain, from packaging and production to your last distributor, and you'll leave with a clear list of what Odoo covers as standard, what needs configuring and what would need custom code.
For Sales
Looking For Jobs