2015-08-24 38 views
0

我不知道如何获取当前的价值amount_total将其与myfunction转换,请帮助我。如何从另一个模型中获取sale.order的amount_total值?

from openerp.osv import fields, osv 
import conver 

class sale_total_extend(osv.Model): 
    _inherit='sale.order' 
    _name='sale.order' 
    _description="le modele ajoute le total d'un devis en lettres" 

def _amount_all_text(self, cr, uid, ids, field_name, arg, context=None): 
    res = {} 
    for order in self.browse(cr, uid, ids, context=context): 
     res[order.id] = conver.myfunction(order.amount_total) 
    return {} 

_columns = { 
    'amount_total_text': fields.function(_amount_all_text, string='total en lettres', type='text',store=True, multi='sums', help="Total en lettres"), 
} 
+0

您是否尝试过'self.amount_total'?如果它不起作用,也许你必须重载函数_amount_all来获取值更新 – ChesuCR

+0

如何覆盖函数? –

回答

1

要覆盖功能_amount_all尝试类似下面的代码(本例中是website_sale_delivery模块):

class SaleOrder(orm.Model): 
    _inherit = 'sale.order' 

    def _amount_all_wrapper(self, cr, uid, ids, field_name, arg, context=None):   
     """ Wrapper because of direct method passing as parameter for function fields """ 
     return self._amount_all(cr, uid, ids, field_name, arg, context=context) 

    def _amount_all(self, cr, uid, ids, field_name, arg, context=None): 
     res = super(SaleOrder, self)._amount_all(cr, uid, ids, field_name, arg, context=context) 
     currency_pool = self.pool.get('res.currency') 
     for order in self.browse(cr, uid, ids, context=context): 
      line_amount = sum([line.price_subtotal for line in order.order_line if line.is_delivery]) 
      currency = order.pricelist_id.currency_id 
      res[order.id]['amount_delivery'] = currency_pool.round(cr, uid, currency, line_amount) 
     return res 
0

我重写sale.order模型,并在功能上_amount_all一些变化并在python中的文件my_module中使用my_function进行一些操作之后,将一列amount_my_total添加到股票信息。

class sale_order(osv.Model): 
    _inherit = 'sale.order' 
    _name = 'sale.order' 
    _description = "" 


    def _amount_all_text(self, cr, uid, ids, field_name, arg, context=None): 
     return self._amount_all(cr, uid, ids, field_name, arg, context=context) 

    def _amount_all(self, cr, uid, ids, field_name, arg, context=None): 
     cur_obj = self.pool.get('res.currency') 
     res = {} 
     for order in self.browse(cr, uid, ids, context=context): 
      res[order.id] = { 
       'amount_untaxed': 0.0, 
       'amount_tax': 0.0, 
       'amount_total': 0.0, 
       'amount_my_total':'my default value when total = 0' 
      } 
      val = val1 = 0.0 
      cur = order.pricelist_id.currency_id 
      for line in order.order_line: 
       val1 += line.price_subtotal 
       val += self._amount_line_tax(cr, uid, line, context=context) 
      res[order.id]['amount_tax'] = cur_obj.round(cr, uid, cur, val) 
      res[order.id]['amount_untaxed'] = cur_obj.round(cr, uid, cur, val1) 
      res[order.id]['amount_total'] = res[order.id]['amount_untaxed'] + res[order.id]['amount_tax'] 
      res[order.id]['amount_my_total'] = my_module.my_function(res[order.id]['amount_total']) 
     return res 

    _columns = { 

     'amount_my_total': fields.function(_amount_all_text, string='my string', type='text',store={ 
     'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10), 
      }, 
     multi='sums', help="my total help message"), 

    } 
相关问题