Vertical Lift

stock_vertical_lift
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_vertical_lift
VERSION
VERSION 1.3.1
CATEGORY
CATEGORYStock
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSJacques-Etienne Baudoux, Florent Xicluna, Sébastien Alix, Weblate, OCA-git-bot, Simone Orsi, oca-ci, Vincent Van Rossem, Khôi (Kiên Kim)
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:06
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/stock-logistics-warehouse:
    - stock_location_tray
OCA/web:
    - web_notify
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 configuration and dedicated screens to work with Vertical Lift
systems (such as Kardex Remstar, Modula, ...). Drivers for controlling
the lifts physically must be added by additional addons.

Code Analysis

Views touched (19)
XML IDNameModelTypeStatus
packagings packagings ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.vertical.lift res.config.settings block Inherits base.res_config_settings_view_form
vertical_lift_operation_base_button_view vertical.lift.operation.base.button.view vertical.lift.operation.base form New
vertical_lift_operation_base_screen_view vertical.lift.operation.base.screen.view vertical.lift.operation.base form New
vertical_lift_operation_inventory_button_view vertical.lift.operation.inventory.button.view vertical.lift.operation.inventory form Inherits vertical_lift_operation_base_button_view
vertical_lift_operation_inventory_screen_view vertical.lift.operation.inventory.screen.view vertical.lift.operation.inventory form Inherits vertical_lift_operation_base_screen_view
vertical_lift_operation_pick_button_view vertical.lift.operation.pick.button.view vertical.lift.operation.pick form Inherits vertical_lift_operation_base_button_view
vertical_lift_operation_pick_screen_view vertical.lift.operation.pick.screen.view vertical.lift.operation.pick form Inherits vertical_lift_operation_transfer_screen_view
vertical_lift_operation_put_button_view vertical.lift.operation.put.button.view vertical.lift.operation.put form Inherits vertical_lift_operation_base_button_view
vertical_lift_operation_put_screen_view vertical.lift.operation.put.screen.view vertical.lift.operation.put form Inherits vertical_lift_operation_transfer_screen_view
vertical_lift_operation_transfer_screen_view vertical.lift.operation.transfer.screen.view vertical.lift.operation.transfer xpath Inherits vertical_lift_operation_base_screen_view
vertical_lift_shuttle_form_menu vertical.lift.shuttle.view.form.menu vertical.lift.shuttle form New
vertical_lift_shuttle_manual_barcode_form vertical.lift.shuttle.manual.barcode.view.form vertical.lift.shuttle.manual.barcode form New
vertical_lift_shuttle_view_form vertical.lift.shuttle.view.form vertical.lift.shuttle form New
vertical_lift_shuttle_view_kanban vertical.lift.shuttle.kanban vertical.lift.shuttle kanban New
vertical_lift_shuttle_view_tree vertical.lift.shuttle.list vertical.lift.shuttle list New
view_location_form stock.location.form.vertical.lift stock.location div Inherits stock_location_tray.view_location_form
view_location_search stock.location.search.vertical.lift stock.location field Inherits stock_location_tray.view_location_search
view_stock_move_line_operation_tree stock.move.line.operations.list.vertical.lift stock.move.line button Inherits stock_location_tray.view_stock_move_line_operation_tree
Models touched (13)

New fields (1)
  • vertical_lift_secret Char
    config_parameter='stock_vertical_lift.secret' string='Secret for Vertical Lift API'
Public methods (0)

No public methods.

New fields (4)
  • inverse_vertical_lift_shuttle_ids One2many → vertical.lift.shuttle
    comodel_name='vertical.lift.shuttle' inverse_name='location_id'
  • vertical_lift_kind Selection
    compute='_compute_vertical_lift_kind' recursive=True selection=[('view', 'View'), ('shuttle', 'Shuttle'), ('tray', 'Tray'), ('cell', 'Cell')] store=True
  • vertical_lift_location Boolean
    help='Check this box to use it as the view for Vertical Lift Shuttles.' args: 'Is a Vertical Lift View Location?'
  • vertical_lift_shuttle_id Many2one → vertical.lift.shuttle
    comodel_name='vertical.lift.shuttle' compute='_compute_vertical_lift_shuttle_id' recursive=True store=True
Public methods (3)
  • button_fetch_vertical_lift_tray(self)
  • button_release_vertical_lift_tray(self)
  • fetch_vertical_lift_tray(self, cell_location=None)
    Send instructions to the vertical lift hardware to fetch a tray Public method to use for: * fetch the vertical lift tray and presenting it to the operator (physically) * direct the laser pointer to the cell's location if set Depending on the hardware, the laser pointer may not be implemented. The actual implementation of the method goes in the private method ``_hardware_vertical_lift_fetch_tray()``.

New fields (0)

No new fields.

Public methods (1)
  • write(self, vals)

New fields (1)
  • vertical_lift_skipped Boolean
    help='If this flag is set, it means that when the move was being processed in the Vertical Lift, the operator decided to skip its processing.' args: 'Skipped in Vertical Lift?'
Public methods (2)
  • fetch_vertical_lift_tray_dest(self)
  • fetch_vertical_lift_tray_source(self)

New fields (2)
  • vertical_lift_done Boolean
  • vertical_lift_tray_id Many2one → stock.location
    comodel_name='stock.location' compute='_compute_vertical_lift_tray_id' readonly=True store=True
Public methods (0)

No public methods.

New fields (5)
  • answer Char
  • command Char
    required=True
  • error Char
  • name Char
    default=<expr> index=True required=True
  • shuttle_id Many2one → vertical.lift.shuttle
    required=True args: 'vertical.lift.shuttle'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • record_answer(self, answer)

New fields (7)
  • location_id Many2one
    related='shuttle_id.location_id'
  • mode Selection
    related='shuttle_id.mode'
  • name Char
    related='shuttle_id.name'
  • number_of_ops Integer
    compute='_compute_number_of_ops' string='Number of Operations'
  • number_of_ops_all Integer
    compute='_compute_number_of_ops_all' string='Number of Operations in all shuttles'
  • shuttle_id Many2one → vertical.lift.shuttle
    comodel_name='vertical.lift.shuttle' readonly=True required=True
  • state Selection
    default=<expr> selection=<expr>
Public methods (12)
  • action_manual_barcode(self)
  • action_menu(self)
  • action_open_screen(self)
  • button_release(self)
    Release the operation, go to the next
  • button_save(self)
    Confirm the operation (set move to done, ...)
  • next_step(self, direct_eval=False)
  • on_barcode_scanned(self, barcode)
  • on_screen_open(self)
    Called when the screen is opened
  • onchange(self, values, field_name, field_onchange)
  • process_current(self)
    Process the action (pick, put, ...) To implement in sub-classes
  • reset_steps(self)
  • step(self)

New fields (17)
  • last_quantity_input Float
  • lot_id Many2one
    related='quant_id.lot_id'
  • package_id Many2one
    related='quant_id.package_id'
  • product_id Many2one
    related='quant_id.product_id'
  • product_packagings Html
    compute='_compute_product_packagings' string='Packaging'
  • product_qty Float
    related='quant_id.inventory_quantity'
  • product_uom_id Many2one
    related='quant_id.product_uom_id'
  • quant_id Many2one → stock.quant
    string='Current Quant' args: 'stock.quant'
  • quantity_input Float
  • tray_location_id Many2one → stock.location
    comodel_name='stock.location' compute='_compute_tray_data' string='Tray Location'
  • tray_matrix Json
    compute='_compute_tray_data' string='Cells'
  • tray_name Char
    compute='_compute_tray_data'
  • tray_qty Float
    compute='_compute_tray_qty' string='Stock Quantity'
  • tray_type_code Char
    compute='_compute_tray_data' string='Tray Code'
  • tray_type_id Many2one → stock.location.tray.type
    comodel_name='stock.location.tray.type' compute='_compute_tray_data' string='Tray Type'
  • tray_x Integer
    compute='_compute_tray_data' string='X'
  • tray_y Integer
    compute='_compute_tray_data' string='Y'
Public methods (6)
  • button_save(self)
  • clear_current_inventory_line(self)
  • fetch_tray(self)
  • process_current(self)
  • reset_steps(self)
  • select_next_inventory_line(self)

New fields (0)

No new fields.

Public methods (6)
  • button_release(self)
    Release the operation, go to the next
  • button_skip(self)
    Skip the operation, go to the next
  • fetch_tray(self)
  • is_skipped(self)
    Was the current stock.move.line marked as to be skipped?
  • on_barcode_scanned(self, barcode)
  • select_next_move_line(self)

New fields (0)

No new fields.

Public methods (3)
  • button_release(self)
  • fetch_tray(self)
  • on_barcode_scanned(self, barcode)

New fields (18)
  • current_move_line_id Many2one → stock.move.line
    comodel_name='stock.move.line' readonly=True
  • location_dest_id Many2one
    readonly=False related='current_move_line_id.location_dest_id' string='Destination'
  • lot_id Many2one
    readonly=True related='current_move_line_id.lot_id'
  • picking_id Many2one
    related='current_move_line_id.picking_id'
  • picking_origin Char
    related='current_move_line_id.picking_id.origin'
  • picking_partner_id Many2one
    related='current_move_line_id.picking_id.partner_id'
  • product_id Many2one
    related='current_move_line_id.product_id'
  • product_packagings Html
    compute='_compute_product_packagings' string='Packaging'
  • product_uom_id Many2one
    related='current_move_line_id.product_uom_id'
  • quantity Float
    related='current_move_line_id.quantity'
  • tray_location_id Many2one → stock.location
    comodel_name='stock.location' compute='_compute_tray_data' string='Tray Location'
  • tray_matrix Json
    compute='_compute_tray_data' string='Cells'
  • tray_name Char
    compute='_compute_tray_data'
  • tray_qty Float
    compute='_compute_tray_qty' string='Stock Quantity'
  • tray_type_code Char
    compute='_compute_tray_data' string='Tray Code'
  • tray_type_id Many2one → stock.location.tray.type
    comodel_name='stock.location.tray.type' compute='_compute_tray_data' string='Tray Type'
  • tray_x Integer
    compute='_compute_tray_data' string='X'
  • tray_y Integer
    compute='_compute_tray_data' string='Y'
Public methods (7)
  • clear_current_move_line(self)
  • count_move_lines_to_do(self)
    Count move lines to process in current shuttles
  • count_move_lines_to_do_all(self)
    Count move lines to process in all shuttles
  • fetch_tray(self)
  • on_barcode_scanned(self, barcode)
  • process_current(self)
  • reset_steps(self)

New fields (8)
  • command_ids One2many → vertical.lift.command
    string='Hardware commands' args: 'vertical.lift.command', 'shuttle_id'
  • hardware Selection
    default='simulation' required=True selection='_selection_hardware'
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="[('vertical_lift_kind', '=', 'shuttle')]" help='The Shuttle source location for Pick operations and destination location for Put operations.' ondelete='restrict' required=True
  • mode Selection
    default='pick' required=True args: [('pick', 'Pick'), ('put', 'Put'), ('inventory', 'Inventory')]
  • name Char
  • port Integer
    help='network port of the server on which to send the message'
  • server Char
    help='hostname or IP address of the server'
  • use_tls Boolean
    help='set this if the server expects TLS wrapped communication'
Public methods (8)
  • action_back_to_settings(self)
  • action_manual_barcode(self)
  • action_menu(self)
  • action_open_screen(self)
  • release_vertical_lift_tray(self)
    Send instructions to the vertical lift hardware to close trays The actual implementation of the method goes in the private method ``_hardware_vertical_lift_release_tray()``.
  • switch_inventory(self)
  • switch_pick(self)
  • switch_put(self)

New fields (1)
  • barcode Char
Public methods (1)
  • button_save(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_vertical_lift
VERSION
VERSION 1.3.1
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, Thierry Ducrest, oca-travis, Weblate, OCA-git-bot, Simone Orsi, SilvioC2C, oca-ci, Hai Lang, Mmequignon
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:57
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/stock-logistics-warehouse:
    - stock_location_tray
OCA/web:
    - web_notify
    - web_ir_actions_act_view_reload
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 (19)
XML IDNameModelTypeStatus
packagings packagings ir.ui.view qweb New
stock_vertical_lift_assets stock.vertical.lift.assets ir.ui.view qweb Inherits web.assets_backend
vertical_lift_operation_base_button_view vertical.lift.operation.base.button.view vertical.lift.operation.base form New
vertical_lift_operation_base_screen_view vertical.lift.operation.base.screen.view vertical.lift.operation.base form New
vertical_lift_operation_inventory_button_view vertical.lift.operation.inventory.button.view vertical.lift.operation.inventory form Inherits vertical_lift_operation_base_button_view
vertical_lift_operation_inventory_screen_view vertical.lift.operation.inventory.screen.view vertical.lift.operation.inventory form Inherits vertical_lift_operation_base_screen_view
vertical_lift_operation_pick_button_view vertical.lift.operation.pick.button.view vertical.lift.operation.pick form Inherits vertical_lift_operation_base_button_view
vertical_lift_operation_pick_screen_view vertical.lift.operation.pick.screen.view vertical.lift.operation.pick form Inherits vertical_lift_operation_transfer_screen_view
vertical_lift_operation_put_button_view vertical.lift.operation.put.button.view vertical.lift.operation.put form Inherits vertical_lift_operation_base_button_view
vertical_lift_operation_put_screen_view vertical.lift.operation.put.screen.view vertical.lift.operation.put form Inherits vertical_lift_operation_transfer_screen_view
vertical_lift_operation_transfer_screen_view vertical.lift.operation.transfer.screen.view vertical.lift.operation.transfer xpath Inherits vertical_lift_operation_base_screen_view
vertical_lift_shuttle_form_menu vertical.lift.shuttle.view.form.menu vertical.lift.shuttle form New
vertical_lift_shuttle_manual_barcode_form vertical.lift.shuttle.manual.barcode.view.form vertical.lift.shuttle.manual.barcode form New
vertical_lift_shuttle_view_form vertical.lift.shuttle.view.form vertical.lift.shuttle form New
vertical_lift_shuttle_view_kanban vertical.lift.shuttle.kanban vertical.lift.shuttle kanban New
vertical_lift_shuttle_view_tree vertical.lift.shuttle.tree vertical.lift.shuttle tree New
view_location_form stock.location.form.vertical.lift stock.location div Inherits stock_location_tray.view_location_form
view_location_search stock.location.search.vertical.lift stock.location field Inherits stock_location_tray.view_location_search
view_stock_move_line_operation_tree stock.move.line.operations.tree.vertical.lift stock.move.line button Inherits stock_location_tray.view_stock_move_line_operation_tree
Models touched (13)

New fields (2)
  • vertical_lift_done Boolean
    default=False
  • vertical_lift_tray_id Many2one → stock.location
    comodel_name='stock.location' compute='_compute_vertical_lift_tray_id' readonly=True store=True
Public methods (0)

No public methods.

New fields (4)
  • inverse_vertical_lift_shuttle_ids One2many → vertical.lift.shuttle
    comodel_name='vertical.lift.shuttle' inverse_name='location_id' readonly=True
  • vertical_lift_kind Selection
    compute='_compute_vertical_lift_kind' selection=[('view', 'View'), ('shuttle', 'Shuttle'), ('tray', 'Tray'), ('cell', 'Cell')] store=True
  • vertical_lift_location Boolean
    default=False help='Check this box to use it as the view for Vertical Lift Shuttles.' args: 'Is a Vertical Lift View Location?'
  • vertical_lift_shuttle_id Many2one → vertical.lift.shuttle
    comodel_name='vertical.lift.shuttle' compute='_compute_vertical_lift_shuttle_id' store=True
Public methods (3)
  • button_fetch_vertical_lift_tray(self)
  • button_release_vertical_lift_tray(self)
  • fetch_vertical_lift_tray(self, cell_location=None)
    Send instructions to the vertical lift hardware to fetch a tray Public method to use for: * fetch the vertical lift tray and presenting it to the operator (physically) * direct the laser pointer to the cell's location if set Depending on the hardware, the laser pointer may not be implemented. The actual implementation of the method goes in the private method ``_hardware_vertical_lift_fetch_tray()``.

New fields (0)

No new fields.

Public methods (1)
  • write(self, vals)

New fields (1)
  • vertical_lift_skipped Boolean
    default=False help='If this flag is set, it means that when the move was being processed in the Vertical Lift, the operator decided to skip its processing.' args: 'Skipped in Vertical Lift?'
Public methods (2)
  • fetch_vertical_lift_tray_dest(self)
  • fetch_vertical_lift_tray_source(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • answer Char
  • command Char
    required=True
  • error Char
  • name Char
    default=<expr> index=True required=True args: 'Name'
  • shuttle_id Many2one → vertical.lift.shuttle
    required=True args: 'vertical.lift.shuttle'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • record_answer(self, answer)

New fields (7)
  • location_id Many2one
    readonly=True related='shuttle_id.location_id'
  • mode Selection
    readonly=True related='shuttle_id.mode'
  • name Char
    readonly=True related='shuttle_id.name'
  • number_of_ops Integer
    compute='_compute_number_of_ops' string='Number of Operations'
  • number_of_ops_all Integer
    compute='_compute_number_of_ops_all' string='Number of Operations in all shuttles'
  • shuttle_id Many2one → vertical.lift.shuttle
    comodel_name='vertical.lift.shuttle' readonly=True required=True
  • state Selection
    default=<expr> selection=<expr>
Public methods (12)
  • action_manual_barcode(self)
  • action_menu(self)
  • action_open_screen(self)
  • button_release(self)
    Release the operation, go to the next
  • button_save(self)
    Confirm the operation (set move to done, ...)
  • next_step(self, direct_eval=False)
  • on_barcode_scanned(self, barcode)
  • on_screen_open(self)
    Called when the screen is opened
  • onchange(self, values, field_name, field_onchange)
  • process_current(self)
    Process the action (pick, put, ...) To implement in sub-classes
  • reset_steps(self)
  • step(self)

New fields (17)
  • current_inventory_line_id Many2one → stock.inventory.line
    comodel_name='stock.inventory.line' readonly=True
  • inventory_id Many2one
    readonly=True related='current_inventory_line_id.inventory_id'
  • last_quantity_input Float
  • lot_id Many2one
    readonly=True related='current_inventory_line_id.prod_lot_id'
  • package_id Many2one
    readonly=True related='current_inventory_line_id.package_id'
  • product_id Many2one
    readonly=True related='current_inventory_line_id.product_id'
  • product_packagings Html
    compute='_compute_product_packagings' string='Packaging'
  • product_qty Float
    readonly=True related='current_inventory_line_id.product_qty'
  • product_uom_id Many2one
    readonly=True related='current_inventory_line_id.product_uom_id'
  • quantity_input Float
  • tray_location_id Many2one → stock.location
    comodel_name='stock.location' compute='_compute_tray_data' string='Tray Location'
  • tray_name Char
    compute='_compute_tray_data' string='Tray Name'
  • tray_qty Float
    compute='_compute_tray_qty' string='Stock Quantity'
  • tray_type_code Char
    compute='_compute_tray_data' string='Tray Code'
  • tray_type_id Many2one → stock.location.tray.type
    comodel_name='stock.location.tray.type' compute='_compute_tray_data' string='Tray Type'
  • tray_x Integer
    compute='_compute_tray_data' string='X'
  • tray_y Integer
    compute='_compute_tray_data' string='Y'
Public methods (6)
  • button_save(self)
  • clear_current_inventory_line(self)
  • fetch_tray(self)
  • process_current(self)
  • reset_steps(self)
  • select_next_inventory_line(self)

New fields (0)

No new fields.

Public methods (6)
  • button_release(self)
    Release the operation, go to the next
  • button_skip(self)
    Skip the operation, go to the next
  • fetch_tray(self)
  • is_skipped(self)
    Was the current stock.move.line marked as to be skipped?
  • on_barcode_scanned(self, barcode)
  • select_next_move_line(self)

New fields (0)

No new fields.

Public methods (3)
  • button_release(self)
  • fetch_tray(self)
  • on_barcode_scanned(self, barcode)

New fields (18)
  • current_move_line_id Many2one → stock.move.line
    comodel_name='stock.move.line' readonly=True
  • location_dest_id Many2one
    readonly=False related='current_move_line_id.location_dest_id' string='Destination'
  • lot_id Many2one
    readonly=True related='current_move_line_id.lot_id'
  • picking_id Many2one
    readonly=True related='current_move_line_id.picking_id'
  • picking_origin Char
    readonly=True related='current_move_line_id.picking_id.origin'
  • picking_partner_id Many2one
    readonly=True related='current_move_line_id.picking_id.partner_id'
  • product_id Many2one
    readonly=True related='current_move_line_id.product_id'
  • product_packagings Html
    compute='_compute_product_packagings' string='Packaging'
  • product_uom_id Many2one
    readonly=True related='current_move_line_id.product_uom_id'
  • product_uom_qty Float
    readonly=True related='current_move_line_id.product_uom_qty'
  • qty_done Float
    readonly=True related='current_move_line_id.qty_done'
  • tray_location_id Many2one → stock.location
    comodel_name='stock.location' compute='_compute_tray_data' string='Tray Location'
  • tray_name Char
    compute='_compute_tray_data' string='Tray Name'
  • tray_qty Float
    compute='_compute_tray_qty' string='Stock Quantity'
  • tray_type_code Char
    compute='_compute_tray_data' string='Tray Code'
  • tray_type_id Many2one → stock.location.tray.type
    comodel_name='stock.location.tray.type' compute='_compute_tray_data' string='Tray Type'
  • tray_x Integer
    compute='_compute_tray_data' string='X'
  • tray_y Integer
    compute='_compute_tray_data' string='Y'
Public methods (7)
  • clear_current_move_line(self)
  • count_move_lines_to_do(self)
    Count move lines to process in current shuttles
  • count_move_lines_to_do_all(self)
    Count move lines to process in all shuttles
  • fetch_tray(self)
  • on_barcode_scanned(self, barcode)
  • process_current(self)
  • reset_steps(self)

New fields (8)
  • command_ids One2many → vertical.lift.command
    string='Hardware commands' args: 'vertical.lift.command', 'shuttle_id'
  • hardware Selection
    default='simulation' required=True selection='_selection_hardware'
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="[('vertical_lift_kind', '=', 'shuttle')]" help='The Shuttle source location for Pick operations and destination location for Put operations.' ondelete='restrict' required=True
  • mode Selection
    default='pick' required=True args: [('pick', 'Pick'), ('put', 'Put'), ('inventory', 'Inventory')]
  • name Char
  • port Integer
    help='network port of the server on which to send the message'
  • server Char
    help='hostname or IP address of the server'
  • use_tls Boolean
    help='set this if the server expects TLS wrapped communication'
Public methods (8)
  • action_back_to_settings(self)
  • action_manual_barcode(self)
  • action_menu(self)
  • action_open_screen(self)
  • release_vertical_lift_tray(self)
    Send instructions to the vertical lift hardware to close trays The actual implementation of the method goes in the private method ``_hardware_vertical_lift_release_tray()``.
  • switch_inventory(self)
  • switch_pick(self)
  • switch_put(self)

New fields (1)
  • barcode Char
    string='Barcode'
Public methods (1)
  • button_save(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_vertical_lift
VERSION
VERSION 1.3.1
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, Pedro M. Baeza, GitHub, Víctor Martínez, Sébastien Alix, oca-travis, OCA-git-bot, Telmo Santos, Carlos Serra-Toro
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:12
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/stock-logistics-warehouse:
    - stock_location_tray
OCA/web:
    - web_notify
    - web_ir_actions_act_view_reload
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 (19)
XML IDNameModelTypeStatus
packagings packagings ir.ui.view qweb New
stock_vertical_lift_assets stock.vertical.lift.assets ir.ui.view qweb Inherits web.assets_backend
vertical_lift_operation_base_button_view vertical.lift.operation.base.button.view vertical.lift.operation.base form New
vertical_lift_operation_base_screen_view vertical.lift.operation.base.screen.view vertical.lift.operation.base form New
vertical_lift_operation_inventory_button_view vertical.lift.operation.inventory.button.view vertical.lift.operation.inventory form Inherits vertical_lift_operation_base_button_view
vertical_lift_operation_inventory_screen_view vertical.lift.operation.inventory.screen.view vertical.lift.operation.inventory form Inherits vertical_lift_operation_base_screen_view
vertical_lift_operation_pick_button_view vertical.lift.operation.pick.button.view vertical.lift.operation.pick form Inherits vertical_lift_operation_base_button_view
vertical_lift_operation_pick_screen_view vertical.lift.operation.pick.screen.view vertical.lift.operation.pick form Inherits vertical_lift_operation_transfer_screen_view
vertical_lift_operation_put_button_view vertical.lift.operation.put.button.view vertical.lift.operation.put form Inherits vertical_lift_operation_base_button_view
vertical_lift_operation_put_screen_view vertical.lift.operation.put.screen.view vertical.lift.operation.put form Inherits vertical_lift_operation_transfer_screen_view
vertical_lift_operation_transfer_screen_view vertical.lift.operation.transfer.screen.view vertical.lift.operation.transfer xpath Inherits vertical_lift_operation_base_screen_view
vertical_lift_shuttle_form_menu vertical.lift.shuttle.view.form.menu vertical.lift.shuttle form New
vertical_lift_shuttle_manual_barcode_form vertical.lift.shuttle.manual.barcode.view.form vertical.lift.shuttle.manual.barcode form New
vertical_lift_shuttle_view_form vertical.lift.shuttle.view.form vertical.lift.shuttle form New
vertical_lift_shuttle_view_kanban vertical.lift.shuttle.kanban vertical.lift.shuttle kanban New
vertical_lift_shuttle_view_tree vertical.lift.shuttle.tree vertical.lift.shuttle tree New
view_location_form stock.location.form.vertical.lift stock.location div Inherits stock_location_tray.view_location_form
view_location_search stock.location.search.vertical.lift stock.location field Inherits stock_location_tray.view_location_search
view_stock_move_line_operation_tree stock.move.line.operations.tree.vertical.lift stock.move.line button Inherits stock_location_tray.view_stock_move_line_operation_tree
Models touched (13)

New fields (2)
  • vertical_lift_done Boolean
    default=False
  • vertical_lift_tray_id Many2one → stock.location
    comodel_name='stock.location' compute='_compute_vertical_lift_tray_id' readonly=True store=True
Public methods (0)

No public methods.

New fields (4)
  • inverse_vertical_lift_shuttle_ids One2many → vertical.lift.shuttle
    comodel_name='vertical.lift.shuttle' inverse_name='location_id' readonly=True
  • vertical_lift_kind Selection
    compute='_compute_vertical_lift_kind' selection=[('view', 'View'), ('shuttle', 'Shuttle'), ('tray', 'Tray'), ('cell', 'Cell')] store=True
  • vertical_lift_location Boolean
    default=False help='Check this box to use it as the view for Vertical Lift Shuttles.' args: 'Is a Vertical Lift View Location?'
  • vertical_lift_shuttle_id Many2one → vertical.lift.shuttle
    comodel_name='vertical.lift.shuttle' compute='_compute_vertical_lift_shuttle_id' store=True
Public methods (3)
  • button_fetch_vertical_lift_tray(self)
  • button_release_vertical_lift_tray(self)
  • fetch_vertical_lift_tray(self, cell_location=None)
    Send instructions to the vertical lift hardware to fetch a tray Public method to use for: * fetch the vertical lift tray and presenting it to the operator (physically) * direct the laser pointer to the cell's location if set Depending on the hardware, the laser pointer may not be implemented. The actual implementation of the method goes in the private method ``_hardware_vertical_lift_fetch_tray()``.

New fields (0)

No new fields.

Public methods (1)
  • write(self, vals)

New fields (1)
  • vertical_lift_skipped Boolean
    default=False help='If this flag is set, it means that when the move was being processed in the Vertical Lift, the operator decided to skip its processing.' args: 'Skipped in Vertical Lift?'
Public methods (2)
  • fetch_vertical_lift_tray_dest(self)
  • fetch_vertical_lift_tray_source(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • answer Char
  • command Char
    required=True
  • error Char
  • name Char
    default=<expr> index=True required=True args: 'Name'
  • shuttle_id Many2one → vertical.lift.shuttle
    required=True args: 'vertical.lift.shuttle'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • record_answer(self, answer)

New fields (7)
  • location_id Many2one
    readonly=True related='shuttle_id.location_id'
  • mode Selection
    readonly=True related='shuttle_id.mode'
  • name Char
    readonly=True related='shuttle_id.name'
  • number_of_ops Integer
    compute='_compute_number_of_ops' string='Number of Operations'
  • number_of_ops_all Integer
    compute='_compute_number_of_ops_all' string='Number of Operations in all shuttles'
  • shuttle_id Many2one → vertical.lift.shuttle
    comodel_name='vertical.lift.shuttle' readonly=True required=True
  • state Selection
    default=<expr> selection=<expr>
Public methods (12)
  • action_manual_barcode(self)
  • action_menu(self)
  • action_open_screen(self)
  • button_release(self)
    Release the operation, go to the next
  • button_save(self)
    Confirm the operation (set move to done, ...)
  • next_step(self, direct_eval=False)
  • on_barcode_scanned(self, barcode)
  • on_screen_open(self)
    Called when the screen is opened
  • onchange(self, values, field_name, field_onchange)
  • process_current(self)
    Process the action (pick, put, ...) To implement in sub-classes
  • reset_steps(self)
  • step(self)

New fields (17)
  • current_inventory_line_id Many2one → stock.inventory.line
    comodel_name='stock.inventory.line' readonly=True
  • inventory_id Many2one
    readonly=True related='current_inventory_line_id.inventory_id'
  • last_quantity_input Float
  • lot_id Many2one
    readonly=True related='current_inventory_line_id.prod_lot_id'
  • package_id Many2one
    readonly=True related='current_inventory_line_id.package_id'
  • product_id Many2one
    readonly=True related='current_inventory_line_id.product_id'
  • product_packagings Html
    compute='_compute_product_packagings' string='Packaging'
  • product_qty Float
    readonly=True related='current_inventory_line_id.product_qty'
  • product_uom_id Many2one
    readonly=True related='current_inventory_line_id.product_uom_id'
  • quantity_input Float
  • tray_location_id Many2one → stock.location
    comodel_name='stock.location' compute='_compute_tray_data' string='Tray Location'
  • tray_name Char
    compute='_compute_tray_data' string='Tray Name'
  • tray_qty Float
    compute='_compute_tray_qty' string='Stock Quantity'
  • tray_type_code Char
    compute='_compute_tray_data' string='Tray Code'
  • tray_type_id Many2one → stock.location.tray.type
    comodel_name='stock.location.tray.type' compute='_compute_tray_data' string='Tray Type'
  • tray_x Integer
    compute='_compute_tray_data' string='X'
  • tray_y Integer
    compute='_compute_tray_data' string='Y'
Public methods (6)
  • button_save(self)
  • clear_current_inventory_line(self)
  • fetch_tray(self)
  • process_current(self)
  • reset_steps(self)
  • select_next_inventory_line(self)

New fields (0)

No new fields.

Public methods (6)
  • button_release(self)
    Release the operation, go to the next
  • button_skip(self)
    Skip the operation, go to the next
  • fetch_tray(self)
  • is_skipped(self)
    Was the current stock.move.line marked as to be skipped?
  • on_barcode_scanned(self, barcode)
  • select_next_move_line(self)

New fields (0)

No new fields.

Public methods (3)
  • button_release(self)
  • fetch_tray(self)
  • on_barcode_scanned(self, barcode)

New fields (18)
  • current_move_line_id Many2one → stock.move.line
    comodel_name='stock.move.line' readonly=True
  • location_dest_id Many2one
    readonly=False related='current_move_line_id.location_dest_id' string='Destination'
  • lot_id Many2one
    readonly=True related='current_move_line_id.lot_id'
  • picking_id Many2one
    readonly=True related='current_move_line_id.picking_id'
  • picking_origin Char
    readonly=True related='current_move_line_id.picking_id.origin'
  • picking_partner_id Many2one
    readonly=True related='current_move_line_id.picking_id.partner_id'
  • product_id Many2one
    readonly=True related='current_move_line_id.product_id'
  • product_packagings Html
    compute='_compute_product_packagings' string='Packaging'
  • product_uom_id Many2one
    readonly=True related='current_move_line_id.product_uom_id'
  • product_uom_qty Float
    readonly=True related='current_move_line_id.product_uom_qty'
  • qty_done Float
    readonly=True related='current_move_line_id.qty_done'
  • tray_location_id Many2one → stock.location
    comodel_name='stock.location' compute='_compute_tray_data' string='Tray Location'
  • tray_name Char
    compute='_compute_tray_data' string='Tray Name'
  • tray_qty Float
    compute='_compute_tray_qty' string='Stock Quantity'
  • tray_type_code Char
    compute='_compute_tray_data' string='Tray Code'
  • tray_type_id Many2one → stock.location.tray.type
    comodel_name='stock.location.tray.type' compute='_compute_tray_data' string='Tray Type'
  • tray_x Integer
    compute='_compute_tray_data' string='X'
  • tray_y Integer
    compute='_compute_tray_data' string='Y'
Public methods (7)
  • clear_current_move_line(self)
  • count_move_lines_to_do(self)
    Count move lines to process in current shuttles
  • count_move_lines_to_do_all(self)
    Count move lines to process in all shuttles
  • fetch_tray(self)
  • on_barcode_scanned(self, barcode)
  • process_current(self)
  • reset_steps(self)

New fields (8)
  • command_ids One2many → vertical.lift.command
    string='Hardware commands' args: 'vertical.lift.command', 'shuttle_id'
  • hardware Selection
    default='simulation' required=True selection='_selection_hardware'
  • location_id Many2one → stock.location
    comodel_name='stock.location' domain="[('vertical_lift_kind', '=', 'shuttle')]" help='The Shuttle source location for Pick operations and destination location for Put operations.' ondelete='restrict' required=True
  • mode Selection
    default='pick' required=True args: [('pick', 'Pick'), ('put', 'Put'), ('inventory', 'Inventory')]
  • name Char
  • port Integer
    help='network port of the server on which to send the message'
  • server Char
    help='hostname or IP address of the server'
  • use_tls Boolean
    help='set this if the server expects TLS wrapped communication'
Public methods (8)
  • action_back_to_settings(self)
  • action_manual_barcode(self)
  • action_menu(self)
  • action_open_screen(self)
  • release_vertical_lift_tray(self)
    Send instructions to the vertical lift hardware to close trays The actual implementation of the method goes in the private method ``_hardware_vertical_lift_release_tray()``.
  • switch_inventory(self)
  • switch_pick(self)
  • switch_put(self)

New fields (1)
  • barcode Char
    string='Barcode'
Public methods (1)
  • button_save(self)