social/mail_activity_team/models/mail_activity_team.py

79 lines
2.7 KiB
Python

# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
class MailActivityTeam(models.Model):
_name = "mail.activity.team"
_description = 'Mail Activity Team'
@api.depends('res_model_ids', 'member_ids')
def _compute_missing_activities(self):
activity_model = self.env['mail.activity']
for team in self:
domain = [('team_id', '=', False)]
if team.member_ids:
domain.append(('user_id', 'in', team.member_ids.ids))
if team.res_model_ids:
domain.append(('res_model_id', 'in', team.res_model_ids.ids))
team.count_missing_activities = activity_model.search(
domain, count=True)
name = fields.Char(
string='Name',
required=True,
translate=True,
)
active = fields.Boolean(
string='Active',
default=True,
)
res_model_ids = fields.Many2many(
comodel_name='ir.model',
string='Used models',
domain=lambda self: [
('model', 'in',
[k for k in self.env.registry if issubclass(
type(self.env[k]), type(self.env['mail.activity.mixin']))
and self.env[k]._auto])
],
)
member_ids = fields.Many2many(
comodel_name='res.users',
relation='mail_activity_team_users_rel',
string="Team Members",
)
user_id = fields.Many2one(
comodel_name='res.users',
string='Team Leader',
)
count_missing_activities = fields.Integer(
string="Missing Activities",
compute='_compute_missing_activities',
default=0,
)
@api.onchange('member_ids')
def _onchange_member_ids(self):
if self.user_id and self.user_id not in self.member_ids:
self.user_id = False
@api.onchange('user_id')
def _onchange_user_id(self):
if self.user_id and self.user_id not in self.member_ids:
members_ids = self.member_ids.ids
members_ids.append(self.user_id.id)
self.member_ids = [(4, member) for member in members_ids]
def assign_team_to_unassigned_activities(self):
activity_model = self.env['mail.activity']
for team in self:
domain = [('team_id', '=', False)]
if team.member_ids:
domain.append(('user_id', 'in', team.member_ids.ids))
if team.res_model_ids:
domain.append(('res_model_id', 'in', team.res_model_ids.ids))
missing_activities = activity_model.search(domain)
for missing_activity in missing_activities:
missing_activity.write({'team_id': team.id})