odoo/enterprise#39775

Created by fw-bot
Merged at a1fffd446e1ed5ad4d1e747367e55f91052ae789

Statuses:

Linked pull requests
label
odoo-dev:master-16.0-opw-3112197-is_refund-sesn-JQwz-fw
head
866e96a35a3f857fd5b5cc4ce3c556922db9632a
merged
2 years ago by Bugfix, Séna Serge Nshimiyimana (sesn)
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

[FW][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

Forward-Port-Of: #39244
Forward-Port-Of: #39181