Odoo 19 Enterprise for a heavy commercial vehicle spare-parts distributor
Live stock across three warehouses in weeks, not a year, by moving operations onto Odoo first and leaving the books on the old system until a clean year-end cutover.
HCV spare parts distribution
Multi-brand, multi-warehouse
India
Project snapshot
Odoo modules in scope
Decisions worth copying
- Live stock across three warehouses in one database, so the sales counter can confirm availability on the phone
- One string for three jobs: the part number is the internal reference and the barcode, with no parallel numbering to reconcile
- No historical data migration: closing balances at 31 March become opening balances on 1 April, and that is the whole payload
- Operations move first, books second: Odoo runs the front end while the old system stays primary for the year, fed by a delivery-based invoice export that takes ten to fifteen minutes
- Fixed list price with variable discount by customer and product family, and a retailer price ceiling no invoice can breach
- Supplier rates quoted per hundred pieces normalised to a true per-unit rate on import
- Barcode picking and thermal single-label printing against the existing printer
The business
This is a classic Indian multi-brand distribution house for heavy commercial vehicle spare parts, carrying roughly 36 principal agencies: thousands of SKUs, price lists that change by principal, discount structures that change by customer, and physical stock spread across locations that did not talk to each other.
The company keeps its part numbering deliberately short. Where an OEM might carry a twelve to sixteen digit part number, this distributor works with four-digit codes, on the view that a counter salesman who can say the number out loud sells faster than one reading it off a screen. That single preference ended up shaping most of the master data design.
What was breaking
The old accounting package handled the books well; nobody was unhappy there. The break was in inventory. The books system was only reachable from head office, so when the warehouse 100 km away received goods in the evening, the entry landed centrally hours or a full day later. During that window nobody could answer the one question a distributor lives on: do we have it, and how many.
No live stock across warehouses
Three locations, no shared real-time position, so the sales team could not confirm availability to a customer on a call.
Manual, delayed goods receipt
Receipt at the remote warehouse depended on scanned copies and manual re-entry, with the delay baked in.
No barcode at all
Picking and stock counts were fully manual, which is slow and error-prone at this SKU count.
A new warehouse to run right
A new site was coming up that the promoter wanted run properly from day one: goods receipt notes, racking, pick lists, packing and delivery challans.
Prior volume gives a sense of scale: 8,664 sales vouchers in the previous financial year, plus purchases, receipts and payments on top.
The decision that de-risked the project
Every vendor had quoted a three-month data migration. The promoter was blunt: there is no sense squeezing a three-month migration into the middle of a running financial year. Two moves came out of that, and they are the heart of this project.
No historical migration
Rather than lifting years of vouchers, closing balances at 31 March are entered as opening balances on 1 April. Chart of accounts, opening balances, customer and vendor masters with GSTINs, opening stock by warehouse, and one month of transactions for testing. That is the whole payload.
Old system stays primary this year
Odoo runs the front end, sales to delivery to inventory to barcode picking, while the old package keeps the books. Delivery-based invoice data flows across by a controlled export carrying line items, amounts and GST, in a ten to fifteen minute cycle. A full accounting cutover waits for the clean year boundary.
The result is that the business got the thing it actually needed, live stock, in weeks, with the accounting cutover scheduled for the start of the next financial year.
Master data decisions worth copying
Inventory · Barcode
The internal reference is the part number and the barcode. No parallel numbering scheme, no mapping table, no OEM code to reconcile against.
Product master
Size, description, grade and finish were separate columns in the source sheets. All four collapse into a single product description, so a part reads as one clear line instead of four fields a user assembles mentally.
Sales
Principals control the price, so the list price is standard and only the discount moves. Discounts are held by customer and by product family, and the retailer price list is a controlled ceiling that no invoice is allowed to breach.
Purchase
Supplier sheets quote rates per hundred pieces. Every price column was divided by a hundred on import so the system holds a true per-unit rate. Skip that and every margin report after go-live is wrong by two orders of magnitude.
Accounting
HSN codes mapped at product category level, GST at the correct rate per item, and reporting grouped by product family rather than by warehouse.
Accounting
Each registered place of business has its own invoice number format, and one of the bank accounts is set as the preferred account printed on the invoice.
What went wrong, and how it was closed
A case study without this section is a brochure. Every issue below was found and closed before the live cutover, in a test database with client logins, never in production.
Duplicate stock entries
Some items landed two or three times during opening-stock upload, from a re-run after a partial failure and from counting happening at the same time. Fixed by freezing imports and reconciling line by line. The rule: never count and import in the same window.
Barcode label format
The first labels were an A4 sheet layout, but the floor runs a thermal printer that takes one label at a time. The report was rebuilt for a single label first, then extended.
Search that did not find
Valid part numbers returned nothing, traced to field mapping on import rather than the search. Mapping and a missing sales account were corrected before go-live, when backtracking was still possible.
Backup gap
The server snapshotted weekly. A daily copy to a client-owned cloud account was added on top.
The result
Operations run on Odoo across all three warehouses: product masters, categories, HSN and the price lists imported and verified, barcode generation and label printing working on the existing thermal printer, and a sales order to delivery to backorder flow the counter and accounts teams are trained on. Receivables and payables are reviewed from the ledgers, delivery-based invoice data flows to the books on the agreed cycle, and the full Odoo accounting cutover is scheduled for the start of the next financial year.
Running a distribution business blind on stock?
Ochre puts live multi-warehouse inventory, barcode operations and Indian compliance on one Odoo database, and phases the cutover so you move operations first and books second.

