summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/mrp/models/product.py15
-rw-r--r--addons/stock/models/product.py2
-rw-r--r--addons/stock/models/stock_quant.py5
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(