Вы можете достичь этого двумя способами:
(1) Вы можете написать on_change метод на advance taken from company
& 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
& 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) Задать должное_значение функции поля.
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)
}),
Это один из лучших подходящий способ, чтобы решить вашу проблему. По функциональному полю вы можете сохранить значение в базе данных & также можете сделать поле только для чтения. Надеюсь, это сработает для вас.