79 lines
2.7 KiB
Python
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})
|