2013-02-16 2 views
1

В модуле OpenERP HR Expense нам требуется некоторая настройка, я добавил два поля, которые один взят из компании (x_adv) и суммы задолженности (x_dueamt). Требование к оплате - расчет суммы платежа (total_amount - x_adv). где и что мне писать код.OpenERP 7.0 Расходы на расчеты по персоналу для модуля

для примера Сотрудник A взял аванс от компании для проекта X 500 INR Но его общая сумма расходов составляет 1000 INR. Теперь мы хотим автоматически вычислить сумму 500 INR (x_dueamt только для чтения).

Пожалуйста, помогите нам .... Заранее спасибо ...

ответ

0

Вы можете достичь этого двумя способами:

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

Это один из лучших подходящий способ, чтобы решить вашу проблему. По функциональному полю вы можете сохранить значение в базе данных & также можете сделать поле только для чтения. Надеюсь, это сработает для вас.

 Смежные вопросы

  • Нет связанных вопросов^_^