Shopfloor is a barcode scanner application for internal warehouse operations.
The application supports scenarios, to relate to Operation Types:
- Cluster Picking
- Zone Picking
- Checkout/Packing
- Delivery
- Location Content Transfer
- Single Pack Transfer
This module provides REST APIs to support the scenarios. It needs a frontend to consume the backend APIs and provide screens for users on barcode devices. A default front-end application is provided by shopfloor_mobile.
Note: if you want to enable a new scenario on an existing application, you must trigger the registry sync on the shopfloor.app in a post_init_hook or a post-migrate script. See an example here.
WARNING v18
Scenario will be migrated one by one.
Current availability status:
- [ ] checkout
- [ ] cluster picking
- [ ] zone picking
- [ ] delivery
- [ ] location content transfer
- [ ] single pack transfer (to be discarded in favor of shopfloor_single_product_transfer)
- [ ] zone picking
auto_awesome What this module does
AI-generated from the code · Odoo 18.0Backend for a barcode-scanner warehouse app: it lets you configure operation menus and scenarios, scan barcodes to find products, locations, packages and transfers, and process picking, packing, unloading and stock corrections from a handheld device.
This module is the engine behind a barcode-scanner warehouse application. It does not add a normal Odoo screen for operators; instead it exposes services that a mobile front-end consumes, and it adds configuration and extra fields to existing Inventory records.
What users configure: - On each Shopfloor menu you choose the operation types it applies to and switch options on or off: allow creating new moves, process quantities reserved by other operations, ignore transfers when no put-away location is found, treat scanned packaging as pre-packaged, pick and pack at the same time, unload packages at destination, collect several moves on one destination package, require a destination package, force reservation, show "Get Work" at start, do not pre-fill quantities, allow alternative destinations or destination packages, allow returns, auto-post lines, and allow processing more than the planned quantity. - Some options are only offered when the scenario supports them, and incompatible combinations are blocked with an error (for example "pick and pack at the same time" cannot be combined with "unload package at destination"). - You can define how move lines are searched and sorted, including custom Python code, which is checked for syntax before saving.
What it changes in Inventory: - Operation types get a "Zero Check" option and a list of related Shopfloor menus. - Locations get a picking sequence used to order the operator's path, plus a computed list of reserved move lines and a check telling whether a location will be empty once picked quantities are processed. - Move lines get tracking fields (unloaded, checkout done, operator, created by the app), a priority/postpone mechanism, and a package replacement action. - Moves get a computed picked quantity and helpers to split unavailable quantities or extract and validate part of a transfer, creating a backorder.
The services also handle stock corrections and inventory adjustments, unreserving moves, creating return pickings, and building delivery packages validated against the carrier.
Depends on
Required by other modules
Models and fields (30)
- stock.move · extends an existing modelquantity_picked
- stock.quant · extends an existing model
- shopfloor.app · extends an existing modelcategory
- stock.picking · extends an existing modeltotal_weight, bulk_line_count, move_line_count, package_level_count, is_shopfloor_created
- shopfloor.menu · extends an existing modelallow_return (Allow create returns), allow_get_work (Show Get Work on start), auto_post_line (Automatically post line), no_prefill_qty (Do not pre-fill quantity to pick), picking_type_ids (Operation Types), allow_move_create (Allow Move Creation), pick_pack_same_time (Pick and pack at the same time), allow_force_reservation (Force stock reservation), disable_full_bin_action (Disable full bin action), move_create_is_possible, allow_return_is_possible, allow_prepackaged_product (Process as pre-packaged), multiple_move_single_pack (Collect multiple moves on a same destination package), allow_get_work_is_possible, auto_post_line_is_possible, no_prefill_qty_is_possible, allow_unreserve_other_moves (Allow to process reserved quantities), ignore_no_putaway_available (Ignore transfers when no put-away is available), move_line_search_sort_order (Sort method used when searching move lines), require_destination_package (Destination package required), scan_location_or_pack_first (Restrict scannable barcode at work selection), show_oneline_package_content (Show one-line package content), allow_alternative_destination (Allow to scan alternative destination locations), unload_package_at_destination (Unload package at destination), allow_quantity_exceeding_demand, move_line_processing_sort_order (Sort method used when processing move lines), pick_pack_same_time_is_possible, prepackaged_product_is_possible, unreserve_other_moves_is_possible, move_line_search_additional_domain (Additional domain used when searching move lines)
- stock.location · extends an existing modelsource_move_line_ids, reserved_move_line_ids, shopfloor_picking_sequence
- stock.move.line · new modelpackage_id, picking_id, location_id, date_planned, result_package_id, shopfloor_user_id, shopfloor_unloaded, is_shopfloor_created, shopfloor_checkout_done
- shopfloor.checkout · new model
- shopfloor.delivery · new model
- stock.picking.type · extends an existing modelshopfloor_menu_ids (Shopfloor Menus), shopfloor_zero_check (Activate Zero Check)
- stock.package_level · new modelpackage_id, picking_id
- stock.picking.batch · extends an existing modeltotal_weight, picking_count, move_line_count
- stock.quant.package · extends an existing modelmove_line_ids, shopfloor_weight (Shopfloor weight (kg)), planned_move_line_ids, reserved_move_line_ids
- shopfloor.data.action · extends an existing model
- base.shopfloor.process · extends an existing model
- base.shopfloor.service · extends an existing model
- shopfloor.service.menu · extends an existing model
- shopfloor.stock.action · new model
- shopfloor.zone.picking · new model
- shopfloor.picking.batch · new model
- shopfloor.schema.action · extends an existing model
- shopfloor.search.action · extends an existing model
- shopfloor.barcode.parser · new model
- shopfloor.message.action · extends an existing model
- shopfloor.packing.action · new model
- shopfloor.cluster.picking · new model
- shopfloor.inventory.action · new model
- shopfloor.savepoint.action · new model
- shopfloor.scan.lot.handler · new model
- shopfloor.search.move.line · new model
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-03Confirmation status: 4 confirmed, 5 with no information of 9 versions.
Sources · Odoo 16.0
Confirmed on 2026-11-03 in branch 16.0 of OCA/wms.
terminal Installation and usage
OCA documentation · Odoo 18.0Usage
Source · Odoo 18.0An API key is created in the Demo data (for development), using the Demo user. The key to use in the HTTP header API-KEY is: 72B044F7AC780DAC
Curl example:
curl -X POST "http://localhost:8069/shopfloor/user/menu" -H "accept: /" -H "Content-Type: application/json" -H "API-KEY: 72B044F7AC780DAC"
No verified information in OCA: Installation, Configuration.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
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.