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
我在使用 Odoo 11,我在处理一个特殊案例:
我有一个产品 (GRI002),其 BoM 类型为 "Kit"。 GRI002STK 是唯一的组件:
当我做销售订单时,我为订购数量设置了 2 GRI002。我确定。我去送货,我设置了 1 个完成数量:
它告诉我可以延期交货,我点击是。
因此,对于第一次采摘,我有 1 个初始需求和 1 个完成,对于延期交货,我有 1 个初始需求和 0 个完成:
在销售订单中,我应该有 2 个 Ordererd 数量和 1 个交付,但问题是:我有 2 个 Ordererd 数量和 0 个交付。
那么计算订单数量的函数是什么?我会打补丁
你有这个问题吗?我无法将物料清单编辑成套件,因为它确实会产生制造订单,而我的客户不想要它。
我通过执行 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