OdooWiki OCA HUB

Barcode Purchase

barcode_purchase folder_open OCA/barcode-interface open_in_new
Inventory/Purchase License: AGPL-3

Create purchase orders directly from the Barcode scanner app.

The operator picks a vendor, a destination location and a buyer, then scans or adds the products to order (with a GS1 parser installed, a GS1 label also gives its lot/serial and piece count) and confirms. The module creates a purchase.order and, when asked, confirms it — which raises the incoming picking — so a purchase can be raised on the warehouse floor without opening the back office. The server does it all in one call: a failure leaves no half-made order behind.

This is a feature module on top of barcode_scanner: it registers its own screens and home-screen tile into the scanner core without patching it, so you install only what you need.

auto_awesome What this module does

AI-generated from the code · Odoo 18.0

Lets warehouse staff create and confirm purchase orders from the Odoo barcode scanner app: pick a vendor, destination and buyer, scan products (with lot/serial and quantity from GS1 labels), then save a draft or confirm the order to raise the receipt.

This module adds a "Purchase Orders" tile to the barcode scanner home screen. Tapping it opens a purchase screen where the operator builds an order without leaving the scanner.

On that screen the operator chooses: - a vendor, from the list of partners flagged as suppliers, or by scanning a partner barcode; - a destination location, limited to the receiving locations of incoming operations, or by scanning a location barcode; - a buyer, picked from internal users; - an optional vendor reference.

Products are scanned or picked from a list of goods that can be purchased. When a GS1 label is read, its lot or serial number and piece count are carried onto the line; quantities are converted into the product's purchase unit. Scanning the same product and lot again adds to the existing line, while a serial number is only listed once. The screen shows the unit price the vendor's price list would give each line, and the operator can type a price instead.

A "validate automatically" box is ticked by default: the order is created and confirmed in one server call, which raises the incoming receipt. Unticking it saves a draft request for quotation. Everything happens in a single transaction, so a failure leaves no half-made order.

The lots read from labels are stored on the order lines and written onto the receipt when it is created; any lot that could not be placed, or any tracked product scanned without a lot, is reported to the operator to complete by hand. If the order needs approval, the scanner says so instead of confirming. The purchase order form gains two optional columns: the lot/serial read and the final location.

Depends on

barcode_scannerpurchase_stock
Models and fields (2)
  • purchase.order · extends an existing model
  • purchase.order.line · extends an existing modelbarcode_lot_name (Lot/Serial Read)

Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 1 confirmed, 8 with no information of 9 versions.

Sources · Odoo 18.0

Confirmed on 2026-11-03 in branch 18.0 of OCA/barcode-interface.

terminal Installation and usage

OCA documentation · Odoo 18.0

From the Barcode app home screen, tap Purchase Orders.

Raise an order

  • Pick the vendor. Scanning a partner barcode selects it straight away; otherwise choose one from the searchable list of suppliers.
  • Optionally set the destination location (the destinations of the receipt operations are offered, and scanning a location picks it), the buyer (Odoo's native purchase-order responsible user) and a vendor reference.
  • Add the products. Each line is ordered in the product's purchase unit, shown under its quantity. Scanning a product adds one purchase unit. With a GS1 parser installed, a GS1 label also gives its lot/serial and its piece count (AI 30/37), which is converted from the product's unit into the purchase unit (24 pieces of a product bought by the dozen are 2 Dozens); a net weight on the label is not taken as the quantity. Scanning the same product and lot again adds to its line; a serial number stands for a single unit and is listed once. You can also tap "+" to search and add a product, and edit the quantity on each line. Only goods that can be purchased are offered.
  • The price shown on each line is the one the order will take, as in the back office: the vendor's price, in the purchase unit and the order's currency. Type a price to use another one instead, 0 included.
  • Tap Confirm Order to create and confirm the purchase order, or Save Draft to create it without confirming.

Destination and lots

The destination and the lots read are kept on the order, so they hold however the order is confirmed: from the scanner, or later in the back office (a draft, or an order approved in two steps). The destination picks the receipt operation of its warehouse and becomes the final location of each line, which the stock moves follow: straight into it with a reception in one step, through the input and the steps after it with a reception in several. The lots read are kept on their lines (Lot/Serial Read) and written on the receipt when it is created.

Automatic validation

With Validate automatically ticked, Confirm Order confirms the order on create, which raises the receipt. Save Draft always keeps it as a draft.

A lot/serial-tracked product does not hold the order back: only a GS1 label carries a lot, and a vendor's lot is usually unknown until the goods turn up, so the order is confirmed either way and the message names the products whose lot/serial still has to be entered on the receipt.

That message names the order and the state it ended in, because a confirmation does not always confirm: with two-step validation the order lands on To Approve and raises no receipt until somebody approves it in the back office.

Creating and confirming a purchase order requires the Purchase user rights, as in the back office.

Reading more from a label

The quantity a scan stands for comes from `PurchaseScreen.scannedQuantity(scan, product)`, in the purchase unit: the pieces the label counts, converted, or one purchase unit. A module that reads more from a label (a GS1 net weight, say) can patch it to convert that into the purchase unit.

No verified information in OCA: Installation, Configuration.

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.