From 0e736e6b33fd3861ddb21820a926a05cce9d169a Mon Sep 17 00:00:00 2001 From: Aitor Bouzas Date: Wed, 10 Oct 2018 10:37:35 +0200 Subject: [PATCH] [MIG] web_notify: Migration to 12.0 Add self-test buttons in demo environment, Updated readme to show how to test it. Add buttons to users form Do not rely on SUPERUSER_ID and avoid getattr usage --- web_notify/README.rst | 103 ++-- web_notify/__init__.py | 2 + web_notify/__manifest__.py | 10 +- web_notify/i18n/web_notify.pot | 27 +- web_notify/models/__init__.py | 2 + web_notify/models/res_users.py | 16 +- web_notify/readme/CONTRIBUTORS.rst | 3 + web_notify/readme/DESCRIPTION.rst | 7 + web_notify/readme/INSTALL.rst | 1 + web_notify/readme/USAGE.rst | 23 + web_notify/static/description/index.html | 453 ++++++++++++++++++ .../description/test_notifications_demo.png | Bin 0 -> 63517 bytes web_notify/static/src/js/web_client.js | 19 +- web_notify/tests/__init__.py | 2 + web_notify/tests/test_res_users.py | 6 +- web_notify/views/res_users_demo.xml | 30 ++ web_notify/views/web_notify.xml | 12 +- 17 files changed, 641 insertions(+), 75 deletions(-) create mode 100644 web_notify/readme/CONTRIBUTORS.rst create mode 100644 web_notify/readme/DESCRIPTION.rst create mode 100644 web_notify/readme/INSTALL.rst create mode 100644 web_notify/readme/USAGE.rst create mode 100644 web_notify/static/description/index.html create mode 100644 web_notify/static/description/test_notifications_demo.png create mode 100644 web_notify/views/res_users_demo.xml diff --git a/web_notify/README.rst b/web_notify/README.rst index 2fa24871b..ce246f3ef 100644 --- a/web_notify/README.rst +++ b/web_notify/README.rst @@ -1,11 +1,30 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html - :alt: License: AGPL-3 - ========== Web Notify ========== +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github + :target: https://github.com/OCA/web/tree/12.0/web_notify + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_notify + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/162/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + Send instant notification messages to the user in live. This technical module allows you to send instant notification messages from the server to the user in live. @@ -14,68 +33,82 @@ Two kinds of notification are supported. * Warning: Displayed in a red flying popup div * Information: Displayed in a light yellow flying popup div -To send a notification to the user you just need to call one of the new methods defined on res.users: +**Table of contents** -.. code-block:: python - - self.env.user.notify_info('My information message') - -or - -.. code-block:: python - - self.env.user.notify_warning('My marning message') - -.. figure:: static/description/notifications_screenshot.png - :scale: 80 % - :alt: Sample notifications +.. contents:: + :local: Installation ============ This module is based on the Instant Messaging Bus. To work properly, the server must be launched in gevent mode. - Usage ===== -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/162/10.0 + +To send a notification to the user you just need to call one of the new methods defined on res.users: + +.. code-block:: python + + self.env.user.notify_info(message='My information message') + +or + +.. code-block:: python + + self.env.user.notify_warning(message='My marning message') + +.. figure:: static/description/notifications_screenshot.png + :scale: 80 % + :alt: Sample notifications + +You can test the behaviour of the notifications by installing this module in a demo database. +Access the users form through Settings -> Users & Companies. You'll see a tab called "Test web notify", here you'll find two buttons that'll allow you test the module. + +.. figure:: static/description/test_notifications_demo.png + :scale: 80 % + :alt: Sample notifications Bug Tracker =========== -Bugs are tracked on `GitHub Issues -`_. In case of trouble, please -check there if your issue has already been reported. If you spotted it first, -help us smashing it by providing a detailed and welcomed feedback. +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. Credits ======= -Images ------- +Authors +~~~~~~~ -* Odoo Community Association: `Icon `_. +* ACSONE SA/NV +* AdaptiveCity Contributors ------------- +~~~~~~~~~~~~ * Laurent Mignon * Serpent Consulting Services Pvt. Ltd. +* Aitor Bouzas -Maintainer ----------- +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. .. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association :target: https://odoo-community.org -This module is maintained by the OCA. - OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -To contribute to this module, please visit https://odoo-community.org. +This module is part of the `OCA/web `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_notify/__init__.py b/web_notify/__init__.py index 0650744f6..31660d6a9 100644 --- a/web_notify/__init__.py +++ b/web_notify/__init__.py @@ -1 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + from . import models diff --git a/web_notify/__manifest__.py b/web_notify/__manifest__.py index 0ad8d42fd..0643b87d8 100644 --- a/web_notify/__manifest__.py +++ b/web_notify/__manifest__.py @@ -5,19 +5,23 @@ 'name': 'Web Notify', 'summary': """ Send notification messages to user""", - 'version': '11.0.1.1.0', + 'version': '12.0.1.0.0', 'description': 'Web Notify', 'license': 'AGPL-3', - 'author': 'ACSONE SA/NV,Odoo Community Association (OCA)', - 'website': 'https://acsone.eu/', + 'author': 'ACSONE SA/NV,' + 'AdaptiveCity,' + 'Odoo Community Association (OCA)', + 'website': 'https://github.com/OCA/web', 'depends': [ 'web', 'bus', + 'base', ], 'data': [ 'views/web_notify.xml' ], 'demo': [ + 'views/res_users_demo.xml' ], 'installable': True, } diff --git a/web_notify/i18n/web_notify.pot b/web_notify/i18n/web_notify.pot index b951b00bc..8cc061b5c 100644 --- a/web_notify/i18n/web_notify.pot +++ b/web_notify/i18n/web_notify.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 11.0\n" +"Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -14,34 +14,49 @@ msgstr "" "Plural-Forms: \n" #. module: web_notify -#: code:addons/web_notify/models/res_users.py:26 +#: code:addons/web_notify/models/res_users.py:23 #, python-format msgid "Information" msgstr "" #. module: web_notify -#: model:ir.model.fields,field_description:web_notify.field_res_users_notify_info_channel_name +#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_info_channel_name msgid "Notify Info Channel Name" msgstr "" #. module: web_notify -#: model:ir.model.fields,field_description:web_notify.field_res_users_notify_warning_channel_name +#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_warning_channel_name msgid "Notify Warning Channel Name" msgstr "" #. module: web_notify -#: code:addons/web_notify/models/res_users.py:41 +#: code:addons/web_notify/models/res_users.py:37 #, python-format msgid "Sending a notification to another user is forbidden." msgstr "" +#. module: web_notify +#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit +msgid "Test info notification" +msgstr "" + +#. module: web_notify +#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit +msgid "Test warning notification" +msgstr "" + +#. module: web_notify +#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit +msgid "Test web notify" +msgstr "" + #. module: web_notify #: model:ir.model,name:web_notify.model_res_users msgid "Users" msgstr "" #. module: web_notify -#: code:addons/web_notify/models/res_users.py:32 +#: code:addons/web_notify/models/res_users.py:29 #, python-format msgid "Warning" msgstr "" diff --git a/web_notify/models/__init__.py b/web_notify/models/__init__.py index 883516533..c39e40a15 100644 --- a/web_notify/models/__init__.py +++ b/web_notify/models/__init__.py @@ -1 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + from . import res_users diff --git a/web_notify/models/res_users.py b/web_notify/models/res_users.py index 25f650845..9e1f2f040 100644 --- a/web_notify/models/res_users.py +++ b/web_notify/models/res_users.py @@ -1,14 +1,12 @@ # Copyright 2016 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, exceptions, fields, models, _, SUPERUSER_ID +from odoo import api, exceptions, fields, models, _ class ResUsers(models.Model): - _inherit = 'res.users' - @api.multi @api.depends('create_date') def _compute_channel_names(self): for record in self: @@ -21,21 +19,19 @@ class ResUsers(models.Model): notify_warning_channel_name = fields.Char( compute='_compute_channel_names') - @api.multi - def notify_info(self, message, title=None, sticky=False): + def notify_info(self, message="Default message", title=None, sticky=False): title = title or _('Information') self._notify_channel( 'notify_info_channel_name', message, title, sticky) - @api.multi - def notify_warning(self, message, title=None, sticky=False): + def notify_warning(self, message="Default message", + title=None, sticky=False): title = title or _('Warning') self._notify_channel( 'notify_warning_channel_name', message, title, sticky) - @api.multi def _notify_channel(self, channel_name_field, message, title, sticky): - if (self.env.uid != SUPERUSER_ID + if (not self.env.user._is_admin() and any(user.id != self.env.uid for user in self)): raise exceptions.UserError( _('Sending a notification to another user is forbidden.') @@ -45,6 +41,6 @@ class ResUsers(models.Model): 'title': title, 'sticky': sticky } - notifications = [(getattr(record, channel_name_field), bus_message) + notifications = [(record[channel_name_field], bus_message) for record in self] self.env['bus.bus'].sendmany(notifications) diff --git a/web_notify/readme/CONTRIBUTORS.rst b/web_notify/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..70f99b045 --- /dev/null +++ b/web_notify/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Laurent Mignon +* Serpent Consulting Services Pvt. Ltd. +* Aitor Bouzas \ No newline at end of file diff --git a/web_notify/readme/DESCRIPTION.rst b/web_notify/readme/DESCRIPTION.rst new file mode 100644 index 000000000..7d7528a3b --- /dev/null +++ b/web_notify/readme/DESCRIPTION.rst @@ -0,0 +1,7 @@ +Send instant notification messages to the user in live. + +This technical module allows you to send instant notification messages from the server to the user in live. +Two kinds of notification are supported. + +* Warning: Displayed in a red flying popup div +* Information: Displayed in a light yellow flying popup div \ No newline at end of file diff --git a/web_notify/readme/INSTALL.rst b/web_notify/readme/INSTALL.rst new file mode 100644 index 000000000..a27ef8949 --- /dev/null +++ b/web_notify/readme/INSTALL.rst @@ -0,0 +1 @@ +This module is based on the Instant Messaging Bus. To work properly, the server must be launched in gevent mode. \ No newline at end of file diff --git a/web_notify/readme/USAGE.rst b/web_notify/readme/USAGE.rst new file mode 100644 index 000000000..c6ebd48b2 --- /dev/null +++ b/web_notify/readme/USAGE.rst @@ -0,0 +1,23 @@ + +To send a notification to the user you just need to call one of the new methods defined on res.users: + +.. code-block:: python + + self.env.user.notify_info(message='My information message') + +or + +.. code-block:: python + + self.env.user.notify_warning(message='My marning message') + +.. figure:: static/description/notifications_screenshot.png + :scale: 80 % + :alt: Sample notifications + +You can test the behaviour of the notifications by installing this module in a demo database. +Access the users form through Settings -> Users & Companies. You'll see a tab called "Test web notify", here you'll find two buttons that'll allow you test the module. + +.. figure:: static/description/test_notifications_demo.png + :scale: 80 % + :alt: Sample notifications diff --git a/web_notify/static/description/index.html b/web_notify/static/description/index.html new file mode 100644 index 000000000..65cb11cfd --- /dev/null +++ b/web_notify/static/description/index.html @@ -0,0 +1,453 @@ + + + + + + +Web Notify + + + +
+

Web Notify

+ + +

Beta License: AGPL-3 OCA/web Translate me on Weblate Try me on Runbot

+

Send instant notification messages to the user in live.

+

This technical module allows you to send instant notification messages from the server to the user in live. +Two kinds of notification are supported.

+
    +
  • Warning: Displayed in a red flying popup div
  • +
  • Information: Displayed in a light yellow flying popup div
  • +
+

Table of contents

+ +
+

Installation

+

This module is based on the Instant Messaging Bus. To work properly, the server must be launched in gevent mode.

+
+
+

Usage

+

To send a notification to the user you just need to call one of the new methods defined on res.users:

+
+self.env.user.notify_info(message='My information message')
+
+

or

+
+self.env.user.notify_warning(message='My marning message')
+
+
+Sample notifications +
+

You can test the behaviour of the notifications by installing this module in a demo database. +Access the users form through Settings -> Users & Companies. You’ll see a tab called “Test web notify”, here you’ll find two buttons that’ll allow you test the module.

+
+Sample notifications +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • ACSONE SA/NV
  • +
  • AdaptiveCity
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/web project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/web_notify/static/description/test_notifications_demo.png b/web_notify/static/description/test_notifications_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..fcb0646cea236e2f97e73aafbb01ac89c6c399e6 GIT binary patch literal 63517 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 DLG9;S literal 0 HcmV?d00001 diff --git a/web_notify/static/src/js/web_client.js b/web_notify/static/src/js/web_client.js index 739251c87..c9b0139f4 100644 --- a/web_notify/static/src/js/web_client.js +++ b/web_notify/static/src/js/web_client.js @@ -2,8 +2,9 @@ odoo.define('web_notify.WebClient', function (require) { "use strict"; var WebClient = require('web.WebClient'); -var base_bus = require('bus.bus'); +var base_bus = require('bus.Longpolling'); var session = require('web.session'); +require('bus.BusService'); WebClient.include({ @@ -15,10 +16,10 @@ WebClient.include({ start_polling: function() { this.channel_warning = 'notify_warning_' + session.uid; this.channel_info = 'notify_info_' + session.uid; - base_bus.bus.add_channel(this.channel_warning); - base_bus.bus.add_channel(this.channel_info); - base_bus.bus.on('notification', this, this.bus_notification); - base_bus.bus.start_polling(); + this.call('bus_service', 'addChannel', this.channel_warning); + this.call('bus_service', 'addChannel', this.channel_info); + this.call('bus_service', 'on', 'notification', this, this.bus_notification); + this.call('bus_service', 'startPolling'); }, bus_notification: function(notifications) { var self = this; @@ -33,14 +34,10 @@ WebClient.include({ }); }, on_message_warning: function(message){ - if(this.notification_manager) { - this.notification_manager.do_warn(message.title, message.message, message.sticky); - } + this.do_warn(message.title, message.message, message.sticky); }, on_message_info: function(message){ - if(this.notification_manager) { - this.notification_manager.do_notify(message.title, message.message, message.sticky); - } + this.do_notify(message.title, message.message, message.sticky); } }); diff --git a/web_notify/tests/__init__.py b/web_notify/tests/__init__.py index 03c963d72..f759b968b 100644 --- a/web_notify/tests/__init__.py +++ b/web_notify/tests/__init__.py @@ -1 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + from . import test_res_users diff --git a/web_notify/tests/test_res_users.py b/web_notify/tests/test_res_users.py index 2f336a277..80a1a937f 100644 --- a/web_notify/tests/test_res_users.py +++ b/web_notify/tests/test_res_users.py @@ -43,7 +43,7 @@ class TestResUsers(common.TransactionCase): ) as mockedSendMany: users = self.env.user.search([(1, "=", 1)]) self.assertTrue(len(users) > 1) - users.notify_warning('message') + users.notify_warning(message='message') self.assertEqual(1, mockedSendMany.call_count) @@ -61,8 +61,8 @@ class TestResUsers(common.TransactionCase): other_user = self.env.ref('base.user_demo') other_user_model = self.env['res.users'].sudo(other_user) with self.assertRaises(exceptions.UserError): - other_user_model.browse(self.env.uid).notify_info('hello') + other_user_model.browse(self.env.uid).notify_info(message='hello') def test_notify_admin_allowed_other_user(self): other_user = self.env.ref('base.user_demo') - other_user.notify_info('hello') + other_user.notify_info(message='hello') diff --git a/web_notify/views/res_users_demo.xml b/web_notify/views/res_users_demo.xml new file mode 100644 index 000000000..4ca9f4222 --- /dev/null +++ b/web_notify/views/res_users_demo.xml @@ -0,0 +1,30 @@ + + + + + res.users.form.simple.view.modif.inherit + res.users + + + + + + +