Odoo 销售订单:套件 bom 中的错误计算 qty_delivered

Odoo Sale order : wrong calcul qty_delivered in kit bom

我在使用 Odoo 11,我在处理一个特殊案例: 我有一个产品 (GRI002),其 BoM 类型为 "Kit"。 GRI002STK 是唯一的组件:

当我做销售订单时,我为订购数量设置了 2 GRI002。我确定。我去送货,我设置了 1 个完成数量:

它告诉我可以延期交货,我点击是。 因此,对于第一次采摘,我有 1 个初始需求和 1 个完成,对于延期交货,我有 1 个初始需求和 0 个完成:

在销售订单中,我应该有 2 个 Ordererd 数量和 1 个交付,但问题是:我有 2 个 Ordererd 数量和 0 个交付。 我已经测试了没有 BOM 的产品和要制造的 BoM,它在这两种情况下都有效。

那么计算订单数量的函数是什么?我会打补丁

你有这个问题吗?我无法将物料清单编辑成套件,因为它确实会产生制造订单,而我的客户不想要它。

我通过执行 super() 并重新计算成功了:

class SaleOrderLine(models.Model):
    _inherit = 'sale.order.line'


    @api.multi
    def _get_delivered_qty(self):
        self.ensure_one()

        #Hérite de sale/models/sale.py, de sale_stock/models/sale_order.py et de sale_mrp/models/sale_mrp.py
        qty = super(SaleOrderLine, self)._get_delivered_qty()

        #On recherche la nomenclature avec le produit actuel
        bom = self.env['mrp.bom']._bom_find(product=self.product_id)

        #Si c'est une nomenclature en kit
        if bom and bom.type == 'phantom':
            qty = 0   #obligé sinon les quantités seraient comptées 2x

            for move in self.move_ids:
                if move.state == 'done':
                    #on ajoute autant de quantité qu'il y en a dans le stock_move
                    qty = qty + move.quantity_done
        return qty