A mobile scanning app for an Odoo warehouse
The stock Barcode module could not handle 900 picking lines per shift and broke on Wi-Fi loss. We built a Flutter app with an offline queue syncing over JSON-RPC.
Project facts
- Client
- Дистрибьютор автозапчастей
- Industry
- Дистрибуция
- Duration
- 7 недель
Why the standard module was not enough
The client has 12,000 SKUs and up to 900 picking lines per shift. Odoo's built-in scanning interface worked, but:
- when Wi-Fi dropped in the far aisles the operation failed and had to be restarted;
- every scan required a network round trip — up to 2–3 seconds on a weak signal;
- there was no batch picking across several orders at once;
- Zebra handhelds with a hardware scanner were awkward to use inside a browser.
What we built
A Flutter application
One codebase for Android handhelds (Zebra TC21/TC26) and regular smartphones. Hardware scan button support through DataWedge, large touch targets for gloved hands, sound and vibration feedback on every operation.
Offline queue
The key decision: the app keeps a local copy of the picking task and writes every action into a local SQLite queue. Synchronisation with Odoo runs in the background with retries and server-side conflict resolution. A picker physically cannot get stuck because of the network.
A custom Odoo module
To keep traffic minimal we wrote a module with a compact JSON-RPC API:
wave.picking— wave picking: orders are grouped into waves by warehouse zone;- one request returns the whole task including barcodes, locations and stock;
- batch confirmation with idempotency keys (a retry never creates duplicates);
- discrepancy reporting with a photo taken in the app.
Picking route
Line order is calculated from the real warehouse geometry — operators no longer walk end to end, they follow a single pass.
Results
- order picking is 2.4× faster;
- mis-picking errors dropped by 91% — shipping is impossible without scanning the item barcode;
- Wi-Fi loss no longer stops work;
- receiving, stock counting and internal transfers run in the same app.
Technical notes
Authentication uses a restricted Odoo service user plus a device token. Every operation is attributed to a real employee (PIN code at shift start), so Odoo always shows who did what.
Similar challenge?
Describe your process — we will estimate the scope and timeline.
Related publications
Odoo from scratch in food manufacturing: lots, shelf life, costing
The company grew without an ERP: orders in messengers, warehouse in a paper notebook. In 10 weeks we deployed Odoo 18 with manufacturing, lot tracking and full traceability.
Migrating from 1C:UPP to Odoo 17: a steel structures plant
We moved manufacturing accounting from 1C:UPP to Odoo 17 — master data, stock, BOMs and work in progress. One month of parallel run, zero data loss.
Custom accounting reports in Odoo: how we build them
Trial balance, reconciliation statements, purchase/sales ledgers and management P&L. Which Odoo mechanism fits each report type — and where not to invent your own.
