代码之家  ›  专栏  ›  技术社区  ›  Chaban33

保护不使用api.constraints

  •  3
  • Chaban33  · 技术社区  · 6 年前

    如果没有“数量”,我想禁止生产。但是这个代码不起作用。

    只有当我将@api.constraints更改为@api.onchange('move_lines')时,它才起作用,但如果我使用onchange执行此操作,则仍有可能保存记录。

    作为一个限制我的名字,我怎样才能完成这项工作?

    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'))
    

    更新目标

    因此,如果没有原料制造(我们不能从零制造),如果没有足够的材料,就不可能生产产品,那么目标就是警告。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Nilesh Sheliya    6 年前

    请将以下约束添加到 MRP.生产 如果原材料产品不足以生产,则限制节省生产订单的模型。

    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.'))