diff --git a/account_financial_report/report/general_ledger.py b/account_financial_report/report/general_ledger.py index a6ec3ba2352..c1a2e368280 100644 --- a/account_financial_report/report/general_ledger.py +++ b/account_financial_report/report/general_ledger.py @@ -762,6 +762,7 @@ def _get_centralized_ml(self, account, date_to, grouped_by): list_centralized_ml += list(centralized_ml[jnl_id].values()) return list_centralized_ml + # flake8: noqa: C901 def _get_report_values(self, docids, data): wizard_id = data["wizard_id"] company = self.env["res.company"].browse(data["company_id"]) @@ -836,6 +837,61 @@ def _get_report_values(self, docids, data): account[grouped_by] = False del account["list_grouped"] general_ledger = sorted(general_ledger, key=lambda k: k["code"]) + # Set the bal_curr of the initial balance to 0 if it does not correspond + # (reducing the corresponding of the bal_curr of the initial balance). + for gl_item in general_ledger: + if not foreign_currency: + continue + if ( + not gl_item["currency_id"] + or gl_item["currency_id"] != company.currency_id + ): + gl_item["fin_bal"]["bal_curr"] -= gl_item["init_bal"]["bal_curr"] + gl_item["init_bal"]["bal_curr"] = 0 + if "list_grouped" in gl_item: + for lg_item in gl_item["list_grouped"]: + lg_item["fin_bal"]["bal_curr"] -= lg_item["init_bal"][ + "bal_curr" + ] + lg_item["init_bal"]["bal_curr"] = 0 + # Set the fin_bal_currency_id value if the account does not have it set + # and there are move lines in a currency different from that of + # the company (USD for example). + for gl_item in general_ledger: + fin_bal_currency_ids = [] + fin_bal_currency_id = gl_item["currency_id"] + if gl_item["currency_id"] or not foreign_currency: + continue + gl_item["fin_bal"]["bal_curr"] = gl_item["init_bal"]["bal_curr"] + if "move_lines" in gl_item: + for ml in gl_item["move_lines"]: + ml_currency_id = ( + ml["currency_id"][0] if ml["currency_id"] else False + ) + if ml_currency_id and ml_currency_id != company.currency_id.id: + gl_item["fin_bal"]["bal_curr"] += ml["bal_curr"] + if ml_currency_id not in fin_bal_currency_ids: + fin_bal_currency_ids.append(ml_currency_id) + elif "list_grouped" in gl_item: + fin_bal_currency_ids = [] + for lg_item in gl_item["list_grouped"]: + lg_item["fin_bal"]["bal_curr"] = lg_item["init_bal"]["bal_curr"] + for ml in lg_item["move_lines"]: + ml_currency_id = ( + ml["currency_id"][0] if ml["currency_id"] else False + ) + if ml_currency_id and ml_currency_id != company.currency_id.id: + lg_item["fin_bal"]["bal_curr"] += ml["bal_curr"] + gl_item["fin_bal"]["bal_curr"] += ml["bal_curr"] + if ml_currency_id not in fin_bal_currency_ids: + fin_bal_currency_ids.append(ml_currency_id) + # If there is only 1 currency, we set that one as fin_bal_currency_id + # The use of different move lines with different currencies (EUR + GBP) + # will be excluded. We use a different field to avoid showing the initial + # balance and/or distorting data. + if not gl_item["currency_id"] and len(fin_bal_currency_ids) == 1: + fin_bal_currency_id = fin_bal_currency_ids[0] + gl_item["fin_bal_currency_id"] = fin_bal_currency_id return { "doc_ids": [wizard_id], "doc_model": "general.ledger.report.wizard", diff --git a/account_financial_report/report/general_ledger_xlsx.py b/account_financial_report/report/general_ledger_xlsx.py index 39768653e13..0b7e3752927 100644 --- a/account_financial_report/report/general_ledger_xlsx.py +++ b/account_financial_report/report/general_ledger_xlsx.py @@ -357,10 +357,11 @@ def _generate_report_content(self, workbook, report, data, report_data): "final_balance": account["fin_bal"]["balance"], } ) - if foreign_currency and account["currency_id"]: + if foreign_currency and account["fin_bal_currency_id"]: account.update( { - "final_bal_curr": account["fin_bal"]["bal_curr"], + "final_bal_curr": total_bal_curr, + "currency_id": account["fin_bal_currency_id"], } ) self.write_ending_balance_from_dict(account, report_data) diff --git a/account_financial_report/report/templates/general_ledger.xml b/account_financial_report/report/templates/general_ledger.xml index 1d51f5c8820..ac2f1ef67a2 100644 --- a/account_financial_report/report/templates/general_ledger.xml +++ b/account_financial_report/report/templates/general_ledger.xml @@ -702,10 +702,10 @@ /> - +