保护不适用于 api.constrains
protection not working with api.constrains
如果没有"qty_available",我想禁止制作产品。但是这段代码不起作用。
它仅在我将@api.constrains 更改为@api.onchange('move_lines') 时有效,但如果我使用 onchange 进行更改,则仍有可能保存记录。
因为 api.constrains 不喜欢名字,我怎样才能做到这一点
class mrp_production(osv.osv):
_inherit = 'mrp.production'
@api.constrains('qty_available', 'move_lines.qty_available')
def move_lines_check(self):
for line in self.move_lines:
if line.qty_available < 1:
raise ValidationError(_('There is not enough raw material, check Quantity on hand'))
更新目标
所以再次目标是如果没有原材料来制造产品(我们不能从无到有制造)出现警告,如果没有足够的材料应该不可能制造产品。
如果原始 material 产品不足以生产,请将以下约束添加到 mrp.production 模型以限制保存制造订单。
from openerp import api
from openerp.exceptions import Warning
@api.one
@api.constrains('move_lines','bom_id')
def _check_product_stock_availability(self):
if self.move_lines:
for move in self.move_lines:
qty_available = move.product_id.with_context(location=move.location_id.id).qty_available
if qty_available < move.product_uom_qty:
raise Warning(_('There is not enough raw material, check Quantity on hand.'))
elif self.bom_id:
factor = self.product_uom._compute_qty(self.product_uom.id,self.product_qty, self.bom_id.product_uom.id)
result, result2 = self.bom_id._bom_explode(self.bom_id,self.product_id, factor / self.bom_id.product_qty, None, routing_id=self.routing_id.id)
product_obj = self.env['product.product']
for line in result:
qty_available = product_obj.browse(line.get('product_id')).with_context(location=self.location_src_id.id).qty_available
#qty_available = line.product_id.with_context(location=self.location_src_id.id).qty_available
if qty_available < line.get('product_qty'):
raise Warning(_('There is not enough raw material, check Quantity on hand for products in BOM.'))
如果没有"qty_available",我想禁止制作产品。但是这段代码不起作用。
它仅在我将@api.constrains 更改为@api.onchange('move_lines') 时有效,但如果我使用 onchange 进行更改,则仍有可能保存记录。
因为 api.constrains 不喜欢名字,我怎样才能做到这一点
class mrp_production(osv.osv):
_inherit = 'mrp.production'
@api.constrains('qty_available', 'move_lines.qty_available')
def move_lines_check(self):
for line in self.move_lines:
if line.qty_available < 1:
raise ValidationError(_('There is not enough raw material, check Quantity on hand'))
更新目标
所以再次目标是如果没有原材料来制造产品(我们不能从无到有制造)出现警告,如果没有足够的材料应该不可能制造产品。
如果原始 material 产品不足以生产,请将以下约束添加到 mrp.production 模型以限制保存制造订单。
from openerp import api
from openerp.exceptions import Warning
@api.one
@api.constrains('move_lines','bom_id')
def _check_product_stock_availability(self):
if self.move_lines:
for move in self.move_lines:
qty_available = move.product_id.with_context(location=move.location_id.id).qty_available
if qty_available < move.product_uom_qty:
raise Warning(_('There is not enough raw material, check Quantity on hand.'))
elif self.bom_id:
factor = self.product_uom._compute_qty(self.product_uom.id,self.product_qty, self.bom_id.product_uom.id)
result, result2 = self.bom_id._bom_explode(self.bom_id,self.product_id, factor / self.bom_id.product_qty, None, routing_id=self.routing_id.id)
product_obj = self.env['product.product']
for line in result:
qty_available = product_obj.browse(line.get('product_id')).with_context(location=self.location_src_id.id).qty_available
#qty_available = line.product_id.with_context(location=self.location_src_id.id).qty_available
if qty_available < line.get('product_qty'):
raise Warning(_('There is not enough raw material, check Quantity on hand for products in BOM.'))