ADR Dangerous Goods

l10n_eu_product_adr
REPOSITORY
REPOSITORYOCA/community-data-files
GIT
GIThttps://github.com/OCA/community-data-files.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/community-data-files/tree/19.0/l10n_eu_product_adr
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYInventory/Delivery
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp, Opener B.V.
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp, Opener B.V.
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Maksym Yankin
WEBSITE
WEBSITEhttps://github.com/OCA/community-data-files
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:50
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
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This addon adds possibility to mark products with dangerous class due to
European Agreement concerning the International Carriage of Dangerous
Goods by Road (ADR)

If your products contain dangerous product or waste you can link the
relevant ADR goods to each product.

Based on the dangerous goods classes and the product quantities or
weights, the picking will show the number of ADR points on the Other
Info tab.

Read more <https://en.wikipedia.org/wiki/ADR_(treaty)> Unece standards
<https://unece.org/transportdangerous-goods/adr-2021-files>

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
adr_class_view_search adr.class search New
adr_class_view_tree adr.class list New
adr_goods_view_form adr.goods form New
adr_goods_view_search adr.goods search New
adr_goods_view_tree adr.goods list New
adr_label_kanban_form adr.label kanban New
adr_label_view_form adr.label form New
adr_label_view_search adr.label search New
adr_packing_instruction_view_search adr.packing.instruction search New
adr_packing_instruction_view_tree adr.packing.instruction list New
product_normal_form_view Dangerous goods settings on variants product.product page Inherits product.product_normal_form_view
product_template_form_view product.template.dangerous.class product.template xpath Inherits product.product_template_form_view
view_picking_form stock.picking group Inherits stock.view_picking_form
Models touched (8)

New fields (2)
  • code Char
    required=True
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (11)
  • active Boolean
    default=True
  • class_id Many2one → adr.class
    comodel_name='adr.class' required=True string='Class'
  • classification_code Char
  • label_ids Many2many → adr.label
    comodel_name='adr.label' help='The labels/placards (see 5.2.2.2 and 5.3.1.7) that have to be affixed to packages, containers, tank-containers, portable tanks, MEGCs and vehicles.)' string='Labels'
  • limited_quantity Float
    digits='Product Unit of Measure'
  • limited_quantity_uom_id Many2one → uom.uom
    string='Limited Quantity UoM' args: 'uom.uom'
  • name Char
    help="Contains, in upper case characters, the name of the substance or article, if the substance or article has been assigned its own specific UN number, or of the generic or n.o.s. entry to which it has been assigned in accordance with the criteria ('decision trees') of Part 2. This name shall be used as the proper shipping name or, when applicable, as part of the proper shipping name (see 3.1.2 for further details on the proper shipping name)." required=True translate=True args: 'Name and description'
  • packing_instruction_ids Many2many → adr.packing.instruction
    comodel_name='adr.packing.instruction' string='Packing Instructions'
  • transport_category Selection
    required=True args: TRANSPORT_CATEGORIES
  • tunnel_restriction_code Selection
    required=True args: TUNNEL_RESTRICTION_CODES
  • un_number Char
    help="Contains the UN number: of the dangerous substance or article if the substance or article has been assigned its own specific UN number; or of the generic or n.o.s. entry to which the dangerous substances or articles not mentioned by name shall be assigned in accordance with the criteria ('decision trees') of Part 2." required=True string='UN Number'
Public methods (0)

No public methods.

New fields (5)
  • class_id Many2one → adr.class
    comodel_name='adr.class' required=True string='Class'
  • code Char
    required=True
  • goods_ids Many2many → adr.goods
    comodel_name='adr.goods' copy=False help='The dangerous goods to which this label is applied' string='ADR Goods'
  • image Binary
    required=True
  • name Char
    required=True translate=True
Public methods (1)
  • unlink(self)
    Restrict removal of labels in use

New fields (2)
  • code Char
    required=True
  • name Char
    translate=True
Public methods (0)

No public methods.

New fields (10)
  • adr_class_id Many2one → adr.class
    related='adr_goods_id.class_id' args: 'adr.class'
  • adr_classification_code Char
    related='adr_goods_id.classification_code'
  • adr_goods_id Many2one → adr.goods
    args: 'adr.goods', 'Dangerous Goods'
  • adr_label_ids Many2many → adr.label
    related='adr_goods_id.label_ids' args: 'adr.label'
  • adr_limited_quantity Float
    related='adr_goods_id.limited_quantity'
  • adr_limited_quantity_uom_id Many2one
    related='adr_goods_id.limited_quantity_uom_id'
  • adr_packing_instruction_ids Many2many → adr.packing.instruction
    related='adr_goods_id.packing_instruction_ids' args: 'adr.packing.instruction'
  • adr_transport_category Selection
    related='adr_goods_id.transport_category'
  • adr_tunnel_restriction_code Selection
    related='adr_goods_id.tunnel_restriction_code'
  • is_dangerous Boolean
    compute='_compute_is_dangerous' help='This product belongs to a dangerous class' inverse='_inverse_is_dangerous' readonly=False store=True
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    Propagate the template's adr settings when creating variants

New fields (11)
  • adr_class_id Many2one → adr.class
    related='product_variant_ids.adr_goods_id.class_id' args: 'adr.class'
  • adr_classification_code Char
    related='adr_goods_id.classification_code'
  • adr_goods_id Many2one → adr.goods
    readonly=False related='product_variant_ids.adr_goods_id' args: 'adr.goods', 'Dangerous Goods'
  • adr_goods_on_variants Boolean
    compute='_compute_adr_goods_on_variants' help='Indicates whether the adr configuration is different for each variant.'
  • adr_label_ids Many2many → adr.label
    related='product_variant_ids.adr_goods_id.label_ids' args: 'adr.label'
  • adr_limited_quantity Float
    related='product_variant_ids.adr_goods_id.limited_quantity'
  • adr_limited_quantity_uom_id Many2one
    related='product_variant_ids.adr_goods_id.limited_quantity_uom_id'
  • adr_packing_instruction_ids Many2many → adr.packing.instruction
    related='product_variant_ids.adr_goods_id.packing_instruction_ids' args: 'adr.packing.instruction'
  • adr_transport_category Selection
    related='product_variant_ids.adr_goods_id.transport_category'
  • adr_tunnel_restriction_code Selection
    related='product_variant_ids.adr_goods_id.tunnel_restriction_code'
  • is_dangerous Boolean
    help='This product belongs to a dangerous class' readonly=False related='product_variant_ids.is_dangerous'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
    Propagate the template's adr settings on the created variants
  • onchange_is_dangerous(self)
    @api.onchange('is_dangerous')
    Remove the dangerous goods attribute from the product (when is_dangerous is deselected)
  • write(self, values)

New fields (1)
  • adr_points Float
    compute='_compute_adr_points' compute_sudo=True digits='Product Unit of Measure' string='ADR Points'
Public methods (0)

No public methods.

New fields (1)
  • adr_points Float
    compute='_compute_adr_points' digits='Product Unit of Measure' string='ADR Points'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/community-data-files
GIT
GIThttps://github.com/OCA/community-data-files.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/community-data-files/tree/18.0/l10n_eu_product_adr
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYInventory/Delivery
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp, Opener B.V.
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp, Opener B.V.
COMMITTERS
COMMITTERSRuchir Shukla, Weblate, OCA-git-bot, oca-ci, chaule97
WEBSITE
WEBSITEhttps://github.com/OCA/community-data-files
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:19
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
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This addon adds possibility to mark products with dangerous class due to
European Agreement concerning the International Carriage of Dangerous
Goods by Road (ADR)

If your products contain dangerous product or waste you can link the
relevant ADR goods to each product.

Based on the dangerous goods classes and the product quantities or
weights, the picking will show the number of ADR points on the Other
Info tab.

Read more <https://en.wikipedia.org/wiki/ADR_(treaty)> Unece standards
<https://unece.org/transportdangerous-goods/adr-2021-files>

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
adr_class_view_search adr.class search New
adr_class_view_tree adr.class list New
adr_goods_view_form adr.goods form New
adr_goods_view_search adr.goods search New
adr_goods_view_tree adr.goods list New
adr_label_kanban_form adr.label kanban New
adr_label_view_form adr.label form New
adr_label_view_search adr.label search New
adr_packing_instruction_view_search adr.packing.instruction search New
adr_packing_instruction_view_tree adr.packing.instruction list New
product_normal_form_view Dangerous goods settings on variants product.product page Inherits product.product_normal_form_view
product_template_form_view product.template.dangerous.class product.template xpath Inherits product.product_template_form_view
view_picking_form stock.picking group Inherits stock.view_picking_form
Models touched (8)

New fields (2)
  • code Char
    required=True
  • name Char
    required=True translate=True
Public methods (1)
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
    Allow to search for full codes

New fields (11)
  • active Boolean
    default=True
  • class_id Many2one → adr.class
    comodel_name='adr.class' required=True string='Class'
  • classification_code Char
  • label_ids Many2many → adr.label
    comodel_name='adr.label' help='The labels/placards (see 5.2.2.2 and 5.3.1.7) that have to be affixed to packages, containers, tank-containers, portable tanks, MEGCs and vehicles.)' string='Labels'
  • limited_quantity Float
    digits='Product Unit of Measure'
  • limited_quantity_uom_id Many2one → uom.uom
    string='Limited Quantity UoM' args: 'uom.uom'
  • name Char
    help="Contains, in upper case characters, the name of the substance or article, if the substance or article has been assigned its own specific UN number, or of the generic or n.o.s. entry to which it has been assigned in accordance with the criteria ('decision trees') of Part 2. This name shall be used as the proper shipping name or, when applicable, as part of the proper shipping name (see 3.1.2 for further details on the proper shipping name)." required=True translate=True args: 'Name and description'
  • packing_instruction_ids Many2many → adr.packing.instruction
    comodel_name='adr.packing.instruction' string='Packing Instructions'
  • transport_category Selection
    required=True args: TRANSPORT_CATEGORIES
  • tunnel_restriction_code Selection
    required=True args: TUNNEL_RESTRICTION_CODES
  • un_number Char
    help="Contains the UN number: of the dangerous substance or article if the substance or article has been assigned its own specific UN number; or of the generic or n.o.s. entry to which the dangerous substances or articles not mentioned by name shall be assigned in accordance with the criteria ('decision trees') of Part 2." required=True string='UN Number'
Public methods (1)
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
    Allow to search for UN Number

New fields (5)
  • class_id Many2one → adr.class
    comodel_name='adr.class' required=True string='Class'
  • code Char
    required=True
  • goods_ids Many2many → adr.goods
    comodel_name='adr.goods' copy=False help='The dangerous goods to which this label is applied' string='ADR Goods'
  • image Binary
    required=True
  • name Char
    required=True translate=True
Public methods (1)
  • unlink(self)
    Restrict removal of labels in use

New fields (2)
  • code Char
    required=True
  • name Char
    translate=True
Public methods (0)

No public methods.

New fields (10)
  • adr_class_id Many2one → adr.class
    related='adr_goods_id.class_id' args: 'adr.class'
  • adr_classification_code Char
    related='adr_goods_id.classification_code'
  • adr_goods_id Many2one → adr.goods
    args: 'adr.goods', 'Dangerous Goods'
  • adr_label_ids Many2many → adr.label
    related='adr_goods_id.label_ids' args: 'adr.label'
  • adr_limited_quantity Float
    related='adr_goods_id.limited_quantity'
  • adr_limited_quantity_uom_id Many2one
    related='adr_goods_id.limited_quantity_uom_id'
  • adr_packing_instruction_ids Many2many → adr.packing.instruction
    related='adr_goods_id.packing_instruction_ids' args: 'adr.packing.instruction'
  • adr_transport_category Selection
    related='adr_goods_id.transport_category'
  • adr_tunnel_restriction_code Selection
    related='adr_goods_id.tunnel_restriction_code'
  • is_dangerous Boolean
    help='This product belongs to a dangerous class'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
    Propagate the template's adr settings when creating variants
  • onchange_is_dangerous(self)
    @api.onchange('is_dangerous')
    Remove the dangerous goods attribute from the product (when is_dangerous is deselected)

New fields (11)
  • adr_class_id Many2one → adr.class
    related='product_variant_ids.adr_goods_id.class_id' args: 'adr.class'
  • adr_classification_code Char
    related='adr_goods_id.classification_code'
  • adr_goods_id Many2one → adr.goods
    readonly=False related='product_variant_ids.adr_goods_id' args: 'adr.goods', 'Dangerous Goods'
  • adr_goods_on_variants Boolean
    compute='_compute_adr_goods_on_variants' help='Indicates whether the adr configuration is different for each variant.'
  • adr_label_ids Many2many → adr.label
    related='product_variant_ids.adr_goods_id.label_ids' args: 'adr.label'
  • adr_limited_quantity Float
    related='product_variant_ids.adr_goods_id.limited_quantity'
  • adr_limited_quantity_uom_id Many2one
    related='product_variant_ids.adr_goods_id.limited_quantity_uom_id'
  • adr_packing_instruction_ids Many2many → adr.packing.instruction
    related='product_variant_ids.adr_goods_id.packing_instruction_ids' args: 'adr.packing.instruction'
  • adr_transport_category Selection
    related='product_variant_ids.adr_goods_id.transport_category'
  • adr_tunnel_restriction_code Selection
    related='product_variant_ids.adr_goods_id.tunnel_restriction_code'
  • is_dangerous Boolean
    help='This product belongs to a dangerous class' readonly=False related='product_variant_ids.is_dangerous'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
    Propagate the template's adr settings on the created variants
  • onchange_is_dangerous(self)
    @api.onchange('is_dangerous')
    Remove the dangerous goods attribute from the product (when is_dangerous is deselected)
  • write(self, values)
    Delegate dangerous goods fields to variants while preventing a sweeping change over variants with different settings

New fields (1)
  • adr_points Float
    compute='_compute_adr_points' compute_sudo=True digits='Product Unit of Measure' string='ADR Points'
Public methods (0)

No public methods.

New fields (1)
  • adr_points Float
    compute='_compute_adr_points' digits='Product Unit of Measure' string='ADR Points'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/community-data-files
GIT
GIThttps://github.com/OCA/community-data-files.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/community-data-files/tree/17.0/l10n_eu_product_adr
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYInventory/Delivery
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp, Opener B.V.
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp, Opener B.V.
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, r.perez
WEBSITE
WEBSITEhttps://github.com/OCA/community-data-files
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:10
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock
    - product
    - base
    - mail
    - 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
This addon adds possibility to mark products with dangerous class due to
European Agreement concerning the International Carriage of Dangerous
Goods by Road (ADR)

If your products contain dangerous product or waste you can link the
relevant ADR goods to each product.

Based on the dangerous goods classes and the product quantities or
weights, the picking will show the number of ADR points on the Other
Info tab.

Read more <https://en.wikipedia.org/wiki/ADR_(treaty)> Unece standards
<https://unece.org/transportdangerous-goods/adr-2021-files>

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
adr_class_view_search adr.class search New
adr_class_view_tree adr.class tree New
adr_goods_view_form adr.goods form New
adr_goods_view_search adr.goods search New
adr_goods_view_tree adr.goods tree New
adr_label_kanban_form adr.label kanban New
adr_label_view_form adr.label form New
adr_label_view_search adr.label search New
adr_packing_instruction_view_search adr.packing.instruction search New
adr_packing_instruction_view_tree adr.packing.instruction tree New
product_normal_form_view Dangerous goods settings on variants product.product page Inherits product.product_normal_form_view
product_template_form_view product.template.dangerous.class product.template xpath Inherits product.product_template_form_view
view_picking_form stock.picking group Inherits stock.view_picking_form
Models touched (8)

New fields (2)
  • code Char
    required=True
  • name Char
    required=True translate=True
Public methods (1)
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
    Allow to search for full codes

New fields (11)
  • active Boolean
    default=True
  • class_id Many2one → adr.class
    comodel_name='adr.class' required=True string='Class'
  • classification_code Char
  • label_ids Many2many → adr.label
    comodel_name='adr.label' help='The labels/placards (see 5.2.2.2 and 5.3.1.7) that have to be affixed to packages, containers, tank-containers, portable tanks, MEGCs and vehicles.)' string='Labels'
  • limited_quantity Float
    digits='Product Unit of Measure'
  • limited_quantity_uom_id Many2one → uom.uom
    string='Limited Quantity UoM' args: 'uom.uom'
  • name Char
    help="Contains, in upper case characters, the name of the substance or article, if the substance or article has been assigned its own specific UN number, or of the generic or n.o.s. entry to which it has been assigned in accordance with the criteria ('decision trees') of Part 2. This name shall be used as the proper shipping name or, when applicable, as part of the proper shipping name (see 3.1.2 for further details on the proper shipping name)." required=True translate=True args: 'Name and description'
  • packing_instruction_ids Many2many → adr.packing.instruction
    comodel_name='adr.packing.instruction' string='Packing Instructions'
  • transport_category Selection
    required=True args: TRANSPORT_CATEGORIES
  • tunnel_restriction_code Selection
    required=True args: TUNNEL_RESTRICTION_CODES
  • un_number Char
    help="Contains the UN number: of the dangerous substance or article if the substance or article has been assigned its own specific UN number; or of the generic or n.o.s. entry to which the dangerous substances or articles not mentioned by name shall be assigned in accordance with the criteria ('decision trees') of Part 2." required=True string='UN Number'
Public methods (1)
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
    Allow to search for UN Number

New fields (5)
  • class_id Many2one → adr.class
    comodel_name='adr.class' required=True string='Class'
  • code Char
    required=True
  • goods_ids Many2many → adr.goods
    comodel_name='adr.goods' copy=False help='The dangerous goods to which this label is applied' string='ADR Goods'
  • image Binary
    required=True
  • name Char
    required=True translate=True
Public methods (1)
  • unlink(self)
    Restrict removal of labels in use

New fields (2)
  • code Char
    required=True
  • name Char
    translate=True
Public methods (0)

No public methods.

New fields (10)
  • adr_class_id Many2one → adr.class
    related='adr_goods_id.class_id' args: 'adr.class'
  • adr_classification_code Char
    related='adr_goods_id.classification_code'
  • adr_goods_id Many2one → adr.goods
    args: 'adr.goods', 'Dangerous Goods'
  • adr_label_ids Many2many → adr.label
    related='adr_goods_id.label_ids' args: 'adr.label'
  • adr_limited_quantity Float
    related='adr_goods_id.limited_quantity'
  • adr_limited_quantity_uom_id Many2one
    related='adr_goods_id.limited_quantity_uom_id'
  • adr_packing_instruction_ids Many2many → adr.packing.instruction
    related='adr_goods_id.packing_instruction_ids' args: 'adr.packing.instruction'
  • adr_transport_category Selection
    related='adr_goods_id.transport_category'
  • adr_tunnel_restriction_code Selection
    related='adr_goods_id.tunnel_restriction_code'
  • is_dangerous Boolean
    help='This product belongs to a dangerous class'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
    Propagate the template's adr settings when creating variants
  • onchange_is_dangerous(self)
    @api.onchange('is_dangerous')
    Remove the dangerous goods attribute from the product (when is_dangerous is deselected)

New fields (11)
  • adr_class_id Many2one → adr.class
    related='product_variant_ids.adr_goods_id.class_id' args: 'adr.class'
  • adr_classification_code Char
    related='adr_goods_id.classification_code'
  • adr_goods_id Many2one → adr.goods
    readonly=False related='product_variant_ids.adr_goods_id' args: 'adr.goods', 'Dangerous Goods'
  • adr_goods_on_variants Boolean
    compute='_compute_adr_goods_on_variants' help='Indicates whether the adr configuration is different for each variant.'
  • adr_label_ids Many2many → adr.label
    related='product_variant_ids.adr_goods_id.label_ids' args: 'adr.label'
  • adr_limited_quantity Float
    related='product_variant_ids.adr_goods_id.limited_quantity'
  • adr_limited_quantity_uom_id Many2one
    related='product_variant_ids.adr_goods_id.limited_quantity_uom_id'
  • adr_packing_instruction_ids Many2many → adr.packing.instruction
    related='product_variant_ids.adr_goods_id.packing_instruction_ids' args: 'adr.packing.instruction'
  • adr_transport_category Selection
    related='product_variant_ids.adr_goods_id.transport_category'
  • adr_tunnel_restriction_code Selection
    related='product_variant_ids.adr_goods_id.tunnel_restriction_code'
  • is_dangerous Boolean
    help='This product belongs to a dangerous class' readonly=False related='product_variant_ids.is_dangerous'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
    Propagate the template's adr settings on the created variants
  • onchange_is_dangerous(self)
    @api.onchange('is_dangerous')
    Remove the dangerous goods attribute from the product (when is_dangerous is deselected)
  • write(self, values)
    Delegate dangerous goods fields to variants while preventing a sweeping change over variants with different settings

New fields (1)
  • adr_points Float
    compute='_compute_adr_points' compute_sudo=True digits='Product Unit of Measure' string='ADR Points'
Public methods (0)

No public methods.

New fields (1)
  • adr_points Float
    compute='_compute_adr_points' digits='Product Unit of Measure' string='ADR Points'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/community-data-files
GIT
GIThttps://github.com/OCA/community-data-files.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/community-data-files/tree/14.0/l10n_eu_product_adr
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYInventory/Delivery
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp, Opener B.V.
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp, Opener B.V.
COMMITTERS
COMMITTERSStefan Rijnhart, oca-travis, Weblate, OCA-git-bot, MmeQuignon
WEBSITE
WEBSITEhttps://github.com/OCA/community-data-files
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:11
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
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
adr_class_view_search adr.class search New
adr_class_view_tree adr.class tree New
adr_goods_view_form adr.goods form New
adr_goods_view_search adr.goods search New
adr_goods_view_tree adr.goods tree New
adr_label_kanban_form adr.label kanban New
adr_label_view_form adr.label form New
adr_label_view_search adr.label search New
adr_packing_instruction_view_search adr.packing.instruction search New
adr_packing_instruction_view_tree adr.packing.instruction tree New
product_normal_form_view Dangerous goods settings on variants product.product page Inherits product.product_normal_form_view
product_template_form_view product.template.dangerous.class product.template xpath Inherits product.product_template_form_view
view_picking_form stock.picking group Inherits stock.view_picking_form
Models touched (8)

New fields (2)
  • code Char
    required=True
  • name Char
    required=True translate=True
Public methods (2)
  • name_get(self)
    Prepend the code to the class name
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
    Allow to search for full codes

New fields (11)
  • active Boolean
    default=True
  • class_id Many2one → adr.class
    comodel_name='adr.class' required=True string='Class'
  • classification_code Char
  • label_ids Many2many → adr.label
    comodel_name='adr.label' help='The labels/placards (see 5.2.2.2 and 5.3.1.7) that have to be affixed to packages, containers, tank-containers, portable tanks, MEGCs and vehicles.)' string='Labels'
  • limited_quantity Float
    digits='Product Unit of Measure'
  • limited_quantity_uom_id Many2one → uom.uom
    string='Limited Quantity UoM' args: 'uom.uom'
  • name Char
    help="Contains, in upper case characters, the name of the substance or article, if the substance or article has been assigned its own specific UN number, or of the generic or n.o.s. entry to which it has been assigned in accordance with the criteria ('decision trees') of Part 2. This name shall be used as the proper shipping name or, when applicable, as part of the proper shipping name (see 3.1.2 for further details on the proper shipping name)." required=True translate=True args: 'Name and description'
  • packing_instruction_ids Many2many → adr.packing.instruction
    comodel_name='adr.packing.instruction' string='Packing Instructions'
  • transport_category Selection
    required=True args: TRANSPORT_CATEGORIES
  • tunnel_restriction_code Selection
    required=True args: TUNNEL_RESTRICTION_CODES
  • un_number Char
    help="Contains the UN number: of the dangerous substance or article if the substance or article has been assigned its own specific UN number; or of the generic or n.o.s. entry to which the dangerous substances or articles not mentioned by name shall be assigned in accordance with the criteria ('decision trees') of Part 2." required=True string='UN Number'
Public methods (2)
  • name_get(self)
    Format the class name
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
    Allow to search for UN Number

New fields (5)
  • class_id Many2one → adr.class
    comodel_name='adr.class' required=True string='Class'
  • code Char
    required=True
  • goods_ids Many2many → adr.goods
    comodel_name='adr.goods' copy=False help='The dangerous goods to which this label is applied' string='ADR Goods'
  • image Binary
    required=True
  • name Char
    required=True translate=True
Public methods (1)
  • unlink(self)
    Restrict removal of labels in use

New fields (2)
  • code Char
    required=True
  • name Char
    translate=True
Public methods (0)

No public methods.

New fields (10)
  • adr_class_id Many2one → adr.class
    related='adr_goods_id.class_id' args: 'adr.class'
  • adr_classification_code Char
    related='adr_goods_id.classification_code'
  • adr_goods_id Many2one → adr.goods
    args: 'adr.goods', 'Dangerous Goods'
  • adr_label_ids Many2many → adr.label
    related='adr_goods_id.label_ids' args: 'adr.label'
  • adr_limited_quantity Float
    related='adr_goods_id.limited_quantity'
  • adr_limited_quantity_uom_id Many2one
    related='adr_goods_id.limited_quantity_uom_id'
  • adr_packing_instruction_ids Many2many → adr.packing.instruction
    related='adr_goods_id.packing_instruction_ids' args: 'adr.packing.instruction'
  • adr_transport_category Selection
    related='adr_goods_id.transport_category'
  • adr_tunnel_restriction_code Selection
    related='adr_goods_id.tunnel_restriction_code'
  • is_dangerous Boolean
    help='This product belongs to a dangerous class'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
    Propagate the template's adr settings when creating variants
  • onchange_is_dangerous(self)
    @api.onchange('is_dangerous')
    Remove the dangerous goods attribute from the product (when is_dangerous is deselected)

New fields (11)
  • adr_class_id Many2one → adr.class
    related='product_variant_ids.adr_goods_id.class_id' args: 'adr.class'
  • adr_classification_code Char
    related='adr_goods_id.classification_code'
  • adr_goods_id Many2one → adr.goods
    readonly=False related='product_variant_ids.adr_goods_id' args: 'adr.goods', 'Dangerous Goods'
  • adr_goods_on_variants Boolean
    compute='_compute_adr_goods_on_variants' help='Indicates whether the adr configuration is different for each variant.'
  • adr_label_ids Many2many → adr.label
    related='product_variant_ids.adr_goods_id.label_ids' args: 'adr.label'
  • adr_limited_quantity Float
    related='product_variant_ids.adr_goods_id.limited_quantity'
  • adr_limited_quantity_uom_id Many2one
    related='product_variant_ids.adr_goods_id.limited_quantity_uom_id'
  • adr_packing_instruction_ids Many2many → adr.packing.instruction
    related='product_variant_ids.adr_goods_id.packing_instruction_ids' args: 'adr.packing.instruction'
  • adr_transport_category Selection
    related='product_variant_ids.adr_goods_id.transport_category'
  • adr_tunnel_restriction_code Selection
    related='product_variant_ids.adr_goods_id.tunnel_restriction_code'
  • is_dangerous Boolean
    help='This product belongs to a dangerous class' readonly=False related='product_variant_ids.is_dangerous'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
    Propagate the template's adr settings on the created variants
  • onchange_is_dangerous(self)
    @api.onchange('is_dangerous')
    Remove the dangerous goods attribute from the product (when is_dangerous is deselected)
  • write(self, values)
    Delegate dangerous goods fields to variants while preventing a sweeping change over variants with different settings

New fields (1)
  • adr_points Float
    compute='_compute_adr_points' compute_sudo=True digits='Product Unit of Measure' string='ADR Points'
Public methods (0)

No public methods.

New fields (1)
  • adr_points Float
    compute='_compute_adr_points' digits='Product Unit of Measure' string='ADR Points'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/community-data-files
GIT
GIThttps://github.com/OCA/community-data-files.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/community-data-files/tree/13.0/l10n_eu_product_adr
VERSION
VERSION 2.1.0
CATEGORY
CATEGORYProduct
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSOCA Transbot, Thierry Ducrest, oca-travis, Weblate, OCA-git-bot, Iryna Vyshnevska, Matthieu Méquignon
WEBSITE
WEBSITEhttps://github.com/OCA/community-data-files
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - sale
    - sales_team
    - payment
    - account
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
    - stock
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
product_dangerous_class_type_view_tree product.dangerous.class.type.tree product.dangerous.class.type tree New
product_dangerous_class_view_form product.dangerous.class.form product.dangerous.class form New
product_dangerous_class_view_tree product.dangerous.class.tree product.dangerous.class tree New
product_normal_form_view product.product.form.inherit product.product xpath Inherits product.product_normal_form_view
un_reference_form un.reference.form un.reference form New
Models touched (13)

New fields (1)
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (1)
  • picking_ids Many2many → stock.picking
    string='Pickings' args: 'stock.picking'
Public methods (1)
  • prepare_DG_data(self)
    Result is lines for dangerous products :return: dict {'dg_lines':[{ 'product': product.product(40,), 'dg_unit': 'kg (Kilogramm)', 'class': 'UN UN Number, ... 'packaging_type': packaging.type(6,), 'qty_amount': 100.0, 'product_weight': 10.0, 'column_index': '3', 'dangerous_amount': 1000.0 }], 'total_section':{ 'total_units': {'1': 0, '2': 0, '3': 1000.0, '4': 0, '5': 0}, 'factor': {'1': 0.0, '2': 50.0, '3': 3.0, '4': 1.0, '5': 0.0}, 'mass_points': {'1': 0.0, '2': 0.0, '3': 3000.0, '4': 0.0, '5': 0.0}, 'total_points': 3000.0, 'warn': True } }

New fields (1)
  • name Char
    required=True string='Name' translate=True
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (5)
  • class_type_id Many2one → product.dangerous.class.type
    comodel_name='product.dangerous.class.type' ondelete='restrict' string='Dangerous Type'
  • code Char
    required=True
  • complete_name Char
    compute='_compute_complete_name'
  • image Binary
    required=True string='Icon'
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (2)
  • division Char
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (33)
  • adr_amount Char
    string='LQ - ADR amount'
  • class_id Many2one → great.class
    args: 'great.class'
  • content_package Float
    string='Content Packaging'
  • currency_id Many2one → res.currency
    default=<expr> string='Currency' args: 'res.currency'
  • dangerous_class_id Many2one → product.dangerous.class
    string='Dangerous class' args: 'product.dangerous.class'
  • dangerous_selection_id Many2one → dangerous.goods
    args: 'dangerous.goods'
  • dg_unit Many2one → dangerous.uom
    string='DG - Unit' args: 'dangerous.uom'
  • envir_hazardous Selection
    string='Environmentally hazardous' args: [('yes', 'Yes'), ('no', 'No')]
  • flash_point Char
    string='Flash point(°C)'
  • h_no Char
    string='H-No'
  • hazard_ind Char
    string='Hazard identification'
  • is_dangerous Boolean
    string='Dangerous product'
  • is_dangerous_good Boolean
    help='This product belongs to a dangerous class'
  • is_dangerous_waste Boolean
    help='Waste from this product belongs to a dangerous class'
  • label_first Selection
    string='Label 1' args: LABELS_SELECTION
  • label_second Selection
    string='Label 2' args: LABELS_SELECTION
  • label_third Selection
    string='Label 3' args: LABELS_SELECTION
  • limited_amount_id Many2one → limited.amount
    args: 'limited.amount'
  • nag Char
    string='N.A.G.'
  • packaging_group Selection
    string='Packaging Group' args: [('1', '(-)'), ('2', 'I'), ('3', 'II'), ('4', 'III')]
  • packaging_type_id Many2one → packaging.type
    args: 'packaging.type'
  • sds Char
    string='SDS'
  • storage_class_id Many2one → storage.class
    args: 'storage.class'
  • storage_temp_id Many2one → storage.temp
    args: 'storage.temp'
  • transport_category Selection
    string='Transport Category' args: TRANSPORT_CATEGORY
  • tunnel_code Selection
    string='Tunnel code' args: [('1', '(-)'), ('2', '(D)'), ('3', '(E)'), ('4', '(D,E)')]
  • un_ref Many2one → un.reference
    string='UN Number' args: 'un.reference'
  • un_report Char
    string='UN Report 38.3'
  • veg Monetary
    string='VEG in currency'
  • veva_code_empty Char
    string='VeVA Code: Empty packaging'
  • veva_code_full Char
    string='VeVA Code: Full package'
  • voc Char
    string='VOC in%'
  • wgk_class_id Many2one → wgk.class
    args: 'wgk.class'
Public methods (1)
  • get_full_class_name(self)

New fields (1)
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True string='Name' translate=True
Public methods (0)

No public methods.

New fields (2)
  • description Char
    required=True string='Description' translate=True
  • name Char
    required=True string='Code'
Public methods (2)
  • name_get(self)
  • name_search(self, name, args=None, operator='ilike', limit=100)
    @api.model

New fields (1)
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.