Odoo 10-覆盖取消链接方法

Odoo 10-覆盖取消链接方法,odoo,odoo-10,Odoo,Odoo 10,我正在覆盖account.invoice的取消链接方法,以允许删除上次开具的发票 这是我的代码: class AccountInvoice(models.Model): _inherit=“account.invoice” @api.multi def取消链接(自): 对于自行发票: 如果invoice.state不在('draft'、'cancel'): raise USERROR((“您不能删除非草稿或取消的发票。您应该将其退款。”) elif invoice.move_名称: 如果发票.j

我正在覆盖account.invoice的取消链接方法,以允许删除上次开具的发票

这是我的代码:

class AccountInvoice(models.Model):
_inherit=“account.invoice”
@api.multi
def取消链接(自):
对于自行发票:
如果invoice.state不在('draft'、'cancel'):
raise USERROR((“您不能删除非草稿或取消的发票。您应该将其退款。”)
elif invoice.move_名称:
如果发票.journal\u id.sequence\u id:
序列号=invoice.journal\u id.sequence\u id
最后分配的编号=序列id。下一个编号不增加()
最后分配的\u编号\u文本=序列\u id。获取下一个\u字符(最后分配的\u编号)
如果最后分配的\u编号\u文本==发票.move\u名称:
invoice.journal\u id.sequence\u id.write({'number\u next':最后分配的\u number})
其他:
raise USERROR((“发票经过验证(并收到编号)后,您无法删除该发票。您可以将其设置回“草稿”状态并修改其内容,然后重新确认”。)
return super(AccountInvoice,self).unlink()
到目前为止还不错

我的具体问题在最后一行,当我运行此代码时,它会流动,因此在该例程中不会出现用户错误,但随后它会运行super(AccountInvoice,self).unlink(),并执行旧的代码表单account\u invoice.py:

@api.multi
def取消链接(自):
对于自行发票:
如果invoice.state不在('draft'、'cancel'):
raise USERROR(\您不能删除未起草或取消的发票。您应该将其退款。'))
elif invoice.move_名称:
raise USERROR(\发票验证后(收到编号后)无法删除发票。您可以将其设置回“草稿”状态并修改其内容,然后重新确认。))
return super(AccountInvoice,self).unlink()

这会引发一个错误,我应该如何重写此取消链接的方法以避免这种情况发生?

如果您要覆盖原始方法而不是扩展(添加)它,那么您只需要避免调用
super

    # replace this line to prevent the original method from running
    # return super(AccountInvoice, self).unlink()

    # this will unlink (delete) all records in the recordset without
    # calling the original method (which is what super does)
    return self.unlink()

不知道这项工作是否值得尝试

呼叫发票的超级用户

           super(invoice.AccountInvoice, self).unlink()

别忘了先开进口发票

导入首选的重写方法

from odoo.addons.account.models.account_invoice import AccountInvoice as BaseAccountInvoice
那就叫它

class AccountInvoice(models.Model):
    _inherit = 'account.invoice'

    @api.multi
    def unlink(self):
        return super(BaseAccountInvoice,self).unlink()

但是我仍然想运行原始方法的父方法。@usk70为什么?它将根据原始方法继续抛出错误。看起来它基本上会使您的自定义方法变得无用。请注意,我说过:原始方法的父方法,它是我们重写方法的祖父母。@usk70祖父母方法在做什么?可能有必要将其直接合并到您的方法中。这既不建议也不需要扩展该类。OP使用的是正确的继承方法。我终于这样做了:super(invoice.AccountInvoice,self).unlink(),它强制使用继承的-original-方法中的super。我保留模型。我怀疑你的答案可能也适用。这是我第一个想到你所做的事。我正在使用我的手机,但我的电脑没有试过。但是同样非常有用的问题你能把错误和你的问题联系起来吗?