Stock Measuring Device

stock_measuring_device
REPOSITORY
REPOSITORYOCA/stock-logistics-interfaces
GIT
GIThttps://github.com/OCA/stock-logistics-interfaces.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/stock-logistics-interfaces/tree/18.0/stock_measuring_device
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYWarehouse
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, SilvioC2C, oca-ci, Mmequignon
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-interfaces
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - component
OCA/product-attribute:
    - product_packaging_dimension
    - product_logistics_uom
    - product_packaging_level
    - product_dimension
OCA/web:
    - web_tree_dynamic_colored_field
    - web_notify
odoo/odoo:
    - base
    - barcodes
    - web
    - stock
    - product
    - mail
    - base_setup
    - bus
    - web_tour
    - html_editor
    - uom
    - barcodes_gs1_nomenclature
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cachetools
openupgradelib
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Different manufacturers produce devices which are able to measure and
weigh packages and parcels. Each brand has a different communication
protocol. This module provides an framework to interface such devices
with Odoo.

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
view_measuring_device_form measuring.device.form measuring.device form New
view_measuring_device_tree measuring.device.list measuring.device list New
view_measuring_wizard measuring.wizard.form measuring.wizard form New
Models touched (5)

New fields (4)
  • device_type Selection
    help='The type of device (e.g. zippcube, cubiscan...) depending on which module are installed.' selection=[]
  • name Char
    required=True
  • state Selection
    copy=False default='not_ready' readonly=True args: [('not_ready', 'Not Ready'), ('ready', 'Ready')]
  • warehouse_id Many2one → stock.warehouse
    required=True args: 'stock.warehouse'
Public methods (2)
  • open_wizard(self)
  • test_device(self)

New fields (3)
  • device_id Many2one → measuring.device
    readonly=True args: 'measuring.device'
  • line_ids One2many → measuring.wizard.line
    args: 'measuring.wizard.line', 'wizard_id'
  • product_id Many2one → product.product
    domain=[('type', '=', 'consu'), ('is_storable', '=', True)] args: 'product.product'
Public methods (7)
  • action_close(self)
  • action_reopen_fullscreen(self)
  • action_save(self)
  • on_barcode_scanned(self, barcode)
  • onchange_product_id(self)
    @api.onchange('product_id')
  • reload(self)
  • retrieve_product(self)
    Assigns product that locks the device if a scan is already requested.

New fields (15)
  • barcode Char
    args: 'GTIN'
  • height Integer
    readonly=True args: 'Height (mm)'
  • is_measured Boolean
  • is_unit_line Boolean
    readonly=True
  • name Char
    readonly=True args: 'Packaging'
  • packaging_id Many2one → product.packaging
    readonly=True string='Packaging (rel)' args: 'product.packaging'
  • packaging_length Integer
    readonly=True args: 'Length (mm)'
  • packaging_level_id Many2one → product.packaging.level
    readonly=True args: 'product.packaging.level'
  • qty Float
    args: 'Quantity'
  • scan_requested Boolean
  • sequence Integer
  • volume Float
    compute='_compute_volume' digits=(8, 4) readonly=True store=False args: 'Volume (m³)'
  • weight Float
    readonly=True args: 'Weight (kg)'
  • width Integer
    readonly=True args: 'Width (mm)'
  • wizard_id Many2one → measuring.wizard
    args: 'measuring.wizard'
Public methods (2)
  • measuring_select_for_measure(self)
    Current line has been selected for measurement This implies that the device is acquired and locked, and the packaging is assigned the device.
  • measuring_select_for_measure_cancel(self)
    Current line has been de-selected for measurement This implies that the packaging clears is assigned device.

New fields (1)
  • measuring_device_id Many2one → measuring.device
    copy=False help='Technical field set when an operator uses the device to scan this package' index=True string='Measuring device which will scan the package' args: 'measuring.device'
Public methods (0)

No public methods.

New fields (1)
  • measuring_device_ids One2many → measuring.device
    args: 'measuring.device', 'warehouse_id'
Public methods (0)

No public methods.

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_measuring_device
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYWarehouse
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSDenis Roussel, oca-travis, Weblate, OCA-git-bot, Hai Lang
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:57
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - component
OCA/product-attribute:
    - product_packaging_dimension
    - product_logistics_uom
    - product_packaging_type_required
    - product_packaging_type
    - product_dimension
OCA/web:
    - web_tree_dynamic_colored_field
    - web_notify
    - web_ir_actions_act_view_reload
odoo/odoo:
    - base
    - barcodes
    - web
    - stock
    - product
    - mail
    - base_setup
    - bus
    - web_tour
    - uom
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
stock_measuring_device_assets stock_measuring_device assets ir.ui.view qweb Inherits web.assets_backend
view_measuring_device_form measuring.device.form measuring.device form New
view_measuring_device_tree measuring.device.tree measuring.device tree New
view_measuring_wizard measuring.wizard.form measuring.wizard form New
Models touched (5)

New fields (4)
  • device_type Selection
    help='The type of device (e.g. zippcube, cubiscan...) depending on which module are installed.' selection=[]
  • name Char
    required=True args: 'Name'
  • state Selection
    copy=False default='not_ready' readonly=True args: [('not_ready', 'Not Ready'), ('ready', 'Ready')]
  • warehouse_id Many2one → stock.warehouse
    required=True args: 'stock.warehouse', 'Warehouse'
Public methods (2)
  • open_wizard(self)
  • test_device(self)

New fields (3)
  • device_id Many2one → measuring.device
    readonly=True args: 'measuring.device'
  • line_ids One2many → measuring.wizard.line
    args: 'measuring.wizard.line', 'wizard_id'
  • product_id Many2one → product.product
    domain=[('type', '=', 'product')] args: 'product.product'
Public methods (7)
  • action_close(self)
  • action_reopen_fullscreen(self)
  • action_save(self)
  • on_barcode_scanned(self, barcode)
  • onchange_product_id(self)
    @api.onchange('product_id')
  • reload(self)
  • retrieve_product(self)
    Assigns product that locks the device if a scan is already requested.

New fields (16)
  • barcode Char
    args: 'GTIN'
  • height Integer
    readonly=True args: 'Height (mm)'
  • is_measured Boolean
  • is_unit_line Boolean
    readonly=True
  • max_weight Float
    readonly=True args: 'Weight (kg)'
  • name Char
    readonly=True args: 'Packaging'
  • packaging_id Many2one → product.packaging
    readonly=True string='Packaging (rel)' args: 'product.packaging'
  • packaging_length Integer
    readonly=True args: 'Length (mm)'
  • packaging_type_id Many2one → product.packaging.type
    readonly=True args: 'product.packaging.type'
  • qty Float
    args: 'Quantity'
  • required Boolean
    readonly=True related='packaging_type_id.required'
  • scan_requested Boolean
  • sequence Integer
  • volume Float
    compute='_compute_volume' digits=(8, 4) readonly=True store=False args: 'Volume (m³)'
  • width Integer
    readonly=True args: 'Width (mm)'
  • wizard_id Many2one → measuring.wizard
    args: 'measuring.wizard'
Public methods (2)
  • measuring_select_for_measure(self)
    Current line has been selected for measurement This implies that the device is acquired and locked, and the packaging is assigned the device.
  • measuring_select_for_measure_cancel(self)
    Current line has been de-selected for measurement This implies that the packaging clears is assigned device.

New fields (1)
  • measuring_device_id Many2one → measuring.device
    copy=False help='Technical field set when an operator uses the device to scan this package' index=True string='Measuring device which will scan the package' args: 'measuring.device'
Public methods (0)

No public methods.

New fields (1)
  • measuring_device_ids One2many → measuring.device
    string='Measuring Devices' args: 'measuring.device', 'warehouse_id'
Public methods (0)

No public methods.

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_measuring_device
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYWarehouse
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSAlexandre Fayolle, Pedro M. Baeza, oca-travis, OCA-git-bot, Matthieu Méquignon
WEBSITE
WEBSITEhttps://github.com/OCA/stock-logistics-warehouse
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:12
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - component
OCA/product-attribute:
    - product_packaging_dimension
    - product_packaging_type_required
    - product_packaging_type
    - product_dimension
OCA/web:
    - web_tree_dynamic_colored_field
    - web_notify
    - web_ir_actions_act_view_reload
odoo/odoo:
    - base
    - barcodes
    - web
    - stock
    - product
    - mail
    - base_setup
    - bus
    - web_tour
    - uom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
stock_measuring_device_assets stock_measuring_device assets ir.ui.view qweb Inherits web.assets_backend
view_measuring_device_form measuring.device.form measuring.device form New
view_measuring_device_tree measuring.device.tree measuring.device tree New
view_measuring_wizard measuring.wizard.form measuring.wizard form New
Models touched (5)

New fields (4)
  • device_type Selection
    help='The type of device (e.g. zippcube, cubiscan...) depending on which module are installed.' selection=[]
  • name Char
    required=True args: 'Name'
  • state Selection
    copy=False default='not_ready' readonly=True args: [('not_ready', 'Not Ready'), ('ready', 'Ready')]
  • warehouse_id Many2one → stock.warehouse
    required=True args: 'stock.warehouse', 'Warehouse'
Public methods (2)
  • open_wizard(self)
  • test_device(self)

New fields (3)
  • device_id Many2one → measuring.device
    readonly=True args: 'measuring.device'
  • line_ids One2many → measuring.wizard.line
    args: 'measuring.wizard.line', 'wizard_id'
  • product_id Many2one → product.product
    domain=[('type', '=', 'product')] args: 'product.product'
Public methods (7)
  • action_close(self)
  • action_reopen_fullscreen(self)
  • action_save(self)
  • on_barcode_scanned(self, barcode)
  • onchange_product_id(self)
    @api.onchange('product_id')
  • reload(self)
  • retrieve_product(self)
    Assigns product that locks the device if a scan is already requested.

New fields (16)
  • barcode Char
    args: 'GTIN'
  • height Integer
    readonly=True args: 'Height (mm)'
  • is_measured Boolean
  • is_unit_line Boolean
    readonly=True
  • lngth Integer
    readonly=True args: 'Length (mm)'
  • max_weight Float
    readonly=True args: 'Weight (kg)'
  • name Char
    readonly=True args: 'Packaging'
  • packaging_id Many2one → product.packaging
    readonly=True string='Packaging (rel)' args: 'product.packaging'
  • packaging_type_id Many2one → product.packaging.type
    readonly=True args: 'product.packaging.type'
  • qty Float
    args: 'Quantity'
  • required Boolean
    readonly=True related='packaging_type_id.required'
  • scan_requested Boolean
  • sequence Integer
  • volume Float
    compute='_compute_volume' digits=(8, 4) readonly=True store=False args: 'Volume (m³)'
  • width Integer
    readonly=True args: 'Width (mm)'
  • wizard_id Many2one → measuring.wizard
    args: 'measuring.wizard'
Public methods (2)
  • measuring_select_for_measure(self)
    Current line has been selected for measurement This implies that the device is acquired and locked, and the packaging is assigned the device.
  • measuring_select_for_measure_cancel(self)
    Current line has been de-selected for measurement This implies that the packaging clears is assigned device.

New fields (1)
  • measuring_device_id Many2one → measuring.device
    copy=False help='Technical field set when an operator uses the device to scan this package' index=True string='Measuring device which will scan the package' args: 'measuring.device'
Public methods (0)

No public methods.

New fields (1)
  • measuring_device_ids One2many → measuring.device
    string='Measuring Devices' args: 'measuring.device', 'warehouse_id'
Public methods (0)

No public methods.