odoo 8 - 销售 - 添加约束"确认销售"按钮

时间:2017-03-01 06:39:18

标签: python-2.7 openerp odoo-8 openerp-8 sales

我需要禁止用户确认销售订单(点击确认销售按钮时发生的操作:销售 - >销售订单 - >选择订单)。因此,我覆盖了确认Sales的操作,并添加了一个引发验证错误的条件,因此如果条件无效,则不会调用super(例如,带有无名称的产品的订单行)。

但问题出现在S.O. - 编辑模式,当点击确认时,在执行以下覆盖功能之前执行对数据库的插入(在sale_order_line中插入)。

# the inherited class
class sales_warning(models.Model):
    _inherit = "sale.order"

    @api.multi   
    def action_button_confirm(self):
        print "begin overwritten action_button_confirm()"
        if(ForbidCondition==True):
            raise ValidationError("You cannot confirm a S.O...")
        else:
            res = super(sales_warning, self).action_button_confirm()        
            return res

在调用覆盖函数之前显示写操作的日志:

* crm werkzeug:.." POST /web/dataset/call_kw/sale.order/write HTTP / 1.1" 200

开始覆盖action_button_confirm()*

问题:有没有办法添加一个约束,它将在任何其他操作(例如上面的写入)之前启动,或者添加预先调用的函数的方法,如果它具有有效的项目,则检查每个订单行名字?最好

2 个答案:

答案 0 :(得分:1)

由于错误(即在编辑模式下确认SO时调用写入功能)仅在编辑模式下发生,请注意在只读模式下和保存SO时不会调用写入(似乎Odoo认为没有更新)在销售订单行 - 只读模式中),所以我选择通过在按钮中添加oe_read_only css类来隐藏编辑模式中的确认按钮:

<xpath expr="//button[@name='action_button_confirm']" position="attributes">           

      <attribute name="class">oe_read_only</attribute>             

 </xpath>

简介:

只读模式下的

-SO(销售订单):确认按钮可见,点击后不会对DB进行更新(更新sale_order_line),只调用action_button_confirm

编辑模式下的

-SO:隐藏确认按钮以防止更新sale_order_line

答案 1 :(得分:0)

在Odoo中,所有按钮操作将在本机写入方法之后调用。如果您想添加约束,请使用&#39; @ api.constrains&#39;在用户点击任何按钮

时引发错误弹出窗口