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 @@ />