TIP: You can type at any time to perform a new search.
Stock batch picking
stock_batch_picking · OCA/stock-logistics-workflow
Security findings
Migration considerations
stock_batch_picking_form— For a target of Odoo 17.0+: view 'stock_batch_picking_form' uses `attrs=`/`states=`, which are no longer supported. Convert modifiers to direct Python boolean expressions in `invisible`/`readonly`/`required`; preserve the original AND/OR logic. migration-view-attrs-states · sourceview_create_batch_picking— For a target of Odoo 17.0+: view 'view_create_batch_picking' uses `attrs=`/`states=`, which are no longer supported. Convert modifiers to direct Python boolean expressions in `invisible`/`readonly`/`required`; preserve the original AND/OR logic. migration-view-attrs-states · sourcestock_batch_picking_tree— View 'stock_batch_picking_tree' is defined with a `<tree>` root tag: renamed to `<list>` in Odoo 18.0. migration-view-tree-tag · source
Migration review checklist, not a compatibility verdict. No target version is selected: apply version-specific advice only when migrating to that version or later.
- Repository
- OCA/stock-logistics-workflow · module folder · Try on Runboat
- Module version
- 1.4.0
- Category
- Inventory
- Folder size
- 0.44 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/stock-logistics-workflow
- Last tracking update
- 2026-10-03 22:30:48
- Authors
- Camptocamp, Odoo Community Association (OCA), Tecnativa
- Maintainers
- Camptocamp, Odoo Community Association (OCA), Tecnativa
- Committers
- Pedro M. Baeza, Isaac Gallart Bochons, Weblate, OCA Transbot, Sergio Teruel, OCA-git-bot, oca-travis
Code Analysis
Views touched (9)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_normal_form_view |
product.normal.form | product.product | form | Inherits product.product_normal_form_view |
report_batch_picking |
report_batch_picking | ir.ui.view | qweb | New |
stock_batch_picking_form |
stock.batch.picking.form | stock.batch.picking | form | New |
stock_batch_picking_search |
batch.picking.search | stock.batch.picking | search | New |
stock_batch_picking_tree |
stock.batch.picking.tree | stock.batch.picking | tree | New |
view_create_batch_picking |
batch_picking_create_form | stock.batch.picking.creator | form | New |
view_picking_form |
stock.picking.form.batch | stock.picking | form | Inherits stock.view_picking_form |
view_picking_internal_search |
stock.picking.search.batch_picking | stock.picking | search | Inherits stock.view_picking_internal_search |
view_warehouse |
stock.warehouse | Inherits stock.view_warehouse |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (7)
New fields (1)
-
description_warehouseTexttranslate=True args: 'Warehouse Description'
No public methods.
New fields (0)
No new fields.
Public methods (8)-
get_report_values(self, docids, data=None)@api.model -
key_level_0(self, operation)@api.model -
key_level_1(self, operation)@api.model -
new_level_0(self, operation)@api.model -
new_level_1(self, operation)@api.model -
sort_level_0(self, rec_list)@api.model -
sort_level_1(self, rec_list)@api.model -
update_level_1(self, group_dict, operation)@api.model
New fields (11)
-
active_picking_idsOne2many → stock.pickingdomain=[('state', 'not in', ('cancel', 'done'))]readonly=True args: 'stock.picking', 'batch_picking_id', 'Pickings' -
dateDatedefault=fields.Date.context_todayhelp='date on which the batch picking is to be processed'index=Truereadonly=Truerequired=Truestates={'draft': [('readonly', False)], 'assigned': [('readonly', False)]} args: 'Date' -
entire_package_detail_idsMany2many → stock.quant.packagecomodel_name='stock.quant.package'compute='_compute_entire_package_ids'help='Those are the entire packages of a picking shown in the view of detailed operations' -
entire_package_idsMany2many → stock.quant.packagecomodel_name='stock.quant.package'compute='_compute_entire_package_ids'help='Those are the entire packages of a picking shown in the view of operations' -
move_line_idsMany2many → stock.move.linecompute='_compute_move_line_ids'inverse=<expr>string='Related pack operations' args: 'stock.move.line' -
move_linesMany2many → stock.movecompute='_compute_move_lines'readonly=Truestring='Related stock moves' args: 'stock.move' -
nameCharcopy=Falsedefault=<expr>index=Truerequired=Truestates={'draft': [('readonly', False)]}unique=True args: 'Name' -
notesTexthelp='free form remarks' args: 'Notes' -
picker_idMany2one → res.usershelp='the user to which the pickings are assigned'index=Truereadonly=Truestates={'draft': [('readonly', False)], 'assigned': [('readonly', False)]} args: 'res.users', 'Picker' -
picking_idsOne2many → stock.pickinghelp='List of picking managed by this batch.'readonly=Truestates={'draft': [('readonly', False)]} args: 'stock.picking', 'batch_picking_id', 'Pickings' -
stateSelectioncopy=Falsedefault='draft'help='the state of the batch picking. Workflow is draft -> assigned -> done or cancel'index=Truereadonly=Truestring='State' args: [('draft', 'Draft'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')]
-
action_assign(self)@api.multiCheck if batches pickings are available. -
action_cancel(self)@api.multiCall action_cancel for all batches pickings and set batches states to cancel too. -
action_transfer(self)@api.multiMake the transfer for all active pickings in these batches and set state to done all picking are done. -
action_view_stock_picking(self)@api.multiThis function returns an action that display existing pickings of given batch picking. -
get_not_empties(self)Return all batches in this recordset for which picking_ids is not empty. :raise UserError: If all batches are empty. -
remove_undone_pickings(self)@api.multiRemove of this batch all pickings which state is not done / cancel. -
verify_state(self, expected_state=None)Check if batches states must be changed based on pickings states. If all pickings are canceled, batch must be canceled. If all pickings are canceled or done, batch must be done. If all pickings are canceled or done or *expected_state*, batch must be *expected_state*. :return: True if batches states has been changed.
New fields (6)
-
batch_by_groupBooleanstring='Create batch pickings grouped by fields' -
dateDatedefault=fields.Date.context_todayhelp='Date on which the batch picking is to be processed'index=Truerequired=True args: 'Date' -
group_field_idsOne2many → stock.batch.picking.creator.group.fieldcomodel_name='stock.batch.picking.creator.group.field'help='If set any, multiple batch picking will be created, one per group field'inverse_name='batch_picking_creator_id'string='Group by field' -
nameChardefault=<expr>help='Name of the batch picking'required=True args: 'Name' -
notesTexthelp='free form remarks' args: 'Notes' -
picker_idMany2one → res.usersdefault=<expr>help='The user to which the pickings are assigned'string='Picker' args: 'res.users'
-
action_create_batch(self)@api.multiCreate a batch picking with selected pickings after having checked that they are not already in another batch or done/cancel. -
action_view_batch_picking(self, batch_pickings)@api.multi -
create_multiple_batch(self, domain)Create n batch pickings by grouped fields selected -
create_simple_batch(self, domain)Create one batch picking with all pickings -
default_get(self, fields)@api.modelSet last grouped fields used that are stored in config parameters -
load_store_fields(self) -
onchange_batch_by_group(self)@api.onchange('batch_by_group')
New fields (3)
-
batch_picking_creator_idMany2one → stock.batch.picking.creatorcomodel_name='stock.batch.picking.creator'ondelete='cascade'required=True -
field_idMany2one → ir.model.fieldscomodel_name='ir.model.fields'domain=[('model', '=', 'stock.picking'), ('store', '=', True)]required=Truestring='Field to group' -
sequenceIntegerhelp='Group by picking field'
No public methods.
New fields (1)
-
batch_picking_idMany2one → stock.batch.pickingcomodel_name='stock.batch.picking'copy=Falsedomain="[('state', '=', 'draft')]"help='In which batch picking this picking will be processed.'string='Batch'
-
action_assign(self)@api.multiIn addition to what the method in the parent class does, Changed batches states to assigned if all picking are assigned. -
action_cancel(self)@api.multiIn addition to what the method in the parent class does, cancel the batches for which all pickings are cancelled -
action_done(self)@api.multiIn addition to what the method in the parent class does, Changed batches states to done if all picking are done. -
force_transfer(self, force_qty=True)Do the picking transfer (by calling action_done) If *force_qty* is True, force the transfer for all product_uom_qty when qty_done is 0. Otherwise, process only pack operation with qty_done. If a picking has no qty_done filled, we released it from his batch
New fields (1)
-
default_picker_idMany2one → res.usershelp='the user to which the batch pickings are assigned by default'index=True args: 'res.users', 'Default Picker'
No public methods.
Loading…
Loading…