From a792d29e16e494232deffa5fab609fac0716995d Mon Sep 17 00:00:00 2001 From: Simone Rubino Date: Thu, 3 Jul 2025 16:25:57 +0200 Subject: [PATCH] [IMP] partner_statement: Translate statement title --- .../report/activity_statement.py | 36 +++++++++++++++ .../report/activity_statement_xlsx.py | 17 ++++--- .../report/detailed_activity_statement.py | 30 ++++++++++++- .../detailed_activity_statement_xlsx.py | 45 ++++++++++--------- .../report/outstanding_statement.py | 14 +++++- .../report/outstanting_statement_xlsx.py | 16 +++---- .../report/report_statement_common.py | 11 +++++ .../views/activity_statement.xml | 7 +-- partner_statement/views/aging_buckets.xml | 6 +-- .../views/detailed_activity_statement.xml | 2 - .../views/outstanding_statement.xml | 5 +-- 11 files changed, 134 insertions(+), 55 deletions(-) diff --git a/partner_statement/report/activity_statement.py b/partner_statement/report/activity_statement.py index b9d0756a..be8fe29d 100644 --- a/partner_statement/report/activity_statement.py +++ b/partner_statement/report/activity_statement.py @@ -15,6 +15,42 @@ class ActivityStatement(models.AbstractModel): _name = "report.partner_statement.activity_statement" _description = "Partner Activity Statement" + def _get_title(self, partner, **kwargs): + kwargs["context"] = { + "lang": partner.lang, + } + if kwargs.get("is_detailed"): + if kwargs.get("account_type") == "receivable": + title = _( + "Detailed Statement " + "between %(starting_date)s and %(ending_date)s " + "in %(currency)s", + **kwargs, + ) + else: + title = _( + "Detailed Supplier Statement " + "between %(starting_date)s and %(ending_date)s " + "in %(currency)s", + **kwargs, + ) + else: + if kwargs.get("account_type") == "receivable": + title = _( + "Statement between " + "%(starting_date)s and %(ending_date)s " + "in %(currency)s", + **kwargs, + ) + else: + title = _( + "Supplier Statement " + "between %(starting_date)s and %(ending_date)s " + "in %(currency)s", + **kwargs, + ) + return title + def _initial_balance_sql_q1(self, partners, date_start, account_type): return str( self._cr.mogrify( diff --git a/partner_statement/report/activity_statement_xlsx.py b/partner_statement/report/activity_statement_xlsx.py index 04fc77c9..08224638 100644 --- a/partner_statement/report/activity_statement_xlsx.py +++ b/partner_statement/report/activity_statement_xlsx.py @@ -38,15 +38,14 @@ class ActivityStatementXslx(models.AbstractModel): currency_data = partner_data.get("currencies", {}).get(currency.id) account_type = data.get("account_type", False) row_pos += 2 - statement_header = _( - "%(payable)sStatement between %(start)s and %(end)s in %(currency)s" - ) % { - "payable": account_type == "liability_payable" and _("Supplier ") or "", - "start": partner_data.get("start"), - "end": partner_data.get("end"), - "currency": currency.display_name, - } - + statement_header = data["get_title"]( + partner, + is_detailed=False, + account_type=account_type, + starting_date=partner_data.get("start"), + ending_date=partner_data.get("end"), + currency=currency.display_name, + ) sheet.merge_range( row_pos, 0, row_pos, 6, statement_header, FORMATS["format_left_bold"] ) diff --git a/partner_statement/report/detailed_activity_statement.py b/partner_statement/report/detailed_activity_statement.py index 7507dd4d..33763bff 100644 --- a/partner_statement/report/detailed_activity_statement.py +++ b/partner_statement/report/detailed_activity_statement.py @@ -1,7 +1,7 @@ # Copyright 2022 ForgeFlow, S.L. (https://www.forgeflow.com) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo import models +from odoo import _, models from .outstanding_statement import OutstandingStatement @@ -13,6 +13,34 @@ class DetailedActivityStatement(models.AbstractModel): _name = "report.partner_statement.detailed_activity_statement" _description = "Partner Detailed Activity Statement" + def _get_title(self, partner, **kwargs): + kwargs["context"] = { + "lang": partner.lang, + } + if kwargs.get("line_type") == "prior_lines": + if kwargs.get("account_type") == "receivable": + title = _( + "Prior Balance up to %(ending_date)s in %(currency)s", **kwargs + ) + else: + title = _( + "Supplier Prior Balance up to %(ending_date)s in %(currency)s", + **kwargs, + ) + elif kwargs.get("line_type") == "ending_lines": + if kwargs.get("account_type") == "receivable": + title = _( + "Ending Balance up to %(ending_date)s in %(currency)s", **kwargs + ) + else: + title = _( + "Supplier Ending Balance up to %(ending_date)s in %(currency)s", + **kwargs, + ) + else: + title = super()._get_title(partner, **kwargs) + return title + def _get_account_display_prior_lines( self, company_id, partner_ids, date_start, date_end, account_type ): diff --git a/partner_statement/report/detailed_activity_statement_xlsx.py b/partner_statement/report/detailed_activity_statement_xlsx.py index 8b2cf304..7e794973 100644 --- a/partner_statement/report/detailed_activity_statement_xlsx.py +++ b/partner_statement/report/detailed_activity_statement_xlsx.py @@ -40,15 +40,14 @@ class DetailedActivityStatementXslx(models.AbstractModel): currency_data = partner_data.get("currencies", {}).get(currency.id) account_type = data.get("account_type", False) row_pos += 2 - statement_header = _( - "Detailed %(payable)sStatement between %(start)s and %(end)s" - " in %(currency)s" - ) % { - "payable": account_type == "liability_payable" and _("Supplier ") or "", - "start": partner_data.get("start"), - "end": partner_data.get("end"), - "currency": currency.display_name, - } + statement_header = data["get_title"]( + partner, + is_detailed=True, + account_type=account_type, + starting_date=partner_data.get("start"), + ending_date=partner_data.get("end"), + currency=currency.display_name, + ) sheet.merge_range( row_pos, 0, @@ -221,13 +220,14 @@ class DetailedActivityStatementXslx(models.AbstractModel): currency_data = partner_data.get("currencies", {}).get(currency.id) account_type = data.get("account_type", False) row_pos += 2 - statement_header = _( - "%(payable)sStatement up to %(prior_day)s in %(currency)s" - ) % { - "payable": account_type == "payable" and _("Supplier ") or "", - "prior_day": partner_data.get("prior_day"), - "currency": currency.display_name, - } + statement_header = data["get_title"]( + partner, + is_detailed=False, + account_type=account_type, + starting_date=partner_data.get("start"), + ending_date=partner_data.get("end"), + currency=currency.display_name, + ) sheet.merge_range( row_pos, 0, @@ -328,11 +328,14 @@ class DetailedActivityStatementXslx(models.AbstractModel): currency_data = partner_data.get("currencies", {}).get(currency.id) account_type = data.get("account_type", False) row_pos += 2 - statement_header = _("%(payable)sStatement up to %(end)s in %(currency)s") % { - "payable": account_type == "payable" and _("Supplier ") or "", - "end": partner_data.get("end"), - "currency": currency.display_name, - } + statement_header = data["get_title"]( + partner, + is_detailed=False, + account_type=account_type, + starting_date=partner_data.get("start"), + ending_date=partner_data.get("end"), + currency=currency.display_name, + ) sheet.merge_range( row_pos, 0, diff --git a/partner_statement/report/outstanding_statement.py b/partner_statement/report/outstanding_statement.py index c58c0b1a..987734ed 100644 --- a/partner_statement/report/outstanding_statement.py +++ b/partner_statement/report/outstanding_statement.py @@ -1,7 +1,7 @@ # Copyright 2018 ForgeFlow, S.L. (https://www.forgeflow.com) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo import api, models +from odoo import _, api, models from odoo.tools.float_utils import float_is_zero @@ -12,6 +12,18 @@ class OutstandingStatement(models.AbstractModel): _name = "report.partner_statement.outstanding_statement" _description = "Partner Outstanding Statement" + def _get_title(self, partner, **kwargs): + kwargs["context"] = { + "lang": partner.lang, + } + if kwargs.get("account_type") == "receivable": + title = _("Statement up to %(ending_date)s in %(currency)s", **kwargs) + else: + title = _( + "Supplier Statement up to %(ending_date)s in %(currency)s", **kwargs + ) + return title + def _display_outstanding_lines_sql_q1(self, partners, date_end, account_type): partners = tuple(partners) return str( diff --git a/partner_statement/report/outstanting_statement_xlsx.py b/partner_statement/report/outstanting_statement_xlsx.py index 3b3397dc..4f8ed61f 100644 --- a/partner_statement/report/outstanting_statement_xlsx.py +++ b/partner_statement/report/outstanting_statement_xlsx.py @@ -4,9 +4,7 @@ from odoo import _, models -from odoo.addons.report_xlsx_helper.report.report_xlsx_format import ( # type: ignore - FORMATS, -) +from odoo.addons.report_xlsx_helper.report.report_xlsx_format import FORMATS def copy_format(book, fmt): @@ -158,12 +156,12 @@ class OutstandingStatementXslx(models.AbstractModel): currency_data = partner_data.get("currencies", {}).get(currency.id) account_type = data.get("account_type", False) row_pos += 2 - statement_header = _("%(payable)sStatement up to %(end)s in %(currency)s") % { - "payable": account_type == "liability_payable" and _("Supplier ") or "", - "end": partner_data.get("end"), - "currency": currency.display_name, - } - + statement_header = data["get_title"]( + partner, + account_type=account_type, + ending_date=partner_data.get("end"), + currency=currency.display_name, + ) sheet.merge_range( row_pos, 0, row_pos, 6, statement_header, FORMATS["format_left_bold"] ) diff --git a/partner_statement/report/report_statement_common.py b/partner_statement/report/report_statement_common.py index 5b969efc..6ac95bb0 100644 --- a/partner_statement/report/report_statement_common.py +++ b/partner_statement/report/report_statement_common.py @@ -17,6 +17,15 @@ class ReportStatementCommon(models.AbstractModel): inv_addr_id = part.address_get(["invoice"]).get("invoice", part.id) return self.env["res.partner"].browse(inv_addr_id) + def _get_title(self, partner, **kwargs): + raise NotImplementedError + + def _get_aging_buckets_title(self, partner, **kwargs): + kwargs["context"] = { + "lang": partner.lang, + } + return _("Aging Report at %(ending_date)s in %(currency)s", **kwargs) + def _format_date_to_partner_lang( self, date, date_format=DEFAULT_SERVER_DATE_FORMAT ): @@ -577,4 +586,6 @@ class ReportStatementCommon(models.AbstractModel): "is_detailed": is_detailed, "bucket_labels": bucket_labels, "get_inv_addr": self._get_invoice_address, + "get_title": self._get_title, + "get_aging_buckets_title": self._get_aging_buckets_title, } diff --git a/partner_statement/views/activity_statement.xml b/partner_statement/views/activity_statement.xml index d7160ed1..88f0103f 100644 --- a/partner_statement/views/activity_statement.xml +++ b/partner_statement/views/activity_statement.xml @@ -4,12 +4,9 @@