Odoo 10:如何根据薪水规则调用函数?

Odoo 10 : How to make a call to a function on a salary rule?

我需要从对象 payslip 调用一个名为 salaryfunction:

的函数
class HrNicPaySlip(models.Model):
    _inherit = 'hr.payslip'

    @api.multi
    def salaryfunction(self):
       return 100.00

我需要从工资规则中调用这个函数,像这样:

result = payslip.salaryfunction()

但是我在计算pay sheep的时候出现如下错误:

Wrong python code defined for salary rule

日志中的错误是:

ValueError: : "'float' object is not callable" while evaluating u'result = payslip.salaryfunction()'

你能帮忙吗?

我搜索了一些类似的问题但没有成功

更多信息:

我想调用我的模型中定义的函数,该函数继承自 hr.payslip

class MyModelTest(models.Model):
  _inherit = 'hr.payslip'

  @api.multi
  def salaryfunction(self):
    return 100.00

在我的工资规则中我写了 amount_python_compute :

result = payslip.salaryfunction()

如果你在你的模型中('hr.payslip')你只需要以这种方式调用你的函数self.salaryfunction()如果你在其他模型中以这种方式调用它self.env['hr.payslip'].salaryfunction() ,希望对你有所帮助

在阅读了工资单模型的所有代码后,我终于解决了我的问题。

工资规则中使用的工资单对象有一个环境变量引用,因此调用其他模型函数的正确方法class如下(根据我的示例):

result = payslip.env['hr.payslip'].salaryfunction()

我希望这对另一个人有用

调用函数 salaryfunction()payslip.salaryfunction() 不起作用,因为以前在声明局部变量字典时,其中 'payslip': Payslips (employee.id, self, self.env) 是一个特殊对象,它不允许访问方法那个对象。

我建议您在 class hr.payslip 的方法 _get_base_local_dict 中创建一个新的局部变量 'self': self,这样您就可以在工资规则中调用该方法,例如此 self.salaryfunction()salaryfunction() class 'hr.payslip' 的一种方法。