2013-03-15 2 views
0

У меня есть поле функций, которое не дает никаких ошибок, но также не устанавливает никаких значений, даже если это необходимо.openerp fields.function не влияет на значение

код:

class stock_move_custom(osv.osv): 
_name = 'stock.move' 
_inherit = 'stock.move' 

def _penalty(self, cr, uid, ids, field_name, arg, context=None): 
    if not ids: return {} 
    res = {} 
    for id in ids: 
     res[id] = 20.0 

    for line in self.browse(cr, uid, ids, context=context): 
     if line.picking_id: 
      if line.picking_id.purchase_id: 
       if line.picking_id.purchase_id.penalty_id: 
        res[line.id] = 10.0 
    return res  

    _columns = { 
      'value_forpenalty': fields.float('Value', digits=(16,2)), 
      'actual_penalty': fields.function(_penalty, type='float', digits=(16,2), string='Penalty', store=True, select=True) 
      } 
stock_move_custom() 

Примечание: penalty_id является many2one добавлен к пользовательскому ребенку purchase.order.

Q1. Все, что я получаю, - 0 за штраф. Ни 20, ни 10. Что может быть неправильным? Если это из-за пустых идентификаторов, как мне обойти это?

Q2. Как передать значение_forpenalty в функцию, поскольку мне в конечном итоге понадобится ее для расчета штрафа? Поэтому, когда пользователь вводит значение для поля value_forpenalty в форме (и нажмите кнопку расчета или, в идеале, без этого), значение должно быть передано функции для вычисления.

Благодаря

ответ

0

Я ваш код работать, как вы приняли, никаких проблем в коде.

Можете ли вы перезагрузить сервер и снова проверить его.

for line in self.browse(cr, uid, ids, context=context): 
     if line.picking_id and line.picking_id.purchase_id and line.picking_id.purchase_id.penalty_id: 
      res[line.id] = 10.0 

И передавая свой аргумент value_forpenalty, вы можете получить это значение в вы действуете от линии

как

res[line.id] = line.value_forpenalty 

Надеется, что это полезно для вас

+0

Спасибо ... Я буду стараться это. –