odoo/odoo#202199

Created by fw-bot
Merged at caeec7a35f57cab3395249772e5865e95de8b8e3

Statuses:

label
odoo-dev:master-17.0-opw-4555966-fix_edi_import_with_enasarco-pta-423617-fw
head
2647c79df46a9351f6a22def48052606d7206f07
merged
7 months ago by Bugfix, Anh Thao Pham (pta)
odoo/odoo
17.0 #200774
saas-17.4 #202044
18.0 #202156
saas-18.1 #202173
saas-18.2 #202187
saas-18.3
saas-18.4
19.0
master #202199

[FW][FIX] l10n_it_edi_withholding: fix edi import with enasarco lines

Steps to reproduce:
- Install Accounting and l10n_it_edi_withholding
- Switch to an Italian company (e.g. IT Company)
- Import an electronic Italian invoice (XML) containing an element like:

<DettaglioLinee>
    <NumeroLinea>2</NumeroLinea>
    <Descrizione>Contributo ENASARCO</Descrizione>
    <PrezzoUnitario>0.00</PrezzoUnitario>
    <PrezzoTotale>0.00</PrezzoTotale>
    <AliquotaIVA>22.00</AliquotaIVA>
    <AltriDatiGestionali>
        <TipoDato>CASSA-PREV</TipoDato>
        <RiferimentoTesto>TC07 - ENASARCO</RiferimentoTesto>
        <RiferimentoNumero>10.03</RiferimentoNumero>
    </AltriDatiGestionali>
</DettaglioLinee>

Issue:
1) When the above ENASARCO element is present and its unit price is 0, we consider that the ENASARCO tax should be applied to each line. We try to retrieve the percentage of the ENASARCO tax used by computing it from the amount from <RiferimentoNumero> element and the untaxed amount of the invoice.
Then the ENASARCO tax is applied on all the current move lines. However, it is possible that all the move lines have not been imported yet and the tax will not be applied on all the lines.

2) If a ENASARCO tax has been set on a particular move line with a unit price of 0, the tax is applied to all the move lines, but it shouldn't.

3) When a global ENASARCO element is found in a move line, this move line is deleted, which can cause an error if the ENASARCO tax cannot be found in the database because a message is logged with the move line name.

Solution:
1-2. In "_l10n_it_edi_import_line" method, we had the ENASARCO tax to the current line by computing the tax rate with the unit price of the line if it is not 0.
Then, in "_l10n_it_edi_import_invoice" method, we parse the XML to check if there was a unique ENASARCO element with an amount and without unit price.
If it is the case, we considered the ENASARCO tax as global. Instead of using the untaxed amount of the invoice to compute the rate of the ENASARCO tax used, we should be able to retrieve the real taxable amount in a <DatiRiepilogo> element.

There should be an element like:

&lt;DatiRiepilogo&gt;
    &lt;AliquotaIVA&gt;22.00&lt;/AliquotaIVA&gt;
    &lt;ImponibileImporto&gt;117.97&lt;/ImponibileImporto&gt;
    &lt;Imposta&gt;25.95&lt;/Imposta&gt;
    &lt;EsigibilitaIVA&gt;I&lt;/EsigibilitaIVA&gt;
&lt;/DatiRiepilogo&gt;

from which we sum all the "ImponibileImporto" values.

3) Only remove the line if the ENASARCO tax is global and can be found in the database.

Ref old fix: #197456

Ticket link
opw-4555966

Forward-Port-Of: #202044
Forward-Port-Of: #200774