summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--web_notify/README.rst137
-rw-r--r--web_notify/__init__.py4
-rw-r--r--web_notify/__manifest__.py18
-rw-r--r--web_notify/i18n/da.po113
-rw-r--r--web_notify/i18n/de.po116
-rw-r--r--web_notify/i18n/es.po120
-rw-r--r--web_notify/i18n/hr.po121
-rw-r--r--web_notify/i18n/it.po128
-rw-r--r--web_notify/i18n/nl.po128
-rw-r--r--web_notify/i18n/nl_NL.po116
-rw-r--r--web_notify/i18n/pt_BR.po117
-rw-r--r--web_notify/i18n/web_notify.pot125
-rw-r--r--web_notify/i18n/zh_CN.po113
-rw-r--r--web_notify/models/__init__.py4
-rw-r--r--web_notify/models/res_users.py73
-rw-r--r--web_notify/readme/CONTRIBUTORS.rst5
-rw-r--r--web_notify/readme/DESCRIPTION.rst10
-rw-r--r--web_notify/readme/INSTALL.rst1
-rw-r--r--web_notify/readme/USAGE.rst41
-rw-r--r--web_notify/static/description/icon.pngbin0 -> 9455 bytes
-rw-r--r--web_notify/static/description/index.html470
-rw-r--r--web_notify/static/description/notifications_screenshot.pngbin0 -> 56872 bytes
-rw-r--r--web_notify/static/description/test_notifications_demo.pngbin0 -> 63517 bytes
-rw-r--r--web_notify/static/src/js/web_client.js61
-rw-r--r--web_notify/static/src/js/widgets/notification.js26
-rw-r--r--web_notify/static/src/scss/webclient.scss24
-rw-r--r--web_notify/tests/__init__.py3
-rw-r--r--web_notify/tests/test_res_users.py105
-rw-r--r--web_notify/views/res_users_demo.xml58
-rw-r--r--web_notify/views/web_notify.xml31
30 files changed, 2268 insertions, 0 deletions
diff --git a/web_notify/README.rst b/web_notify/README.rst
new file mode 100644
index 0000000..3f2c841
--- /dev/null
+++ b/web_notify/README.rst
@@ -0,0 +1,137 @@
+==========
+Web Notify
+==========
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Production/Stable
+.. |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/14.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-14-0/web-14-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/14.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.
+Two kinds of notification are supported.
+
+* Success: Displayed in a `success` theme color flying popup div
+* Danger: Displayed in a `danger` theme color flying popup div
+* Warning: Displayed in a `warning` theme color flying popup div
+* Information: Displayed in a `info` theme color flying popup div
+* Default: Displayed in a `default` theme color flying popup div
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+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:
+
+.. code-block:: python
+
+ self.env.user.notify_success(message='My success message')
+
+or
+
+.. code-block:: python
+
+ self.env.user.notify_danger(message='My danger message')
+
+or
+
+.. code-block:: python
+
+ self.env.user.notify_warning(message='My warning message')
+
+or
+
+.. code-block:: python
+
+ self.env.user.notify_info(message='My information message')
+
+or
+
+.. code-block:: python
+
+ self.env.user.notify_default(message='My default message')
+
+.. figure:: https://raw.githubusercontent.com/OCA/web/14.0/web_notify/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:: https://raw.githubusercontent.com/OCA/web/14.0/web_notify/static/description/test_notifications_demo.png
+ :scale: 80 %
+ :alt: Sample notifications
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/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 <https://github.com/OCA/web/issues/new?body=module:%20web_notify%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* ACSONE SA/NV
+* AdaptiveCity
+
+Contributors
+~~~~~~~~~~~~
+
+* Laurent Mignon <laurent.mignon@acsone.eu>
+* Serpent Consulting Services Pvt. Ltd.<jay.vora@serpentcs.com>
+* Aitor Bouzas <aitor.bouzas@adaptivecity.com>
+* Shepilov Vladislav <shepilov.v@protonmail.com>
+* Kevin Khao <kevin.khao@akretion.com>
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+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 <https://github.com/OCA/web/tree/14.0/web_notify>`_ 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
new file mode 100644
index 0000000..3379be9
--- /dev/null
+++ b/web_notify/__init__.py
@@ -0,0 +1,4 @@
+# pylint: disable=missing-docstring
+# 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
new file mode 100644
index 0000000..4ee5bd9
--- /dev/null
+++ b/web_notify/__manifest__.py
@@ -0,0 +1,18 @@
+# pylint: disable=missing-docstring
+# Copyright 2016 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+{
+ "name": "Web Notify",
+ "summary": """
+ Send notification messages to user""",
+ "version": "14.0.1.0.1",
+ "license": "AGPL-3",
+ "author": "ACSONE SA/NV," "AdaptiveCity," "Odoo Community Association (OCA)",
+ "development_status": "Production/Stable",
+ "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/da.po b/web_notify/i18n/da.po
new file mode 100644
index 0000000..a5751dc
--- /dev/null
+++ b/web_notify/i18n/da.po
@@ -0,0 +1,113 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_notify
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2018-09-02 05:11+0000\n"
+"Last-Translator: Hans Henrik Gabelgaard <hhg@gabelgaard.org>\n"
+"Language-Team: none\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 3.1.1\n"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Danger"
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Default"
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Information"
+msgstr ""
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_danger_channel_name
+msgid "Notify Danger Channel Name"
+msgstr ""
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_default_channel_name
+msgid "Notify Default Channel Name"
+msgstr ""
+
+#. module: web_notify
+#: 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_success_channel_name
+msgid "Notify Success Channel Name"
+msgstr ""
+
+#. module: web_notify
+#: 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:0
+#, python-format
+msgid "Sending a notification to another user is forbidden."
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Success"
+msgstr ""
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test danger notification"
+msgstr ""
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test default notification"
+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 success 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 "Brugere"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Warning"
+msgstr "Advarsel"
diff --git a/web_notify/i18n/de.po b/web_notify/i18n/de.po
new file mode 100644
index 0000000..2b6c697
--- /dev/null
+++ b/web_notify/i18n/de.po
@@ -0,0 +1,116 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_notify
+#
+# Translators:
+# Niki Waibel <niki.waibel@gmail.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-02-03 01:37+0000\n"
+"PO-Revision-Date: 2020-07-22 12:19+0000\n"
+"Last-Translator: c2cdidier <didier.donze@camptocamp.com>\n"
+"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 3.10\n"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Danger"
+msgstr "Gefahr"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Default"
+msgstr "Standard"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Information"
+msgstr "Information"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_danger_channel_name
+msgid "Notify Danger Channel Name"
+msgstr "Name Gefahrenkanal Benachritigung"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_default_channel_name
+msgid "Notify Default Channel Name"
+msgstr "Name Standardkanal Benachritigung"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_info_channel_name
+msgid "Notify Info Channel Name"
+msgstr "Name Informationskanal Benachritigung"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_success_channel_name
+msgid "Notify Success Channel Name"
+msgstr "Name Erfolgskanal Benachrichtigung"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_warning_channel_name
+msgid "Notify Warning Channel Name"
+msgstr "Name Warnungskanal Benachritigung"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Sending a notification to another user is forbidden."
+msgstr "Es ist verboten eine Nachricht an einem anderen Benutzer zu senden."
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Success"
+msgstr "Erfolg"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test danger notification"
+msgstr "Test Gefahrenmeldung"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test default notification"
+msgstr "Standardbenachrichtigung testen"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test info notification"
+msgstr "Test Info Benachrichtigung"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test success notification"
+msgstr "Test Erfolgsbenarichtigung"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test warning notification"
+msgstr "Test Warnungsbenachritigung"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test web notify"
+msgstr "Test Webbenachrichtigung"
+
+#. module: web_notify
+#: model:ir.model,name:web_notify.model_res_users
+msgid "Users"
+msgstr "Benutzer"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Warning"
+msgstr "Warnung"
diff --git a/web_notify/i18n/es.po b/web_notify/i18n/es.po
new file mode 100644
index 0000000..b895cdd
--- /dev/null
+++ b/web_notify/i18n/es.po
@@ -0,0 +1,120 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_notify
+#
+# Translators:
+# Pedro M. Baeza <pedro.baeza@gmail.com>, 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-12-23 02:13+0000\n"
+"PO-Revision-Date: 2016-12-23 02:13+0000\n"
+"Last-Translator: Pedro M. Baeza <pedro.baeza@gmail.com>, 2016\n"
+"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Danger"
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Default"
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Information"
+msgstr "Información"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_danger_channel_name
+#, fuzzy
+msgid "Notify Danger Channel Name"
+msgstr "Nombre del canal de avisos notificados"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_default_channel_name
+#, fuzzy
+msgid "Notify Default Channel Name"
+msgstr "Nombre del canal de información notificada"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_info_channel_name
+#, fuzzy
+msgid "Notify Info Channel Name"
+msgstr "Nombre del canal de información notificada"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_success_channel_name
+#, fuzzy
+msgid "Notify Success Channel Name"
+msgstr "Nombre del canal de información notificada"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_warning_channel_name
+#, fuzzy
+msgid "Notify Warning Channel Name"
+msgstr "Nombre del canal de avisos notificados"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Sending a notification to another user is forbidden."
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Success"
+msgstr ""
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test danger notification"
+msgstr ""
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test default notification"
+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 success 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 "Usuarios"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Warning"
+msgstr "Aviso"
diff --git a/web_notify/i18n/hr.po b/web_notify/i18n/hr.po
new file mode 100644
index 0000000..4fdd5f7
--- /dev/null
+++ b/web_notify/i18n/hr.po
@@ -0,0 +1,121 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_notify
+#
+# Translators:
+# Bole <bole@dajmi5.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-04-28 18:03+0000\n"
+"PO-Revision-Date: 2017-04-28 18:03+0000\n"
+"Last-Translator: Bole <bole@dajmi5.com>, 2017\n"
+"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Danger"
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Default"
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Information"
+msgstr "Informacija"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_danger_channel_name
+#, fuzzy
+msgid "Notify Danger Channel Name"
+msgstr "Naziv kanala upozorenja"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_default_channel_name
+#, fuzzy
+msgid "Notify Default Channel Name"
+msgstr "Naziv kanala informacija"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_info_channel_name
+#, fuzzy
+msgid "Notify Info Channel Name"
+msgstr "Naziv kanala informacija"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_success_channel_name
+#, fuzzy
+msgid "Notify Success Channel Name"
+msgstr "Naziv kanala informacija"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_warning_channel_name
+#, fuzzy
+msgid "Notify Warning Channel Name"
+msgstr "Naziv kanala upozorenja"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Sending a notification to another user is forbidden."
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Success"
+msgstr ""
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test danger notification"
+msgstr ""
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test default notification"
+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 success 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 "Korisnici"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Warning"
+msgstr "Upozorenje"
diff --git a/web_notify/i18n/it.po b/web_notify/i18n/it.po
new file mode 100644
index 0000000..b60fac8
--- /dev/null
+++ b/web_notify/i18n/it.po
@@ -0,0 +1,128 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_notify
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2023-01-23 17:46+0000\n"
+"Last-Translator: Riccardo Bellanova <bellanova@webmonks.it>\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.14.1\n"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Danger"
+msgstr "Pericolo"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Default"
+msgstr "Predefinito"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__display_name
+msgid "Display Name"
+msgstr "Nome visualizzato"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Information"
+msgstr "Informazione"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Ultima Modifica il"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_danger_channel_name
+msgid "Notify Danger Channel Name"
+msgstr "Nome Canale Notifica Pericolo"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_default_channel_name
+msgid "Notify Default Channel Name"
+msgstr "Nome Canale Notifica Predefinito"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_info_channel_name
+msgid "Notify Info Channel Name"
+msgstr "Nome Canale Notifica Informazione"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_success_channel_name
+msgid "Notify Success Channel Name"
+msgstr "Nome Canale Notifica Successo"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_warning_channel_name
+msgid "Notify Warning Channel Name"
+msgstr "Nome Canale Notifica Avviso"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Sending a notification to another user is forbidden."
+msgstr "L'invio di una notifica ad un altro utente è vietato."
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Success"
+msgstr "Successo"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test danger notification"
+msgstr "Test notifica pericolo"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test default notification"
+msgstr "Test notifica default"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test info notification"
+msgstr "Test notifica informazione"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test success notification"
+msgstr "Test notifica successo"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test warning notification"
+msgstr "Test notifica warning"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test web notify"
+msgstr "Test notifica web"
+
+#. module: web_notify
+#: model:ir.model,name:web_notify.model_res_users
+msgid "Users"
+msgstr "Utenti"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Warning"
+msgstr "Avviso"
diff --git a/web_notify/i18n/nl.po b/web_notify/i18n/nl.po
new file mode 100644
index 0000000..ddc2ea0
--- /dev/null
+++ b/web_notify/i18n/nl.po
@@ -0,0 +1,128 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_notify
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2021-05-17 20:47+0000\n"
+"Last-Translator: Bosd <c5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me>\n"
+"Language-Team: none\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Danger"
+msgstr "Gevaar"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Default"
+msgstr "Standaard"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__display_name
+msgid "Display Name"
+msgstr "Weergavenaam"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Information"
+msgstr "Informatie"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Laatst Gewijzigd op"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_danger_channel_name
+msgid "Notify Danger Channel Name"
+msgstr ""
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_default_channel_name
+msgid "Notify Default Channel Name"
+msgstr ""
+
+#. module: web_notify
+#: 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_success_channel_name
+msgid "Notify Success Channel Name"
+msgstr ""
+
+#. module: web_notify
+#: 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:0
+#, python-format
+msgid "Sending a notification to another user is forbidden."
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Success"
+msgstr "Success"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test danger notification"
+msgstr ""
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test default notification"
+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 success 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 "Gebruikers"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Warning"
+msgstr "Waarschuwing"
diff --git a/web_notify/i18n/nl_NL.po b/web_notify/i18n/nl_NL.po
new file mode 100644
index 0000000..14d9972
--- /dev/null
+++ b/web_notify/i18n/nl_NL.po
@@ -0,0 +1,116 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_notify
+#
+# Translators:
+# Peter Hageman <hageman.p@gmail.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-07-13 16:07+0000\n"
+"PO-Revision-Date: 2017-07-13 16:07+0000\n"
+"Last-Translator: Peter Hageman <hageman.p@gmail.com>, 2017\n"
+"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/"
+"teams/23907/nl_NL/)\n"
+"Language: nl_NL\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Danger"
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Default"
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Information"
+msgstr "Informatie"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_danger_channel_name
+msgid "Notify Danger Channel Name"
+msgstr ""
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_default_channel_name
+msgid "Notify Default Channel Name"
+msgstr ""
+
+#. module: web_notify
+#: 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_success_channel_name
+msgid "Notify Success Channel Name"
+msgstr ""
+
+#. module: web_notify
+#: 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:0
+#, python-format
+msgid "Sending a notification to another user is forbidden."
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Success"
+msgstr ""
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test danger notification"
+msgstr ""
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test default notification"
+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 success 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 "Gebruikers"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Warning"
+msgstr "Waarschuwing"
diff --git a/web_notify/i18n/pt_BR.po b/web_notify/i18n/pt_BR.po
new file mode 100644
index 0000000..d29f952
--- /dev/null
+++ b/web_notify/i18n/pt_BR.po
@@ -0,0 +1,117 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_notify
+#
+# Translators:
+# Rodrigo de Almeida Sottomaior Macedo <rmsolucoeseminformatic4@gmail.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-06-22 08:27+0000\n"
+"PO-Revision-Date: 2019-08-30 15:23+0000\n"
+"Last-Translator: Rodrigo Macedo <rmsolucoeseminformatic4@gmail.com>\n"
+"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/"
+"teams/23907/pt_BR/)\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 3.8\n"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Danger"
+msgstr "Perigo"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Default"
+msgstr "Padrão"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Information"
+msgstr "Informação"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_danger_channel_name
+msgid "Notify Danger Channel Name"
+msgstr "Notificar o nome do canal de perigo"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_default_channel_name
+msgid "Notify Default Channel Name"
+msgstr "Notificar o nome do canal padrão"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_info_channel_name
+msgid "Notify Info Channel Name"
+msgstr "Notificar o nome do canal de informações"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_success_channel_name
+msgid "Notify Success Channel Name"
+msgstr "Notificar o nome do canal de sucesso"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_warning_channel_name
+msgid "Notify Warning Channel Name"
+msgstr "Notificar o nome do canal de alerta"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Sending a notification to another user is forbidden."
+msgstr "É proibido enviar uma notificação para outro usuário."
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Success"
+msgstr "Sucesso"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test danger notification"
+msgstr "Notificação de teste de perigo"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test default notification"
+msgstr "Notificação de Teste padrão"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test info notification"
+msgstr "Notificação de Teste informativo"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test success notification"
+msgstr "Notificação de Teste de sucesso"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test warning notification"
+msgstr "Notificação de Teste de alerta"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test web notify"
+msgstr "Notificação de Web Teste"
+
+#. module: web_notify
+#: model:ir.model,name:web_notify.model_res_users
+msgid "Users"
+msgstr "Usuários"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Warning"
+msgstr "Alerta"
diff --git a/web_notify/i18n/web_notify.pot b/web_notify/i18n/web_notify.pot
new file mode 100644
index 0000000..b815620
--- /dev/null
+++ b/web_notify/i18n/web_notify.pot
@@ -0,0 +1,125 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_notify
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Danger"
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Default"
+msgstr ""
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__id
+msgid "ID"
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Information"
+msgstr ""
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_danger_channel_name
+msgid "Notify Danger Channel Name"
+msgstr ""
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_default_channel_name
+msgid "Notify Default Channel Name"
+msgstr ""
+
+#. module: web_notify
+#: 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_success_channel_name
+msgid "Notify Success Channel Name"
+msgstr ""
+
+#. module: web_notify
+#: 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:0
+#, python-format
+msgid "Sending a notification to another user is forbidden."
+msgstr ""
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Success"
+msgstr ""
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test danger notification"
+msgstr ""
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test default notification"
+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 success 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:0
+#, python-format
+msgid "Warning"
+msgstr ""
diff --git a/web_notify/i18n/zh_CN.po b/web_notify/i18n/zh_CN.po
new file mode 100644
index 0000000..9c0d991
--- /dev/null
+++ b/web_notify/i18n/zh_CN.po
@@ -0,0 +1,113 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_notify
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2019-09-01 12:52+0000\n"
+"Last-Translator: 黎伟杰 <674416404@qq.com>\n"
+"Language-Team: none\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 3.8\n"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Danger"
+msgstr "危险"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Default"
+msgstr "默认"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Information"
+msgstr "信息"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_danger_channel_name
+msgid "Notify Danger Channel Name"
+msgstr "通知危险频道名称"
+
+#. module: web_notify
+#: model:ir.model.fields,field_description:web_notify.field_res_users__notify_default_channel_name
+msgid "Notify Default Channel Name"
+msgstr "通知默认频道名称"
+
+#. module: web_notify
+#: 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_success_channel_name
+msgid "Notify Success Channel Name"
+msgstr "通知成功频道名称"
+
+#. module: web_notify
+#: 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:0
+#, python-format
+msgid "Sending a notification to another user is forbidden."
+msgstr "禁止向其他用户发送通知。"
+
+#. module: web_notify
+#: code:addons/web_notify/models/res_users.py:0
+#, python-format
+msgid "Success"
+msgstr "成功"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test danger notification"
+msgstr "测试危险通知"
+
+#. module: web_notify
+#: model_terms:ir.ui.view,arch_db:web_notify.view_users_form_simple_modif_inherit
+msgid "Test default notification"
+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 success 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:0
+#, python-format
+msgid "Warning"
+msgstr "警告"
diff --git a/web_notify/models/__init__.py b/web_notify/models/__init__.py
new file mode 100644
index 0000000..15deefd
--- /dev/null
+++ b/web_notify/models/__init__.py
@@ -0,0 +1,4 @@
+# pylint: disable=missing-docstring
+# 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
new file mode 100644
index 0000000..d973940
--- /dev/null
+++ b/web_notify/models/res_users.py
@@ -0,0 +1,73 @@
+# pylint: disable=missing-docstring
+# Copyright 2016 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import _, api, exceptions, fields, models
+
+DEFAULT_MESSAGE = "Default message"
+
+SUCCESS = "success"
+DANGER = "danger"
+WARNING = "warning"
+INFO = "info"
+DEFAULT = "default"
+
+
+class ResUsers(models.Model):
+ _inherit = "res.users"
+
+ @api.depends("create_date")
+ def _compute_channel_names(self):
+ for record in self:
+ res_id = record.id
+ record.notify_success_channel_name = "notify_success_%s" % res_id
+ record.notify_danger_channel_name = "notify_danger_%s" % res_id
+ record.notify_warning_channel_name = "notify_warning_%s" % res_id
+ record.notify_info_channel_name = "notify_info_%s" % res_id
+ record.notify_default_channel_name = "notify_default_%s" % res_id
+
+ notify_success_channel_name = fields.Char(compute="_compute_channel_names")
+ notify_danger_channel_name = fields.Char(compute="_compute_channel_names")
+ notify_warning_channel_name = fields.Char(compute="_compute_channel_names")
+ notify_info_channel_name = fields.Char(compute="_compute_channel_names")
+ notify_default_channel_name = fields.Char(compute="_compute_channel_names")
+
+ def notify_success(self, message="Default message", title=None, sticky=False):
+ title = title or _("Success")
+ self._notify_channel(SUCCESS, message, title, sticky)
+
+ def notify_danger(self, message="Default message", title=None, sticky=False):
+ title = title or _("Danger")
+ self._notify_channel(DANGER, message, title, sticky)
+
+ def notify_warning(self, message="Default message", title=None, sticky=False):
+ title = title or _("Warning")
+ self._notify_channel(WARNING, message, title, sticky)
+
+ def notify_info(self, message="Default message", title=None, sticky=False):
+ title = title or _("Information")
+ self._notify_channel(INFO, message, title, sticky)
+
+ def notify_default(self, message="Default message", title=None, sticky=False):
+ title = title or _("Default")
+ self._notify_channel(DEFAULT, message, title, sticky)
+
+ def _notify_channel(
+ self, type_message=DEFAULT, message=DEFAULT_MESSAGE, title=None, sticky=False
+ ):
+ # pylint: disable=protected-access
+ 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.")
+ )
+ channel_name_field = "notify_{}_channel_name".format(type_message)
+ bus_message = {
+ "type": type_message,
+ "message": message,
+ "title": title,
+ "sticky": sticky,
+ }
+ 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 0000000..7a21d19
--- /dev/null
+++ b/web_notify/readme/CONTRIBUTORS.rst
@@ -0,0 +1,5 @@
+* Laurent Mignon <laurent.mignon@acsone.eu>
+* Serpent Consulting Services Pvt. Ltd.<jay.vora@serpentcs.com>
+* Aitor Bouzas <aitor.bouzas@adaptivecity.com>
+* Shepilov Vladislav <shepilov.v@protonmail.com>
+* Kevin Khao <kevin.khao@akretion.com>
diff --git a/web_notify/readme/DESCRIPTION.rst b/web_notify/readme/DESCRIPTION.rst
new file mode 100644
index 0000000..2cd8978
--- /dev/null
+++ b/web_notify/readme/DESCRIPTION.rst
@@ -0,0 +1,10 @@
+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.
+
+* Success: Displayed in a `success` theme color flying popup div
+* Danger: Displayed in a `danger` theme color flying popup div
+* Warning: Displayed in a `warning` theme color flying popup div
+* Information: Displayed in a `info` theme color flying popup div
+* Default: Displayed in a `default` theme color flying popup div
diff --git a/web_notify/readme/INSTALL.rst b/web_notify/readme/INSTALL.rst
new file mode 100644
index 0000000..b47aebb
--- /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.
diff --git a/web_notify/readme/USAGE.rst b/web_notify/readme/USAGE.rst
new file mode 100644
index 0000000..e25ef76
--- /dev/null
+++ b/web_notify/readme/USAGE.rst
@@ -0,0 +1,41 @@
+
+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_success(message='My success message')
+
+or
+
+.. code-block:: python
+
+ self.env.user.notify_danger(message='My danger message')
+
+or
+
+.. code-block:: python
+
+ self.env.user.notify_warning(message='My warning message')
+
+or
+
+.. code-block:: python
+
+ self.env.user.notify_info(message='My information message')
+
+or
+
+.. code-block:: python
+
+ self.env.user.notify_default(message='My default 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/icon.png b/web_notify/static/description/icon.png
new file mode 100644
index 0000000..3a0328b
--- /dev/null
+++ b/web_notify/static/description/icon.png
Binary files differ
diff --git a/web_notify/static/description/index.html b/web_notify/static/description/index.html
new file mode 100644
index 0000000..e10497a
--- /dev/null
+++ b/web_notify/static/description/index.html
@@ -0,0 +1,470 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
+<title>Web Notify</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+ border: 0 }
+
+table.borderless td, table.borderless th {
+ /* Override padding for "table.docutils td" with "! important".
+ The right padding separates the table cells. */
+ padding: 0 0.5em 0 0 ! important }
+
+.first {
+ /* Override more specific margin styles with "! important". */
+ margin-top: 0 ! important }
+
+.last, .with-subtitle {
+ margin-bottom: 0 ! important }
+
+.hidden {
+ display: none }
+
+.subscript {
+ vertical-align: sub;
+ font-size: smaller }
+
+.superscript {
+ vertical-align: super;
+ font-size: smaller }
+
+a.toc-backref {
+ text-decoration: none ;
+ color: black }
+
+blockquote.epigraph {
+ margin: 2em 5em ; }
+
+dl.docutils dd {
+ margin-bottom: 0.5em }
+
+object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
+ overflow: hidden;
+}
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+ font-weight: bold }
+*/
+
+div.abstract {
+ margin: 2em 5em }
+
+div.abstract p.topic-title {
+ font-weight: bold ;
+ text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+ margin: 2em ;
+ border: medium outset ;
+ padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+ font-weight: bold ;
+ font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title, .code .error {
+ color: red ;
+ font-weight: bold ;
+ font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+ compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+ margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+ margin-top: 0.5em }
+*/
+
+div.dedication {
+ margin: 2em 5em ;
+ text-align: center ;
+ font-style: italic }
+
+div.dedication p.topic-title {
+ font-weight: bold ;
+ font-style: normal }
+
+div.figure {
+ margin-left: 2em ;
+ margin-right: 2em }
+
+div.footer, div.header {
+ clear: both;
+ font-size: smaller }
+
+div.line-block {
+ display: block ;
+ margin-top: 1em ;
+ margin-bottom: 1em }
+
+div.line-block div.line-block {
+ margin-top: 0 ;
+ margin-bottom: 0 ;
+ margin-left: 1.5em }
+
+div.sidebar {
+ margin: 0 0 0.5em 1em ;
+ border: medium outset ;
+ padding: 1em ;
+ background-color: #ffffee ;
+ width: 40% ;
+ float: right ;
+ clear: right }
+
+div.sidebar p.rubric {
+ font-family: sans-serif ;
+ font-size: medium }
+
+div.system-messages {
+ margin: 5em }
+
+div.system-messages h1 {
+ color: red }
+
+div.system-message {
+ border: medium outset ;
+ padding: 1em }
+
+div.system-message p.system-message-title {
+ color: red ;
+ font-weight: bold }
+
+div.topic {
+ margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+ margin-top: 0.4em }
+
+h1.title {
+ text-align: center }
+
+h2.subtitle {
+ text-align: center }
+
+hr.docutils {
+ width: 75% }
+
+img.align-left, .figure.align-left, object.align-left, table.align-left {
+ clear: left ;
+ float: left ;
+ margin-right: 1em }
+
+img.align-right, .figure.align-right, object.align-right, table.align-right {
+ clear: right ;
+ float: right ;
+ margin-left: 1em }
+
+img.align-center, .figure.align-center, object.align-center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+table.align-center {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.align-left {
+ text-align: left }
+
+.align-center {
+ clear: both ;
+ text-align: center }
+
+.align-right {
+ text-align: right }
+
+/* reset inner alignment in figures */
+div.align-right {
+ text-align: inherit }
+
+/* div.align-center * { */
+/* text-align: left } */
+
+.align-top {
+ vertical-align: top }
+
+.align-middle {
+ vertical-align: middle }
+
+.align-bottom {
+ vertical-align: bottom }
+
+ol.simple, ul.simple {
+ margin-bottom: 1em }
+
+ol.arabic {
+ list-style: decimal }
+
+ol.loweralpha {
+ list-style: lower-alpha }
+
+ol.upperalpha {
+ list-style: upper-alpha }
+
+ol.lowerroman {
+ list-style: lower-roman }
+
+ol.upperroman {
+ list-style: upper-roman }
+
+p.attribution {
+ text-align: right ;
+ margin-left: 50% }
+
+p.caption {
+ font-style: italic }
+
+p.credits {
+ font-style: italic ;
+ font-size: smaller }
+
+p.label {
+ white-space: nowrap }
+
+p.rubric {
+ font-weight: bold ;
+ font-size: larger ;
+ color: maroon ;
+ text-align: center }
+
+p.sidebar-title {
+ font-family: sans-serif ;
+ font-weight: bold ;
+ font-size: larger }
+
+p.sidebar-subtitle {
+ font-family: sans-serif ;
+ font-weight: bold }
+
+p.topic-title {
+ font-weight: bold }
+
+pre.address {
+ margin-bottom: 0 ;
+ margin-top: 0 ;
+ font: inherit }
+
+pre.literal-block, pre.doctest-block, pre.math, pre.code {
+ margin-left: 2em ;
+ margin-right: 2em }
+
+pre.code .ln { color: grey; } /* line numbers */
+pre.code, code { background-color: #eeeeee }
+pre.code .comment, code .comment { color: #5C6576 }
+pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
+pre.code .literal.string, code .literal.string { color: #0C5404 }
+pre.code .name.builtin, code .name.builtin { color: #352B84 }
+pre.code .deleted, code .deleted { background-color: #DEB0A1}
+pre.code .inserted, code .inserted { background-color: #A3D289}
+
+span.classifier {
+ font-family: sans-serif ;
+ font-style: oblique }
+
+span.classifier-delimiter {
+ font-family: sans-serif ;
+ font-weight: bold }
+
+span.interpreted {
+ font-family: sans-serif }
+
+span.option {
+ white-space: nowrap }
+
+span.pre {
+ white-space: pre }
+
+span.problematic {
+ color: red }
+
+span.section-subtitle {
+ /* font-size relative to parent (h1..h6 element) */
+ font-size: 80% }
+
+table.citation {
+ border-left: solid 1px gray;
+ margin-left: 1px }
+
+table.docinfo {
+ margin: 2em 4em }
+
+table.docutils {
+ margin-top: 0.5em ;
+ margin-bottom: 0.5em }
+
+table.footnote {
+ border-left: solid 1px black;
+ margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+ padding-left: 0.5em ;
+ padding-right: 0.5em ;
+ vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+ font-weight: bold ;
+ text-align: left ;
+ white-space: nowrap ;
+ padding-left: 0 }
+
+/* "booktabs" style (no vertical lines) */
+table.docutils.booktabs {
+ border: 0px;
+ border-top: 2px solid;
+ border-bottom: 2px solid;
+ border-collapse: collapse;
+}
+table.docutils.booktabs * {
+ border: 0px;
+}
+table.docutils.booktabs th {
+ border-bottom: thin solid;
+ text-align: left;
+}
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+ font-size: 100% }
+
+ul.auto-toc {
+ list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="web-notify">
+<h1 class="title">Web Notify</h1>
+
+<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! This file is generated by oca-gen-addon-readme !!
+!! changes will be overwritten. !!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/web/tree/14.0/web_notify"><img alt="OCA/web" src="https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/web-14-0/web-14-0-web_notify"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/162/14.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<p>Send instant notification messages to the user in live.</p>
+<p>This technical module allows you to send instant notification messages from the server to the user in live.
+Two kinds of notification are supported.</p>
+<ul class="simple">
+<li>Success: Displayed in a <cite>success</cite> theme color flying popup div</li>
+<li>Danger: Displayed in a <cite>danger</cite> theme color flying popup div</li>
+<li>Warning: Displayed in a <cite>warning</cite> theme color flying popup div</li>
+<li>Information: Displayed in a <cite>info</cite> theme color flying popup div</li>
+<li>Default: Displayed in a <cite>default</cite> theme color flying popup div</li>
+</ul>
+<p><strong>Table of contents</strong></p>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#installation" id="id1">Installation</a></li>
+<li><a class="reference internal" href="#usage" id="id2">Usage</a></li>
+<li><a class="reference internal" href="#bug-tracker" id="id3">Bug Tracker</a></li>
+<li><a class="reference internal" href="#credits" id="id4">Credits</a><ul>
+<li><a class="reference internal" href="#authors" id="id5">Authors</a></li>
+<li><a class="reference internal" href="#contributors" id="id6">Contributors</a></li>
+<li><a class="reference internal" href="#maintainers" id="id7">Maintainers</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="section" id="installation">
+<h1><a class="toc-backref" href="#id1">Installation</a></h1>
+<p>This module is based on the Instant Messaging Bus. To work properly, the server must be launched in gevent mode.</p>
+</div>
+<div class="section" id="usage">
+<h1><a class="toc-backref" href="#id2">Usage</a></h1>
+<p>To send a notification to the user you just need to call one of the new methods defined on res.users:</p>
+<pre class="code python literal-block">
+<span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">notify_success</span><span class="p">(</span><span class="n">message</span><span class="o">=</span><span class="s1">'My success message'</span><span class="p">)</span>
+</pre>
+<p>or</p>
+<pre class="code python literal-block">
+<span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">notify_danger</span><span class="p">(</span><span class="n">message</span><span class="o">=</span><span class="s1">'My danger message'</span><span class="p">)</span>
+</pre>
+<p>or</p>
+<pre class="code python literal-block">
+<span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">notify_warning</span><span class="p">(</span><span class="n">message</span><span class="o">=</span><span class="s1">'My warning message'</span><span class="p">)</span>
+</pre>
+<p>or</p>
+<pre class="code python literal-block">
+<span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">notify_info</span><span class="p">(</span><span class="n">message</span><span class="o">=</span><span class="s1">'My information message'</span><span class="p">)</span>
+</pre>
+<p>or</p>
+<pre class="code python literal-block">
+<span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">notify_default</span><span class="p">(</span><span class="n">message</span><span class="o">=</span><span class="s1">'My default message'</span><span class="p">)</span>
+</pre>
+<div class="figure">
+<img alt="Sample notifications" src="https://raw.githubusercontent.com/OCA/web/14.0/web_notify/static/description/notifications_screenshot.png" />
+</div>
+<p>You can test the behaviour of the notifications by installing this module in a demo database.
+Access the users form through Settings -&gt; Users &amp; Companies. You’ll see a tab called “Test web notify”, here you’ll find two buttons that’ll allow you test the module.</p>
+<div class="figure">
+<img alt="Sample notifications" src="https://raw.githubusercontent.com/OCA/web/14.0/web_notify/static/description/test_notifications_demo.png" />
+</div>
+</div>
+<div class="section" id="bug-tracker">
+<h1><a class="toc-backref" href="#id3">Bug Tracker</a></h1>
+<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/web/issues">GitHub Issues</a>.
+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
+<a class="reference external" href="https://github.com/OCA/web/issues/new?body=module:%20web_notify%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<p>Do not contact contributors directly about support or help with technical issues.</p>
+</div>
+<div class="section" id="credits">
+<h1><a class="toc-backref" href="#id4">Credits</a></h1>
+<div class="section" id="authors">
+<h2><a class="toc-backref" href="#id5">Authors</a></h2>
+<ul class="simple">
+<li>ACSONE SA/NV</li>
+<li>AdaptiveCity</li>
+</ul>
+</div>
+<div class="section" id="contributors">
+<h2><a class="toc-backref" href="#id6">Contributors</a></h2>
+<ul class="simple">
+<li>Laurent Mignon &lt;<a class="reference external" href="mailto:laurent.mignon&#64;acsone.eu">laurent.mignon&#64;acsone.eu</a>&gt;</li>
+<li>Serpent Consulting Services Pvt. Ltd.&lt;<a class="reference external" href="mailto:jay.vora&#64;serpentcs.com">jay.vora&#64;serpentcs.com</a>&gt;</li>
+<li>Aitor Bouzas &lt;<a class="reference external" href="mailto:aitor.bouzas&#64;adaptivecity.com">aitor.bouzas&#64;adaptivecity.com</a>&gt;</li>
+<li>Shepilov Vladislav &lt;<a class="reference external" href="mailto:shepilov.v&#64;protonmail.com">shepilov.v&#64;protonmail.com</a>&gt;</li>
+<li>Kevin Khao &lt;<a class="reference external" href="mailto:kevin.khao&#64;akretion.com">kevin.khao&#64;akretion.com</a>&gt;</li>
+</ul>
+</div>
+<div class="section" id="maintainers">
+<h2><a class="toc-backref" href="#id7">Maintainers</a></h2>
+<p>This module is maintained by the OCA.</p>
+<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
+<p>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.</p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/web/tree/14.0/web_notify">OCA/web</a> project on GitHub.</p>
+<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
+</div>
+</div>
+</div>
+</body>
+</html>
diff --git a/web_notify/static/description/notifications_screenshot.png b/web_notify/static/description/notifications_screenshot.png
new file mode 100644
index 0000000..1a1062c
--- /dev/null
+++ b/web_notify/static/description/notifications_screenshot.png
Binary files differ
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 0000000..fcb0646
--- /dev/null
+++ b/web_notify/static/description/test_notifications_demo.png
Binary files differ
diff --git a/web_notify/static/src/js/web_client.js b/web_notify/static/src/js/web_client.js
new file mode 100644
index 0000000..a576dcd
--- /dev/null
+++ b/web_notify/static/src/js/web_client.js
@@ -0,0 +1,61 @@
+odoo.define("web_notify.WebClient", function (require) {
+ "use strict";
+
+ var WebClient = require("web.WebClient");
+ var session = require("web.session");
+ require("bus.BusService");
+
+ WebClient.include({
+ show_application: function () {
+ var res = this._super();
+ this.start_polling();
+ return res;
+ },
+ start_polling: function () {
+ this.channel_success = "notify_success_" + session.uid;
+ this.channel_danger = "notify_danger_" + session.uid;
+ this.channel_warning = "notify_warning_" + session.uid;
+ this.channel_info = "notify_info_" + session.uid;
+ this.channel_default = "notify_default_" + session.uid;
+ this.all_channels = [
+ this.channel_success,
+ this.channel_danger,
+ this.channel_warning,
+ this.channel_info,
+ this.channel_default,
+ ];
+ this.call("bus_service", "startPolling");
+
+ if (this.call("bus_service", "isMasterTab")) {
+ this.call("bus_service", "addChannel", this.channel_success);
+ this.call("bus_service", "addChannel", this.channel_danger);
+ this.call("bus_service", "addChannel", this.channel_warning);
+ this.call("bus_service", "addChannel", this.channel_info);
+ this.call("bus_service", "addChannel", this.channel_default);
+ }
+ this.call("bus_service", "on", "notification", this, this.bus_notification);
+ },
+ bus_notification: function (notifications) {
+ var self = this;
+ _.each(notifications, function (notification) {
+ var channel = notification[0];
+ var message = notification[1];
+ if (
+ self.all_channels !== null &&
+ self.all_channels.indexOf(channel) > -1
+ ) {
+ self.on_message(message);
+ }
+ });
+ },
+ on_message: function (message) {
+ return this.call("notification", "notify", {
+ type: message.type,
+ title: message.title,
+ message: message.message,
+ sticky: message.sticky,
+ className: message.className,
+ });
+ },
+ });
+});
diff --git a/web_notify/static/src/js/widgets/notification.js b/web_notify/static/src/js/widgets/notification.js
new file mode 100644
index 0000000..0c468ff
--- /dev/null
+++ b/web_notify/static/src/js/widgets/notification.js
@@ -0,0 +1,26 @@
+odoo.define("web_notify.Notification", function (require) {
+ "use strict";
+
+ var Notification = require("web.Notification");
+
+ Notification.include({
+ icon_mapping: {
+ success: "fa-thumbs-up",
+ danger: "fa-exclamation-triangle",
+ warning: "fa-exclamation",
+ info: "fa-info",
+ default: "fa-lightbulb-o",
+ },
+ init: function () {
+ this._super.apply(this, arguments);
+ // Delete default classes
+ this.className = this.className.replace(" o_error", "");
+ // Add custom icon and custom class
+ this.icon =
+ this.type in this.icon_mapping
+ ? this.icon_mapping[this.type]
+ : this.icon_mapping.default;
+ this.className += " o_" + this.type;
+ },
+ });
+});
diff --git a/web_notify/static/src/scss/webclient.scss b/web_notify/static/src/scss/webclient.scss
new file mode 100644
index 0000000..82f3c15
--- /dev/null
+++ b/web_notify/static/src/scss/webclient.scss
@@ -0,0 +1,24 @@
+.o_notification_manager {
+ .o_notification {
+ &.o_success {
+ color: white;
+ background-color: theme-color("success");
+ }
+ &.o_danger {
+ color: white;
+ background-color: theme-color("danger");
+ }
+ &.o_warning {
+ color: white;
+ background-color: theme-color("warning");
+ }
+ &.o_info {
+ color: white;
+ background-color: theme-color("info");
+ }
+ &.o_default {
+ color: black;
+ background-color: theme-color("default");
+ }
+ }
+}
diff --git a/web_notify/tests/__init__.py b/web_notify/tests/__init__.py
new file mode 100644
index 0000000..f759b96
--- /dev/null
+++ b/web_notify/tests/__init__.py
@@ -0,0 +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
new file mode 100644
index 0000000..ba11546
--- /dev/null
+++ b/web_notify/tests/test_res_users.py
@@ -0,0 +1,105 @@
+# Copyright 2016 ACSONE SA/NV
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import json
+from unittest import mock
+
+from odoo import exceptions
+from odoo.tests import common
+
+from odoo.addons.bus.models.bus import json_dump
+
+from ..models.res_users import DANGER, DEFAULT, INFO, SUCCESS, WARNING
+
+
+class TestResUsers(common.TransactionCase):
+ def test_notify_success(self):
+ bus_bus = self.env["bus.bus"]
+ domain = [
+ ("channel", "=", json_dump(self.env.user.notify_success_channel_name))
+ ]
+ existing = bus_bus.search(domain)
+ test_msg = {"message": "message", "title": "title", "sticky": True}
+ self.env.user.notify_success(**test_msg)
+ news = bus_bus.search(domain) - existing
+ self.assertEqual(1, len(news))
+ test_msg.update({"type": SUCCESS})
+ self.assertDictEqual(test_msg, json.loads(news.message))
+
+ def test_notify_danger(self):
+ bus_bus = self.env["bus.bus"]
+ domain = [("channel", "=", json_dump(self.env.user.notify_danger_channel_name))]
+ existing = bus_bus.search(domain)
+ test_msg = {"message": "message", "title": "title", "sticky": True}
+ self.env.user.notify_danger(**test_msg)
+ news = bus_bus.search(domain) - existing
+ self.assertEqual(1, len(news))
+ test_msg.update({"type": DANGER})
+ self.assertDictEqual(test_msg, json.loads(news.message))
+
+ def test_notify_warning(self):
+ bus_bus = self.env["bus.bus"]
+ domain = [
+ ("channel", "=", json_dump(self.env.user.notify_warning_channel_name))
+ ]
+ existing = bus_bus.search(domain)
+ test_msg = {"message": "message", "title": "title", "sticky": True}
+ self.env.user.notify_warning(**test_msg)
+ news = bus_bus.search(domain) - existing
+ self.assertEqual(1, len(news))
+ test_msg.update({"type": WARNING})
+ self.assertDictEqual(test_msg, json.loads(news.message))
+
+ def test_notify_info(self):
+ bus_bus = self.env["bus.bus"]
+ domain = [("channel", "=", json_dump(self.env.user.notify_info_channel_name))]
+ existing = bus_bus.search(domain)
+ test_msg = {"message": "message", "title": "title", "sticky": True}
+ self.env.user.notify_info(**test_msg)
+ news = bus_bus.search(domain) - existing
+ self.assertEqual(1, len(news))
+ test_msg.update({"type": INFO})
+ self.assertDictEqual(test_msg, json.loads(news.message))
+
+ def test_notify_default(self):
+ bus_bus = self.env["bus.bus"]
+ domain = [
+ ("channel", "=", json_dump(self.env.user.notify_default_channel_name))
+ ]
+ existing = bus_bus.search(domain)
+ test_msg = {"message": "message", "title": "title", "sticky": True}
+ self.env.user.notify_default(**test_msg)
+ news = bus_bus.search(domain) - existing
+ self.assertEqual(1, len(news))
+ test_msg.update({"type": DEFAULT})
+ self.assertDictEqual(test_msg, json.loads(news.message))
+
+ def test_notify_many(self):
+ # check that the notification of a list of users is done with
+ # a single call to the bus
+ with mock.patch("odoo.addons.bus.models.bus.ImBus.sendmany") as mockedSendMany:
+ users = self.env.user.search([(1, "=", 1)])
+ self.assertTrue(len(users) > 1)
+ users.notify_warning(message="message")
+
+ self.assertEqual(1, mockedSendMany.call_count)
+
+ # call_args is a tuple with args (tuple) & kwargs (dict). We check
+ # positional arguments (args), hence the [0].
+ pos_call_args = mockedSendMany.call_args[0]
+
+ # Ensure the first positional argument is a list with as many
+ # elements as we had users.
+ first_pos_call_args = pos_call_args[0]
+ self.assertIsInstance(first_pos_call_args, list)
+ self.assertEqual(len(users), len(first_pos_call_args))
+
+ def test_notify_other_user(self):
+ other_user = self.env.ref("base.user_demo")
+ other_user_model = self.env["res.users"].with_user(other_user)
+ with self.assertRaises(exceptions.UserError):
+ 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(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 0000000..65bc72a
--- /dev/null
+++ b/web_notify/views/res_users_demo.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Copyright 2018 Aitor Bouzas <aitor.bouzas@adaptivecity.com>
+ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
+<odoo>
+ <record id="view_users_form_simple_modif_inherit" model="ir.ui.view">
+ <field name="name">res.users.form.simple.view.modif.inherit</field>
+ <field name="model">res.users</field>
+ <field name="inherit_id" ref="base.view_users_form" />
+ <field name="arch" type="xml">
+ <xpath expr="//notebook/page[1]" position="after">
+ <page string="Test web notify" name="test_web_notify">
+ <group>
+ <group>
+ <button
+ name="notify_success"
+ type="object"
+ string="Test success notification"
+ class="oe_highlight"
+ />
+ </group>
+ <group>
+ <button
+ name="notify_danger"
+ type="object"
+ string="Test danger notification"
+ class="oe_highlight"
+ />
+ </group>
+ <group>
+ <button
+ name="notify_warning"
+ type="object"
+ string="Test warning notification"
+ class="oe_highlight"
+ />
+ </group>
+ <group>
+ <button
+ name="notify_info"
+ type="object"
+ string="Test info notification"
+ class="oe_highlight"
+ />
+ </group>
+ <group>
+ <button
+ name="notify_default"
+ type="object"
+ string="Test default notification"
+ class="oe_highlight"
+ />
+ </group>
+ </group>
+ </page>
+ </xpath>
+ </field>
+ </record>
+</odoo>
diff --git a/web_notify/views/web_notify.xml b/web_notify/views/web_notify.xml
new file mode 100644
index 0000000..70fca12
--- /dev/null
+++ b/web_notify/views/web_notify.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+ <template
+ id="assets_backend"
+ name="web_notify assets"
+ inherit_id="web.assets_backend"
+ >
+ <link
+ rel="stylesheet"
+ type="text/scss"
+ href="/web/static/src/scss/webclient.scss"
+ position="after"
+ >
+ <link
+ rel="stylesheet"
+ type="text/scss"
+ href="/web_notify/static/src/scss/webclient.scss"
+ />
+ </link>
+ <xpath expr="." position="inside">
+ <script
+ type="text/javascript"
+ src="/web_notify/static/src/js/web_client.js"
+ />
+ <script
+ type="text/javascript"
+ src="/web_notify/static/src/js/widgets/notification.js"
+ />
+ </xpath>
+ </template>
+</odoo>