Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[16.0] FIX l10n_it_fatturapa_out and l10n_it_fatturapa_out_rc avoiding to convert to EUR tax_base_amount as it is already in company currency (currency_field='company_currency_id') #3921

Merged
merged 2 commits into from
May 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 4 additions & 25 deletions l10n_it_fatturapa_out/data/invoice_it_template.xml
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ e 'line' per riga di fattura (a seconda del livello in cui sono chiamati)
t-call="l10n_it_fatturapa_out.account_invoice_line_it_sconto_maggiorazione"
/>
<PrezzoTotale
t-out="format_monetary(fpa_to_eur(line.price_subtotal, record), euro)"
t-out="format_monetary(fpa_to_eur(line.price_subtotal, record, line.currency_rate), euro)"
/>
<AliquotaIVA
t-if="not line_is_section_note"
Expand Down Expand Up @@ -219,27 +219,6 @@ e 'line' per riga di fattura (a seconda del livello in cui sono chiamati)
</DettaglioLinee>
</template>

<template id="account_invoice_line_it_dati_riepilogo">
<t t-set="tax" t-value="tax_line.tax_line_id" />
<DatiRiepilogo>
<!--2.2.2-->
<AliquotaIVA t-out="format_numbers(tax.amount)" />
<Natura t-if="tax.kind_id.code" t-out="tax.kind_id.code" />
<!-- <SpeseAccessorie t-out=""/>-->
<!-- <Arrotondamento t-out=""/>-->
<ImponibileImporto
t-out="format_monetary(fpa_to_eur(tax_line.tax_base_amount, record), euro)"
/>
<Imposta
t-out="format_monetary(fpa_to_eur(tax_line.price_total, record), euro)"
/>
<EsigibilitaIVA t-if="tax.payability" t-out="tax.payability" />
<RiferimentoNormativo
t-if="tax.law_reference"
t-out="encode_for_export(tax.law_reference, 100)"
/>
</DatiRiepilogo>
</template>
<template id="account_invoice_it_FatturaPA_sede">
<t t-set="indirizzo"><t
t-if="partner_id.street2"
Expand Down Expand Up @@ -599,10 +578,10 @@ e 'line' per riga di fattura (a seconda del livello in cui sono chiamati)
<!-- <SpeseAccessorie t-out=""/>-->
<!-- <Arrotondamento t-out=""/>-->
<ImponibileImporto
t-out="format_monetary(fpa_to_eur(tax_data['ImponibileImporto'], record), euro)"
t-out="format_monetary(tax_data['ImponibileImporto'], euro)"
/>
<Imposta
t-out="format_monetary(fpa_to_eur(tax_data['Imposta'], record), euro)"
t-out="format_monetary(tax_data['Imposta'], euro)"
/>
<EsigibilitaIVA
t-if="tax_data.get('EsigibilitaIVA', False)"
Expand Down Expand Up @@ -647,7 +626,7 @@ e 'line' per riga di fattura (a seconda del livello in cui sono chiamati)
/>
<ImportoPagamento
t-if="not record.company_id.xml_divisa_value == 'keep_orig'"
t-out="format_numbers_two(fpa_to_eur(payment.amount_currency or payment.debit, record))"
t-out="format_numbers_two(fpa_to_eur(payment.amount_currency or payment.debit, record, payment.currency_rate))"
/>

<!-- <CodUfficioPostale t-out=""/>-->
Expand Down
20 changes: 12 additions & 8 deletions l10n_it_fatturapa_out/wizard/efattura.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,15 @@
return float_repr(number, max(2, len(cents)))


def fpaToEur(amount, invoice, euro, rate=None):
currency = invoice.currency_id
if currency == euro:
return amount
elif rate is not None:
return amount * (1 / rate)
return currency._convert(amount, euro, invoice.company_id, invoice.date, False)

Check warning on line 42 in l10n_it_fatturapa_out/wizard/efattura.py

View check run for this annotation

Codecov / codecov/patch

l10n_it_fatturapa_out/wizard/efattura.py#L42

Added line #L42 was not covered by tests


class EFatturaOut:
def get_template_values(self): # noqa: C901
"""Prepare values and helper functions for the template"""
Expand Down Expand Up @@ -78,7 +87,7 @@

# force EUR unless we want the original currency
if not original_currency:
res = fpa_to_eur(res, line.move_id)
res = fpa_to_eur(res, line.move_id, line.currency_rate)

# XXX arrotondamento?
res = "{prezzo:.{precision}f}".format(
Expand Down Expand Up @@ -207,14 +216,9 @@
wiz = self.env["wizard.export.fatturapa"]
return wiz.getPayments(invoice)

def fpa_to_eur(amount, invoice):
currency = invoice.currency_id
def fpa_to_eur(amount, invoice, rate=None):
euro = self.env.ref("base.EUR")
if currency == euro:
return amount
return currency._convert(
amount, euro, invoice.company_id, invoice.date, False
)
return fpaToEur(amount, invoice, euro, rate)

if self.partner_id.commercial_partner_id.is_pa:
# check value code
Expand Down
23 changes: 17 additions & 6 deletions l10n_it_fatturapa_out/wizard/wizard_export_fatturapa.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

from odoo.addons.l10n_it_account.tools.account_tools import encode_for_export

from .efattura import EFatturaOut, format_numbers
from .efattura import EFatturaOut, format_numbers, fpaToEur

_logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -87,20 +87,26 @@
values w/o altering the original lines"""

class _Payment:
__slots__ = "date_maturity", "amount_currency", "debit"
__slots__ = "date_maturity", "amount_currency", "debit", "currency_rate"

def __init__(self, date_maturity, amount_currency, debit):
def __init__(self, date_maturity, amount_currency, debit, currency_rate):
self.date_maturity = date_maturity
self.amount_currency = amount_currency
self.debit = debit
self.currency_rate = currency_rate

payments = []
for line in invoice.line_ids.filtered(
lambda line: line.account_id.account_type
in ("asset_receivable", "liability_payable")
):
payments.append(
_Payment(line.date_maturity, line.amount_currency, line.debit)
_Payment(
line.date_maturity,
line.amount_currency,
line.debit,
line.currency_rate,
)
)
return payments

Expand Down Expand Up @@ -131,6 +137,7 @@
def _key(tax_id):
return tax_id.id

euro = self.env.ref("base.EUR")
out_computed = {}
# existing tax lines
tax_ids = invoice.line_ids.filtered(lambda line: line.tax_line_id)
Expand Down Expand Up @@ -170,7 +177,9 @@
"AliquotaIVA": aliquota,
"Natura": tax_id.kind_id.code,
# 'Arrotondamento':'',
"ImponibileImporto": line.price_subtotal,
"ImponibileImporto": fpaToEur(
line.price_subtotal, invoice, euro, rate=line.currency_rate
),
"Imposta": 0.0,
"EsigibilitaIVA": tax_id.payability,
}
Expand All @@ -179,7 +188,9 @@
tax_id.law_reference, 100
)
else:
out[key]["ImponibileImporto"] += line.price_subtotal
out[key]["ImponibileImporto"] += fpaToEur(

Check warning on line 191 in l10n_it_fatturapa_out/wizard/wizard_export_fatturapa.py

View check run for this annotation

Codecov / codecov/patch

l10n_it_fatturapa_out/wizard/wizard_export_fatturapa.py#L191

Added line #L191 was not covered by tests
line.price_subtotal, invoice, euro, rate=line.currency_rate
)
out[key]["Imposta"] += 0.0
out.update(out_computed)
return out
Expand Down
2 changes: 1 addition & 1 deletion l10n_it_fatturapa_out_oss/data/invoice_it_template.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
t-out="tax_data['Natura']"
/>
<ImponibileImporto
t-out="format_monetary(fpa_to_eur(tax_data['ImponibileImporto'], record), euro)"
t-out="format_monetary(tax_data['ImponibileImporto'], euro)"
/>
<Imposta>0.00</Imposta>
<EsigibilitaIVA
Expand Down
4 changes: 2 additions & 2 deletions l10n_it_fatturapa_out_rc/views/invoice_it_template.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</xpath>
<xpath expr="//DatiRiepilogo/ImponibileImporto" position="attributes">
<attribute name="t-out">
format_monetary(fpa_to_eur(get_sign(record) * tax_data['ImponibileImporto'], record), euro)
format_monetary(get_sign(record) * tax_data['ImponibileImporto'], euro)
</attribute>
</xpath>
<xpath expr="//DatiRiepilogo/Imposta" position="attributes">
Expand All @@ -66,7 +66,7 @@
</xpath>
<xpath expr="//PrezzoTotale" position="attributes">
<attribute name="t-out">
format_monetary(fpa_to_eur(get_sign(line.move_id) * line.price_subtotal, record), euro)
format_monetary(fpa_to_eur(get_sign(line.move_id) * line.price_subtotal, record, line.currency_rate), euro)
</attribute>
</xpath>
</template>
Expand Down
10 changes: 10 additions & 0 deletions l10n_it_reverse_charge/models/account_move.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,14 @@ def _compute_rc_flag(self):
line.rc = is_rc

rc = fields.Boolean("RC", compute="_compute_rc_flag", store=True, readonly=False)
rc_source_line_id = fields.Many2one("account.move.line", readonly=True)

def _compute_currency_rate(self):
res = super()._compute_currency_rate()
for line in self:
if line.currency_id and line.rc_source_line_id:
line.currency_rate = line.rc_source_line_id.currency_rate
return res


class AccountMove(models.Model):
Expand Down Expand Up @@ -81,6 +89,7 @@ def rc_inv_line_vals(self, line):
"price_unit": line.price_unit,
"quantity": line.quantity,
"discount": line.discount,
"rc_source_line_id": line.id,
}

def rc_inv_vals(self, partner, rc_type, lines, currency):
Expand Down Expand Up @@ -462,6 +471,7 @@ def generate_supplier_self_invoice(self):
invoice_line_vals = []
for inv_line in self.invoice_line_ids:
line_vals = inv_line.copy_data()[0]
line_vals["rc_source_line_id"] = inv_line.id
line_vals["move_id"] = supplier_invoice.id
line_tax_ids = inv_line.tax_ids
mapped_taxes = rc_type.map_tax(
Expand Down
Loading