如何使用名为“ bom_line_ids”的one2many字段来计算Odoo中产品BOM的总成本?

时间:2018-09-03 20:08:49

标签: python odoo

我已经在模型mrp.BOM结构中创建了一个自定义字段,如下所示,以计算产品的BOM成本:-

Field Name:- x_bom_total
Field Label:- Total BOM
Field Type:- Float
ReadOnly:- True
Dependency:- bom_line_ids

从属字段名称“ bom_line_ids”是显示产品中使用的所有物料的字段。它引用一个“一对多”关系模型中的模型“ mrp.bom.line”。因此,现在在计算部分中,如何计算产品的总物料清单,如下所示:-

for record in self:
    for each_object in record.bom_line_ids: 
        record['x_bom_total'] += record.bom_line_ids.qty * record.bom_line_ids.list_price

我正在使用odoo v11。有人有主意吗?

1 个答案:

答案 0 :(得分:0)

您的方法正确,但是您也应该考虑子BOM。

首先,您要使用几乎没有子BOM的几乎正确的方法:

for record in self:
    total = 0.0
    for line in record.bom_line_ids: 
        total += line.product_qty * line.product_id.list_price
    record['x_bom_total'] = total

现在考虑子BOM表。您显然正在使用Odoo Studio App,但我不知道您是否可以在计算字段上定义方法,但可以尝试一下。递归函数在这里会非常好:

def get_bom_total(lines)
    total = 0.0
    for line in lines:
        if line.child_bom_id:
            total += get_bom_total(line.child_bom_ids)  # recursive call
        else:
            total += line.product_qty * line.product_id.list_price
    return total

for record in self:
    record['x_bom_total'] = get_bom_total(record.bom_line_ids)