在OpenERP HR Expense模块中,我们需要一些自定义,我添加了两个字段,一个是从公司(x_adv)和到期金额(x_dueamt)预先取得的。我们的要求是计算到期金额(total_amount - x_adv)。我应该在哪里写什么代码。
示例员工A从公司获得项目X 500 INR的预付款 但他的总费用是1000印度卢比。现在我们要计算到期金额500 INR 自动(x_dueamt只读)。
请帮助我们......提前致谢...
答案 0 :(得分:0)
您可以通过两种方式实现这一目标:
(1)您可以在advance taken from company
&上编写on_change方法。 Total expense
因此,当这两个字段发生任何变化时,您可以计算金额并返回您为due amount
字段计算的值。
这是一个例子,
<field name="x_adv" on_change="onchange_amount(x_adv,total_expense)"/> <field name="total_expense" on_change="onchange_amount(x_adv,total_expense)"/> <field name="due_amount"/>
在你的.py文件中写onchange_amount函数,当x_adv
&amp;的任何变化发生时,将调用此函数。 total_expense
。
def onchange_amount(self, cr, uid, ids, x_adv, total_amount, context={}):
// Your calculation
value = {'due_amount': calculate_value}
return {'value': value}
这样可以正常工作,但是如果结果字段(Here due_amount)只读,它将不会显示在客户端&amp;也在数据库中。所以还有第二种解决问题的方法。
(2)将due_amount设为字段函数。
def _calculate_due_amount(self, cr, uid, ids, field_name, arg, context=None): res = {} if context is None: context = {} for current_ids in self.browse(cr, uid, ids, context=context)[0] // Your calculation res[current_ids] = calculated_amount return res 'due_amount': fields.function(_calculate_due_amount, string='Due Amount', help="Due amount of employee.", store={ 'your_object': (lambda self, cr, uid, ids, c={}: ids, ['x_adv', 'total_expense'], 10) }),
这是解决问题的最佳方式之一。通过功能字段,您可以将值存储在数据库和数据库中。也可以只读字段。希望这对你有用。