2017-06-13 11 views
1

私はaccount.invoice.line各ラインのOdoo 8私のコードで何が間違っていますか?

_inherit = "account.invoice.line" 

discount = fields.Float(string='Discount (%)', 
         digits=(16, 10), 
         # digits= dp.get_precision('Discount'), 
         default=0.0) 

今logicaly price_subtotal = price_unit* qty *(1-discount)に新しいフィールドdiscountを追加しました。私は、問題は、私はいくつかのラインでの割引の値を変更した場合、請求書のamoun_taxが

を変更しないでamount_totalamount_tax

_inherit = "account.invoice" 

@api.one 
@api.depends('invoice_line.price_subtotal' ,'tax_line.amount') 
def _compute_amount(self): 
    disc = 0.0 
    for inv in self: 
     for line in inv.invoice_line: 
      disc += (line.quantity * line.price_unit) * (line.discount)/100 
    self.amount_untaxed = sum(line.price_subtotal for line in self.invoice_line) 
    self.amount_tax = sum(line.amount*self.change_rate for line in self.tax_line) 
    self.amount_discount = disc 
    self.amount_total = self.amount_untaxed + self.amount_tax 

を計算する機能をiditedてきた他のクラスaccount.invoiceで 事前

+0

この機能では、すでに 'account.invoice.line'に割引フィールドがあります。なぜそれをもう一度追加したいのですか? – CZoellner

+0

@CZoellner私は2種類のディスカウントを使用しています。合計額と1回線あたりのディスカウントの割引 –

+0

既に存在する最初の割引、私は –

答えて

0

としてみてください_compute_amountaccount.invoiceクラス

@api.one 
@api.depends('invoice_line.price_subtotal', 'invoice_line.discount', 'tax_line.amount') 
def _compute_amount(self): 
    disc = 0.0 
    for inv in self: 
     for line in inv.invoice_line: 
      disc += (line.quantity * line.price_unit) * (line.discount)/100 
    self.amount_untaxed = sum(line.price_subtotal for line in self.invoice_line) 
    self.amount_tax = sum(line.price_subtotal*(sum(tax.amount for tax in line.invoice_line_tax_id)) for line in self.invoice_line) 
    self.amount_discount = disc 
    self.amount_total = self.amount_untaxed + self.amount_tax 
0

でのおかげで、あなたが割引フィールドを更新するときに、あなたの方法を実行して、金額を計算しますapi.depends @割引フィールドを追加します。あなたのロジックごとに。

次のコードで試してみてください。amount_taxはcorrectely計算ではない、なぜ私が見つけた、と私は同じ機能で税金を計算だけの行を編集した、ハード検索後

@api.one 
@api.depends('invoice_line.price_subtotal' ,'tax_line.amount', 'invoice_line.discount') 
def _compute_amount(self): 
    disc = 0.0 
    for inv in self: 
     for line in inv.invoice_line: 
      disc += (line.quantity * line.price_unit) * (line.discount)/100 
    self.amount_untaxed = sum(line.price_subtotal for line in self.invoice_line) 
    self.amount_tax = sum(line.amount*self.change_rate for line in self.tax_line) 
    self.amount_discount = disc 
    self.amount_total = self.amount_untaxed + self.amount_tax 
+0

にディスカウントフィールドを追加しました@ api.dependsにディスカウントフィールドを追加すると動作しません –

+0

@Anonymousmilianaコードを比較しましたか?回答したコードと回答したコードの違いは何ですか?私は両方が同じであることを見る。 :D –

+0

あなたの答えと私の違いは、 'amount_tax'を計算する方法です –

関連する問題