我正在尝试向(odoo11 / hr_payroll)中的方法添加额外的代码。我所做的事情被复制并粘贴了整个代码,并在其中添加了额外的代码,但是当该方法被执行时,它被执行了两次,这证明我的所作所为是错误的。
我正在寻找一种解决方案,而不是应对和粘贴整个代码。
所以这是我要在基本方法中添加的内容:
基本方法:
if debit_account_id:
debit_line = (0, 0, {
'name': line.name,
'partner_id': line._get_partner_id(credit_account=False),
'account_id': debit_account_id,
'journal_id': slip.journal_id.id,
'date': date,
'debit': amount > 0.0 and amount or 0.0,
'credit': amount < 0.0 and -amount or 0.0,
'analytic_account_id': line.salary_rule_id.analytic_account_id.id,
'tax_line_id': line.salary_rule_id.account_tax_id.id,
})
line_ids.append(debit_line)
debit_sum += debit_line[2]['debit'] - debit_line[2]['credit']
继承的方法:
@api.multi
def action_payslip_done(self):
res = super(PayslipBills, self).action_payslip_done()
if debit_account_id:
debit_line = (0, 0, {
'name': line.name,
'partner_id': line._get_partner_id(credit_account=False),
'account_id': debit_account_id,
'journal_id': slip.journal_id.id,
'x_account_no': x_debit_account, # extra
'x_jtag': [(6, 0, x_tags)], # extra
'x_jtag_option': [(6, 0, x_tags_option)], # extra
'date': date,
'debit': amount > 0.0 and amount or 0.0,
'credit': amount < 0.0 and -amount or 0.0,
'analytic_account_id': line.salary_rule_id.analytic_account_id.id,
'tax_line_id': line.salary_rule_id.account_tax_id.id,
})
line_ids.append(debit_line)
debit_sum += debit_line[2]['debit'] - debit_line[2]['credit']
return res
答案 0 :(得分:0)
您的问题缺少一些有趣的信息。首先,此原始方法(模块hr_payroll)已被hr_payroll_account覆盖。其次,通过hr_payroll_account进行的第一个优先级实际上是messed_up,您无法通过尝试更改/扩展名来替代它。
因此,唯一的解决方案是完全重写/覆盖原始方法,而无需调用super。当心两种已经存在的方法中的事实业务逻辑!您必须将两种逻辑都复制到新方法中。
我不喜欢那些解决方案,但这是我所知道的唯一可能的解决方案。
答案 1 :(得分:0)
为了避免其他可以继承并重新定义相同模块和方法的模块出现问题,我将使用supper(...)保留对原始方法的调用,然后立即使用额外的字段和值更新这些记录您需要添加,例如,如果该记录集的x_whatever值始终相同,并且不管是贷方还是借方行,您都可以尝试以下操作:
class PayslipBills(models.Model):
_inherit = 'hr.payslip'
(... define new fields and new methods...)
@api.multi
def action_payslip_done(self):
res = super(PayslipBills, self).action_payslip_done()
for record in res:
for lines in record.line_ids
# add values to the extra fields...
lines.write({'x_account_no': x_debit_account,
'x_jtag': [(6, 0, x_tags)],
'x_jtag_option': [(6, 0, x_tags_option)],
})
return res