[FIX] account: fix rounding of taxes in invoices
Set the round_globally method on the company. Have an invoice with several lines and some of them having two (or more) taxes. See the OPW 775501 for exact numbers. It is a practical example case where round(0.003 + 0.004) = 0.007 ~ 0.01 BUT round(0.003) + round(0.004) ~ 0.00 + 0.00 = 0.00 Before this commit there could be a difference between amount_residual and amount_total on invoices. This was because the two amounts are based on something different: AMOUNT RESIDUAL It computed in function of account_move_lines of the invoice. For such an invoice the structure of those lines would be 1 line per tax + 1 line in the receivable account Here the amount tax of each line is rounded before the addition. In summary, the total amount of each tax are rounded and then added to each other AMOUNT TOTAL It is computed in function of the on-the-fly computation of the taxes with two cases: - round per line: obviously each invoice_line gets its taxes rounded before addition, which isn't problematic as regards to the previous paragraph - round globally: Here lied the problem. the rounding of the tax_line_ids was made **after** each tax amount was added to each other, which contradicts the above argument After this commit, we round tax_line_ids before their addition, it is rather logical and matches the expectation one can have reading the tooltip of the rounding method field >> If you select 'Round per Line' : for each tax, the tax amount will first be computed and rounded for each PO/SO/invoice line and then these rounded amounts will be summed, leading to the total amount for that tax. If you select 'Round Globally': for *****each tax*****, the tax amount will be computed for each PO/SO/invoice line, then these amounts will be summed and eventually ***this total tax amount*** will be rounded << OPW 775501 After this commit, it is expected that the behavior of sale.order and purchase.order won't be the same as the invoice in the same conditions. See PR #20349 for an explanation
This commit is contained in:
@@ -44,8 +44,9 @@ class AccountInvoice(models.Model):
|
||||
@api.one
|
||||
@api.depends('invoice_line_ids.price_subtotal', 'tax_line_ids.amount', 'currency_id', 'company_id', 'date_invoice', 'type')
|
||||
def _compute_amount(self):
|
||||
round_curr = self.currency_id.round
|
||||
self.amount_untaxed = sum(line.price_subtotal for line in self.invoice_line_ids)
|
||||
self.amount_tax = sum(line.amount for line in self.tax_line_ids)
|
||||
self.amount_tax = sum(round_curr(line.amount) for line in self.tax_line_ids)
|
||||
self.amount_total = self.amount_untaxed + self.amount_tax
|
||||
amount_total_company_signed = self.amount_total
|
||||
amount_untaxed_signed = self.amount_untaxed
|
||||
|
||||
Reference in New Issue
Block a user