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 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + 3 + + + + + + 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 @@ + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + 4 + + + + + + + + + + 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 @@ + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + 5.2 + + + + + + + + + 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 @@ + + + + + + + image/svg+xml + + + + ADR + Toxic Substance + Poison + Hazard + Giftiger Stoff + Gefahrgutklasse + + + ADR Class 6.1 + de: ADR Gefahrgutklasse 6.1 - Giftige Stoffe +en: ADR labels for dangerous goods, Hazard class 6.1 - Toxic substances + + + Commons:User:Kaverin +Inkscape: Trace Bitmap; Text >unflow !; Text >path >object to path + + + + + GNU Free Documentation License, Version 1.2 or any later + + + + + + Commons:User:W!B: + + + 2007-01-14 + Dangclass6.1 + http://commons.wikimedia.org/wiki/Image:Dangclass6 1.svg + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + +