You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
4.5 KiB
127 lines
4.5 KiB
# Copyright 2017-2018 Camptocamp - Simone Orsi
|
|
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
|
|
|
from odoo import models, fields, api
|
|
|
|
|
|
class Users(models.Model):
|
|
_name = 'res.users'
|
|
_inherit = ['res.users']
|
|
|
|
def __init__(self, pool, cr):
|
|
""" Override of __init__ to add access rights.
|
|
|
|
Access rights are disabled by default, but allowed
|
|
on some specific fields defined in self.SELF_{READ/WRITE}ABLE_FIELDS.
|
|
|
|
[copied from mail.models.users]
|
|
"""
|
|
super(Users, self).__init__(pool, cr)
|
|
new_fields = [
|
|
'digest_mode',
|
|
'digest_frequency',
|
|
'notify_conf_ids',
|
|
]
|
|
# duplicate list to avoid modifying the original reference
|
|
type(self).SELF_WRITEABLE_FIELDS = list(self.SELF_WRITEABLE_FIELDS)
|
|
type(self).SELF_WRITEABLE_FIELDS.extend(new_fields)
|
|
# duplicate list to avoid modifying the original reference
|
|
type(self).SELF_READABLE_FIELDS = list(self.SELF_READABLE_FIELDS)
|
|
type(self).SELF_READABLE_FIELDS.extend(new_fields)
|
|
|
|
digest_mode = fields.Boolean(
|
|
default=False,
|
|
help='If enabled, email notifications will be sent in digest mode.'
|
|
)
|
|
digest_frequency = fields.Selection(
|
|
string='Frequency',
|
|
selection=[
|
|
('daily', 'Daily'),
|
|
('weekly', 'Weekly')
|
|
],
|
|
default='weekly',
|
|
required=True,
|
|
)
|
|
notify_conf_ids = fields.One2many(
|
|
string='Notifications',
|
|
inverse_name='user_id',
|
|
comodel_name='user.notification.conf',
|
|
)
|
|
enabled_notify_subtype_ids = fields.Many2many(
|
|
string='User enabled subtypes',
|
|
comodel_name='mail.message.subtype',
|
|
compute='_compute_notify_subtype_ids',
|
|
search='_search_enabled_notify_subtype_ids',
|
|
)
|
|
disabled_notify_subtype_ids = fields.Many2many(
|
|
string='User disabled subtypes',
|
|
comodel_name='mail.message.subtype',
|
|
compute='_compute_notify_subtype_ids',
|
|
search='_search_disabled_notify_subtype_ids',
|
|
)
|
|
|
|
def _notify_subtypes_by_state(self, enabled):
|
|
self.ensure_one()
|
|
return self.notify_conf_ids.filtered(
|
|
lambda x: x.enabled == enabled).mapped('subtype_id')
|
|
|
|
@api.multi
|
|
@api.depends('notify_conf_ids.subtype_id', 'notify_conf_ids.enabled')
|
|
def _compute_notify_subtype_ids(self):
|
|
for rec in self:
|
|
rec.enabled_notify_subtype_ids = \
|
|
rec._notify_subtypes_by_state(True)
|
|
rec.disabled_notify_subtype_ids = \
|
|
rec._notify_subtypes_by_state(False)
|
|
|
|
def _search_notify_subtype_ids_domain(self, operator, value, enabled):
|
|
"""Build domain to search notification subtypes by user conf."""
|
|
if operator in ('in', 'not in') and \
|
|
not isinstance(value, (tuple, list)):
|
|
value = [value, ]
|
|
conf_value = value
|
|
if isinstance(conf_value, int):
|
|
# we search conf records always w/ 'in'
|
|
conf_value = [conf_value]
|
|
_value = self.env['user.notification.conf'].search([
|
|
('subtype_id', 'in', conf_value),
|
|
('enabled', '=', enabled),
|
|
]).mapped('user_id').ids
|
|
return [('id', operator, _value)]
|
|
|
|
def _search_enabled_notify_subtype_ids(self, operator, value):
|
|
return self._search_notify_subtype_ids_domain(operator, value, True)
|
|
|
|
def _search_disabled_notify_subtype_ids(self, operator, value):
|
|
return self._search_notify_subtype_ids_domain(operator, value, False)
|
|
|
|
def _notify_update_subtype(self, subtype, enable):
|
|
"""Update notification settings by subtype.
|
|
|
|
:param subtype: `mail.message.subtype` to enable or disable
|
|
:param enable: boolean to enable or disable given subtype
|
|
"""
|
|
self.ensure_one()
|
|
exists = self.env['user.notification.conf'].search([
|
|
('subtype_id', '=', subtype.id),
|
|
('user_id', '=', self.id)
|
|
], limit=1)
|
|
if exists:
|
|
exists.enabled = enable
|
|
else:
|
|
self.write({
|
|
'notify_conf_ids': [
|
|
(0, 0, {'enabled': enable, 'subtype_id': subtype.id})]
|
|
})
|
|
|
|
@api.multi
|
|
def _notify_enable_subtype(self, subtype):
|
|
"""Enable given subtype."""
|
|
for rec in self:
|
|
rec._notify_update_subtype(subtype, True)
|
|
|
|
@api.multi
|
|
def _notify_disable_subtype(self, subtype):
|
|
"""Disable given subtype."""
|
|
for rec in self:
|
|
rec._notify_update_subtype(subtype, False)
|