我需要禁止用户确认销售订单(点击确认销售按钮时发生的操作:销售 - >销售订单 - >选择订单)。因此,我覆盖了确认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()*
问题:有没有办法添加一个约束,它将在任何其他操作(例如上面的写入)之前启动,或者添加预先调用的函数的方法,如果它具有有效的项目,则检查每个订单行名字?最好
答案 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;在用户点击任何按钮
时引发错误弹出窗口