OdooWiki OCA HUB
Inventory License: AGPL-3

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.0

Adds the backend for a barcode-scanner warehouse app: it lets you configure Shopfloor menus and scenarios, scan products, packages, lots and locations, and process pickings, packing, inventory adjustments and returns from a handheld device.

This module is the server side of a barcode scanner application for warehouse operations. It does not add a new screen by itself; instead it extends the Shopfloor configuration and stock models so that a mobile front-end can drive picking, packing, inventory and transfer workflows.

On the configuration side, each Shopfloor menu can be linked to one or more operation types and toggled with options such as allowing move creation, processing reserved quantities, ignoring transfers when no put-away is available, processing pre-packaged products, picking and packing at the same time, unloading packages at destination, collecting several moves on one destination package, forcing reservation, showing 'Get Work', not pre-filling quantities, restricting scannable barcodes, allowing alternative destinations or destination packages, allowing returns, automatically posting lines, and requiring a destination package. Incompatible combinations are blocked with clear errors, and custom sort code is validated.

On the stock side, locations get a picking sequence used to order the operator's path, plus helpers to know if a location will be empty and to bypass reservation when forced. Moves gain a picked-quantity total and helpers to split unavailable quantities or extract moves into a separate transfer and validate it. Move lines gain shopfloor flags (unloaded, checkout done, user, shopfloor-created), a planned date, indexes, package replacement and a postpone action that resets the picked quantity. Operation types gain a zero-check option and a link to the Shopfloor menus that use them.

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-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 4 confirmed, 5 with no information of 9 versions.

Sources · Odoo 18.0

Confirmed on 2026-11-03 in branch 18.0 of OCA/stock-logistics-shopfloor.

terminal Installation and usage

OCA documentation · Odoo 18.0

An 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.

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.