首页 > 解决方案 > Odoo 销售订单:kit bom 中的错误计算 qty_delivered

问题描述

我在 Odoo 11 上,我在一个特殊情况下:我有一个产品 (GRI002),它的 BoM 为“Kit”类型。GRI002STK 是唯一的组件: 在此处输入图像描述

当我做销售订单时,我为订购的数量设置了 2 GRI002。我确定。我去交货,我设置了 1 个完成的数量: 在此处输入图像描述

它告诉我我可以延期交货,我点击是的。因此,对于第一次选择,我有 1 个初始需求和 1 个完成,对于延期交货,我有 1 个初始需求和 0 个完成: 在此处输入图像描述

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

那么计算有序数量的函数是什么?我会修补它。

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

标签: odoocalculated-field

解决方案


我通过执行 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

推荐阅读