mirror of
https://github.com/bringout/oca-ocb-mail.git
synced 2026-04-23 22:22:08 +02:00
51 lines
2.1 KiB
Python
51 lines
2.1 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from collections import defaultdict
|
|
|
|
from odoo import Command, fields, models
|
|
|
|
|
|
class Im_LivechatExpertise(models.Model):
|
|
"""Expertise of Live Chat users."""
|
|
|
|
_name = "im_livechat.expertise"
|
|
_description = "Live Chat Expertise"
|
|
_order = "name"
|
|
|
|
name = fields.Char("Name", required=True, translate=True)
|
|
user_ids = fields.Many2many(
|
|
"res.users",
|
|
string="Operators",
|
|
compute="_compute_user_ids",
|
|
inverse="_inverse_user_ids",
|
|
store=False,
|
|
)
|
|
|
|
_name_unique = models.UniqueIndex("(name)")
|
|
|
|
def _compute_user_ids(self):
|
|
users_by_expertise = self._get_users_by_expertise()
|
|
for expertise in self:
|
|
expertise.user_ids = users_by_expertise[expertise]
|
|
|
|
def _inverse_user_ids(self):
|
|
users_by_expertise = self._get_users_by_expertise()
|
|
for expertise in self:
|
|
for user in expertise.user_ids - users_by_expertise[expertise]:
|
|
# sudo: res.users: livechat manager can add expertise on users
|
|
user.sudo().livechat_expertise_ids = [Command.link(expertise.id)]
|
|
for user in users_by_expertise[expertise] - expertise.user_ids:
|
|
# sudo: res.users: livechat manager can remove expertise on users
|
|
user.sudo().livechat_expertise_ids = [Command.unlink(expertise.id)]
|
|
|
|
def _get_users_by_expertise(self):
|
|
users_by_expertise = defaultdict(lambda: self.env["res.users"])
|
|
settings_domain = [("livechat_expertise_ids", "in", self.ids)]
|
|
# sudo: res.users.settings: livechat manager can read expertise on users
|
|
user_settings = self.env["res.users.settings"].sudo().search(settings_domain)
|
|
for user_setting in user_settings:
|
|
for expertise in user_setting.livechat_expertise_ids:
|
|
users_by_expertise[expertise] |= user_setting.user_id
|
|
for expertise, users in users_by_expertise.items():
|
|
users_by_expertise[expertise] = users.with_prefetch(user_settings.user_id.ids)
|
|
return users_by_expertise
|