summaryrefslogtreecommitdiff
path: root/web_notify/models
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-06-16 16:43:59 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-06-16 16:43:59 +0700
commitad3677ba03880180873f27ac18ba841b81b2db14 (patch)
tree27583b6e5e9c52286e2ceb2761e5c1e9fe0f5e47 /web_notify/models
parente6e43d9e597551be2f8a1bad3fe400b60c102361 (diff)
Add web_notify addons
Diffstat (limited to 'web_notify/models')
-rw-r--r--web_notify/models/__init__.py4
-rw-r--r--web_notify/models/res_users.py73
2 files changed, 77 insertions, 0 deletions
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)