[MOV] sale_mrp, mrp: compute quantities for kit
The quantities for kits were computed only if sale_mrp was installed. That's why the override of the method 'compute_quantities' needs to be moved in MRP. TaskID: 1929518 closes odoo/odoo#30271
This commit is contained in:
@@ -85,6 +85,37 @@ class ProductProduct(models.Model):
|
||||
for product in self:
|
||||
product.mrp_product_qty = float_round(mapped_data.get(product.id, 0), precision_rounding=product.uom_id.rounding)
|
||||
|
||||
def _compute_quantities(self):
|
||||
""" When the product is a kit, this override computes the fields :
|
||||
- 'virtual_available'
|
||||
- 'qty_available'
|
||||
- 'incoming_qty'
|
||||
- 'outgoing_qty'
|
||||
"""
|
||||
for product in self:
|
||||
bom_kit = self.env['mrp.bom']._bom_find(product=product, bom_type='phantom')
|
||||
if bom_kit:
|
||||
boms, bom_sub_lines = bom_kit.explode(product, 1)
|
||||
ratios_virtual_available = []
|
||||
ratios_qty_available = []
|
||||
ratios_incoming_qty = []
|
||||
ratios_outgoing_qty = []
|
||||
for bom_line, bom_line_data in bom_sub_lines:
|
||||
component = bom_line.product_id
|
||||
uom_qty_per_kit = bom_line_data['qty'] / bom_line_data['original_qty']
|
||||
qty_per_kit = bom_line.product_uom_id._compute_quantity(uom_qty_per_kit, bom_line.product_id.uom_id)
|
||||
ratios_virtual_available.append(component.virtual_available / qty_per_kit)
|
||||
ratios_qty_available.append(component.qty_available / qty_per_kit)
|
||||
ratios_incoming_qty.append(component.incoming_qty / qty_per_kit)
|
||||
ratios_outgoing_qty.append(component.outgoing_qty / qty_per_kit)
|
||||
if bom_sub_lines:
|
||||
product.virtual_available = min(ratios_virtual_available) // 1
|
||||
product.qty_available = min(ratios_qty_available) // 1
|
||||
product.incoming_qty = min(ratios_incoming_qty) // 1
|
||||
product.outgoing_qty = min(ratios_incoming_qty) // 1
|
||||
else:
|
||||
super(ProductProduct, self)._compute_quantities()
|
||||
|
||||
@api.multi
|
||||
def action_view_bom(self):
|
||||
action = self.env.ref('mrp.product_open_bom').read()[0]
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import product_product
|
||||
from . import sale_mrp
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import models
|
||||
|
||||
|
||||
class Product(models.Model):
|
||||
_inherit = "product.product"
|
||||
|
||||
def _compute_quantities(self):
|
||||
""" When the product is a kit, this override computes the fields :
|
||||
- 'virtual_available'
|
||||
- 'qty_available'
|
||||
- 'incoming_qty'
|
||||
- 'outgoing_qty'
|
||||
"""
|
||||
for product in self:
|
||||
bom_kit = self.env['mrp.bom']._bom_find(product=product, bom_type='phantom')
|
||||
if bom_kit:
|
||||
boms, bom_sub_lines = bom_kit.explode(product, 1)
|
||||
ratios_virtual_available = []
|
||||
ratios_qty_available = []
|
||||
ratios_incoming_qty = []
|
||||
ratios_outgoing_qty = []
|
||||
for bom_line, bom_line_data in bom_sub_lines:
|
||||
component = bom_line.product_id
|
||||
uom_qty_per_kit = bom_line_data['qty'] / bom_line_data['original_qty']
|
||||
qty_per_kit = bom_line.product_uom_id._compute_quantity(uom_qty_per_kit, bom_line.product_id.uom_id)
|
||||
ratios_virtual_available.append(component.virtual_available / qty_per_kit)
|
||||
ratios_qty_available.append(component.qty_available / qty_per_kit)
|
||||
ratios_incoming_qty.append(component.incoming_qty / qty_per_kit)
|
||||
ratios_outgoing_qty.append(component.outgoing_qty / qty_per_kit)
|
||||
if bom_sub_lines:
|
||||
product.virtual_available = min(ratios_virtual_available) // 1
|
||||
product.qty_available = min(ratios_qty_available) // 1
|
||||
product.incoming_qty = min(ratios_incoming_qty) // 1
|
||||
product.outgoing_qty = min(ratios_incoming_qty) // 1
|
||||
else:
|
||||
super(Product, self)._compute_quantities()
|
||||
Reference in New Issue
Block a user