OpenERP 7.0 HR费用模块到期金额计算

时间:2013-02-16 07:06:45

标签: openerp

在OpenERP HR Expense模块中,我们需要一些自定义,我添加了两个字段,一个是从公司(x_adv)和到期金额(x_dueamt)预先取得的。我们的要求是计算到期金额(total_amount - x_adv)。我应该在哪里写什么代码。

示例员工A从公司获得项目X 500 INR的预付款 但他的总费用是1000印度卢比。现在我们要计算到期金额500 INR 自动(x_dueamt只读)。

请帮助我们......提前致谢...

1 个答案:

答案 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)
                                    }),

这是解决问题的最佳方式之一。通过功能字段,您可以将值存储在数据库和数据库中。也可以只读字段。希望这对你有用。