diff --git a/addons/mrp_subcontracting/models/mrp_bom.py b/addons/mrp_subcontracting/models/mrp_bom.py index 3375653d737..e8ada6e16f5 100644 --- a/addons/mrp_subcontracting/models/mrp_bom.py +++ b/addons/mrp_subcontracting/models/mrp_bom.py @@ -13,7 +13,7 @@ class MrpBom(models.Model): def _bom_subcontract_find(self, product_tmpl=None, product=None, picking_type=None, company_id=False, bom_type='subcontract', subcontractor=False): domain = self._bom_find_domain(product_tmpl=product_tmpl, product=product, picking_type=picking_type, company_id=company_id, bom_type=bom_type) if subcontractor: - domain = AND([domain, [('subcontractor_ids', 'in', subcontractor.id)]]) + domain = AND([domain, [('subcontractor_ids', 'parent_of', subcontractor.ids)]]) return self.search(domain, order='sequence, product_id', limit=1) else: return self.env['mrp.bom'] diff --git a/addons/mrp_subcontracting/tests/test_subcontracting.py b/addons/mrp_subcontracting/tests/test_subcontracting.py index 8f7a2b2abf7..ce27039a047 100644 --- a/addons/mrp_subcontracting/tests/test_subcontracting.py +++ b/addons/mrp_subcontracting/tests/test_subcontracting.py @@ -574,6 +574,28 @@ class TestSubcontractingFlows(TestMrpSubcontractingCommon): self.assertEqual(self.comp1.virtual_available, 0.0) self.assertEqual(self.comp1.virtual_available, 0.0) + def test_flow_10(self): + """Receipts from a children contact of a subcontractor are properly + handled. + """ + # Create a children contact + subcontractor_contact = self.env['res.partner'].create({ + 'name': 'Test children subcontractor contact', + 'parent_id': self.subcontractor_partner1.id, + }) + # Create a receipt picking from the subcontractor + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.env.ref('stock.picking_type_in') + picking_form.partner_id = subcontractor_contact + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.finished + move.product_uom_qty = 1 + picking_receipt = picking_form.save() + picking_receipt.action_confirm() + # Check that a manufacturing order is created + mo = self.env['mrp.production'].search([('bom_id', '=', self.bom.id)]) + self.assertEqual(len(mo), 1) + class TestSubcontractingTracking(TransactionCase): def setUp(self):