| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/stock-logistics-warehouse |
| GIT | |
| GIT | https://github.com/OCA/stock-logistics-warehouse.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/stock-logistics-warehouse/tree/18.0/stock_vlm_mgmt |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Stock |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, christian-ramos-tecnativa |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/stock-logistics-warehouse |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:06 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
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 - base_sparse_field |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module adds basic a management system for Vertical Lift Modules. It's thought as a simpler alternative attemp to stock_vertical_lift and all the dependencies that come with it. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
svm_operation_picking_form_view |
stock.picking | xpath | Inherits stock.view_picking_form | |
view_location_form |
stock.location | div | Inherits stock.view_location_form | |
view_location_search |
stock.location | separator | Inherits stock.view_location_search | |
view_location_vlm_tray_form |
stock.location.vlm.tray | form | New | |
view_location_vlm_tray_tree |
stock.location.vlm.tray | list | New | |
view_stock_location_tray_type_form |
stock.location.vlm.tray.type | form | New | |
view_stock_location_tray_type_search |
stock.location.vlm.tray.type | search | New | |
view_stock_location_tray_type_tree |
stock.location.vlm.tray.type | list | New | |
view_stock_quant_inventory_tree |
stock.quant.vlm | list | Inherits view_stock_quant_vlm_tree | |
view_stock_quant_tree |
stock.quant | field | Inherits stock.view_stock_quant_tree | |
view_stock_quant_tree_editable |
stock.quant | field | Inherits stock.view_stock_quant_tree_editable | |
view_stock_quant_tree_inventory_editable |
stock.quant | field | Inherits stock.view_stock_quant_tree_inventory_editable | |
view_stock_quant_vlm_form |
stock.quant.vlm | form | New | |
view_stock_quant_vlm_tree |
stock.quant.vlm | list | New | |
view_vlm_task_form |
stock.vlm.task | form | New | |
view_vlm_task_tree |
stock.vlm.task | list | New | |
vlm_quant_search_view |
stock.quant.vlm | search | New | |
vlm_task_action_form_view |
stock.vlm.task.action | form | New | |
vlm_task_search_view |
stock.vlm.task | search | New |
is_vlm
Boolean
vlm_address
Char
help='An VLM normally will be behind some propietary proxy that handles several VLMs at once, so we need to set which one corresponds to this location'
vlm_hostname
Char
vlm_password
Char
vlm_port
Char
vlm_removal_strategy
Selection
default='fifo'
selection=[('fifo', 'FIFO'), ('lifo', 'LIFO'), ('optimal', 'Less carrier movements')]
vlm_sequence_id
Many2one → ir.sequence
comodel_name='ir.sequence'
vlm_tray_ids
One2many → stock.location.vlm.tray
comodel_name='stock.location.vlm.tray'
inverse_name='location_id'
vlm_user
Char
vlm_vendor
Selection
selection=[('test', 'Test')]
action_release_vlm_trays(self)
action_view_vlm_quants(self)
action_view_vlm_tray(self)
send_vlm_request(self, data: dict, **options) -> dict
is_full
Boolean
location_id
Many2one → stock.location
comodel_name='stock.location'
domain=[('is_vlm', '=', True)]
name
Char
tray_matrix
Serialized
compute='_compute_tray_matrix'
tray_type_id
Many2one → stock.location.vlm.tray.type
comodel_name='stock.location.vlm.tray.type'
required=True
action_tray_call(self)
action_tray_content(self, pos_x=None, pos_y=None)
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'
name
Char
required=True
rows
Integer
required=True
tray_matrix
Serialized
compute='_compute_tray_matrix'
width
Integer
help='Width of the tray in mm'
width_per_cell
Float
compute='_compute_width_per_cell'
No public methods.
has_vlm_operation
Boolean
compute='_compute_has_vlm_operation'
vlm_pending_quantity
Float
compute='_compute_vlm_pending_quantity'
copy=False
default=0.0
digits='Product Unit of Measure'
help='Quantity pending on VLM Operations'
readonly=False
store=True
No public methods.
has_pending_vlm_tasks
Boolean
compute='_compute_has_pending_vlm_tasks'
has_vlm_operations
Boolean
compute='_compute_has_vlm_operations'
has_vlm_pending_operations
Boolean
compute='_compute_has_vlm_pending_operations'
vlm_move_line_ids
Many2many → stock.move.line
comodel_name='stock.move.line'
compute='_compute_vlm_move_line_ids'
vlm_pending_move_line_ids
Many2many → stock.move.line
comodel_name='stock.move.line'
compute='_compute_vlm_move_line_ids'
vlm_task_ids
Many2many → stock.vlm.task
comodel_name='stock.vlm.task'
compute='_compute_vlm_task_ids'
action_do_vlm_tasks(self)
action_open_vlm_task(self)
vlm_quant_ids
One2many → stock.quant.vlm
comodel_name='stock.quant.vlm'
inverse_name='quant_id'
action_view_in_vlm_structure(self)
location_id
Many2one → stock.location
comodel_name='stock.location'
product_id
Many2one → product.product
comodel_name='product.product'
required=True
quant_id
Many2one → stock.quant
comodel_name='stock.quant'
quantity
Float
tray_id
Many2one → stock.location.vlm.tray
comodel_name='stock.location.vlm.tray'
tray_type_id
Many2one
related='tray_id.tray_type_id'
action_task_detail(self)
create(self, vals_list)
unlink(self)
write(self, vals)
display_name
Char
compute='_compute_display_name'
location_id
Many2one → stock.location
comodel_name='stock.location'
move_line_ids
Many2many → stock.move.line
comodel_name='stock.move.line'
product_id
Many2one → product.product
comodel_name='product.product'
quant_id
Many2one → stock.quant
comodel_name='stock.quant'
quantity_done
Float
digits='Product Unit of Measure'
quantity_pending
Float
digits='Product Unit of Measure'
reference
Char
default=''
skipped
Boolean
splitted_vlm_task_id
Many2one → stock.vlm.task
comodel_name='stock.vlm.task'
state
Selection
selection=[('pending', 'Pending'), ('waiting', 'Waiting'), ('done', 'Done')]
task_type
Selection
selection=[('put', 'Put'), ('get', 'Get'), ('count', 'Count')]
tray_id
Many2one → stock.location.vlm.tray
comodel_name='stock.location.vlm.tray'
tray_type_id
Many2one
related='tray_id.tray_type_id'
vlm_quant_id
Many2one → stock.quant.vlm
comodel_name='stock.quant.vlm'
action_command_task(self)
action_command_task_threaded(self)
action_do_tasks(self)
image_512
Image
related='vlm_task_id.product_id.image_512'
location_id
Many2one → stock.location
comodel_name='stock.location'
related='vlm_task_id.location_id'
next_vlm_task_id
Many2one → stock.vlm.task
comodel_name='stock.vlm.task'
compute='_compute_next_vlm_task_id'
previous_vlm_task_id
Many2one → stock.vlm.task
comodel_name='stock.vlm.task'
compute='_compute_next_vlm_task_id'
quantity_done
Float
quantity_pending
Float
readonly=True
splitted_vlm_task_id
Many2one → stock.vlm.task
comodel_name='stock.vlm.task'
related='vlm_task_id.splitted_vlm_task_id'
state
Selection
compute='_compute_state'
selection=[('pending', 'Pending'), ('waiting', 'Waiting'), ('done', 'Done'), ('skipped', 'Skipped'), ('edit', 'Edit')]
tray_id
Many2one → stock.location.vlm.tray
comodel_name='stock.location.vlm.tray'
vlm_task_id
Many2one → stock.vlm.task
comodel_name='stock.vlm.task'
required=True
string='Selected task'
vlm_task_ids
Many2many → stock.vlm.task
comodel_name='stock.vlm.task'
vlm_tasks_partial
Integer
compute='_compute_vlm_tasks_total'
vlm_tasks_progress
Integer
compute='_compute_vlm_tasks_total'
vlm_tasks_total
Integer
compute='_compute_vlm_tasks_total'
warning
Char
readonly=True
action_command(self)
action_go_to_task(self, go_to='current')
action_manual_set(self)
action_next_task(self)
action_previous_task(self)
action_skip_task(self)
default_get(self, fields)
human_pos_x
Integer
compute='_compute_human_pos_x'
inverse='_inverse_human_pos_x'
readonly=False
string='X'
human_pos_y
Integer
compute='_compute_human_pos_y'
inverse='_inverse_human_pos_y'
readonly=False
string='Y'
pos_x
Integer
compute='_compute_pos'
readonly=False
store=True
pos_y
Integer
compute='_compute_pos'
readonly=False
store=True
tray_id
Many2one → stock.location.vlm.tray
comodel_name='stock.location.vlm.tray'
tray_matrix
Serialized
compute='_compute_tray_matrix'
tray_type_id
Many2one → stock.location.vlm.tray.type
comodel_name='stock.location.vlm.tray.type'
tray_cell_center_position(self, pos_x=None, pos_y=None)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/stock-logistics-warehouse |
| GIT | |
| GIT | https://github.com/OCA/stock-logistics-warehouse.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/stock-logistics-warehouse/tree/16.0/stock_vlm_mgmt |
| VERSION | |
| VERSION | 1.0.3 |
| CATEGORY | |
| CATEGORY | Stock |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, David, oca-ci, CristianoMafraJunior, ArnauCForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/stock-logistics-warehouse |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:45 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - stock - product - base - base_setup - web - bus - web_tour - 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 | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
svm_operation_picking_form_view |
stock.picking | xpath | Inherits stock.view_picking_form | |
view_location_form |
stock.location | div | Inherits stock.view_location_form | |
view_location_search |
stock.location | separator | Inherits stock.view_location_search | |
view_location_vlm_tray_form |
stock.location.vlm.tray | form | New | |
view_location_vlm_tray_tree |
stock.location.vlm.tray | tree | New | |
view_stock_location_tray_type_form |
stock.location.vlm.tray.type | form | New | |
view_stock_location_tray_type_search |
stock.location.vlm.tray.type | search | New | |
view_stock_location_tray_type_tree |
stock.location.vlm.tray.type | tree | New | |
view_stock_quant_inventory_tree |
stock.quant.vlm | tree | Inherits view_stock_quant_vlm_tree | |
view_stock_quant_tree |
stock.quant | field | Inherits stock.view_stock_quant_tree | |
view_stock_quant_tree_editable |
stock.quant | field | Inherits stock.view_stock_quant_tree_editable | |
view_stock_quant_tree_inventory_editable |
stock.quant | field | Inherits stock.view_stock_quant_tree_inventory_editable | |
view_stock_quant_vlm_form |
stock.quant.vlm | form | New | |
view_stock_quant_vlm_tree |
stock.quant.vlm | tree | New | |
view_vlm_task_form |
stock.vlm.task | form | New | |
view_vlm_task_tree |
stock.vlm.task | tree | New | |
vlm_quant_search_view |
stock.quant.vlm | search | New | |
vlm_task_action_form_view |
stock.vlm.task.action | form | New | |
vlm_task_search_view |
stock.vlm.task | search | New |
is_vlm
Boolean
vlm_address
Char
help='An VLM normally will be behind some propietary proxy that handles several VLMs at once, so we need to set which one corresponds to this location'
vlm_hostname
Char
vlm_password
Char
vlm_port
Char
vlm_removal_strategy
Selection
default='fifo'
selection=[('fifo', 'FIFO'), ('lifo', 'LIFO'), ('optimal', 'Less carrier movements')]
vlm_sequence_id
Many2one → ir.sequence
comodel_name='ir.sequence'
vlm_tray_ids
One2many → stock.location.vlm.tray
comodel_name='stock.location.vlm.tray'
inverse_name='location_id'
vlm_user
Char
vlm_vendor
Selection
selection=[('test', 'Test')]
action_release_vlm_trays(self)
action_view_vlm_quants(self)
action_view_vlm_tray(self)
send_vlm_request(self, data: dict, **options) -> dict
is_full
Boolean
location_id
Many2one → stock.location
comodel_name='stock.location'
domain=[('is_vlm', '=', True)]
name
Char
tray_matrix
Serialized
compute='_compute_tray_matrix'
tray_type_id
Many2one → stock.location.vlm.tray.type
comodel_name='stock.location.vlm.tray.type'
required=True
action_tray_call(self)
action_tray_content(self, pos_x=None, pos_y=None)
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'
name
Char
required=True
rows
Integer
required=True
tray_matrix
Serialized
compute='_compute_tray_matrix'
width
Integer
help='Width of the tray in mm'
width_per_cell
Float
compute='_compute_width_per_cell'
No public methods.
has_vlm_operation
Boolean
compute='_compute_has_vlm_operation'
vlm_pending_quantity
Float
compute='_compute_vlm_pending_quantity'
copy=False
default=0.0
digits='Product Unit of Measure'
help='Quantity pending on VLM Operations'
readonly=False
store=True
No public methods.
has_pending_vlm_tasks
Boolean
compute='_compute_has_pending_vlm_tasks'
has_vlm_operations
Boolean
compute='_compute_has_vlm_operations'
has_vlm_pending_operations
Boolean
compute='_compute_has_vlm_pending_operations'
vlm_move_line_ids
Many2many → stock.move.line
comodel_name='stock.move.line'
compute='_compute_vlm_move_line_ids'
vlm_pending_move_line_ids
Many2many → stock.move.line
comodel_name='stock.move.line'
compute='_compute_vlm_move_line_ids'
vlm_task_ids
Many2many → stock.vlm.task
comodel_name='stock.vlm.task'
compute='_compute_vlm_task_ids'
action_do_vlm_tasks(self)
action_open_vlm_task(self)
vlm_quant_ids
One2many → stock.quant.vlm
comodel_name='stock.quant.vlm'
inverse_name='quant_id'
action_view_in_vlm_structure(self)
location_id
Many2one → stock.location
comodel_name='stock.location'
product_id
Many2one → product.product
comodel_name='product.product'
required=True
quant_id
Many2one → stock.quant
comodel_name='stock.quant'
quantity
Float
tray_id
Many2one → stock.location.vlm.tray
comodel_name='stock.location.vlm.tray'
tray_type_id
Many2one
related='tray_id.tray_type_id'
action_task_detail(self)
create(self, vals)
unlink(self)
write(self, vals)
display_name
Char
compute='_compute_display_name'
location_id
Many2one → stock.location
comodel_name='stock.location'
move_line_ids
Many2many → stock.move.line
comodel_name='stock.move.line'
product_id
Many2one → product.product
comodel_name='product.product'
quant_id
Many2one → stock.quant
comodel_name='stock.quant'
quantity_done
Float
digits='Product Unit of Measure'
quantity_pending
Float
digits='Product Unit of Measure'
reference
Char
default=''
skipped
Boolean
splitted_vlm_task_id
Many2one → stock.vlm.task
comodel_name='stock.vlm.task'
state
Selection
selection=[('pending', 'Pending'), ('waiting', 'Waiting'), ('done', 'Done')]
task_type
Selection
selection=[('put', 'Put'), ('get', 'Get'), ('count', 'Count')]
tray_id
Many2one → stock.location.vlm.tray
comodel_name='stock.location.vlm.tray'
tray_type_id
Many2one
related='tray_id.tray_type_id'
vlm_quant_id
Many2one → stock.quant.vlm
comodel_name='stock.quant.vlm'
action_command_task(self)
action_command_task_threaded(self)
action_do_tasks(self)
image_512
Image
related='vlm_task_id.product_id.image_512'
location_id
Many2one → stock.location
comodel_name='stock.location'
related='vlm_task_id.location_id'
next_vlm_task_id
Many2one → stock.vlm.task
comodel_name='stock.vlm.task'
compute='_compute_next_vlm_task_id'
previous_vlm_task_id
Many2one → stock.vlm.task
comodel_name='stock.vlm.task'
compute='_compute_next_vlm_task_id'
quantity_done
Float
quantity_pending
Float
readonly=True
splitted_vlm_task_id
Many2one → stock.vlm.task
comodel_name='stock.vlm.task'
related='vlm_task_id.splitted_vlm_task_id'
state
Selection
compute='_compute_state'
selection=[('pending', 'Pending'), ('waiting', 'Waiting'), ('done', 'Done'), ('skipped', 'Skipped'), ('edit', 'Edit')]
tray_id
Many2one → stock.location.vlm.tray
comodel_name='stock.location.vlm.tray'
vlm_task_id
Many2one → stock.vlm.task
comodel_name='stock.vlm.task'
required=True
string='Selected task'
vlm_task_ids
Many2many → stock.vlm.task
comodel_name='stock.vlm.task'
vlm_tasks_partial
Integer
compute='_compute_vlm_tasks_total'
vlm_tasks_progress
Integer
compute='_compute_vlm_tasks_total'
vlm_tasks_total
Integer
compute='_compute_vlm_tasks_total'
warning
Char
readonly=True
action_command(self)
action_go_to_task(self, go_to='current')
action_manual_set(self)
action_next_task(self)
action_previous_task(self)
action_skip_task(self)
default_get(self, fields)
human_pos_x
Integer
compute='_compute_human_pos_x'
inverse='_inverse_human_pos_x'
readonly=False
string='X'
human_pos_y
Integer
compute='_compute_human_pos_y'
inverse='_inverse_human_pos_y'
readonly=False
string='Y'
pos_x
Integer
compute='_compute_pos'
readonly=False
store=True
pos_y
Integer
compute='_compute_pos'
readonly=False
store=True
tray_id
Many2one → stock.location.vlm.tray
comodel_name='stock.location.vlm.tray'
tray_matrix
Serialized
compute='_compute_tray_matrix'
tray_type_id
Many2one → stock.location.vlm.tray.type
comodel_name='stock.location.vlm.tray.type'
tray_cell_center_position(self, pos_x=None, pos_y=None)