From 1a7815f8b77f429643c30bb2f1e7fc272d8f8e43 Mon Sep 17 00:00:00 2001 From: Pankaj Kamani Date: Wed, 6 Dec 2017 15:36:12 +0530 Subject: [PATCH] [IMP] web,base_setup: add option to disable special effects Some people prefer not to be disturbed by any flashy information. In this commit, we add an option to do just that. When the 'show_effect' option is set to false, then the messages that would be displayed by an effect will be displayed in a notification. Task #37712 Co-authored-by: Mohammed Shekha --- .../reconciliation/reconciliation_renderer.js | 17 +++++++++++------ addons/base_setup/__manifest__.py | 1 + addons/base_setup/data/base_setup_data.xml | 9 +++++++++ addons/base_setup/models/__init__.py | 1 + addons/base_setup/models/ir_http.py | 13 +++++++++++++ addons/base_setup/models/res_config_settings.py | 1 + .../views/res_config_settings_views.xml | 11 +++++++++++ addons/web/models/ir_http.py | 1 + .../static/src/js/chrome/abstract_web_client.js | 7 ++++++- 9 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 addons/base_setup/data/base_setup_data.xml create mode 100644 addons/base_setup/models/ir_http.py diff --git a/addons/account/static/src/js/reconciliation/reconciliation_renderer.js b/addons/account/static/src/js/reconciliation/reconciliation_renderer.js index 64787b84c4c..ec27bc54d2f 100644 --- a/addons/account/static/src/js/reconciliation/reconciliation_renderer.js +++ b/addons/account/static/src/js/reconciliation/reconciliation_renderer.js @@ -7,6 +7,7 @@ var relational_fields = require('web.relational_fields'); var basic_fields = require('web.basic_fields'); var core = require('web.core'); var time = require('web.time'); +var session = require('web.session'); var qweb = core.qweb; var _t = core._t; @@ -121,12 +122,16 @@ var StatementRenderer = Widget.extend(FieldManagerMixin, { $done.find('.button_back_to_statement').click(this._onGoToBankStatement.bind(this)); this.$el.children().hide(); // display rainbowman after full reconciliation - this.trigger_up('show_effect', { - type: 'rainbow_man', - fadeout: 'no', - message: $done, - }); - this.$el.css('min-height', '450px'); + if (session.show_effect) { + this.trigger_up('show_effect', { + type: 'rainbow_man', + fadeout: 'no', + message: $done, + }); + this.$el.css('min-height', '450px'); + } else { + $done.appendTo(this.$el); + } } if (state.notifications) { diff --git a/addons/base_setup/__manifest__.py b/addons/base_setup/__manifest__.py index cbd4a0d5323..df9fb1ec1a8 100644 --- a/addons/base_setup/__manifest__.py +++ b/addons/base_setup/__manifest__.py @@ -13,6 +13,7 @@ Shows you a list of applications features to install from. """, 'depends': ['base', 'web'], 'data': [ + 'data/base_setup_data.xml', 'views/res_config_settings_views.xml', 'views/res_partner_views.xml', ], diff --git a/addons/base_setup/data/base_setup_data.xml b/addons/base_setup/data/base_setup_data.xml new file mode 100644 index 00000000000..6499d00add4 --- /dev/null +++ b/addons/base_setup/data/base_setup_data.xml @@ -0,0 +1,9 @@ + + + + + base_setup.show_effect + True + + + diff --git a/addons/base_setup/models/__init__.py b/addons/base_setup/models/__init__.py index 9fdfb603d9f..ecb5f3ba7ea 100644 --- a/addons/base_setup/models/__init__.py +++ b/addons/base_setup/models/__init__.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. +from . import ir_http from . import res_config_settings diff --git a/addons/base_setup/models/ir_http.py b/addons/base_setup/models/ir_http.py new file mode 100644 index 00000000000..f65384adfc1 --- /dev/null +++ b/addons/base_setup/models/ir_http.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. +from odoo import models +from odoo.http import request + + +class IrHttp(models.AbstractModel): + _inherit = 'ir.http' + + def session_info(self): + result = super(IrHttp, self).session_info() + result['show_effect'] = request.env['ir.config_parameter'].sudo().get_param('base_setup.show_effect') + return result diff --git a/addons/base_setup/models/res_config_settings.py b/addons/base_setup/models/res_config_settings.py index a781a314686..21d2087d12a 100644 --- a/addons/base_setup/models/res_config_settings.py +++ b/addons/base_setup/models/res_config_settings.py @@ -40,6 +40,7 @@ class ResConfigSettings(models.TransientModel): help="Allows to work in a multi currency environment") paperformat_id = fields.Many2one(related="company_id.paperformat_id", string='Paper format') external_report_layout = fields.Selection(related="company_id.external_report_layout") + show_effect = fields.Boolean(string="Show Effect", config_parameter='base_setup.show_effect') @api.model def get_values(self): diff --git a/addons/base_setup/views/res_config_settings_views.xml b/addons/base_setup/views/res_config_settings_views.xml index aaa5be112c1..99d43c9c18e 100644 --- a/addons/base_setup/views/res_config_settings_views.xml +++ b/addons/base_setup/views/res_config_settings_views.xml @@ -78,6 +78,17 @@ +
+
+ +
+
+
+
diff --git a/addons/web/models/ir_http.py b/addons/web/models/ir_http.py index bbe793812b9..527dfeef0fe 100644 --- a/addons/web/models/ir_http.py +++ b/addons/web/models/ir_http.py @@ -39,6 +39,7 @@ class Http(models.AbstractModel): "user_companies": {'current_company': (user.company_id.id, user.company_id.name), 'allowed_companies': [(comp.id, comp.name) for comp in user.company_ids]} if display_switch_company_menu else False, "currencies": self.get_currencies(), "web.base.url": self.env['ir.config_parameter'].sudo().get_param('web.base.url', default=''), + "show_effect": True } def get_currencies(self): diff --git a/addons/web/static/src/js/chrome/abstract_web_client.js b/addons/web/static/src/js/chrome/abstract_web_client.js index 612d04c577a..7d3f19c1639 100644 --- a/addons/web/static/src/js/chrome/abstract_web_client.js +++ b/addons/web/static/src/js/chrome/abstract_web_client.js @@ -437,7 +437,12 @@ var AbstractWebClient = Widget.extend(ServiceProviderMixin, KeyboardNavigationMi var data = e.data || {}; var type = data.type || 'rainbow_man'; if (type === 'rainbow_man') { - new RainbowMan(data).appendTo(this.$el); + if (session.show_effect) { + new RainbowMan(data).appendTo(this.$el); + } else { + // For instance keep title blank, as we don't have title in data + this.notification_manager.notify('', data.message, true); + } } else { throw new Error('Unknown effect type: ' + type); }