diff options
Diffstat (limited to 'web_notify/models')
| -rw-r--r-- | web_notify/models/__init__.py | 4 | ||||
| -rw-r--r-- | web_notify/models/res_users.py | 73 |
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) |
