diff options
| -rw-r--r-- | addons/mrp/models/product.py | 15 | ||||
| -rw-r--r-- | addons/stock/models/product.py | 2 | ||||
| -rw-r--r-- | addons/stock/models/stock_quant.py | 5 |
3 files changed, 19 insertions, 3 deletions
diff --git a/addons/mrp/models/product.py b/addons/mrp/models/product.py index bc2bb215f37..266d250d1a3 100644 --- a/addons/mrp/models/product.py +++ b/addons/mrp/models/product.py @@ -205,3 +205,18 @@ class ProductProduct(models.Model): action = self.product_tmpl_id.action_view_mos() action['domain'] = [('state', '=', 'done'), ('product_id', 'in', self.ids)] return action + + def action_open_quants(self): + bom_kits = {} + for product in self: + bom = self.env['mrp.bom']._bom_find(product=product, bom_type='phantom') + if bom: + bom_kits[product] = bom + components = self - self.env['product.product'].concat(*list(bom_kits.keys())) + for product in bom_kits: + boms, bom_sub_lines = bom_kits[product].explode(product, 1) + components |= self.env['product.product'].concat(*[l[0].product_id for l in bom_sub_lines]) + res = super(ProductProduct, components).action_open_quants() + if bom_kits: + res['context']['single_product'] = False + return res diff --git a/addons/stock/models/product.py b/addons/stock/models/product.py index fd2f7d6681f..5d68eba4557 100644 --- a/addons/stock/models/product.py +++ b/addons/stock/models/product.py @@ -487,7 +487,7 @@ class Product(models.Model): single_product=True ) else: - self = self.with_context(product_tmpl_id=self.product_tmpl_id.id) + self = self.with_context(product_tmpl_ids=self.product_tmpl_id.ids) action = self.env['stock.quant']._get_quants_action(domain) action["name"] = _('Update Quantity') return action diff --git a/addons/stock/models/stock_quant.py b/addons/stock/models/stock_quant.py index 3154a9fac53..3209ae23600 100644 --- a/addons/stock/models/stock_quant.py +++ b/addons/stock/models/stock_quant.py @@ -45,8 +45,9 @@ class StockQuant(models.Model): if not self._is_inventory_mode(): return domain = [('type', '=', 'product')] - if self.env.context.get('product_tmpl_id'): - domain = expression.AND([domain, [('product_tmpl_id', '=', self.env.context['product_tmpl_id'])]]) + if self.env.context.get('product_tmpl_ids') or self.env.context.get('product_tmpl_id'): + products = self.env.context.get('product_tmpl_id', []) + [self.env.context.get('product_tmpl_id', 0)] + domain = expression.AND([domain, [('product_tmpl_id', 'in', products)]]) return domain product_id = fields.Many2one( |
