diff --git a/product_dangerous_good/README.rst b/product_dangerous_good/README.rst
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/product_dangerous_good/__init__.py b/product_dangerous_good/__init__.py
new file mode 100644
index 000000000000..0650744f6bc6
--- /dev/null
+++ b/product_dangerous_good/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/product_dangerous_good/__manifest__.py b/product_dangerous_good/__manifest__.py
new file mode 100644
index 000000000000..1051ec21ed4e
--- /dev/null
+++ b/product_dangerous_good/__manifest__.py
@@ -0,0 +1,23 @@
+# Copyright 2019 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+{
+ "name": "Product Dangerous Good",
+ "summary": "Allows to set appropriate danger class and components to products",
+ "version": "12.0.1.0.0",
+ "development_status": "Alpha",
+ "category": "Product",
+ "website": "https://github.com/OCA/stock-logistics-reporting",
+ "author": "Camptocamp, Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "application": False,
+ "installable": True,
+ "depends": [
+ "product",
+ ],
+ "data": [
+ "data/product_dangerous_type_data.xml",
+ "data/product_dangerous_class_data.xml",
+ "views/product_template_view.xml",
+ "security/ir.model.access.csv",
+ ],
+}
diff --git a/product_dangerous_good/data/product_dangerous_class_data.xml b/product_dangerous_good/data/product_dangerous_class_data.xml
new file mode 100644
index 000000000000..0860e455539d
--- /dev/null
+++ b/product_dangerous_good/data/product_dangerous_class_data.xml
@@ -0,0 +1,101 @@
+
+
+
+
+ Explosives
+ ADR_1
+
+
+
+
+ Flammable gases
+ ADR_2.1
+
+
+
+
+ Non-toxic and non-flammable gases
+ ADR_2.2
+
+
+
+
+ Poison gases
+ ADR_2.3
+
+
+
+
+ Flammable liquids
+ ADR_3
+
+
+
+
+ Flammable solids
+ ADR_4.1
+
+
+
+
+ Spontaneously combustibles
+ ADR_4.2
+
+
+
+
+ Dangerous when wet
+ ADR_4
+
+
+
+
+ Oxidizers
+ ADR_5_1
+
+
+
+
+ Organic peroxides
+ ADR_5_2
+
+
+
+
+ Poison
+ ADR_6
+
+
+
+
+ Infectious substances
+ ADR_6.2
+
+
+
+
+ Radioactive
+ ADR_7B
+
+
+
+
+ Corrosive
+ ADR_8
+
+
+
+
+ 9 Miscellaneous dangerous substances
+ ADR_9
+
+
+
+
+ 9A Lithium Ion Batteries
+ ADR_9A
+
+
+
+
+
diff --git a/product_dangerous_good/data/product_dangerous_type_data.xml b/product_dangerous_good/data/product_dangerous_type_data.xml
new file mode 100644
index 000000000000..5416eb873efa
--- /dev/null
+++ b/product_dangerous_good/data/product_dangerous_type_data.xml
@@ -0,0 +1,69 @@
+
+
+
+
+ Explosives
+ 1
+
+
+ Gases, including compressed, liquified, and dissolved under pressure gases and vapors
+ 2
+
+
+ Flammable gases
+ 2.1
+
+
+ Non-toxic and non-flammable gases
+ 2.2
+
+
+ Toxic
+ 2.3
+
+
+ Flammable liquids
+ 3
+
+
+ Flammable solids, self-reactive substances, and solid desensitized explosives
+ 4.1
+
+
+ Substances liable to spontaneous combustion
+ 4.2
+
+
+ Substances which, in contact with water, emit flammable gases
+ 4.3
+
+
+ Oxidizing substances
+ 5.1
+
+
+ Organic peroxides
+ 5.2
+
+
+ Toxic substances
+ 6.1
+
+
+ Infectious substances
+ 6.2
+
+
+ Radioactive material
+ 7
+
+
+ Corrosive substances
+ 8
+
+
+ Miscellaneous dangerous substances and articles
+ 9
+
+
+
diff --git a/product_dangerous_good/models/__init__.py b/product_dangerous_good/models/__init__.py
new file mode 100644
index 000000000000..138b2d3c126d
--- /dev/null
+++ b/product_dangerous_good/models/__init__.py
@@ -0,0 +1,3 @@
+from . import product_dangerous
+from . import product_template
+from . import product_dangerous_component
diff --git a/product_dangerous_good/models/product_dangerous.py b/product_dangerous_good/models/product_dangerous.py
new file mode 100644
index 000000000000..c3c8424c00e0
--- /dev/null
+++ b/product_dangerous_good/models/product_dangerous.py
@@ -0,0 +1,29 @@
+# Copyright 2019 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import api, models, fields
+
+
+class ProductDangerousClass(models.Model):
+ _name = "product.dangerous.class"
+ _description = "Product Dangerous Class"
+
+ name = fields.Char(required=True)
+ code = fields.Char(required=True)
+ image = fields.Binary(string='Icon', required=True)
+ class_type = fields.Many2one(
+ comodel_name="product.dangerous.class.type",
+ ondelete="restrict",
+ string="Dangerous Type",
+ )
+
+ _sql_constraints = [
+ ('code_unique', 'unique(code)', 'This code already exist')
+ ]
+
+
+class ProductDangerousClassType(models.Model):
+ _name = "product.dangerous.class.type"
+ _description = "Product Dangerous Type"
+
+ name = fields.Char(required=True)
+ division = fields.Char()
diff --git a/product_dangerous_good/models/product_dangerous_component.py b/product_dangerous_good/models/product_dangerous_component.py
new file mode 100644
index 000000000000..12b99909a75d
--- /dev/null
+++ b/product_dangerous_good/models/product_dangerous_component.py
@@ -0,0 +1,18 @@
+# Copyright 2019 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import api, models, fields
+
+
+class ProductDangerousComponent(models.Model):
+ _name = "product.dangerous.component"
+ _description = "Product Dangerous Component"
+
+ dangerous_product = fields.Many2one(comodel_name='product.dangerous.class', string='Dangerous product')
+ weight = fields.Float(help="The weight of dangerous product in main product.")
+ volume = fields.Float(help="The volume of dangerous product in main product.")
+ dangerous_class = fields.Many2one(
+ comodel_name="product.dangerous.class",
+ ondelete="restrict",
+ string="Dangerous Class",
+ )
+ product_template_id = fields.One2many('product.template', 'dangerous_component_ids', string='Product')
diff --git a/product_dangerous_good/models/product_template.py b/product_dangerous_good/models/product_template.py
new file mode 100644
index 000000000000..e49b37a830dd
--- /dev/null
+++ b/product_dangerous_good/models/product_template.py
@@ -0,0 +1,20 @@
+# Copyright 2019 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import api, models, fields
+
+
+class ProductTemplate(models.Model):
+ _inherit = "product.template"
+
+ dangerous_class = fields.Many2one(
+ comodel_name="product.dangerous.class",
+ ondelete="restrict",
+ string="Dangerous Class",
+ )
+ is_dangerous_good = fields.Boolean(
+ help="This product belongs to dangerous class"
+ )
+ is_dangerous_waste = fields.Boolean(
+ help="Waste of this product belongs to dangerous class"
+ )
+ dangerous_component_ids = fields.One2many('product.dangerous.component', 'product_template_id', string='')
diff --git a/product_dangerous_good/readme/DESCRIPTION.rst b/product_dangerous_good/readme/DESCRIPTION.rst
new file mode 100644
index 000000000000..f466768186d3
--- /dev/null
+++ b/product_dangerous_good/readme/DESCRIPTION.rst
@@ -0,0 +1,7 @@
+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 you product contains dangerous product or waste you can add this to product composition
+and set weight and volume of this composition.
+
+Read more
+https://en.wikipedia.org/wiki/ADR_(treaty)
+Unece standards https://www.unece.org/trans/danger/publi/adr/adr2011/11ContentsE.html
\ No newline at end of file
diff --git a/product_dangerous_good/security/ir.model.access.csv b/product_dangerous_good/security/ir.model.access.csv
new file mode 100644
index 000000000000..79bdf38edf2c
--- /dev/null
+++ b/product_dangerous_good/security/ir.model.access.csv
@@ -0,0 +1,6 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_product_dangerous_class_user,product.dangerous.class user,model_product_dangerous_class,,1,0,0,0
+access_product_dangerous_class_manager,product.dangerous.class manager,model_product_dangerous_class,base.group_erp_manager,1,1,1,1
+access_product_dangerous_class_type_user,product.dangerous.class.type user,model_product_dangerous_class_type,,1,0,0,0
+access_product_dangerous_class_type_manager,product.dangerous.class.type manager,model_product_dangerous_class_type,base.group_erp_manager,1,1,1,1
+access_product_dangerous_component,product.dangerous.component,model_product_dangerous_component,,1,1,1,1
diff --git a/product_dangerous_good/static/img/ADR_1.svg b/product_dangerous_good/static/img/ADR_1.svg
new file mode 100644
index 000000000000..8788a2638de6
--- /dev/null
+++ b/product_dangerous_good/static/img/ADR_1.svg
@@ -0,0 +1,397 @@
+
+
+
diff --git a/product_dangerous_good/static/img/ADR_2.1.svg b/product_dangerous_good/static/img/ADR_2.1.svg
new file mode 100644
index 000000000000..9c0efb136488
--- /dev/null
+++ b/product_dangerous_good/static/img/ADR_2.1.svg
@@ -0,0 +1,121 @@
+
+
+
diff --git a/product_dangerous_good/static/img/ADR_2.2.svg b/product_dangerous_good/static/img/ADR_2.2.svg
new file mode 100644
index 000000000000..0f0bc4c9ac07
--- /dev/null
+++ b/product_dangerous_good/static/img/ADR_2.2.svg
@@ -0,0 +1,117 @@
+
+
+
diff --git a/product_dangerous_good/static/img/ADR_2.3.svg b/product_dangerous_good/static/img/ADR_2.3.svg
new file mode 100644
index 000000000000..b4c4d2662a38
--- /dev/null
+++ b/product_dangerous_good/static/img/ADR_2.3.svg
@@ -0,0 +1,5 @@
+
+
\ No newline at end of file
diff --git a/product_dangerous_good/static/img/ADR_3.svg b/product_dangerous_good/static/img/ADR_3.svg
new file mode 100644
index 000000000000..adfd6c9934d1
--- /dev/null
+++ b/product_dangerous_good/static/img/ADR_3.svg
@@ -0,0 +1,134 @@
+
+
+
diff --git a/product_dangerous_good/static/img/ADR_4.1.svg b/product_dangerous_good/static/img/ADR_4.1.svg
new file mode 100644
index 000000000000..65f6924dd4dc
--- /dev/null
+++ b/product_dangerous_good/static/img/ADR_4.1.svg
@@ -0,0 +1,101 @@
+
+
+
+
diff --git a/product_dangerous_good/static/img/ADR_4.2.svg b/product_dangerous_good/static/img/ADR_4.2.svg
new file mode 100644
index 000000000000..92cf207e8780
--- /dev/null
+++ b/product_dangerous_good/static/img/ADR_4.2.svg
@@ -0,0 +1,44 @@
+
+
+
+
diff --git a/product_dangerous_good/static/img/ADR_4.3.svg b/product_dangerous_good/static/img/ADR_4.3.svg
new file mode 100644
index 000000000000..b98db374ef51
--- /dev/null
+++ b/product_dangerous_good/static/img/ADR_4.3.svg
@@ -0,0 +1,141 @@
+
+
+
diff --git a/product_dangerous_good/static/img/ADR_5.1.svg b/product_dangerous_good/static/img/ADR_5.1.svg
new file mode 100644
index 000000000000..b5f663b4a451
--- /dev/null
+++ b/product_dangerous_good/static/img/ADR_5.1.svg
@@ -0,0 +1,5 @@
+
+
\ No newline at end of file
diff --git a/product_dangerous_good/static/img/ADR_5.2.svg b/product_dangerous_good/static/img/ADR_5.2.svg
new file mode 100644
index 000000000000..a55ba54db8d3
--- /dev/null
+++ b/product_dangerous_good/static/img/ADR_5.2.svg
@@ -0,0 +1,138 @@
+
+
+
diff --git a/product_dangerous_good/static/img/ADR_6.2.svg b/product_dangerous_good/static/img/ADR_6.2.svg
new file mode 100644
index 000000000000..4c148650ca75
--- /dev/null
+++ b/product_dangerous_good/static/img/ADR_6.2.svg
@@ -0,0 +1,67 @@
+
+
+
+
diff --git a/product_dangerous_good/static/img/ADR_7B.svg b/product_dangerous_good/static/img/ADR_7B.svg
new file mode 100644
index 000000000000..7ef64c443169
--- /dev/null
+++ b/product_dangerous_good/static/img/ADR_7B.svg
@@ -0,0 +1,217 @@
+
+
+
+
diff --git a/product_dangerous_good/static/img/ADR_9.svg b/product_dangerous_good/static/img/ADR_9.svg
new file mode 100644
index 000000000000..061b972e7bab
--- /dev/null
+++ b/product_dangerous_good/static/img/ADR_9.svg
@@ -0,0 +1,74 @@
+
+
+
+
diff --git a/product_dangerous_good/static/img/ADR_9A.svg b/product_dangerous_good/static/img/ADR_9A.svg
new file mode 100644
index 000000000000..b933efa70eae
--- /dev/null
+++ b/product_dangerous_good/static/img/ADR_9A.svg
@@ -0,0 +1,331 @@
+
+
+
+
diff --git a/product_dangerous_good/static/img/Dangclass6_1.svg b/product_dangerous_good/static/img/Dangclass6_1.svg
new file mode 100644
index 000000000000..5926fe6b4b13
--- /dev/null
+++ b/product_dangerous_good/static/img/Dangclass6_1.svg
@@ -0,0 +1,137 @@
+
+
+
diff --git a/product_dangerous_good/static/img/UN_transport_pictogram_-_8.svg b/product_dangerous_good/static/img/UN_transport_pictogram_-_8.svg
new file mode 100644
index 000000000000..db188a4e2011
--- /dev/null
+++ b/product_dangerous_good/static/img/UN_transport_pictogram_-_8.svg
@@ -0,0 +1,122 @@
+
+
+
+
diff --git a/product_dangerous_good/views/product_template_view.xml b/product_dangerous_good/views/product_template_view.xml
new file mode 100644
index 000000000000..a044a6c0bd56
--- /dev/null
+++ b/product_dangerous_good/views/product_template_view.xml
@@ -0,0 +1,87 @@
+
+
+
+
+ product.template.dangerous.class
+ product.template
+
+
+
+
+
+
+
+
+
+
+
+ product.dangerous.class.form
+ product.dangerous.class
+
+
+
+
+
+
+ product.dangerous.class.tree
+ product.dangerous.class
+
+
+
+
+
+
+
+
+
+
+ Dangerous Goods
+ product.dangerous.class
+ form
+ tree,form
+
+
+
+ product.dangerous.class.type.tree
+ product.dangerous.class.type
+
+
+
+
+
+
+
+
+
+ Dangerous Goods Type
+ product.dangerous.class.type
+ form
+ tree,form
+
+
+
+
+
+