From b333cdc7b1f0b533448597da626a78406be53637 Mon Sep 17 00:00:00 2001 From: Guewen Baconnier Date: Wed, 27 Jun 2018 15:52:14 +0200 Subject: [PATCH] Add possibility to return an action in a notification --- web_notify/README.rst | 18 ++++++++++++++++-- web_notify/models/res_users.py | 16 +++++++++++----- web_notify/static/src/css/notification.less | 2 +- web_notify/static/src/js/notification.js | 12 ++++++++++-- web_notify/static/src/xml/notification.xml | 14 ++++++++++++-- 5 files changed, 50 insertions(+), 12 deletions(-) diff --git a/web_notify/README.rst b/web_notify/README.rst index 0d95e255..bff70210 100644 --- a/web_notify/README.rst +++ b/web_notify/README.rst @@ -30,16 +30,29 @@ or :scale: 80 % :alt: Sample notifications -The notifications can optionally have some action buttons. +The notifications can bring interactivity with some buttons. * One allowing to refresh the active view +* Another allowing to send a window / client action -It is activated when sending the notification with: +The reload button is activated when sending the notification with: .. code-block:: python self.env.user.notify_info('My information message', show_reload=True) +The action can be used using the ``action`` keyword: + +.. code-block:: python + + action = self.env.ref('sale.action_orders').read()[0] + action.update({ + 'res_id': self.id, + 'views': [(False, 'form')], + }) + self.env.user.notify_info('My information message', action=action) + + Installation ============ @@ -74,6 +87,7 @@ Contributors * Laurent Mignon * Serpent Consulting Services Pvt. Ltd. +* Guewen Baconnier Maintainer ---------- diff --git a/web_notify/models/res_users.py b/web_notify/models/res_users.py index 30165f17..56cca763 100644 --- a/web_notify/models/res_users.py +++ b/web_notify/models/res_users.py @@ -4,6 +4,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import api, fields, models, _ +from odoo.addons.web.controllers.main import clean_action class ResUsers(models.Model): @@ -25,26 +26,31 @@ class ResUsers(models.Model): @api.multi def notify_info(self, message, title=None, sticky=False, - show_reload=False): + show_reload=False, action=None): title = title or _('Information') self._notify_channel( - 'notify_info_channel_name', message, title, sticky, show_reload) + 'notify_info_channel_name', message, title, + sticky, show_reload, action) @api.multi def notify_warning(self, message, title=None, sticky=False, - show_reload=False): + show_reload=False, action=None): title = title or _('Warning') self._notify_channel( - 'notify_warning_channel_name', message, title, sticky, show_reload) + 'notify_warning_channel_name', message, title, + sticky, show_reload, action) @api.multi def _notify_channel(self, channel_name_field, message, title, sticky, - show_reload): + show_reload, action): + if action: + action = clean_action(action) bus_message = { 'message': message, 'title': title, 'sticky': sticky, 'show_reload': show_reload, + 'action': action, } notifications = [(getattr(record, channel_name_field), bus_message) for record in self] diff --git a/web_notify/static/src/css/notification.less b/web_notify/static/src/css/notification.less index 1f1ee9a6..d5744132 100644 --- a/web_notify/static/src/css/notification.less +++ b/web_notify/static/src/css/notification.less @@ -1,5 +1,5 @@ .o_notification { - .o_notification_reload { + .o_notification_action { padding: 10px; } } diff --git a/web_notify/static/src/js/notification.js b/web_notify/static/src/js/notification.js index 383b1d3e..ad305089 100644 --- a/web_notify/static/src/js/notification.js +++ b/web_notify/static/src/js/notification.js @@ -12,10 +12,14 @@ odoo.define('web_notify.notification', function (require) { events: _.extend( {}, Notification.prototype.events, - {'click .o_view_reload': function(e){ + {'click .o_notification_reload_view': function(e){ e.preventDefault(); this.reload_active_view(); - } + }, + 'click .o_notification_do_action': function(e){ + e.preventDefault(); + this.button_do_action(); + } } ), init: function(parent, title, text, sticky, options) { @@ -25,6 +29,10 @@ odoo.define('web_notify.notification', function (require) { reload_active_view: function() { this.trigger_up('reload_active_view'); }, + button_do_action: function() { + console.log(this.options.action); + this.getParent().do_action(this.options.action); + } }); base_notification.NotificationManager.include({ diff --git a/web_notify/static/src/xml/notification.xml b/web_notify/static/src/xml/notification.xml index d73fb6f5..aa3df543 100644 --- a/web_notify/static/src/xml/notification.xml +++ b/web_notify/static/src/xml/notification.xml @@ -2,22 +2,32 @@ -