1

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

例如,员工 A 从公司预支项目 X 500 卢比,但他的总费用为 1000 卢比。现在我们要自动计算到期金额 500 INR(x_dueamt 是只读的)。

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

4

1 回答 1

0

您可以通过两种方式实现这一点:

advance taken from company(1) 您可以在&上编写 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"/>

x_adv在您的 .py 文件中写入 onchange_amount 函数,当&发生任何变化时,将调用此函数total_expense

def onchange_amount(self, cr, uid, ids, x_adv, total_amount, context={}):
    // Your calculation
    value = {'due_amount': calculate_value}
    return {'value': value}

这可以正常工作,但如果结果字段(此处为 due_amount)是只读的,它将不会显示在客户端和数据库中。所以有第二种方法可以解决你的问题。

(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)
                                    }),

这是解决您的问题的最合适的方法之一。通过函数字段,您可以将值存储在数据库中,也可以将字段设为只读。希望这对你有用。

于 2013-05-09T05:18:07.387 回答