[FIX] account_financial_report: Prevent error related to currency from General ledger

Use case: Generate report (showing foreign currency) with accounts with defined currency.

Traceback:

File "/odoo/odoo-server/odoo/addons/base/models/ir_qweb_fields.py", line 448, in value_to_html
fmt = "%.{0}f".format(display_currency.decimal_places)
AttributeError: 'int' object has no attribute 'decimal_places'

The above exception was the direct cause of the following exception:

Error to render compiling AST
AttributeError: 'int' object has no attribute 'decimal_places'
Template: account_financial_report.report_general_ledger_lines
Path: /t/div/div[2]/t[6]/t[1]/div[1]/t[1]/span/t
Node: <t t-raw="account_or_group_item_object['init_bal']['bal_curr']" t-options="{'widget': 'monetary', 'display_currency': account['currency_id']}"/>

TT42804

[FIX] account_financial_report: Prevent error related to currency from General ledger

Use case: Generate xlsx report (showing foreign currency) with accounts with defined currency.

Traceback:

File "/opt/odoo/auto/addons/account_financial_report/report/abstract_report_xlsx.py", line 535, in _get_currency_amt_format
    field_name = "{}_{}".format(field_prefix, currency.name)
AttributeError: 'int' object has no attribute 'name'
pull/1041/head
Víctor Martínez 2023-04-27 09:07:26 +02:00 committed by ferran-73
parent 8a81da373c
commit d6d2804e49
3 changed files with 32 additions and 13 deletions

View File

@ -531,6 +531,9 @@ class AbstractReportXslx(models.AbstractModel):
format_amt = report_data["formats"]["format_amount"]
field_prefix = "format_amount"
if "currency_id" in line_object and line_object.get("currency_id", False):
if isinstance(line_object["currency_id"], int):
currency = self.env["res.currency"].browse(line_object["currency_id"])
else:
currency = line_object["currency_id"]
field_name = "{}_{}".format(field_prefix, currency.name)
if hasattr(self, field_name):

View File

@ -237,6 +237,15 @@ class GeneralLedgerXslx(models.AbstractModel):
# Display array header for move lines
self.write_array_header(report_data)
account.update(
{
"currency_id": accounts_data[account["id"]]["currency_id"],
"currency_name": accounts_data[account["id"]][
"currency_name"
],
}
)
# Display initial balance line for partner
group_item.update(
{
@ -248,6 +257,9 @@ class GeneralLedgerXslx(models.AbstractModel):
if "grouped_by" in account
else "",
"currency_id": accounts_data[account["id"]]["currency_id"],
"currency_name": accounts_data[account["id"]][
"currency_name"
],
}
)
if foreign_currency:
@ -315,8 +327,6 @@ class GeneralLedgerXslx(models.AbstractModel):
group_item.update(
{
"final_bal_curr": group_item["fin_bal"]["bal_curr"],
"currency_name": group_item["currency_id"].name,
"currency_id": group_item["currency_id"].id,
}
)
self.write_ending_balance_from_dict(group_item, report_data)
@ -336,8 +346,6 @@ class GeneralLedgerXslx(models.AbstractModel):
account.update(
{
"final_bal_curr": account["fin_bal"]["bal_curr"],
"currency_name": account["currency_id"].name,
"currency_id": account["currency_id"].id,
}
)
self.write_ending_balance_from_dict(account, report_data)

View File

@ -307,6 +307,10 @@
</div>
<t t-if="foreign_currency">
<t t-if="account['currency_id']">
<t
t-set="account_currency"
t-value="currency_model.browse(account['currency_id'])"
/>
<div class="act_as_cell amount" style="width: 3.63%;">
<t t-if="type == 'account_type'">
<span
@ -315,7 +319,7 @@
>
<t
t-out="account_or_group_item_object['init_bal']['bal_curr']"
t-options="{'widget': 'monetary', 'display_currency': account['currency_id']}"
t-options="{'widget': 'monetary', 'display_currency': account_currency}"
/>
</span>
</t>
@ -326,7 +330,7 @@
>
<t
t-out="account_or_group_item_object['init_bal']['bal_curr']"
t-options="{'widget': 'monetary', 'display_currency': account['currency_id']}"
t-options="{'widget': 'monetary', 'display_currency': account_currency}"
/>
</span>
</t>
@ -339,7 +343,7 @@
>
<t
t-out="account_or_group_item_object['init_bal']['bal_curr']"
t-options="{'widget': 'monetary', 'display_currency': account['currency_id']}"
t-options="{'widget': 'monetary', 'display_currency': account_currency}"
/>
</span>
</t>
@ -350,7 +354,7 @@
>
<t
t-out="account_or_group_item_object['init_bal']['bal_curr']"
t-options="{'widget': 'monetary', 'display_currency': account['currency_id']}"
t-options="{'widget': 'monetary', 'display_currency': account_currency}"
/>
</span>
</t>
@ -699,6 +703,10 @@
<t t-set="misc_grouped_domain" t-value="[]" t-else="" />
<t t-if="foreign_currency">
<t t-if="account['currency_id']">
<t
t-set="account_currency"
t-value="currency_model.browse(account['currency_id'])"
/>
<div class="act_as_cell amount" style="width: 3.63%;">
<t t-if="type == 'account_type'">
<span>
@ -710,7 +718,7 @@
>
<t
t-out="account_or_group_item_object['fin_bal']['bal_curr']"
t-options="{'widget': 'monetary', 'display_currency': account['currency_id']}"
t-options="{'widget': 'monetary', 'display_currency': account_currency}"
/>
</a>
</span>
@ -725,7 +733,7 @@
>
<t
t-out="account_or_group_item_object['fin_bal']['bal_curr']"
t-options="{'widget': 'monetary', 'display_currency': account['currency_id']}"
t-options="{'widget': 'monetary', 'display_currency': account_currency}"
/>
</a>
</span>
@ -742,7 +750,7 @@
>
<t
t-out="account_or_group_item_object['fin_bal']['bal_curr']"
t-options="{'widget': 'monetary', 'display_currency': account['currency_id']}"
t-options="{'widget': 'monetary', 'display_currency': account_currency}"
/>
</a>
</span>
@ -757,7 +765,7 @@
>
<t
t-out="account_or_group_item_object['fin_bal']['bal_curr']"
t-options="{'widget': 'monetary', 'display_currency': account['currency_id']}"
t-options="{'widget': 'monetary', 'display_currency': account_currency}"
/>
</a>
</span>