diff --git a/stock_secondary_unit/models/__init__.py b/stock_secondary_unit/models/__init__.py
index 960afa99e..d342115d5 100644
--- a/stock_secondary_unit/models/__init__.py
+++ b/stock_secondary_unit/models/__init__.py
@@ -1,3 +1,6 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
-from . import product
+# Keep order
+from . import stock_product_secondary_unit_mixin
+from . import product_product
+from . import product_template
from . import stock_move
diff --git a/stock_secondary_unit/models/product_product.py b/stock_secondary_unit/models/product_product.py
new file mode 100644
index 000000000..6794b98e0
--- /dev/null
+++ b/stock_secondary_unit/models/product_product.py
@@ -0,0 +1,17 @@
+# Copyright 2018 Tecnativa - Sergio Teruel
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+from odoo import fields, models
+
+
+class ProductProduct(models.Model):
+ _inherit = ["product.product", "stock.product.secondary.unit.mixin"]
+ _name = "product.product"
+
+ stock_secondary_uom_id = fields.Many2one(
+ comodel_name="product.secondary.unit",
+ string="Second unit for inventory",
+ readonly=False,
+ domain="['|', ('product_id', '=', id),"
+ "'&', ('product_tmpl_id', '=', product_tmpl_id),"
+ " ('product_id', '=', False)]",
+ )
diff --git a/stock_secondary_unit/models/product_template.py b/stock_secondary_unit/models/product_template.py
new file mode 100644
index 000000000..c8b1845aa
--- /dev/null
+++ b/stock_secondary_unit/models/product_template.py
@@ -0,0 +1,14 @@
+# Copyright 2018 Tecnativa - Sergio Teruel
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+from odoo import fields, models
+
+
+class ProductTemplate(models.Model):
+ _inherit = ["product.template", "stock.product.secondary.unit.mixin"]
+ _name = "product.template"
+
+ stock_secondary_uom_id = fields.Many2one(
+ comodel_name="product.secondary.unit",
+ domain="[('product_tmpl_id', '=', id), ('product_id', '=', False)]",
+ string="Second unit for inventory",
+ )
diff --git a/stock_secondary_unit/models/product.py b/stock_secondary_unit/models/stock_product_secondary_unit_mixin.py
similarity index 55%
rename from stock_secondary_unit/models/product.py
rename to stock_secondary_unit/models/stock_product_secondary_unit_mixin.py
index a57cef0c7..99796f4c1 100644
--- a/stock_secondary_unit/models/product.py
+++ b/stock_secondary_unit/models/stock_product_secondary_unit_mixin.py
@@ -4,9 +4,9 @@ from odoo import api, fields, models
from odoo.tools.float_utils import float_round
-class StockProductSecondaryUnit(models.AbstractModel):
- _name = "stock.product.secondary.unit"
- _description = "Stock Product Secondary Unit"
+class StockProductSecondaryUnitMixin(models.AbstractModel):
+ _name = "stock.product.secondary.unit.mixin"
+ _description = "Stock Product Secondary Unit Mixin"
secondary_unit_qty_available = fields.Float(
string="Quantity On Hand (2Unit)",
@@ -26,23 +26,3 @@ class StockProductSecondaryUnit(models.AbstractModel):
product.secondary_unit_qty_available = float_round(
qty, precision_rounding=product.uom_id.rounding
)
-
-
-class ProductTemplate(models.Model):
- _inherit = ["product.template", "stock.product.secondary.unit"]
- _name = "product.template"
-
- stock_secondary_uom_id = fields.Many2one(
- comodel_name="product.secondary.unit", string="Second unit for inventory"
- )
-
-
-class ProductProduct(models.Model):
- _inherit = ["product.product", "stock.product.secondary.unit"]
- _name = "product.product"
-
- stock_secondary_uom_id = fields.Many2one(
- comodel_name="product.secondary.unit",
- string="Second unit for inventory",
- related="product_tmpl_id.stock_secondary_uom_id",
- )
diff --git a/stock_secondary_unit/tests/test_stock_secondary_unit.py b/stock_secondary_unit/tests/test_stock_secondary_unit.py
index 3d21df4da..01e38ae17 100644
--- a/stock_secondary_unit/tests/test_stock_secondary_unit.py
+++ b/stock_secondary_unit/tests/test_stock_secondary_unit.py
@@ -128,7 +128,7 @@ class TestProductSecondaryUnit(TransactionCase):
move_vals = {
"product_id": product1.id,
"name": product1.display_name,
- "secondary_uom_id": product1.secondary_uom_ids[0].id,
+ "secondary_uom_id": product1.product_tmpl_id.secondary_uom_ids[0].id,
"product_uom": product1.uom_id.id,
"product_uom_qty": 10.0,
"location_id": self.location_supplier.id,
@@ -167,17 +167,17 @@ class TestProductSecondaryUnit(TransactionCase):
with picking_form.move_ids_without_package.new() as move:
move.product_id = product
move.secondary_uom_qty = 1
- move.secondary_uom_id = product.secondary_uom_ids[0]
+ move.secondary_uom_id = product.product_tmpl_id.secondary_uom_ids[0]
self.assertEqual(move.product_uom_qty, 0.5)
move.secondary_uom_qty = 2
self.assertEqual(move.product_uom_qty, 1)
- move.secondary_uom_id = product.secondary_uom_ids[1]
+ move.secondary_uom_id = product.product_tmpl_id.secondary_uom_ids[1]
self.assertEqual(move.product_uom_qty, 1.8)
move.product_uom_qty = 5
self.assertAlmostEqual(move.secondary_uom_qty, 5.56, 2)
# Change uom from stock move line
move.secondary_uom_qty = 1
- move.secondary_uom_id = product.secondary_uom_ids[2]
+ move.secondary_uom_id = product.product_tmpl_id.secondary_uom_ids[2]
self.assertEqual(move.product_uom_qty, 10)
move.product_uom = self.product_uom_ton
self.assertAlmostEqual(move.secondary_uom_qty, 1000, 2)
@@ -189,11 +189,11 @@ class TestProductSecondaryUnit(TransactionCase):
with picking_form.move_line_ids_without_package.new() as move:
move.product_id = product
move.secondary_uom_qty = 1
- move.secondary_uom_id = product.secondary_uom_ids[0]
+ move.secondary_uom_id = product.product_tmpl_id.secondary_uom_ids[0]
self.assertEqual(move.qty_done, 0.5)
move.secondary_uom_qty = 2
self.assertEqual(move.qty_done, 1)
- move.secondary_uom_id = product.secondary_uom_ids[1]
+ move.secondary_uom_id = product.product_tmpl_id.secondary_uom_ids[1]
self.assertEqual(move.qty_done, 1.8)
move.qty_done = 5
self.assertAlmostEqual(move.secondary_uom_qty, 5.56, 2)
@@ -209,11 +209,11 @@ class TestProductSecondaryUnit(TransactionCase):
with picking_form.move_ids_without_package.new() as move:
move.product_id = product
move.secondary_uom_qty = 1
- move.secondary_uom_id = product.secondary_uom_ids[0]
+ move.secondary_uom_id = product.product_tmpl_id.secondary_uom_ids[0]
with picking_form.move_ids_without_package.new() as move:
move.product_id = product
move.secondary_uom_qty = 1
- move.secondary_uom_id = product.secondary_uom_ids[1]
+ move.secondary_uom_id = product.product_tmpl_id.secondary_uom_ids[1]
picking = picking_form.save()
picking.action_confirm()
self.assertEqual(len(picking.move_lines), 2)
@@ -229,11 +229,11 @@ class TestProductSecondaryUnit(TransactionCase):
with picking_form.move_ids_without_package.new() as move:
move.product_id = product
move.secondary_uom_qty = 1
- move.secondary_uom_id = product.secondary_uom_ids[0]
+ move.secondary_uom_id = product.product_tmpl_id.secondary_uom_ids[0]
with picking_form.move_ids_without_package.new() as move:
move.product_id = product
move.secondary_uom_qty = 1
- move.secondary_uom_id = product.secondary_uom_ids[0]
+ move.secondary_uom_id = product.product_tmpl_id.secondary_uom_ids[0]
picking = picking_form.save()
picking.action_confirm()
self.assertEqual(len(picking.move_lines), 1)
diff --git a/stock_secondary_unit/views/product_views.xml b/stock_secondary_unit/views/product_views.xml
index 98c89b539..2f9b234aa 100644
--- a/stock_secondary_unit/views/product_views.xml
+++ b/stock_secondary_unit/views/product_views.xml
@@ -12,7 +12,6 @@
diff --git a/stock_secondary_unit/views/stock_move_views.xml b/stock_secondary_unit/views/stock_move_views.xml
index 9c097ba0b..5730e1e15 100644
--- a/stock_secondary_unit/views/stock_move_views.xml
+++ b/stock_secondary_unit/views/stock_move_views.xml
@@ -12,7 +12,9 @@
@@ -31,7 +33,9 @@
diff --git a/stock_secondary_unit/views/stock_picking_views.xml b/stock_secondary_unit/views/stock_picking_views.xml
index 67180ef9f..29216420b 100644
--- a/stock_secondary_unit/views/stock_picking_views.xml
+++ b/stock_secondary_unit/views/stock_picking_views.xml
@@ -18,7 +18,9 @@
/>
@@ -33,7 +35,9 @@
/>