From ea774aab9c2b68e6eb8efb9e0ac9718e33f05e6a Mon Sep 17 00:00:00 2001 From: sbejaoui Date: Thu, 25 Jul 2019 11:07:01 +0200 Subject: [PATCH] [IMP] - manage subtitute report for multi-action --- report_substitute/__manifest__.py | 1 + report_substitute/models/ir_actions_report.py | 17 +++++++-- .../static/src/js/action_manager.js | 35 +++++++++++++++++++ report_substitute/views/assets_backend.xml | 8 +++++ 4 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 report_substitute/static/src/js/action_manager.js create mode 100644 report_substitute/views/assets_backend.xml diff --git a/report_substitute/__manifest__.py b/report_substitute/__manifest__.py index f65a6a02..f6061a75 100644 --- a/report_substitute/__manifest__.py +++ b/report_substitute/__manifest__.py @@ -14,6 +14,7 @@ 'depends': ['base'], 'data': [ 'security/ir_actions_report_substitution_rule.xml', + 'views/assets_backend.xml', 'views/ir_actions_report.xml', ], 'demo': ['demo/action_report.xml'], diff --git a/report_substitute/models/ir_actions_report.py b/report_substitute/models/ir_actions_report.py index 3cf091d1..88d7b50b 100644 --- a/report_substitute/models/ir_actions_report.py +++ b/report_substitute/models/ir_actions_report.py @@ -25,11 +25,22 @@ class IrActionReport(models.Model): domain = safe_eval(substitution_report_rule.domain) domain.append(('id', 'in', active_ids)) if set(model.search(domain).ids) == set(active_ids): - return ( - substitution_report_rule.substitution_action_report_id - ) + return substitution_report_rule.substitution_action_report_id return False + @api.model + def get_substitution_report_dict(self, action_report_dict, active_ids): + if action_report_dict.get('id'): + action_report = self.browse(action_report_dict['id']) + substitution_report = action_report + while substitution_report: + action_report = substitution_report + substitution_report = action_report._get_substitution_report( + action_report.model, active_ids + ) + action_report_dict.update(action_report.read()[0]) + return action_report_dict + @api.multi def render(self, res_ids, data=None): substitution_report = self._get_substitution_report( diff --git a/report_substitute/static/src/js/action_manager.js b/report_substitute/static/src/js/action_manager.js new file mode 100644 index 00000000..754dd70d --- /dev/null +++ b/report_substitute/static/src/js/action_manager.js @@ -0,0 +1,35 @@ +// 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) { + "use strict"; + + 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' && + 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', + args: [action, active_ids] + }).then(function(action_id) { + callersArguments[0] = action_id + return _super.apply(self, callersArguments); + }); + + } + return this._super.apply(this, arguments); + }, + + }); + +}); diff --git a/report_substitute/views/assets_backend.xml b/report_substitute/views/assets_backend.xml new file mode 100644 index 00000000..4120d85f --- /dev/null +++ b/report_substitute/views/assets_backend.xml @@ -0,0 +1,8 @@ + + + +