Odoo 10-覆盖取消链接方法
我正在覆盖account.invoice的取消链接方法,以允许删除上次开具的发票 这是我的代码: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
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。我保留模型。我怀疑你的答案可能也适用。这是我第一个想到你所做的事。我正在使用我的手机,但我的电脑没有试过。但是同样非常有用的问题你能把错误和你的问题联系起来吗?