Location Trays

stock_location_tray
REPOSITORY
REPOSITORYOCA/stock-logistics-warehouse
GIT
GIThttps://github.com/OCA/stock-logistics-warehouse.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-warehouse/tree/18.0/stock_location_tray
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYStock
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Duy (Đỗ Anh)
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:06
ODOO DEPENDENCIES
ODOO DEPENDENCIES 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
    - base_sparse_field
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Add an optional Tray Type on Stock Locations. A tray type defines a
number of columns and rows. A location with a tray type becomes a tray,
and sub-locations are automatically created according to the columns and
rows of the tray type

![](../static/description/location-tray.png)

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
view_location_form stock.location.form.tray.type stock.location group Inherits stock.view_location_form
view_location_search stock.location.search.tray.type stock.location field Inherits stock.view_location_search
view_stock_location_tray_type_form stock.location.tray.type.form stock.location.tray.type form New
view_stock_location_tray_type_search stock.location.tray.type.search stock.location.tray.type search New
view_stock_location_tray_type_tree stock.location.tray.type.list stock.location.tray.type list New
view_stock_move_line_operation_tree stock.move.line.operations.tree.tray.type stock.move.line xpath Inherits stock.view_stock_move_line_operation_tree
view_stock_move_line_tray stock.move.line.tray stock.move.line form New
Models touched (3)

New fields (4)
  • cell_in_tray_type_id Many2one
    related='location_id.tray_type_id' string='Cell Tray Type'
  • cell_name_format Char
    default=<expr> help='Cells sub-locations generated in a tray will be named after this format. Replacement fields between curly braces are used to inject positions. {x}, {y}, and {z} will be replaced by their corresponding position. Complex formatting (such as padding, ...) can be done using the format specification at https://docs.python.org/3/library/string.html#formatstrings' string='Name Format for Cells'
  • tray_cell_contains_stock Boolean
    compute='_compute_tray_cell_contains_stock' help='Used to know if a cell of a Tray location is empty.'
  • tray_type_id Many2one → stock.location.tray.type
    comodel_name='stock.location.tray.type' ondelete='restrict'
Public methods (4)
  • action_tray_matrix_click(self, coordX, coordY)
  • create(self, vals_list)
    @api.model_create_multi
  • tray_cell_center_position(self)
    Return the center position in mm of a cell The returned position is a tuple with the number of millimeters from the bottom-left corner. Tuple: (left, bottom)
  • write(self, vals)

New fields (11)
  • active Boolean
    default=True
  • code Char
    required=True
  • cols Integer
    required=True
  • depth Integer
    help='Depth of the tray in mm'
  • depth_per_cell Float
    compute='_compute_depth_per_cell'
  • height Integer
    help='Height of the tray in mm'
  • location_ids One2many → stock.location
    comodel_name='stock.location' inverse_name='tray_type_id'
  • name Char
    required=True
  • rows Integer
    required=True
  • width Integer
    help='Width of the tray in mm'
  • width_per_cell Float
    compute='_compute_width_per_cell'
Public methods (1)
  • open_locations(self)

New fields (2)
  • show_tray_destination_location Boolean
    compute='_compute_show_tray_location'
  • show_tray_source_location Boolean
    compute='_compute_show_tray_location'
Public methods (2)
  • action_show_dest_tray(self)
  • action_show_source_tray(self)
REPOSITORY
REPOSITORYOCA/stock-logistics-warehouse
GIT
GIThttps://github.com/OCA/stock-logistics-warehouse.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-warehouse/tree/14.0/stock_location_tray
VERSION
VERSION 1.1.3
CATEGORY
CATEGORYStock
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSEnric Tobella, Florent Xicluna, oca-travis, Weblate, OCA-git-bot, oca-ci, Hai Lang
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:56
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - base_sparse_field
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
stock_location_tray_assets stock.location.tray.assets ir.ui.view qweb Inherits web.assets_backend
view_location_form stock.location.form.tray.type stock.location group Inherits stock.view_location_form
view_location_search stock.location.search.tray.type stock.location field Inherits stock.view_location_search
view_stock_location_tray_type_form stock.location.tray.type.form stock.location.tray.type form New
view_stock_location_tray_type_search stock.location.tray.type.search stock.location.tray.type search New
view_stock_location_tray_type_tree stock.location.tray.type stock.location.tray.type tree New
view_stock_move_line_operation_tree stock.move.line.operations.tree.tray.type stock.move.line field Inherits stock.view_stock_move_line_operation_tree
view_stock_move_line_tray stock.move.line.tray stock.move.line form New
Models touched (3)

New fields (4)
  • cell_in_tray_type_id Many2one
    readonly=True related='location_id.tray_type_id' string='Cell Tray Type'
  • cell_name_format Char
    default=<expr> help='Cells sub-locations generated in a tray will be named after this format. Replacement fields between curly braces are used to inject positions. {x}, {y}, and {z} will be replaced by their corresponding position. Complex formatting (such as padding, ...) can be done using the format specification at https://docs.python.org/3/library/string.html#formatstrings' string='Name Format for Cells'
  • tray_cell_contains_stock Boolean
    compute='_compute_tray_cell_contains_stock' help='Used to know if a cell of a Tray location is empty.'
  • tray_type_id Many2one → stock.location.tray.type
    comodel_name='stock.location.tray.type' ondelete='restrict'
Public methods (4)
  • action_tray_matrix_click(self, coordX, coordY)
  • create(self, vals_list)
    @api.model_create_multi
  • tray_cell_center_position(self)
    Return the center position in mm of a cell The returned position is a tuple with the number of millimeters from the bottom-left corner. Tuple: (left, bottom)
  • write(self, vals)

New fields (11)
  • active Boolean
    default=True
  • code Char
    required=True
  • cols Integer
    required=True
  • depth Integer
    help='Depth of the tray in mm'
  • depth_per_cell Float
    compute='_compute_depth_per_cell'
  • height Integer
    help='Height of the tray in mm'
  • location_ids One2many → stock.location
    comodel_name='stock.location' inverse_name='tray_type_id'
  • name Char
    required=True
  • rows Integer
    required=True
  • width Integer
    help='Width of the tray in mm'
  • width_per_cell Float
    compute='_compute_width_per_cell'
Public methods (1)
  • open_locations(self)

New fields (0)

No new fields.

Public methods (2)
  • action_show_dest_tray(self)
  • action_show_source_tray(self)
REPOSITORY
REPOSITORYOCA/stock-logistics-warehouse
GIT
GIThttps://github.com/OCA/stock-logistics-warehouse.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-warehouse/tree/13.0/stock_location_tray
VERSION
VERSION 1.0.2
CATEGORY
CATEGORYStock
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-travis, OCA-git-bot, Héctor Villarreal Ortega
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:12
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - base_sparse_field
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
stock_location_tray_assets stock.location.tray.assets ir.ui.view qweb Inherits web.assets_backend
view_location_form stock.location.form.tray.type stock.location group Inherits stock.view_location_form
view_location_search stock.location.search.tray.type stock.location field Inherits stock.view_location_search
view_stock_location_tray_type_form stock.location.tray.type.form stock.location.tray.type form New
view_stock_location_tray_type_search stock.location.tray.type.search stock.location.tray.type search New
view_stock_location_tray_type_tree stock.location.tray.type stock.location.tray.type tree New
view_stock_move_line_operation_tree stock.move.line.operations.tree.tray.type stock.move.line field Inherits stock.view_stock_move_line_operation_tree
view_stock_move_line_tray stock.move.line.tray stock.move.line form New
Models touched (3)

New fields (4)
  • cell_in_tray_type_id Many2one
    readonly=True related='location_id.tray_type_id' string='Cell Tray Type'
  • cell_name_format Char
    default=<expr> help='Cells sub-locations generated in a tray will be named after this format. Replacement fields between curly braces are used to inject positions. {x}, {y}, and {z} will be replaced by their corresponding position. Complex formatting (such as padding, ...) can be done using the format specification at https://docs.python.org/3/library/string.html#formatstrings' string='Name Format for Cells'
  • tray_cell_contains_stock Boolean
    compute='_compute_tray_cell_contains_stock' help='Used to know if a cell of a Tray location is empty.'
  • tray_type_id Many2one → stock.location.tray.type
    comodel_name='stock.location.tray.type' ondelete='restrict'
Public methods (4)
  • action_tray_matrix_click(self, coordX, coordY)
  • create(self, vals_list)
    @api.model_create_multi
  • tray_cell_center_position(self)
    Return the center position in mm of a cell The returned position is a tuple with the number of millimeters from the bottom-left corner. Tuple: (left, bottom)
  • write(self, vals)

New fields (11)
  • active Boolean
    default=True
  • code Char
    required=True
  • cols Integer
    required=True
  • depth Integer
    help='Depth of the tray in mm'
  • depth_per_cell Float
    compute='_compute_depth_per_cell'
  • height Integer
    help='Height of the tray in mm'
  • location_ids One2many → stock.location
    comodel_name='stock.location' inverse_name='tray_type_id'
  • name Char
    required=True
  • rows Integer
    required=True
  • width Integer
    help='Width of the tray in mm'
  • width_per_cell Float
    compute='_compute_width_per_cell'
Public methods (1)
  • open_locations(self)

New fields (0)

No new fields.

Public methods (2)
  • action_show_dest_tray(self)
  • action_show_source_tray(self)