diff --git a/report_substitute/__init__.py b/report_substitute/__init__.py
index 0ee8b5073..1c15bc7ee 100644
--- a/report_substitute/__init__.py
+++ b/report_substitute/__init__.py
@@ -1,2 +1,3 @@
from . import models
+from . import wizards
from . import tests
diff --git a/report_substitute/__manifest__.py b/report_substitute/__manifest__.py
index f6061a75e..82cac363a 100644
--- a/report_substitute/__manifest__.py
+++ b/report_substitute/__manifest__.py
@@ -11,7 +11,7 @@
'author': 'ACSONE SA/NV,'
'Odoo Community Association (OCA)',
'website': 'https://github.com/acsone/reporting-engine',
- 'depends': ['base'],
+ 'depends': ['base', 'mail'],
'data': [
'security/ir_actions_report_substitution_rule.xml',
'views/assets_backend.xml',
diff --git a/report_substitute/models/__init__.py b/report_substitute/models/__init__.py
index 27b9defe6..a93fca4b4 100644
--- a/report_substitute/models/__init__.py
+++ b/report_substitute/models/__init__.py
@@ -1,2 +1,3 @@
from . import ir_actions_report
from . import ir_actions_report_substitution_rule
+from . import mail_thread
diff --git a/report_substitute/models/ir_actions_report.py b/report_substitute/models/ir_actions_report.py
index 88d7b50b6..e8c45b43a 100644
--- a/report_substitute/models/ir_actions_report.py
+++ b/report_substitute/models/ir_actions_report.py
@@ -28,6 +28,18 @@ class IrActionReport(models.Model):
return substitution_report_rule.substitution_action_report_id
return False
+ @api.multi
+ def get_substitution_report(self, active_ids):
+ self.ensure_one()
+ action_report = self
+ substitution_report = action_report
+ while substitution_report:
+ action_report = substitution_report
+ substitution_report = action_report._get_substitution_report(
+ action_report.model, active_ids
+ )
+ return action_report
+
@api.model
def get_substitution_report_dict(self, action_report_dict, active_ids):
if action_report_dict.get('id'):
@@ -43,9 +55,20 @@ class IrActionReport(models.Model):
@api.multi
def render(self, res_ids, data=None):
- substitution_report = self._get_substitution_report(
- self.model, res_ids
- )
- if substitution_report:
- return substitution_report.render(res_ids, data)
- return super().render(res_ids, data)
+ substitution_report = self.get_substitution_report(res_ids)
+ return super(IrActionReport, substitution_report).render(res_ids, data)
+
+ @api.noguess
+ def report_action(self, docids, data=None, config=True):
+ if docids:
+ if isinstance(docids, models.Model):
+ active_ids = docids.ids
+ elif isinstance(docids, int):
+ active_ids = [docids]
+ elif isinstance(docids, list):
+ active_ids = docids
+ substitution_report = self.get_substitution_report(active_ids)
+ return super(IrActionReport, substitution_report).report_action(
+ docids, data, config
+ )
+ return super().report_action(docids, data, config)
diff --git a/report_substitute/models/mail_thread.py b/report_substitute/models/mail_thread.py
new file mode 100644
index 000000000..7f1a236fd
--- /dev/null
+++ b/report_substitute/models/mail_thread.py
@@ -0,0 +1,24 @@
+# Copyright 2019 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import api, models
+
+
+class MailThread(models.AbstractModel):
+
+ _inherit = 'mail.thread'
+
+ @api.multi
+ def message_post_with_template(self, template_id, **kwargs):
+ template = self.env['mail.template'].browse(template_id)
+ old_report = False
+ if template and template.report_template and self.ids:
+ active_ids = self.ids
+ old_report = template.report_template
+ template.report_template = old_report.get_substitution_report(
+ active_ids
+ )
+ res = super().message_post_with_template(template_id, **kwargs)
+ if old_report:
+ template.report_template = old_report
+ return res
diff --git a/report_substitute/static/src/js/action_manager.js b/report_substitute/static/src/js/action_manager.js
index 754dd70d4..3f7bc14fc 100644
--- a/report_substitute/static/src/js/action_manager.js
+++ b/report_substitute/static/src/js/action_manager.js
@@ -1,27 +1,29 @@
// Copyright 2019 ACSONE SA/NV
// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-odoo.define('report_substitute.action_report_substitute', function(require) {
+odoo.define("report_substitute.action_report_substitute", function (require) {
"use strict";
- var ActionManager = require('web.ActionManager');
+ var ActionManager = require("web.ActionManager");
ActionManager.include({
+
/**
* Intercept action handling substitute the report action
* @override
*/
- _handleAction: function(action, options) {
- if (action.type === 'ir.actions.report' &&
+
+ _handleAction: function (action, options) {
+ if (action.type === "ir.actions.report" &&
action.context.active_ids) {
var active_ids = action.context.active_ids;
var self = this;
var _super = this._super;
var callersArguments = arguments;
return this._rpc({
- model: 'ir.actions.report',
- method: 'get_substitution_report_dict',
+ model: "ir.actions.report",
+ method: "get_substitution_report_dict",
args: [action, active_ids]
- }).then(function(action_id) {
+ }).then(function (action_id) {
callersArguments[0] = action_id
return _super.apply(self, callersArguments);
});
diff --git a/report_substitute/views/ir_actions_report.xml b/report_substitute/views/ir_actions_report.xml
index 0c2c265c8..c5f9cb142 100644
--- a/report_substitute/views/ir_actions_report.xml
+++ b/report_substitute/views/ir_actions_report.xml
@@ -16,8 +16,7 @@