| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/stock-logistics-putaway |
| GIT | |
| GIT | https://github.com/OCA/stock-logistics-putaway.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/stock-logistics-putaway/tree/18.0/stock_storage_type |
| VERSION | |
| VERSION | 1.6.2 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, BCIM |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, BCIM |
| COMMITTERS | |
| COMMITTERS | Alexandre Fayolle, Jacques-Etienne Baudoux, Sébastien Alix, Thierry Ducrest, Weblate, OCA-git-bot, oca-ci, Mmequignon |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/stock-logistics-putaway |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:19 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/product-attribute: - product_packaging_dimension - product_logistics_uom OCA/server-tools: - base_partition OCA/stock-logistics-putaway: - stock_putaway_hook OCA/stock-logistics-tracking: - stock_quant_package_dimension - stock_quant_package_product_packaging OCA/stock-logistics-warehouse: - stock_location_fill_state - stock_location_pending_move - stock_storage_category_capacity_name odoo/odoo: - stock - product - base - 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 | This module extends package types Odoo feature in order to better manage stock moves with packages according to the packaging and stock location properties (like height, weight or any customized conditions). Moreover, this module implements "package type put-away strategy" in order to compute a put-away location using package types. The standard put-away strategy is applied *before* the package type put-away strategy as the former relies on product or product category and the latter relies on stock packages. In other words, when a move is reserved, Odoo standard put-away strategy will be applied to compute a new destination on the stock move lines, according to the product. After this first "put-away computation", the "package type" put-away strategy is applied, if the reserved quant is linked to a package defining a package type. Storage locations linked to the package type are processed sequentially, if said storage location is a child of the move line's destination location (i.e either the put-away location or the move's destination location). For each location, their package type strategy is applied as well as the restrictions defined on the storage category. If no suitable location is found, the next location in the sequence will be searched and so on. For the package type putaway strategy "None", the location is considered as is. For the "ordered children" strategy, children locations are sorted by first by max height which is a physical constraint to respect, then pack putaway sequence which allow to favor for example some level or corridor, and finally by name. At the end, if found location is not the same as the original destination location, the putaway strategies are applied (e.g.: A "None" pack putaway strategy is set on computed location and a putaway rule exists on that one). |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
package_level_form_view_inherit |
Package Level Inherit (in stock_storage_type) | stock.package_level | field | Inherits stock.package_level_form_view |
package_level_tree_view_picking_inherit |
Package Level Tree Picking Inherit (in stock_storage_type) | stock.package_level | field | Inherits stock.package_level_tree_view_picking |
package_storage_location_tree_view |
package.storage.location.list.view | stock.storage.location.sequence | list | New |
product_template_form_view_procurement_button_inherit |
product.template_procurement.inherit | product.template | field | Inherits stock.product_template_form_view_procurement_button |
stock_package_type_form |
stock.package.type.form (in stock_storage_type) | stock.package.type | div | Inherits stock.stock_package_type_form |
stock_storage_category_allow_new_product_cond_view_form |
stock.storage.category.allow_new_product.cond.form | stock.storage.category.allow_new_product.cond | form | New |
stock_storage_category_form |
stock.storage.category.form (in stock_storage_type) | stock.storage.category | xpath | Inherits stock.stock_storage_category_form |
stock_storage_location_sequence_cond_form_view |
stock.storage.location.sequence.cond.form (in stock_storage_type) | stock.storage.location.sequence.cond | form | New |
stock_storage_location_sequence_cond_tree_view |
stock.storage.location.sequence.cond.tree (in stock_storage_type) | stock.storage.location.sequence.cond | list | New |
view_location_form_inherit |
stock.location.form.inherit (in stock_storage_type) | stock.location | field | Inherits stock.view_location_form |
view_location_tree_inherit |
stock.location.tree.inherit (in stock_storage_type) | stock.location | field | Inherits stock.view_location_tree2 |
computed_storage_capacity_ids
One2many
related='computed_storage_category_id.capacity_ids'
computed_storage_category_id
Many2one → stock.storage.category
comodel_name='stock.storage.category'
compute='_compute_computed_storage_category_id'
help='This represents the Storage Category that will be used. It depends either on the category set on the location or on one of its parent.'
index='btree_not_null'
recursive=True
store=True
string='Computed Storage Category'
do_not_mix_lots
Boolean
compute='_compute_do_not_mix_lots'
recursive=True
store=True
do_not_mix_products
Boolean
compute='_compute_do_not_mix_products'
recursive=True
store=True
has_potential_lot_mix_exception
Boolean
compute='_compute_has_potential_lot_mix_exception'
help='This will represent a situation where several moves are pointingto the location for different product lots and the location doesnot allow mixed lots.'
index=True
store=True
has_potential_product_mix_exception
Boolean
compute='_compute_has_potential_product_mix_exception'
help='This will represent a situation where several moves are pointingto the location for different products and the location doesnot allow mixed products.'
index=True
store=True
leaf_child_location_ids
Many2many → stock.location
compute='_compute_leaf_location_ids'
help='technical field: all the leaves sub-locations'
recursive=True
args: 'stock.location'
leaf_location_ids
Many2many → stock.location
compute='_compute_leaf_location_ids'
help='technical field: all the leaves locations'
recursive=True
args: 'stock.location'
location_will_contain_lot_ids
Many2many → stock.lot
compute='_compute_location_will_contain_lot_ids'
help='technical field: list of stock.lots in the location, either now or in pending operations'
store=True
args: 'stock.lot'
location_will_contain_product_ids
Many2many → product.product
compute='_compute_location_will_contain_product_ids'
help='technical field: list of products in the location, either now or in pending operations'
store=True
args: 'product.product'
max_height
Float
recursive=True
related='computed_storage_category_id.max_height'
store=True
max_height_in_m
Float
recursive=True
related='computed_storage_category_id.max_height_in_m'
store=True
only_empty
Boolean
compute='_compute_only_empty'
recursive=True
store=True
pack_putaway_strategy
Selection
default='none'
help='This defines the storage strategy based on package type to use when a product or package is put away in this location.\nNone: when moved to this location, it will not be put away any further.\nOrdered Children Locations: when moved to this location, a suitable location will be searched in its children locations according to the restrictions defined on their respective storage category.'
required=True
selection=[('none', 'None'), ('ordered_locations', 'Ordered Children Locations')]
string='Put-Away Strategy'
package_type_putaway_sequence
Integer
help='Allow to sort the valid locations by sequence for the storage strategy based on package type'
string='Putaway Sequence'
storage_location_sequence_ids
One2many → stock.storage.location.sequence
string='Storage locations sequences'
args: 'stock.storage.location.sequence', 'location_id'
get_storage_locations(self, products=None)
init(self)
select_allowed_locations(self, package_type, quants, products, limit=None)
select_first_allowed_location(self, package_type, quants, products)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
barcode
Char
copy=False
height_required
Boolean
default=False
help='Height is mandatory for packages configured with this package type.'
string='Height required for packages'
product_packaging_ids
One2many → product.packaging
storage_location_sequence_ids
One2many → stock.storage.location.sequence
string='Put-Away sequence'
args: 'stock.storage.location.sequence', 'package_type_id'
storage_type_message
Html
compute='_compute_storage_type_message'
action_view_storage_locations(self)
allowed_location_dest_ids
Many2many → stock.location
comodel_name='stock.location'
compute='_compute_allowed_location_dest_ids'
string='Allowed Destinations'
recompute_pack_putaway(self)
No new fields.
Public methods (2)create(self, vals_list)
write(self, vals)
height
Float
compute='_compute_height'
readonly=False
store=True
height_in_m
Float
compute='_compute_height_in_m'
help='Technical field, to speed up comparaisons'
store=True
pack_weight_in_kg
Float
compute='_compute_pack_weight_in_kg'
help='Technical field, to speed up comparaisons'
store=True
No public methods.
allow_new_product
Selection
ondelete={'same_lot': 'cascade'}
selection_add=[('same_lot', 'If lots are all the same')]
allow_new_product_ids
One2many → stock.storage.category.allow_new_product
comodel_name='stock.storage.category.allow_new_product'
inverse_name='storage_category_id'
string='Allow New Product Rules'
computed_location_ids
One2many → stock.location
comodel_name='stock.location'
inverse_name='computed_storage_category_id'
has_restrictions
Boolean
compute='_compute_has_restrictions'
help='Technical: This is used to check if we need to display warning message'
length_uom_id
Many2one → uom.uom
default=<expr>
domain=<expr>
args: 'uom.uom', 'Max height Unit of Measure'
max_height
Float
help='The max height supported for this storage category.'
string='Max height (mm)'
max_height_in_m
Float
compute='_compute_max_height_in_m'
help='Technical field, to speed up comparaisons'
store=True
max_weight_in_kg
Float
compute='_compute_max_weight_in_kg'
help='Technical field, to speed up comparaisons'
store=True
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'
weight_uom_name
Char
readonly=True
related='weight_uom_id.name'
string='Weight unit of measure label'
get_allow_new_product(self, product, package_type=None, package=None, quants=None)
allow_new_product
Selection
default='mixed'
required=True
selection=_selection_allow_new_product
condition_ids
Many2many → stock.storage.category.allow_new_product.cond
comodel_name='stock.storage.category.allow_new_product.cond'
help='All conditions have to match to apply the Allow New Product policy.'
relation='stock_storage_category_allow_new_product_cond_rel'
required=True
string='Conditions'
sequence
Integer
index=True
storage_category_id
Many2one → stock.storage.category
comodel_name='stock.storage.category'
index=True
ondelete='cascade'
required=True
No public methods.
No new fields.
Public methods (1)evaluate(self, storage_category, product, package_type, package, quants)
active
Boolean
default=True
code_snippet
Text
required=True
code_snippet_docs
Text
compute='_compute_code_snippet_docs'
default=<expr>
condition_type
Selection
default='code'
required=True
selection=[('code', 'Execute code')]
name
Char
required=True
evaluate(self, *args, **kwargs)
location_id
Many2one → stock.location
required=True
args: 'stock.location'
location_putaway_strategy
Selection
related='location_id.pack_putaway_strategy'
location_sequence_cond_ids
Many2many → stock.storage.location.sequence.cond
comodel_name='stock.storage.location.sequence.cond'
help='All conditions have to match to apply the put-away strategy.'
relation='stock_location_sequence_cond_rel'
string='Conditions'
package_type_id
Many2one → stock.package.type
ondelete='cascade'
required=True
args: 'stock.package.type'
sequence
Integer
required=True
button_show_locations(self)
can_be_applied(self, putaway_location, quant, product)
No new fields.
Public methods (1)evaluate(self, storage_location_sequence, putaway_location, quant, product)
| 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_storage_type |
| VERSION | |
| VERSION | 2.1.0 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, BCIM |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, BCIM |
| COMMITTERS | |
| COMMITTERS | Jacques-Etienne Baudoux, Denis Roussel, Nils Hamerlinck, Sébastien Alix, Weblate, OCA-git-bot, oca-ci, chien, Bastian Guenther |
| 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_packaging_dimension - product_logistics_uom OCA/server-tools: - base_partition OCA/stock-logistics-warehouse: - stock_location_fill_state - stock_location_pending_move - stock_storage_category_capacity_name OCA/stock-logistics-workflow: - stock_move_line_reserved_quant - stock_putaway_hook - stock_quant_package_dimension - stock_quant_package_product_packaging odoo/odoo: - base - stock - product - base_setup - web - bus - web_tour - 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 | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
package_level_form_view_inherit |
Package Level Inherit (in stock_storage_type) | stock.package_level | field | Inherits stock.package_level_form_view |
package_level_tree_view_picking_inherit |
Package Level Tree Picking Inherit (in stock_storage_type) | stock.package_level | field | Inherits stock.package_level_tree_view_picking |
package_storage_location_tree_view |
package.storage.location.tree.view | stock.storage.location.sequence | tree | New |
product_template_form_view_procurement_button_inherit |
product.template_procurement.inherit | product.template | field | Inherits stock.product_template_form_view_procurement_button |
stock_package_type_form |
stock.package.type.form (in stock_storage_type) | stock.package.type | div | Inherits stock.stock_package_type_form |
stock_storage_category_allow_new_product_cond_view_form |
stock.storage.category.allow_new_product.cond.form | stock.storage.category.allow_new_product.cond | form | New |
stock_storage_category_form |
stock.storage.category.form (in stock_storage_type) | stock.storage.category | notebook | Inherits stock.stock_storage_category_form |
stock_storage_location_sequence_cond_form_view |
stock.storage.location.sequence.cond.form (in stock_storage_type) | stock.storage.location.sequence.cond | form | New |
stock_storage_location_sequence_cond_tree_view |
stock.storage.location.sequence.cond.tree (in stock_storage_type) | stock.storage.location.sequence.cond | tree | New |
view_location_form_inherit |
stock.location.form.inherit (in stock_storage_type) | stock.location | field | Inherits stock.view_location_form |
package_type_id
Many2one → stock.package.type
help="Defines a 'default' package type for this product to be applied on packages without product packagings and on put-away computation based on package type for product not in a package"
string='Package type'
args: 'stock.package.type'
No public methods.
computed_storage_capacity_ids
One2many
related='computed_storage_category_id.capacity_ids'
computed_storage_category_id
Many2one → stock.storage.category
comodel_name='stock.storage.category'
compute='_compute_computed_storage_category_id'
help='This represents the Storage Category that will be used. It depends either on the category set on the location or on one of its parent.'
recursive=True
store=True
string='Computed Storage Category'
do_not_mix_lots
Boolean
compute='_compute_do_not_mix_lots'
recursive=True
store=True
do_not_mix_products
Boolean
compute='_compute_do_not_mix_products'
recursive=True
store=True
has_potential_lot_mix_exception
Boolean
compute='_compute_has_potential_lot_mix_exception'
help='This will represent a situation where several moves are pointingto the location for different product lots and the location doesnot allow mixed lots.'
index=True
store=True
has_potential_product_mix_exception
Boolean
compute='_compute_has_potential_product_mix_exception'
help='This will represent a situation where several moves are pointingto the location for different products and the location doesnot allow mixed products.'
index=True
store=True
in_move_ids
One2many → stock.move
domain=[('state', 'in', ('waiting', 'confirmed', 'partially_available', 'assigned'))]
help='technical field: the pending incoming stock.moves in the location'
args: 'stock.move', 'location_dest_id'
in_move_line_ids
One2many → stock.move.line
domain=[('state', 'in', ('waiting', 'confirmed', 'partially_available', 'assigned'))]
help='technical field: the pending incoming stock.move.lines in the location'
args: 'stock.move.line', 'location_dest_id'
leaf_child_location_ids
Many2many → stock.location
compute='_compute_leaf_location_ids'
help='technical field: all the leaves sub-locations'
recursive=True
args: 'stock.location'
leaf_location_ids
Many2many → stock.location
compute='_compute_leaf_location_ids'
help='technical field: all the leaves locations'
recursive=True
args: 'stock.location'
location_will_contain_lot_ids
Many2many → stock.lot
compute='_compute_location_will_contain_lot_ids'
help='technical field: list of stock.lots in the location, either now or in pending operations'
store=True
args: 'stock.lot'
location_will_contain_product_ids
Many2many → product.product
compute='_compute_location_will_contain_product_ids'
help='technical field: list of products in the location, either now or in pending operations'
store=True
args: 'product.product'
max_height
Float
recursive=True
related='computed_storage_category_id.max_height'
store=True
max_height_in_m
Float
recursive=True
related='computed_storage_category_id.max_height_in_m'
store=True
only_empty
Boolean
compute='_compute_only_empty'
recursive=True
store=True
out_move_line_ids
One2many → stock.move.line
domain=OUT_MOVE_LINE_DOMAIN
help='technical field: the pending outgoing stock.move.lines in the location'
args: 'stock.move.line', 'location_id'
pack_putaway_strategy
Selection
default='none'
help='This defines the storage strategy based on package type to use when a product or package is put away in this location.\nNone: when moved to this location, it will not be put away any further.\nOrdered Children Locations: when moved to this location, a suitable location will be searched in its children locations according to the restrictions defined on their respective storage category.'
required=True
selection=[('none', 'None'), ('ordered_locations', 'Ordered Children Locations')]
string='Put-Away Strategy'
package_type_putaway_sequence
Integer
help='Allow to sort the valid locations by sequence for the storage strategy based on package type'
string='Putaway Sequence'
storage_location_sequence_ids
One2many → stock.storage.location.sequence
string='Storage locations sequences'
args: 'stock.storage.location.sequence', 'location_id'
get_storage_locations(self, products=None)
init(self)
select_allowed_locations(self, package_type, quants, products, limit=None)
select_first_allowed_location(self, package_type, quants, products)
active
Boolean
default=True
barcode
Char
copy=False
height_required
Boolean
default=False
help='Height is mandatory for packages configured with this package type.'
string='Height required for packages'
product_packaging_ids
One2many → product.packaging
storage_location_sequence_ids
One2many → stock.storage.location.sequence
string='Put-Away sequence'
args: 'stock.storage.location.sequence', 'package_type_id'
storage_type_message
Html
compute='_compute_storage_type_message'
action_view_storage_locations(self)
allowed_location_dest_ids
Many2many → stock.location
comodel_name='stock.location'
compute='_compute_allowed_location_dest_ids'
string='Allowed Destinations'
recompute_pack_putaway(self)
No new fields.
Public methods (2)create(self, vals_list)
write(self, vals)
height_in_m
Float
compute='_compute_height_in_m'
help='Technical field, to speed up comparaisons'
store=True
pack_weight_in_kg
Float
compute='_compute_pack_weight_in_kg'
help='Technical field, to speed up comparaisons'
store=True
auto_assign_packaging(self)
create(self, vals_list)
write(self, vals)
allow_new_product
Selection
ondelete={'same_lot': 'cascade'}
selection_add=[('same_lot', 'If lots are all the same')]
allow_new_product_ids
One2many → stock.storage.category.allow_new_product
comodel_name='stock.storage.category.allow_new_product'
inverse_name='storage_category_id'
string='Allow New Product Rules'
computed_location_ids
One2many → stock.location
comodel_name='stock.location'
inverse_name='computed_storage_category_id'
has_restrictions
Boolean
compute='_compute_has_restrictions'
help='Technical: This is used to check if we need to display warning message'
length_uom_id
Many2one → uom.uom
default=<expr>
domain=<expr>
help='UoM for height'
args: 'uom.uom', 'Dimensions Units of Measure'
max_height
Float
help='The max height supported for this storage category.'
string='Max height (mm)'
max_height_in_m
Float
compute='_compute_max_height_in_m'
help='Technical field, to speed up comparaisons'
store=True
max_weight_in_kg
Float
compute='_compute_max_weight_in_kg'
help='Technical field, to speed up comparaisons'
store=True
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'
weight_uom_name
Char
readonly=True
related='weight_uom_id.name'
string='Weight unit of measure label'
get_allow_new_product(self, product, package_type=None, package=None, quants=None)
allow_new_product
Selection
default='mixed'
required=True
selection=_selection_allow_new_product
condition_ids
Many2many → stock.storage.category.allow_new_product.cond
comodel_name='stock.storage.category.allow_new_product.cond'
help='All conditions have to match to apply the Allow New Product policy.'
relation='stock_storage_category_allow_new_product_cond_rel'
required=True
string='Conditions'
sequence
Integer
index=True
storage_category_id
Many2one → stock.storage.category
comodel_name='stock.storage.category'
index=True
ondelete='cascade'
required=True
No public methods.
No new fields.
Public methods (1)evaluate(self, storage_category, product, package_type, package, quants)
active
Boolean
default=True
code_snippet
Text
required=True
code_snippet_docs
Text
compute='_compute_code_snippet_docs'
default=<expr>
condition_type
Selection
default='code'
required=True
selection=[('code', 'Execute code')]
name
Char
required=True
evaluate(self, *args, **kwargs)
location_id
Many2one → stock.location
required=True
args: 'stock.location'
location_putaway_strategy
Selection
related='location_id.pack_putaway_strategy'
location_sequence_cond_ids
Many2many → stock.storage.location.sequence.cond
comodel_name='stock.storage.location.sequence.cond'
help='All conditions have to match to apply the put-away strategy.'
relation='stock_location_sequence_cond_rel'
string='Conditions'
package_type_id
Many2one → stock.package.type
required=True
args: 'stock.package.type'
sequence
Integer
required=True
button_show_locations(self)
can_be_applied(self, putaway_location, quant, product)
No new fields.
Public methods (1)evaluate(self, storage_location_sequence, putaway_location, quant, product)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/wms |
| GIT | |
| GIT | https://github.com/OCA/wms.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/wms/tree/14.0/stock_storage_type |
| VERSION | |
| VERSION | 1.12.3 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, BCIM |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, BCIM |
| COMMITTERS | |
| COMMITTERS | Jacques-Etienne Baudoux, Laurent Mignon (ACSONE), OCA Transbot, Sébastien Alix, Thierry Ducrest, Sébastien BEAU, oca-travis, Weblate, OCA-git-bot, Simone Orsi, hparfr, oca-ci |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/wms |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:41:12 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/product-attribute: - product_packaging_dimension - product_logistics_uom OCA/server-tools: - base_m2m_custom_field OCA/stock-logistics-workflow: - stock_putaway_hook - stock_quant_package_dimension - stock_quant_package_product_packaging OCA/web: - web_domain_field odoo/odoo: - stock - product - base - 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 | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
location_package_storage_type_rel_tree_view |
stock.location.package.storage.type.rel.tree.view | stock.location.package.storage.type.rel | tree | New |
location_storage_type_form_view |
stock.location.storage.type.form.view | stock.location.storage.type | form | New |
location_storage_type_tree_view |
stock.location.storage.type.tree.view | stock.location.storage.type | tree | New |
package_level_form_view_inherit |
Package Level Inherit | stock.package_level | field | Inherits stock.package_level_form_view |
package_level_tree_view_picking_inherit |
Package Level Tree Picking Inherit | stock.package_level | field | Inherits stock.package_level_tree_view_picking |
package_storage_location_tree_view |
package.storage.location.tree.view | stock.storage.location.sequence | tree | New |
package_storage_type_form_view |
package.storage.type.form.view | stock.package.storage.type | form | New |
package_storage_type_tree_view |
package.storage.type.tree.view | stock.package.storage.type | tree | New |
product_packaging_form_view_inherit |
product.packaging.form.view.inherit | product.packaging | group | Inherits product.product_packaging_form_view |
product_packaging_tree_view_inherit |
product.packaging.tree.view.inherit | product.packaging | field | Inherits product.product_packaging_tree_view |
product_template_form_view_procurement_button_inherit |
product.template_procurement.inherit | product.template | field | Inherits stock.product_template_form_view_procurement_button |
stock_location_storage_type_search_view |
stock.location.storage.type search | stock.location.storage.type | search | New |
stock_package_storage_type_search_view |
stock.package.storage.type search | stock.package.storage.type | search | New |
stock_storage_location_sequence_cond_form_view |
stock.storage.location.sequence.cond.form (in stock_storage_type) | stock.storage.location.sequence.cond | form | New |
stock_storage_location_sequence_cond_tree_view |
stock.storage.location.sequence.cond.tree (in stock_storage_type) | stock.storage.location.sequence.cond | tree | New |
view_location_form_inherit |
stock.location.form.inherit | stock.location | field | Inherits stock.view_location_form |
view_quant_package_form_inherit |
stock.quant.package.form.inherit | stock.quant.package | field | Inherits stock_quant_package_product_packaging.view_quant_package_form_inherit |
package_storage_type_id
Many2one → stock.package.storage.type
help='The package storage type will be set on stock packages using this product packaging, in order to compute its putaway.'
args: 'stock.package.storage.type'
No public methods.
product_package_storage_type_id
Many2one → stock.package.storage.type
help="Defines a 'default' package storage type for this product to be applied on packages without product packagings for put-away computations."
string='Package storage type'
args: 'stock.package.storage.type'
No public methods.
allowed_location_storage_type_ids
Many2many → stock.location.storage.type
compute='_compute_allowed_location_storage_type_ids'
help='Locations storage types that this location can accept. (If no location storage types are defined on this specific location, the location storage types of the parent location are applied).'
store=True
args: 'stock.location.storage.type', 'stock_location_allowed_location_storage_type_rel', 'location_id', 'location_storage_type_id'
do_not_mix_lots
Boolean
compute='_compute_do_not_mix_lots'
store=True
do_not_mix_products
Boolean
compute='_compute_do_not_mix_products'
store=True
in_move_ids
One2many → stock.move
domain=[('state', 'in', ('waiting', 'confirmed', 'partially_available', 'assigned'))]
help='technical field: the pending incoming stock.moves in the location'
args: 'stock.move', 'location_dest_id'
in_move_line_ids
One2many → stock.move.line
domain=[('state', 'in', ('waiting', 'confirmed', 'partially_available', 'assigned'))]
help='technical field: the pending incoming stock.move.lines in the location'
args: 'stock.move.line', 'location_dest_id'
leaf_child_location_ids
Many2many → stock.location
compute='_compute_leaf_location_ids'
help='technical field: all the leaves sub-locations'
args: 'stock.location'
leaf_location_ids
Many2many → stock.location
compute='_compute_leaf_location_ids'
help='technical field: all the leaves locations'
args: 'stock.location'
location_is_empty
Boolean
compute='_compute_location_is_empty'
help='technical field: True if the location is empty and there is no pending incoming products in the location. Computed only if the location needs to check for emptiness (has an "only empty" location storage type).'
store=True
location_storage_type_ids
Many2many → stock.location.storage.type
help='Location storage types defined here will be applied on all the children locations that do not define their own location storage types.'
args: 'stock.location.storage.type', 'stock_location_location_storage_type_rel', 'location_id', 'location_storage_type_id'
location_will_contain_lot_ids
Many2many → stock.production.lot
compute='_compute_location_will_contain_lot_ids'
help='technical field: list of stock.production.lots in the location, either now or in pending operations'
store=True
args: 'stock.production.lot'
location_will_contain_product_ids
Many2many → product.product
compute='_compute_location_will_contain_product_ids'
help='technical field: list of products in the location, either now or in pending operations'
store=True
args: 'product.product'
max_height
Float
compute='_compute_max_height'
help='The max height supported among allowed location storage types.'
store=True
string='Max height (mm)'
max_height_in_m
Float
compute='_compute_max_height'
help='The max height supported among allowed location storage types.'
store=True
string='Max height (m)'
only_empty
Boolean
compute='_compute_only_empty'
store=True
out_move_line_ids
One2many → stock.move.line
domain=[('state', 'in', ('waiting', 'confirmed', 'partially_available', 'assigned'))]
help='technical field: the pending outgoing stock.move.lines in the location'
args: 'stock.move.line', 'location_id'
pack_putaway_sequence
Integer
pack_putaway_strategy
Selection
default='none'
help='This defines the storage strategy to use when packs are put away in this location.\nNone: when a pack is moved to this location, it will not be put away any further.\nOrdered Children Locations: when a pack is moved to this location, a suitable location will be searched in its children locations according to the restrictions defined on their respective location storage types.'
required=True
selection=[('none', 'None'), ('ordered_locations', 'Ordered Children Locations')]
string='Packs Put-Away Strategy'
storage_location_sequence_ids
One2many → stock.storage.location.sequence
string='Storage locations sequences'
args: 'stock.storage.location.sequence', 'location_id'
get_storage_locations(self, products=None)
select_allowed_locations(self, package_storage_type, quants, products, limit=None)
select_first_allowed_location(self, package_storage_type, quants, products)
location_storage_type_id
Many2one → stock.location.storage.type
required=True
args: 'stock.location.storage.type'
package_storage_type_id
Many2one → stock.package.storage.type
required=True
args: 'stock.package.storage.type'
No public methods.
active
Boolean
default=True
do_not_mix_lots
Boolean
help='If checked, moves to the destination location will only be allowed if the location contains product of the same lot.'
do_not_mix_products
Boolean
help='If checked, moves to the destination location will only be allowed if the location contains the same product.'
has_restrictions
Boolean
compute='_compute_has_restrictions'
length_uom_id
Many2one → uom.uom
default=<expr>
domain=<expr>
help='UoM for height'
args: 'uom.uom', 'Dimensions Units of Measure'
length_uom_name
Char
readonly=True
related='length_uom_id.name'
string='Length unit of measure label'
location_ids
Many2many → stock.location
copy=False
readonly=True
args: 'stock.location', 'stock_location_allowed_location_storage_type_rel', 'location_storage_type_id', 'location_id'
max_height
Float
default=0.0
help='If defined, moves to the destination location will only be allowed if the packaging height is lower than this maximum.'
string='Max height (mm)'
max_height_in_m
Float
compute='_compute_max_height_in_m'
help='Technical field, to speed up comparaisons'
store=True
string='Max height in m'
max_weight
Float
default=0.0
help='If defined, moves to the destination location will only be allowed if the packaging wight is lower than this maximum.'
string='Max weight (kg)'
max_weight_in_kg
Float
compute='_compute_max_weight_in_kg'
help='Technical field, to speed up comparaisons'
store=True
string='Max weight in kg'
name
Char
required=True
only_empty
Boolean
help='If checked, moves to the destination location will only be allowed if there are not any existing quant nor planned move on this location'
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'
weight_uom_name
Char
readonly=True
related='weight_uom_id.name'
string='Weight unit of measure label'
button_show_locations(self)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
barcode
Char
copy=False
args: 'Barcode'
height_required
Boolean
default=False
help='Height is mandatory for packages configured with this storage type.'
string='Height required for packages'
name
Char
required=True
product_packaging_ids
One2many → product.packaging
storage_location_sequence_ids
One2many → stock.storage.location.sequence
string='Put-Away sequence'
args: 'stock.storage.location.sequence', 'package_storage_type_id'
storage_type_message
Html
compute='_compute_storage_type_message'
action_view_storage_locations(self)
allowed_location_dest_domain
Char
compute='_compute_allowed_location_dest_domain'
string='Allowed Destinations Domain'
recompute_pack_putaway(self)
No new fields.
Public methods (2)create(self, vals)
write(self, vals)
height_in_m
Float
compute='_compute_height_in_m'
help='Technical field, to speed up comparaisons'
store=True
string='Height in m'
pack_weight_in_kg
Float
compute='_compute_pack_weight_in_kg'
help='Technical field, to speed up comparaisons'
store=True
string='Pack weight in kg'
package_storage_type_id
Many2one → stock.package.storage.type
help='Package storage type for put-away computation. Get value automatically from the packaging if set, or from the product ifthe package contains only a single product.'
args: 'stock.package.storage.type'
auto_assign_packaging(self)
create(self, vals)
write(self, vals)
location_id
Many2one → stock.location
required=True
args: 'stock.location'
location_putaway_strategy
Selection
related='location_id.pack_putaway_strategy'
location_sequence_cond_ids
Many2many → stock.storage.location.sequence.cond
comodel_name='stock.storage.location.sequence.cond'
relation='stock_location_sequence_cond_rel'
string='Conditions'
package_storage_type_id
Many2one → stock.package.storage.type
required=True
args: 'stock.package.storage.type'
sequence
Integer
required=True
button_show_locations(self)
can_be_applied(self, putaway_location, quant, product)
active
Boolean
default=True
code_snippet
Text
required=True
code_snippet_docs
Text
compute='_compute_code_snippet_docs'
default=<expr>
condition_type
Selection
default='code'
required=True
selection=[('code', 'Execute code')]
name
Char
required=True
evaluate(self, storage_location_sequence, putaway_location, quant, product)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/wms |
| GIT | |
| GIT | https://github.com/OCA/wms.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/wms/tree/13.0/stock_storage_type |
| VERSION | |
| VERSION | 1.16.0 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, BCIM |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, BCIM |
| COMMITTERS | |
| COMMITTERS | Guewen Baconnier, GitHub, Jacques-Etienne Baudoux, sebalix, Laurent Mignon (ACSONE), Akim Juillerat, OCA Transbot, Sébastien Alix, oca-travis, Weblate, OCA-git-bot, Simone Orsi, Carlos Serra-Toro |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/wms |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:20 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/product-attribute: - product_packaging_dimension OCA/server-tools: - base_m2m_custom_field OCA/stock-logistics-workflow: - stock_putaway_hook - stock_quant_package_dimension - stock_quant_package_product_packaging OCA/web: - web_domain_field odoo/odoo: - stock - product - base - base_setup - web - bus - web_tour - uom - barcodes |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
location_package_storage_type_rel_tree_view |
stock.location.package.storage.type.rel.tree.view | stock.location.package.storage.type.rel | tree | New |
location_storage_type_form_view |
stock.location.storage.type.form.view | stock.location.storage.type | form | New |
location_storage_type_tree_view |
stock.location.storage.type.tree.view | stock.location.storage.type | tree | New |
package_level_form_view_inherit |
Package Level Inherit | stock.package_level | field | Inherits stock.package_level_form_view |
package_level_tree_view_picking_inherit |
Package Level Tree Picking Inherit | stock.package_level | field | Inherits stock.package_level_tree_view_picking |
package_storage_location_tree_view |
package.storage.location.tree.view | stock.storage.location.sequence | tree | New |
package_storage_type_form_view |
package.storage.type.form.view | stock.package.storage.type | form | New |
package_storage_type_tree_view |
package.storage.type.tree.view | stock.package.storage.type | tree | New |
product_packaging_form_view_inherit |
product.packaging.form.view.inherit | product.packaging | group | Inherits product.product_packaging_form_view |
product_packaging_tree_view_inherit |
product.packaging.tree.view.inherit | product.packaging | field | Inherits product.product_packaging_tree_view |
product_template_form_view_procurement_button_inherit |
product.template_procurement.inherit | product.template | field | Inherits stock.product_template_form_view_procurement_button |
stock_location_storage_type_search_view |
stock.location.storage.type search | stock.location.storage.type | search | New |
stock_package_storage_type_search_view |
stock.package.storage.type search | stock.package.storage.type | search | New |
view_location_form_inherit |
stock.location.form.inherit | stock.location | field | Inherits stock.view_location_form |
view_quant_package_form_inherit |
stock.quant.package.form.inherit | stock.quant.package | field | Inherits stock_quant_package_product_packaging.view_quant_package_form_inherit |
package_storage_type_id
Many2one → stock.package.storage.type
help='The package storage type will be set on stock packages using this product packaging, in order to compute its putaway.'
args: 'stock.package.storage.type'
No public methods.
product_package_storage_type_id
Many2one → stock.package.storage.type
help="Defines a 'default' package storage type for this product to be applied on packages without product packagings for put-away computations."
string='Package storage type'
args: 'stock.package.storage.type'
No public methods.
allowed_location_storage_type_ids
Many2many → stock.location.storage.type
compute='_compute_allowed_location_storage_type_ids'
help='Locations storage types that this location can accept. (If no location storage types are defined on this specific location, the location storage types of the parent location are applied).'
store=True
args: 'stock.location.storage.type', 'stock_location_allowed_location_storage_type_rel', 'location_id', 'location_storage_type_id'
do_not_mix_lots
Boolean
compute='_compute_do_not_mix_lots'
store=True
do_not_mix_products
Boolean
compute='_compute_do_not_mix_products'
store=True
in_move_ids
One2many → stock.move
domain=[('state', 'in', ('waiting', 'confirmed', 'partially_available', 'assigned'))]
help='technical field: the pending incoming stock.moves in the location'
args: 'stock.move', 'location_dest_id'
in_move_line_ids
One2many → stock.move.line
domain=[('state', 'in', ('waiting', 'confirmed', 'partially_available', 'assigned'))]
help='technical field: the pending incoming stock.move.lines in the location'
args: 'stock.move.line', 'location_dest_id'
leaf_child_location_ids
Many2many → stock.location
compute='_compute_leaf_location_ids'
help='technical field: all the leaves sub-locations'
args: 'stock.location'
leaf_location_ids
Many2many → stock.location
compute='_compute_leaf_location_ids'
help='technical field: all the leaves locations'
args: 'stock.location'
location_is_empty
Boolean
compute='_compute_location_is_empty'
help='technical field: True if the location is empty and there is no pending incoming products in the location. Computed only if the location needs to check for emptiness (has an "only empty" location storage type).'
store=True
location_storage_type_ids
Many2many → stock.location.storage.type
help='Location storage types defined here will be applied on all the children locations that do not define their own location storage types.'
args: 'stock.location.storage.type', 'stock_location_location_storage_type_rel', 'location_id', 'location_storage_type_id'
location_will_contain_lot_ids
Many2many → stock.production.lot
compute='_compute_location_will_contain_lot_ids'
help='technical field: list of stock.production.lots in the location, either now or in pending operations'
store=True
args: 'stock.production.lot'
location_will_contain_product_ids
Many2many → product.product
compute='_compute_location_will_contain_product_ids'
help='technical field: list of products in the location, either now or in pending operations'
store=True
args: 'product.product'
max_height
Float
compute='_compute_max_height'
help='The max height supported among allowed location storage types.'
store=True
string='Max height (mm)'
only_empty
Boolean
compute='_compute_only_empty'
store=True
out_move_line_ids
One2many → stock.move.line
domain=[('state', 'in', ('waiting', 'confirmed', 'partially_available', 'assigned'))]
help='technical field: the pending outgoing stock.move.lines in the location'
args: 'stock.move.line', 'location_id'
pack_putaway_sequence
Integer
pack_putaway_strategy
Selection
default='none'
help='This defines the storage strategy to use when packs are put away in this location.\nNone: when a pack is moved to this location, it will not be put away any further.\nOrdered Children Locations: when a pack is moved to this location, a suitable location will be searched in its children locations according to the restrictions defined on their respective location storage types.'
required=True
selection=[('none', 'None'), ('ordered_locations', 'Ordered Children Locations')]
string='Packs Put-Away Strategy'
storage_location_sequence_ids
One2many → stock.storage.location.sequence
string='Storage locations sequences'
args: 'stock.storage.location.sequence', 'location_id'
get_storage_locations(self, products=None)
select_allowed_locations(self, package_storage_type, quants, products, limit=None)
select_first_allowed_location(self, package_storage_type, quants, products)
location_storage_type_id
Many2one → stock.location.storage.type
required=True
args: 'stock.location.storage.type'
package_storage_type_id
Many2one → stock.package.storage.type
required=True
args: 'stock.package.storage.type'
No public methods.
active
Boolean
default=True
do_not_mix_lots
Boolean
help='If checked, moves to the destination location will only be allowed if the location contains product of the same lot.'
do_not_mix_products
Boolean
help='If checked, moves to the destination location will only be allowed if the location contains the same product.'
has_restrictions
Boolean
compute='_compute_has_restrictions'
location_ids
Many2many → stock.location
copy=False
readonly=True
args: 'stock.location', 'stock_location_allowed_location_storage_type_rel', 'location_storage_type_id', 'location_id'
max_height
Float
default=0.0
help='If defined, moves to the destination location will only be allowed if the packaging height is lower than this maximum.'
string='Max height (mm)'
max_weight
Float
default=0.0
help='If defined, moves to the destination location will only be allowed if the packaging wight is lower than this maximum.'
string='Max weight (kg)'
name
Char
required=True
only_empty
Boolean
help='If checked, moves to the destination location will only be allowed if there are not any existing quant nor planned move on this location'
button_show_locations(self)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
barcode
Char
copy=False
args: 'Barcode'
height_required
Boolean
default=False
help='Height is mandatory for packages configured with this storage type.'
string='Height required for packages'
name
Char
required=True
product_packaging_ids
One2many → product.packaging
storage_location_sequence_ids
One2many → stock.storage.location.sequence
string='Put-Away sequence'
args: 'stock.storage.location.sequence', 'package_storage_type_id'
storage_type_message
Html
compute='_compute_storage_type_message'
action_view_storage_locations(self)
allowed_location_dest_domain
Char
compute='_compute_allowed_location_dest_domain'
string='Allowed Destinations Domain'
recompute_pack_putaway(self)
No new fields.
Public methods (2)create(self, vals)
write(self, vals)
package_storage_type_id
Many2one → stock.package.storage.type
help='Package storage type for put-away computation. Get value automatically from the packaging if set, or from the product ifthe package contains only a single product.'
args: 'stock.package.storage.type'
auto_assign_packaging(self)
create(self, vals)
write(self, vals)
location_id
Many2one → stock.location
required=True
args: 'stock.location'
location_putaway_strategy
Selection
related='location_id.pack_putaway_strategy'
package_storage_type_id
Many2one → stock.package.storage.type
required=True
args: 'stock.package.storage.type'
sequence
Integer
required=True
button_show_locations(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/wms |
| GIT | |
| GIT | https://github.com/OCA/wms.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/wms/tree/12.0/stock_storage_type |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp |
| COMMITTERS | |
| COMMITTERS | GitHub, Akim Juillerat, oca-travis, Weblate, OCA-git-bot |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/wms |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:25 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - stock - product - base - decimal_precision - base_setup - web - bus - web_tour - uom - barcodes |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
location_storage_type_form_view |
stock.location.storage.type.form.view | stock.location.storage.type | form | New |
location_storage_type_tree_view |
stock.location.storage.type.tree.view | stock.location.storage.type | tree | New |
package_storage_type_form_view |
storage.unit.type.tree.view | stock.package.storage.type | form | New |
package_storage_type_tree_view |
storage.unit.type.tree.view | stock.package.storage.type | tree | New |
product_packaging_form_view_inherit |
product.packaging.form.view.inherit | product.packaging | group | Inherits product.product_packaging_form_view |
product_packaging_tree_view_inherit |
product.packaging.tree.view.inherit | product.packaging | field | Inherits product.product_packaging_tree_view |
view_location_form_inherit |
stock.location.form.inherit | stock.location | field | Inherits stock.view_location_form |
view_picking_form_inherit |
stock.picking.form.inherit | stock.picking | xpath | Inherits stock.view_picking_form |
stock_package_storage_type_id
Many2one → stock.package.storage.type
No public methods.
allowed_stock_location_storage_type_ids
Many2many → stock.location.storage.type
compute='_compute_allowed_stock_location_storage_type_ids'
store=True
args: 'stock.location.storage.type', 'stock_location_allowed_stock_location_storage_type_rel', 'stock_location_id', 'stock_location_storage_type_id'
stock_location_storage_type_ids
Many2many → stock.location.storage.type
No public methods.
allowed_location_ids
Many2many → stock.location
readonly=True
args: 'stock.location', 'stock_location_allowed_stock_location_storage_type_rel', 'stock_location_storage_type_id', 'stock_location_id'
location_ids
Many2many → stock.location
name
Char
required=True
stock_package_storage_type_ids
Many2many → stock.package.storage.type
No public methods.
name
Char
required=True
product_packaging_ids
One2many → product.packaging
stock_location_storage_type_ids
Many2many → stock.location.storage.type
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/wms |
| GIT | |
| GIT | https://github.com/OCA/wms.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/wms/tree/10.0/stock_storage_type |
| VERSION | |
| VERSION | 1.6.0 |
| CATEGORY | |
| CATEGORY | Warehouse Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp |
| COMMITTERS | |
| COMMITTERS | Guewen Baconnier, GitHub, sebalix, Laurent Mignon (ACSONE), Akim Juillerat, Sébastien Alix, oca-travis, OCA-git-bot |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/wms |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:20:03 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_domain_field odoo/odoo: - web - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
location_package_storage_type_rel_tree_view |
stock.location.package.storage.type.rel.tree.view | stock.location.package.storage.type.rel | tree | New |
location_storage_type_form_view |
stock.location.storage.type.form.view | stock.location.storage.type | form | New |
location_storage_type_tree_view |
stock.location.storage.type.tree.view | stock.location.storage.type | tree | New |
package_level_form_view_inherit |
Package Level Inherit | stock.package_level | field | Inherits stock.package_level_form_view |
package_level_tree_view_picking_inherit |
Package Level Tree Picking Inherit | stock.package_level | field | Inherits stock.package_level_tree_view_picking |
package_storage_location_tree_view |
package.storage.location.tree.view | stock.storage.location.sequence | tree | New |
package_storage_type_form_view |
package.storage.type.form.view | stock.package.storage.type | form | New |
package_storage_type_tree_view |
package.storage.type.tree.view | stock.package.storage.type | tree | New |
product_packaging_form_view_inherit |
product.packaging.form.view.inherit | product.packaging | group | Inherits product.product_packaging_form_view |
product_packaging_tree_view_inherit |
product.packaging.tree.view.inherit | product.packaging | field | Inherits product.product_packaging_tree_view |
product_template_form_view_procurement_button_inherit |
product.template_procurement.inherit | product.template | field | Inherits stock.product_template_form_view_procurement_button |
view_location_form_inherit |
stock.location.form.inherit | stock.location | field | Inherits stock.view_location_form |
view_quant_package_form_inherit |
stock.quant.package.form.inherit | stock.quant.package | field | Inherits stock_quant_package_product_packaging.view_quant_package_form_inherit |
package_storage_type_id
Many2one → stock.package.storage.type
help='The package storage type will be set on stock packages using this product packaging, in order to compute its putaway.'
args: 'stock.package.storage.type'
No public methods.
product_package_storage_type_id
Many2one → stock.package.storage.type
help="Defines a 'default' package storage type for this product to be applied on packages without product packagings for put-away computations."
string='Package storage type'
args: 'stock.package.storage.type'
No public methods.
allowed_location_storage_type_ids
Many2many → stock.location.storage.type
compute='_compute_allowed_location_storage_type_ids'
help='Locations storage types that this location can accept. (If no location storage types are defined on this specific location, the location storage types of the parent location are applied).'
store=True
args: 'stock.location.storage.type', 'stock_location_allowed_location_storage_type_rel', 'location_id', 'location_storage_type_id'
in_move_ids
One2many → stock.move
domain=[('state', 'in', ('waiting', 'confirmed', 'partially_available', 'assigned'))]
help='technical field: the pending incoming stock.moves in the location'
args: 'stock.move', 'location_dest_id'
in_move_line_ids
One2many → stock.move.line
domain=[('state', 'in', ('waiting', 'confirmed', 'partially_available', 'assigned'))]
help='technical field: the pending incoming stock.move.lines in the location'
args: 'stock.move.line', 'location_dest_id'
leaf_location_ids
Many2many → stock.location
compute='_compute_leaf_location_ids'
help='technical field: all the leaves sub-locations'
args: 'stock.location'
location_is_empty
Boolean
compute='_compute_location_is_empty'
help='technical field: True if the location is empty and there is no pending incoming products in the location'
store=True
location_storage_type_ids
Many2many → stock.location.storage.type
help='Location storage types defined here will be applied on all the children locations that do not define their own location storage types.'
args: 'stock.location.storage.type', 'stock_location_location_storage_type_rel', 'location_id', 'location_storage_type_id'
location_will_contain_lot_ids
Many2many → stock.production.lot
compute='_compute_location_will_contain_lot_ids'
help='technical field: list of stock.production.lots in the location, either now or in pending operations'
store=True
args: 'stock.production.lot'
location_will_contain_product_ids
Many2many → product.product
compute='_compute_location_will_contain_product_ids'
help='technical field: list of products in the location, either now or in pending operations'
store=True
args: 'product.product'
max_height
Float
compute='_compute_max_height'
help='The max height supported among allowed location storage types.'
store=True
string='Max height (mm)'
pack_putaway_strategy
Selection
default='none'
help='This defines the storage strategy to use when packs are put away in this location.\nNone: when a pack is moved to this location, it will not be put away any further.\nOrdered Children Locations: when a pack is moved to this location, a suitable location will be searched in its children locations according to the restrictions defined on their respective location storage types.'
required=True
selection=[('none', 'None'), ('ordered_locations', 'Ordered Children Locations')]
string='Packs Put-Away Strategy'
storage_location_sequence_ids
One2many → stock.storage.location.sequence
string='Storage locations sequences'
args: 'stock.storage.location.sequence', 'location_id'
get_storage_locations(self, products=None)
select_allowed_locations(self, package_storage_type, quants, products, limit=None)
select_first_allowed_location(self, package_storage_type, quants, products)
location_storage_type_id
Many2one → stock.location.storage.type
required=True
args: 'stock.location.storage.type'
package_storage_type_id
Many2one → stock.package.storage.type
required=True
args: 'stock.package.storage.type'
No public methods.
do_not_mix_lots
Boolean
help='If checked, moves to the destination location will only be allowed if the location contains product of the same lot.'
do_not_mix_products
Boolean
help='If checked, moves to the destination location will only be allowed if the location contains the same product.'
has_restrictions
Boolean
compute='_compute_has_restrictions'
location_ids
Many2many → stock.location
copy=False
readonly=True
args: 'stock.location', 'stock_location_allowed_location_storage_type_rel', 'location_storage_type_id', 'location_id'
max_height
Float
default=0.0
help='If defined, moves to the destination location will only be allowed if the packaging height is lower than this maximum.'
string='Max height (mm)'
max_weight
Float
default=0.0
help='If defined, moves to the destination location will only be allowed if the packaging wight is lower than this maximum.'
string='Max weight (kg)'
name
Char
required=True
only_empty
Boolean
help='If checked, moves to the destination location will only be allowed if there are not any existing quant nor planned move on this location'
No public methods.
No new fields.
Public methods (0)No public methods.
height_required
Boolean
default=False
help='Height is mandatory for packages configured with this storage type.'
string='Height required for packages'
name
Char
required=True
product_packaging_ids
One2many → product.packaging
storage_location_sequence_ids
One2many → stock.storage.location.sequence
string='Put-Away sequence'
args: 'stock.storage.location.sequence', 'package_storage_type_id'
storage_type_message
Html
compute='_compute_storage_type_message'
action_view_storage_locations(self)
allowed_location_dest_domain
Char
compute='_compute_allowed_location_dest_domain'
string='Allowed Destinations Domain'
recompute_pack_putaway(self)
No new fields.
Public methods (2)create(self, vals)
write(self, vals)
package_storage_type_id
Many2one → stock.package.storage.type
help='Package storage type for put-away computation. Get value automatically from the packaging if set, or from the product ifthe package contains only a single product.'
args: 'stock.package.storage.type'
auto_assign_packaging(self)
create(self, vals)
write(self, vals)
location_id
Many2one → stock.location
required=True
args: 'stock.location'
location_putaway_strategy
Selection
related='location_id.pack_putaway_strategy'
package_storage_type_id
Many2one → stock.package.storage.type
required=True
args: 'stock.package.storage.type'
sequence
Integer
required=True
No public methods.