| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/stock-logistics-workflow |
| GIT | |
| GIT | https://github.com/OCA/stock-logistics-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/stock-logistics-workflow/tree/18.0/stock_picking_batch_creation |
| VERSION | |
| VERSION | 1.5.1 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ACSONE SA/NV, BCIM |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ACSONE SA/NV, BCIM |
| COMMITTERS | |
| COMMITTERS | Jacques-Etienne Baudoux, Denis Roussel, Akim Juillerat, Thierry Ducrest, Weblate, OCA-git-bot, Iván Todorovich, oca-ci |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/stock-logistics-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:15 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/product-attribute: - product_dimension OCA/stock-logistics-warehouse: - stock_picking_volume OCA/stock-logistics-workflow: - stock_split_picking_dimension - stock_split_picking odoo/odoo: - delivery - sale - sales_team - base - base_setup - web - bus - web_tour - html_editor - account_payment - account - onboarding - product - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - payment - utm - stock_picking_batch - stock - barcodes_gs1_nomenclature - barcodes |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Odoo allows you to create batches of pickings by hand or automatically by specifying some criteria on the picking type definition. The approach in this addon is slightly different. It doesn't depend on the picking type and is triggered on demand by the user with the use of a specialized wizard. The creation of the batch is based on the following criteria: - A list of picking types to consider - A list of stock device types available to the operator to process the batch. - A maximum number of lines in the batch ## Stock device types A stock device type is a new concept that allows to define a type of device that can be used by an operator to process operations into the warehouse (like a forklift, a compartmentalized trolleys, ...). Depending on the device type, the resources available to complete the job will be different. A this stage, 3 main criteria are considered: - The maximum weight that can be handled by the device - The maximum volume that can be handled by the device - The number of bins/compartments available on the device In addition to these criteria, 2 others criteria can be defined that will be evaluated to select the appropriate device type at the start of the batch creation process if more than one device type is available: - A minimum picking volume to consider the device type, - A sequence to define the order in which the device type will be considered. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
make_picking_batch_form_view |
make.picking.batch.form (in stock_picking_batch_creation) | make.picking.batch | form | New |
stock_device_type_form_view |
stock.device.type.form (in stock_picking_batch_creation) | stock.device.type | form | New |
stock_device_type_tree_view |
stock.device.type.tree (in stock_picking_batch_creation) | stock.device.type | list | New |
stock_picking_batch_form_view |
stock.picking.batch.form (in stock_picking_batch_creation) | stock.picking.batch | field | Inherits stock_picking_batch.stock_picking_batch_form |
stock_picking_form_view |
stock.picking.form (in stock_picking_batch_creation) | stock.picking | xpath | Inherits stock.view_picking_form |
view_picking_tree_batch_view |
stock.picking.tree.batch (in stock_picking_batch_creation) | stock.picking | field | Inherits stock_picking_batch.vpicktree |
add_picking_list_in_error
Boolean
default=False
help="If not suitable device is provided for the pickings candidates, the error message will contain the list of the pickings names. In somecases, this list can be very long. That's why this option is uncheckedby default."
string='Add all the names of the pickings in error message'
group_pickings_by_partner
Boolean
default=False
help='All the pickings related to one partner will be put into the same bins'
string='Group pickings by partner'
maximum_number_of_preparation_lines
Integer
default=20
help='Set to 0 to disable.'
required=True
string='Maximum number of preparation lines for the batch.'
picking_locking_mode
Selection
default=<expr>
help='Define the way the system will search and lock the pickings. In the same time, picking already locked by another transaction will be skipped. This should reduce the risk of deadlocks if 2 users try to create a batch at the same time.'
selection=[('sql_for_update_skip_locked', 'SQL FOR UPDATE SKIP LOCKED')]
string='Picking locking mode'
picking_type_ids
Many2many → stock.picking.type
column1='batch_id'
column2='picking_type_id'
comodel_name='stock.picking.type'
help='Default list of eligible operation types when creating a batch transfer'
relation='make_picking_batch_picking_type_rel'
string='Default operation types'
restrict_to_same_partner
Boolean
default=False
help='Only the pickings with the same partner will be selected for this batch.'
string='Restrict to the same partner'
restrict_to_same_priority
Boolean
default=False
help='Only the pickings with the same priority will be selected for this batch.'
string='Restrict to the same priority'
split_picking_exceeding_limits
Boolean
default=False
help='If checked, the pickings exceeding the maximum number of lines, volume or weight of available devices will be split into multiple pickings to respect the limits. If unchecked, the pickings exceeding the limits will not be added to the batch. The limits are defined by the limits of the last available devices.'
string='Split pickings exceeding limits'
stock_device_type_ids
Many2many → stock.device.type
column1='batch_id'
column2='device_type_id'
comodel_name='stock.device.type'
help='Default list of eligible device types when creating a batch transfer'
relation='make_picking_batch_device_type_rel'
string='Default device types'
user_id
Many2one → res.users
default=<expr>
string='Responsible'
args: 'res.users'
create_batch(self) -> dict
max_volume
Float
help='Volume in default system volume unit of measure. Set to 0 to disable.'
string='Maximum total net volume for this device'
max_weight
Float
help='Weight in default system weight unit of measure. Set to 0 to disable.'
string='Maximum total net weight for this device'
min_volume
Float
help='Volume in default system volume unit of measure. Set to 0 to disable.'
string='Minimum total net volume for this device'
name
Char
required=True
nbr_bins
Integer
string='Number of compartments'
sequence
Integer
string='Priority'
split_mode
Selection
default='dimension'
required=True
selection=[('dimension', 'Dimension')]
user_max_volume
Float
compute='_compute_user_max_volume'
inverse='_inverse_user_max_volume'
readonly=False
string='Maximum total net volume for electing this device'
user_max_weight
Float
compute='_compute_user_max_weight'
inverse='_inverse_user_max_weight'
readonly=False
string='Maximum total net weight for electing this device'
user_min_volume
Float
compute='_compute_user_min_volume'
inverse='_inverse_user_min_volume'
readonly=False
string='Minimum total net volume for electing this device'
user_volume_uom_id
Many2one → uom.uom
default=<expr>
domain=<expr>
help='Packaging volume unit of measure'
required=True
string='Volume Units of Measure'
args: 'uom.uom'
user_volume_uom_name
Char
readonly=True
related='user_volume_uom_id.display_name'
required=True
string='Volume Unit of Measure label'
user_weight_uom_id
Many2one → uom.uom
compute=False
default=<expr>
domain=<expr>
help='Weight Unit of Measure'
string='Weight Units of Measure'
args: 'uom.uom'
user_weight_uom_name
Char
readonly=True
related='user_weight_uom_id.display_name'
string='Weight unit of measure label'
volume_per_bin
Float
compute='_compute_volume_per_bin'
string='Max volume per bin'
No public methods.
nbr_picking_lines
Integer
compute='_compute_nbr_picking_lines'
help='Indicates the picking lines ready for preparation.'
store=True
string='Number of lines'
picking_device_id
Many2one → stock.device.type
readonly=True
related='batch_id.picking_device_id'
string='Device for the picking'
args: 'stock.device.type'
No public methods.
batch_nbr_bins
Integer
help='Indicates the bins occupied by the pickings on the device.'
string='Number of compartments'
batch_nbr_lines
Integer
help='Indicates the picking lines ready for preparation.'
string='Number of picking lines'
batch_volume
Float
help='Indicates total volume of transfers included.'
string='Total volume'
batch_weight
Float
help='Indicates total weight of transfers included.'
string='Total weight'
picking_device_id
Many2one → stock.device.type
string='Device'
args: 'stock.device.type'
write(self, vals)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/wms |
| GIT | |
| GIT | https://github.com/OCA/wms.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/wms/tree/16.0/stock_picking_batch_creation |
| VERSION | |
| VERSION | 2.2.0 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ACSONE SA/NV, BCIM |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ACSONE SA/NV, BCIM |
| COMMITTERS | |
| COMMITTERS | Laurent Mignon (ACSONE), Weblate, OCA-git-bot, oca-ci |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/wms |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:59 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/product-attribute: - product_dimension OCA/stock-logistics-warehouse: - stock_picking_volume OCA/stock-logistics-workflow: - stock_split_picking_dimension - stock_split_picking odoo/odoo: - delivery - sale_stock - sale - sales_team - base - base_setup - web - bus - web_tour - account_payment - account - product - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - payment - utm - stock_account - stock - barcodes_gs1_nomenclature - barcodes - sale_management - stock_picking_batch |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
make_picking_batch_form_view |
make.picking.batch.form (in stock_picking_batch_creation) | make.picking.batch | form | New |
stock_device_type_form_view |
stock.device.type.form (in stock_picking_batch_creation) | stock.device.type | form | New |
stock_device_type_tree_view |
stock.device.type.tree (in stock_picking_batch_creation) | stock.device.type | tree | New |
stock_picking_batch_form_view |
stock.picking.batch.form (in stock_picking_batch_creation) | stock.picking.batch | field | Inherits stock_picking_batch.stock_picking_batch_form |
stock_picking_form_view |
stock.picking.form (in stock_picking_batch_creation) | stock.picking | xpath | Inherits stock.view_picking_form |
view_picking_tree_batch_view |
stock.picking.tree.batch (in stock_picking_batch_creation) | stock.picking | field | Inherits stock_picking_batch.view_picking_tree_batch |
add_picking_list_in_error
Boolean
default=False
help="If not suitable device is provided for the pickings candidates, the error message will contain the list of the pickings names. In somecases, this list can be very long. That's why this option is uncheckedby default."
string='Add all the names of the pickings in error message'
group_pickings_by_partner
Boolean
default=False
help='All the pickings related to one partner will be put into the same bins'
string='Group pickings by partner'
maximum_number_of_preparation_lines
Integer
default=20
help='Set to 0 to disable.'
required=True
string='Maximum number of preparation lines for the batch.'
picking_locking_mode
Selection
default=<expr>
help='Define the way the system will search and lock the pickings. In the same time, picking already locked by another transaction will be skipped. This should reduce the risk of deadlocks if 2 users try to create a batch at the same time.'
selection=[('sql_for_update_skip_locked', 'SQL FOR UPDATE SKIP LOCKED')]
string='Picking locking mode'
picking_type_ids
Many2many → stock.picking.type
column1='batch_id'
column2='picking_type_id'
comodel_name='stock.picking.type'
help='Default list of eligible operation types when creating a batch transfer'
relation='make_picking_batch_picking_type_rel'
string='Default operation types'
restrict_to_same_partner
Boolean
default=False
help='Only the pickings with the same partner will be selected for this batch.'
string='Restrict to the same partner'
restrict_to_same_priority
Boolean
default=False
help='Only the pickings with the same priority will be selected for this batch.'
string='Restrict to the same priority'
split_picking_exceeding_limits
Boolean
default=False
help='If checked, the pickings exceeding the maximum number of lines, volume or weight of available devices will be split into multiple pickings to respect the limits. If unchecked, the pickings exceeding the limits will not be added to the batch. The limits are defined by the limits of the last available devices.'
string='Split pickings exceeding limits'
stock_device_type_ids
Many2many → stock.device.type
column1='batch_id'
column2='device_type_id'
comodel_name='stock.device.type'
help='Default list of eligible device types when creating a batch transfer'
relation='make_picking_batch_device_type_rel'
string='Default device types'
user_id
Many2one → res.users
default=<expr>
string='Responsible'
args: 'res.users'
create_batch(self) -> dict
max_volume
Float
help='Volume in default system volume unit of measure. Set to 0 to disable.'
string='Maximum total net volume for this device'
max_weight
Float
help='Weight in default system weight unit of measure. Set to 0 to disable.'
string='Maximum total net weight for this device'
min_volume
Float
help='Volume in default system volume unit of measure. Set to 0 to disable.'
string='Minimum total net volume for this device'
name
Char
required=True
nbr_bins
Integer
string='Number of compartments'
sequence
Integer
string='Priority'
split_mode
Selection
default='dimension'
required=True
selection=[('dimension', 'Dimension')]
user_max_volume
Float
compute='_compute_user_max_volume'
inverse='_inverse_user_max_volume'
readonly=False
string='Maximum total net volume for electing this device'
user_max_weight
Float
compute='_compute_user_max_weight'
inverse='_inverse_user_max_weight'
readonly=False
string='Maximum total net weight for electing this device'
user_min_volume
Float
compute='_compute_user_min_volume'
inverse='_inverse_user_min_volume'
readonly=False
string='Minimum total net volume for electing this device'
user_volume_uom_id
Many2one → uom.uom
default=<expr>
domain=<expr>
help='Packaging volume unit of measure'
required=True
string='Volume Units of Measure'
args: 'uom.uom'
user_volume_uom_name
Char
readonly=True
related='user_volume_uom_id.display_name'
required=True
string='Volume Unit of Measure label'
user_weight_uom_id
Many2one → uom.uom
compute=False
default=<expr>
domain=<expr>
help='Weight Unit of Measure'
string='Weight Units of Measure'
args: 'uom.uom'
user_weight_uom_name
Char
readonly=True
related='user_weight_uom_id.display_name'
string='Weight unit of measure label'
volume_per_bin
Float
compute='_compute_volume_per_bin'
string='Max volume per bin'
No public methods.
nbr_picking_lines
Integer
compute='_compute_nbr_picking_lines'
help='Indicates the picking lines ready for preparation.'
store=True
string='Number of lines'
picking_device_id
Many2one → stock.device.type
readonly=True
related='batch_id.picking_device_id'
string='Device for the picking'
args: 'stock.device.type'
No public methods.
batch_nbr_bins
Integer
help='Indicates the bins occupied by the pickings on the device.'
string='Number of compartments'
batch_nbr_lines
Integer
help='Indicates the picking lines ready for preparation.'
string='Number of picking lines'
batch_volume
Float
help='Indicates total volume of transfers included.'
string='Total volume'
batch_weight
Float
help='Indicates total weight of transfers included.'
string='Total weight'
picking_device_id
Many2one → stock.device.type
string='Device'
args: 'stock.device.type'
write(self, vals)