From ed669b00a3b205545e084a57da7313cffeca43f7 Mon Sep 17 00:00:00 2001 From: sbejaoui Date: Thu, 25 Jul 2019 13:02:07 +0200 Subject: [PATCH] [IMP] - manage substitution for mail.thread message_post_with_template --- report_substitute/__init__.py | 1 + report_substitute/__manifest__.py | 2 +- report_substitute/models/__init__.py | 1 + report_substitute/models/ir_actions_report.py | 35 +++++++++++++++---- report_substitute/models/mail_thread.py | 24 +++++++++++++ .../static/src/js/action_manager.js | 16 +++++---- report_substitute/views/ir_actions_report.xml | 6 ++-- report_substitute/wizards/__init__.py | 1 + .../wizards/mail_compose_message.py | 28 +++++++++++++++ 9 files changed, 97 insertions(+), 17 deletions(-) create mode 100644 report_substitute/models/mail_thread.py create mode 100644 report_substitute/wizards/__init__.py create mode 100644 report_substitute/wizards/mail_compose_message.py diff --git a/report_substitute/__init__.py b/report_substitute/__init__.py index 0ee8b507..1c15bc7e 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 f6061a75..82cac363 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 27b9defe..a93fca4b 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 88d7b50b..e8c45b43 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 00000000..7f1a236f --- /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 754dd70d..3f7bc14f 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 0c2c265c..c5f9cb14 100644 --- a/report_substitute/views/ir_actions_report.xml +++ b/report_substitute/views/ir_actions_report.xml @@ -16,8 +16,7 @@ - /> +
@@ -26,7 +25,8 @@ invisible="1" readonly="1" required="0"/> - +