2016-09-28 19 views
0

sale.order.lineモデルで_amount_line関数をオーバーライドしようとしていますが、これはcustumロジックを追加するためです。あなたはcompute_allメソッド呼び出しでミスを犯しているOdoo 8 override _amount_line

enter image description here

答えて

2

:私はOdooを実行すると

class SaleOrderLine(models.Model): 
    _inherit = 'sale.order.line' 

    def _amount_line(self): 
     tax_obj = self.env['account.tax'] 
     cur_obj = self.env['res.currency'] 
     res = {} 
     for line in self: 
      print line.tax_id 
      price = self._calc_line_base_price(line) 
      qty = self._calc_line_quantity(line) 
      print" price:{} & quantity: {}".format(price,qty) 
      taxes = tax_obj.compute_all(line.tax_id, price, qty, 
             line.product_id, 
             line.order_id.partner_id) 
      cur = line.order_id.pricelist_id.currency_id 
      res[line.id] = cur_obj.round(cur, taxes['total']) 
     return res 

    remise_palier = fields.Float('Remise palier (%)') 
    remise_total = fields.Float('Remise totale (%)') 
    price_subtotal = fields.Float(compute='_amount_line', string='Subtotal') 

、私はエラーを取得:

は、ここに私のコードです。

このメソッドは、このようにする必要があり、Odoo V8では

@api.multi 
def _amount_line(self): 
    tax_obj = self.env['account.tax'] 
    cur_obj = self.env['res.currency'] 
    for line in self: 
     print line.tax_id 
     price = self._calc_line_base_price(line) 
     qty = self._calc_line_quantity(line) 
     print" price:{} & quantity: {}".format(price,qty) 
     taxes = line.tax_id.compute_all(price, qty, line.product_id, line.order_id.partner_id)   
     cur = line.order_id.pricelist_id.currency_id 
     line.price_subtotal = cur.round(taxes['total']) 
+0

こんにちは。それはうまくいかなかった。ここに元の行はsale.py 'taxes = tax_obj.compute_all(cr、uid、line.tax_id、price、qty、 line.product_id、 line.order_id.partner_id)です。 –

+0

申し訳ありません、それは動作しますが、私は'return new_api(self、* args、** kwargs)を返します。TypeError:round()は2つの引数をとります(3が指定されています)' –

+0

'line.price_subtotal = cur.round(taxes ['total'])それは働かないの? –

1

+ compute_allコールは税自体にする必要があります。それを「クラスメソッド」と呼ぶ必要はありません。次のスニペットは、あなたのために働く必要があります。

@api.multi 
# @api.depends() use it for recomputation triggers 
def _amount_line(self): 
    for line in self: 
     print line.tax_id 
     price = self._calc_line_base_price(line) 
     qty = self._calc_line_quantity(line) 
     print" price:{} & quantity: {}".format(price,qty) 
     taxes = line.tax_id.compute_all(
      price, qty, line.product_id, line.order_id.partner_id) 
     cur = line.order_id.pricelist_id.currency_id 
     line.price_subtotal = cur.round(taxes['total']) 

編集:あなたは新しいAPI計算フィールドの機能に何かを返す必要はありません。計算されたフィールドに値を割り当てるだけです。

Edit2round()の新しいAPIスタイルのメソッドがあります。私はスニペットを変更しました。

+0

こんにちは@CZoellnerそれは私に今返すnew_api(self、* args、** kwargs)を返します TypeError: round()は正確に2つの引数(3与えられます) ' –

+0

私はそれが同じ問題であると思う、見てみましょう – CZoellner

+0

それは編集されています。新しいAPIを使って通貨オブジェクトに対して 'round'メソッドを呼び出さなければなりません。 – CZoellner

関連する問題