diff --git a/shopfloor/actions/data.py b/shopfloor/actions/data.py index 06019118fdd..30b04d075d1 100644 --- a/shopfloor/actions/data.py +++ b/shopfloor/actions/data.py @@ -316,7 +316,10 @@ def _product_packaging(self, rec, field): def _product_supplier_code(self, rec, field): supplier_info = fields.first( - rec.seller_ids.filtered(lambda x: x.product_id == rec) + rec.seller_ids.filtered( + lambda x: x.product_id == rec + or x.product_tmpl_id == rec.product_tmpl_id + ) ) return supplier_info.product_code or "" diff --git a/shopfloor/actions/data_detail.py b/shopfloor/actions/data_detail.py index 5c073138bd0..0e99df83ca2 100644 --- a/shopfloor/actions/data_detail.py +++ b/shopfloor/actions/data_detail.py @@ -140,7 +140,11 @@ def product_detail(self, record, **kw): # Defined new method to not overload the base one used in many places data = self._jsonify(record, self._product_detail_parser, **kw) suppliers = self.env["product.supplierinfo"].search( - [("product_id", "=", record.id)] + [ + "|", + ("product_tmpl_id", "=", record.product_tmpl_id.id), + ("product_id", "=", record.id), + ] ) data["suppliers"] = self._jsonify( suppliers, self._product_supplierinfo_parser, multi=True diff --git a/shopfloor/tests/test_actions_data_base.py b/shopfloor/tests/test_actions_data_base.py index 4b3e3aa66c2..7dc9e6f64fb 100644 --- a/shopfloor/tests/test_actions_data_base.py +++ b/shopfloor/tests/test_actions_data_base.py @@ -141,7 +141,10 @@ def _expected_product(self, record, **kw): return data def _expected_supplier_code(self, product): - supplier_info = product.seller_ids.filtered(lambda x: x.product_id == product) + supplier_info = product.seller_ids.filtered( + lambda x: x.product_id == product + or x.product_tmpl_id == product.product_tmpl_id + ) return supplier_info[0].product_code if supplier_info else "" def _expected_packaging(self, record, **kw): diff --git a/shopfloor/tests/test_actions_data_detail.py b/shopfloor/tests/test_actions_data_detail.py index 9cda26bbd70..e8acbb44fbc 100644 --- a/shopfloor/tests/test_actions_data_detail.py +++ b/shopfloor/tests/test_actions_data_detail.py @@ -343,3 +343,37 @@ def test_product(self): self.assert_schema(self.schema_detail.product_detail(), data) expected = self._expected_product_detail(product, full=True) self.assertDictEqual(data, expected) + + def test_product_template(self): + # Check product supplierinfo on template level + move_line = self.move_b.move_line_ids + product = move_line.product_id.with_context(location=move_line.location_id.id) + Partner = self.env["res.partner"].sudo() + manuf = Partner.create({"name": "Manuf 1"}) + product.sudo().write( + { + "image_128": fake_colored_image(size=(128, 128)), + "manufacturer_id": manuf.id, + } + ) + vendor_a = Partner.create({"name": "Supplier A"}) + vendor_b = Partner.create({"name": "Supplier B"}) + SupplierInfo = self.env["product.supplierinfo"].sudo() + SupplierInfo.create( + { + "partner_id": vendor_a.id, + "product_tmpl_id": product.product_tmpl_id.id, + "product_code": "SUPP1", + } + ) + SupplierInfo.create( + { + "partner_id": vendor_b.id, + "product_tmpl_id": product.product_tmpl_id.id, + "product_code": "SUPP2", + } + ) + data = self.data_detail.product_detail(product) + self.assert_schema(self.schema_detail.product_detail(), data) + expected = self._expected_product_detail(product, full=True) + self.assertDictEqual(data, expected)