Stock Checkout Synchronization

stock_checkout_sync
REPOSITORY
REPOSITORYOCA/stock-logistics-workflow
GIT
GIThttps://github.com/OCA/stock-logistics-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-workflow/tree/18.0/stock_checkout_sync
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSJacques-Etienne Baudoux, Sébastien Alix, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:15
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/stock-logistics-warehouse:
    - stock_move_common_dest
odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Regroup moves at the same location when they reach an operation type.

Example of use case:

- We use several operation types for Picking Transfers (Pick Shelves,
  Pick Reserve)
- We use several operation types for Packing (Pack, Pack Post)
- The "Checkout Synchronization" flag is activated on the 2 Packing
  operation types
- The Packing can occur in several areas (Packing/PACK1, Packing/PACK2,
  Packing/PACK3)

Based on these assumptions, we have these pickings, all for the same
order:

- SHELF001, pick 2 goods in the shelves
- RESER001, pick 2 goods in the reserve
- PACK001, pack 3 of the goods (2 from SHELF001, 1 from RESER001)
- PPOST001, pack the remaining good of the reserve

The operator uses the button "Checkout Sync" on a pick transfer, for
instance SHELF001, and select Packing/PACK2 as destination. We want all
the lines that reach PACK001 to be updated with:

- The move lines (except the one that goes to PPOST001) must now reach
  Packing/PACK2
- The same moves' destination must reach Packing/PACK2 as well: we
  constrain the user to move the goods there as we want to move all the
  goods at the same place for the packing.
- As the moves' destinations are updated to the same packing location,
  new move lines will have the correct destination as well

![](../static/description/sync-assistant.png)

Notes:

Works best when used with `stock_available_to_promise_release`:

- When using the mentioned module, we assume that we release moves
  (which creates the whole chain of moves) only when we know that we
  have the quantities in stock (otherwise the module splits the
  delivery). Any exception (which is now rare when you release this
  ways) that would lead to a backorder is handled by canceling the
  remaining line.
- When the module is not used, then the destination of the backorders
  may be changed at the same time

Compatible with `stock_dynamic_routing`.

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
view_picking_form stock.picking.form stock.picking button Inherits stock.view_picking_form
view_picking_type_form_inherit Operation Types Inherit stock.picking.type group Inherits stock.view_picking_type_form
view_stock_move_checkout_sync stock.move.checkout.sync.form stock.move.checkout.sync form New
Models touched (4)

New fields (0)

No new fields.

Public methods (1)
  • sync_checkout_destination(self, location)

New fields (8)
  • dest_picking_id Many2one → stock.picking
    comodel_name='stock.picking' help='Destination operation for these moves.' readonly=True required=True
  • done_dest_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' relation='stock_move_checkout_sync_stock_picking_done_dest_rel'
  • location_id Many2one → stock.location
    comodel_name='stock.location' help='Destination location where all the moves will be sent.'
  • move_ids Many2many → stock.move
    comodel_name='stock.move' readonly=True
  • picking_ids Many2many → stock.picking
    comodel_name='stock.picking' required=True
  • picking_type_location_id Many2one
    readonly=True related='dest_picking_id.picking_type_id.default_location_src_id'
  • remaining_help Html
    readonly=True
  • show_skip_button Boolean
Public methods (2)
  • skip_to_next(self)
  • sync(self)

New fields (1)
  • can_sync_to_checkout Boolean
    compute='_compute_can_sync_to_checkout' help='Technical field. Indicates if the button to synchronize the destination towards a checkout location is visible.'
Public methods (1)
  • open_checkout_sync_wizard(self, done_picking_types=None)

New fields (1)
  • checkout_sync Boolean
    help='When checked, a button on transfers allow users to select a single location for all moves reaching this operation type. On selection, all the move lines are updated with the same destination.' string='Checkout Synchronization'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/wms
GIT
GIThttps://github.com/OCA/wms.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/wms/tree/14.0/stock_checkout_sync
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSoca-travis, Weblate, OCA-git-bot, Simone Orsi, Hai Lang
WEBSITE
WEBSITEhttps://github.com/OCA/wms
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:12
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/stock-logistics-warehouse:
    - stock_move_common_dest
odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
view_picking_form stock.picking.form stock.picking button Inherits stock.view_picking_form
view_picking_type_form_inherit Operation Types Inherit stock.picking.type field Inherits stock.view_picking_type_form
view_stock_move_checkout_sync stock.move.checkout.sync.form stock.move.checkout.sync form New
Models touched (4)

New fields (0)

No new fields.

Public methods (1)
  • sync_checkout_destination(self, location)

New fields (8)
  • dest_picking_id Many2one → stock.picking
    comodel_name='stock.picking' help='Destination operation for these moves.' readonly=True required=True
  • done_dest_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' relation='stock_move_checkout_sync_stock_picking_done_dest_rel'
  • location_id Many2one → stock.location
    comodel_name='stock.location' help='Destination location where all the moves will be sent.'
  • move_ids Many2many → stock.move
    comodel_name='stock.move' readonly=True
  • picking_ids Many2many → stock.picking
    comodel_name='stock.picking' required=True
  • picking_type_location_id Many2one
    readonly=True related='dest_picking_id.picking_type_id.default_location_src_id'
  • remaining_help Html
    readonly=True
  • show_skip_button Boolean
    default=False
Public methods (2)
  • skip_to_next(self)
  • sync(self)

New fields (1)
  • can_sync_to_checkout Boolean
    compute='_compute_can_sync_to_checkout' help='Technical field. Indicates if the button to synchronize the destination towards a checkout location is visible.'
Public methods (1)
  • open_checkout_sync_wizard(self, done_picking_types=None)

New fields (1)
  • checkout_sync Boolean
    help='When checked, a button on transfers allow users to select a single location for all moves reaching this operation type. On selection, all the move lines are updated with the same destination.' string='Checkout Synchronization'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/wms
GIT
GIThttps://github.com/OCA/wms.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/wms/tree/13.0/stock_checkout_sync
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSGuewen Baconnier, OCA Transbot, oca-travis, Weblate, OCA-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/wms
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/stock-logistics-warehouse:
    - stock_move_common_dest
odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
view_picking_form stock.picking.form stock.picking button Inherits stock.view_picking_form
view_picking_type_form_inherit Operation Types Inherit stock.picking.type field Inherits stock.view_picking_type_form
view_stock_move_checkout_sync stock.move.checkout.sync.form stock.move.checkout.sync form New
Models touched (4)

New fields (0)

No new fields.

Public methods (1)
  • sync_checkout_destination(self, location)

New fields (8)
  • dest_picking_id Many2one → stock.picking
    comodel_name='stock.picking' help='Destination operation for these moves.' readonly=True required=True
  • done_dest_picking_ids Many2many → stock.picking
    comodel_name='stock.picking' relation='stock_move_checkout_sync_stock_picking_done_dest_rel'
  • location_id Many2one → stock.location
    comodel_name='stock.location' help='Destination location where all the moves will be sent.'
  • move_ids Many2many → stock.move
    comodel_name='stock.move' readonly=True
  • picking_ids Many2many → stock.picking
    comodel_name='stock.picking' required=True
  • picking_type_location_id Many2one
    readonly=True related='dest_picking_id.picking_type_id.default_location_src_id'
  • remaining_help Html
    readonly=True
  • show_skip_button Boolean
    default=False
Public methods (2)
  • skip_to_next(self)
  • sync(self)

New fields (1)
  • can_sync_to_checkout Boolean
    compute='_compute_can_sync_to_checkout' help='Technical field. Indicates if the button to synchronize the destination towards a checkout location is visible.'
Public methods (1)
  • open_checkout_sync_wizard(self, done_picking_types=None)

New fields (1)
  • checkout_sync Boolean
    help='When checked, a button on transfers allow users to select a single location for all moves reaching this operation type. On selection, all the move lines are updated with the same destination.' string='Checkout Synchronization'
Public methods (0)

No public methods.