
Warehouse Barcode Scanner (WMS)
Scan receipts, deliveries and internal transfers on a phone or handheld, with a log of every scan - the refused ones included. Community only.
Available for Odoo 16.0, Odoo 17.0, Odoo 18.0, Odoo 19.0. Technical name bambooforge_wms_scan.
Warehouse Barcode Scanner (WMS)
Odoo's Barcode app is Enterprise. Community ships the pieces — the barcode service, the camera scanner, the ZXing library — and no screen to use them on. This is that screen, and the rules behind it.
It starts at zero
Opening a session clears the quantities on the transfer and counts up from nothing.
That is the whole difference between a scanner and a rubber stamp. From 17.0 on, Odoo pre-fills the quantity on every move line from what it reserved, so a screen that simply shows those numbers reports the transfer complete before anybody has touched a box. What ends up on the transfer here is what somebody actually put in the box.
On 16.0 the field already starts at zero and nothing changes.
Scan where you are, what you hold, then what you pick
A location says where you are standing.
A lot or a serial says what you are holding.
A product goes on the right line — the one at your location, under the lot in your hand, that still has room.
The lot in your hand is spent as soon as it is used. A lot that stays selected is how the second pallet ends up under the first pallet's number.
A hardware scanner and the camera both work, on the same screen, on a phone or on a handheld.
What it refuses, out loud
A product that is not on this transfer.
A product that is already complete — unless somebody has turned on allow more than asked, and then it is taken and recorded as such, never taken quietly.
A tracked product with no lot in your hand, and a lot that belongs to a different product than the one just scanned.
A serial scanned twice. A serial number is one thing.
A package, which says so rather than going silent — the products inside it are what this screen counts.
A second person on a transfer somebody else is already scanning. Two people on one transfer count the same pallet twice, and neither of them finds out until it is short.
Every scan is written down, the refusals included
This is the half nobody builds and everybody needs.
When a transfer comes out two short, the question is never what the count is — it is what happened. A log of the successful scans answers "eighteen were scanned". This one answers "the picker scanned the pallet in aisle C four times and it was refused each time, because that pallet is not on this order."
Group the log by reason and you get the week's problems in one screen: the barcodes nobody can read, the products staged in the wrong aisle, the serials that came round twice.
The log is append-only. No group has write access to it at all; the scanning code writes it and nothing else does.
The screen cannot lie to the server
It sends a barcode string and nothing else — never a quantity, never a line. Everything that decides how much moves happens on the server, so a handheld somebody has opened the console on can still only do what a scanner can do, which is say "I saw this barcode".
Who can do what
Scanning › Scanner — scans transfers, sees their own sessions.
Scanning › Supervisor — sees every session and every scan including the refused ones. Cannot edit a scan: nobody can.
Nothing from Enterprise
Depends on stock and barcodes, both Community. The camera uses the ZXing library Odoo already ships. No Enterprise module is required or used, and no third-party JavaScript is bundled.
Screens



