diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py
index 5e692afcd7d..10061b7b223 100644
--- a/addons/account/models/account_move.py
+++ b/addons/account/models/account_move.py
@@ -4586,7 +4586,7 @@ class AccountMove(models.Model):
""" This method need to be inherit by the localizations if they want to print a custom invoice report instead of
the default one. For example please review the l10n_ar module """
self.ensure_one()
- return 'account.report_invoice_document'
+ return self._context.get('force_report_invoice_template') or 'account.report_invoice_document'
def _is_downpayment(self):
''' Return true if the invoice is a downpayment.
diff --git a/addons/account/tests/test_account_move_send.py b/addons/account/tests/test_account_move_send.py
index 9174deb39c3..a221246f993 100644
--- a/addons/account/tests/test_account_move_send.py
+++ b/addons/account/tests/test_account_move_send.py
@@ -755,3 +755,19 @@ class TestAccountMoveSend(TestAccountMoveSendCommon):
# The PDF is generated even in case of error.
self.assertTrue(invoice.invoice_pdf_report_id)
+
+ def test_get_invoice_pdf_report_to_render(self):
+ invoice = self.init_invoice("out_invoice", amounts=[1000], post=True)
+ _get_name_invoice_report = invoice._get_name_invoice_report
+ wizard = self.create_send_and_print(invoice)
+
+ def get_invoice_pdf_report_to_render(record, *args, **kwargs):
+ return 'account.report_invoice_document', {}
+
+ def get_name_invoice_report(record, *args, **kwargs):
+ self.assertEqual(record._context.get('force_report_invoice_template'), 'account.report_invoice_document')
+ return _get_name_invoice_report(*args, **kwargs)
+
+ with patch.object(type(wizard), '_get_invoice_pdf_report_to_render', get_invoice_pdf_report_to_render), \
+ patch.object(type(invoice), '_get_name_invoice_report', get_name_invoice_report):
+ wizard.action_send_and_print(allow_fallback_pdf=True)
diff --git a/addons/account/views/report_invoice.xml b/addons/account/views/report_invoice.xml
index 66d79991498..c4fdeae7838 100644
--- a/addons/account/views/report_invoice.xml
+++ b/addons/account/views/report_invoice.xml
@@ -426,20 +426,14 @@
-
+
-
-
-
-
-
-
+
+
diff --git a/addons/account/wizard/account_move_send.py b/addons/account/wizard/account_move_send.py
index 71e44767803..29f183089d1 100644
--- a/addons/account/wizard/account_move_send.py
+++ b/addons/account/wizard/account_move_send.py
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
+from unittest.mock import patch
from odoo import _, api, fields, models, modules, tools, Command
from odoo.exceptions import UserError
@@ -306,6 +307,10 @@ class AccountMoveSend(models.Model):
"""
self.ensure_one()
+ def _get_invoice_pdf_report_to_render(self, invoice, invoice_data):
+ self.ensure_one()
+ return None, {}
+
def _prepare_invoice_pdf_report(self, invoice, invoice_data):
""" Prepare the pdf report for the invoice passed as parameter.
@@ -317,7 +322,30 @@ class AccountMoveSend(models.Model):
if invoice.invoice_pdf_report_id:
return
- content, _report_format = self.env['ir.actions.report']._render('account.account_invoices', invoice.ids)
+ # Render the invoice PDF but allow to set a custom report_name and custom values.
+ # That way, all invoice reports are separated from the main one but don't need an
+ # extra report every time.
+ IrActionsReport = type(self.env['ir.actions.report'])
+ _render_template = IrActionsReport._render_template
+ inv_report, inv_report_values = self._get_invoice_pdf_report_to_render(invoice, invoice_data)
+
+ def render_template(records, template, values=None):
+ return _render_template(
+ records,
+ template,
+ values={
+ **(values or {}),
+ **inv_report_values,
+ },
+ )
+
+ with patch.object(IrActionsReport, '_render_template', side_effect=render_template, autospec=True):
+ content, _report_format = self.env['ir.actions.report']\
+ .with_context(force_report_invoice_template=inv_report)\
+ ._render(
+ 'account.account_invoices',
+ invoice.ids,
+ )
invoice_data['pdf_attachment_values'] = {
'raw': content,
diff --git a/addons/l10n_ar/views/report_invoice.xml b/addons/l10n_ar/views/report_invoice.xml
index 350cd5353e3..7b2c30cf894 100644
--- a/addons/l10n_ar/views/report_invoice.xml
+++ b/addons/l10n_ar/views/report_invoice.xml
@@ -286,20 +286,4 @@
not o._l10n_ar_include_vat()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/l10n_au/views/report_invoice.xml b/addons/l10n_au/views/report_invoice.xml
index 3ef06edc2dd..51588b4669e 100644
--- a/addons/l10n_au/views/report_invoice.xml
+++ b/addons/l10n_au/views/report_invoice.xml
@@ -1,19 +1,5 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/l10n_cl/views/report_invoice.xml b/addons/l10n_cl/views/report_invoice.xml
index e4360ca943e..a858e0822d1 100644
--- a/addons/l10n_cl/views/report_invoice.xml
+++ b/addons/l10n_cl/views/report_invoice.xml
@@ -221,20 +221,4 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/l10n_gcc_invoice/views/report_invoice.xml b/addons/l10n_gcc_invoice/views/report_invoice.xml
index 5c5eb395b19..381ac2a67c8 100644
--- a/addons/l10n_gcc_invoice/views/report_invoice.xml
+++ b/addons/l10n_gcc_invoice/views/report_invoice.xml
@@ -1,20 +1,5 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/l10n_th/views/report_invoice.xml b/addons/l10n_th/views/report_invoice.xml
index ac978be9d49..258fa252db2 100644
--- a/addons/l10n_th/views/report_invoice.xml
+++ b/addons/l10n_th/views/report_invoice.xml
@@ -28,21 +28,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
Commercial Invoice
account.move