odoo/enterprise#39181

Created by Bugfix, Séna Serge Nshimiyimana (sesn)
Merged at b15116179e71040ffa01bb35161e32b16aac477d

Statuses:

Linked pull requests
label
odoo-dev:16.0-opw-3112197-is_refund-sesn
head
ed001ac4fb81e1b6cf3a51d8d875840ef2e49356
merged
2 years ago by Accounting, Laurent Smet (las)
odoo/odoo odoo/enterprise
16.0 #114801 #39181
saas-16.1 #117523 #39236
saas-16.2 #117533 #39244
17.0
saas-17.4
18.0
saas-18.1
saas-18.2
saas-18.3
master #118588 #39775

[FIX] account_accountant: fix interaction between early payment discount and intra-community taxes

Bug

Currently, creating an intra-community bill and reconciling it with an early payment can break the tax report.

Steps to reproduce

  1. install the Austrian localization (l10n_at)
  2. set Cash Discount Tax Reduction to On early payment
  3. create a €1000 intra-community bill (you can just use the tax called IGE 20%)
  4. set the payment term to2/7 Net 30 and confirm
  5. reconcile the bill with a payment within the discount period (2% discount: €980).
  6. check the Tax Report: line 5.4 of the report should be €196. If you reconciled the bill with a back statement directly, sections Innergemeinschaftliche Erwerb and Bemessungsgrundlage will be wrong as well.

Cause

Since the intra-community applies here, the bill will produce two tax lines. And because Cash Discount Tax Reduction is set to On early payment, those two tax lines will be reduced when an early payment is made.
However, because of the way the is_refund property of account.move.line field is computed on moves of type entry, one of those tax reduction line will be considered a refund and the other will not. Furthermore, the computed tags are correct only because the taxes are recomputed again when creating the payment.
After removing this extra taxes computation, both tax_tag_ids/tax_tag_invert are invalid.
So the solution is to fix the method computing the taxes for cash discount lines.

opw-3112197

Community PR: odoo/odoo#114801