social/mail_activity_team/models/mail_activity.py

66 lines
2.4 KiB
Python
Raw Normal View History

2018-11-27 09:35:55 +01:00
# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
2018-11-27 12:22:49 +01:00
from odoo import api, models, fields, _
from odoo.exceptions import ValidationError
2018-11-27 09:35:55 +01:00
class MailActivity(models.Model):
_inherit = "mail.activity"
2018-11-27 12:22:49 +01:00
def _get_default_team_id(self, user_id=None):
if not user_id:
user_id = self.env.uid
res_model = self.env.context.get('default_res_model')
model = self.env['ir.model'].search(
[('model', '=', res_model)], limit=1)
domain = [('member_ids', 'in', [user_id])]
2018-11-27 09:35:55 +01:00
if res_model:
domain.extend(['|', ('res_model_ids', '=', False),
('res_model_ids', 'in', model.ids)])
return self.env['mail.activity.team'].search(domain, limit=1)
2018-11-27 12:22:49 +01:00
team_id = fields.Many2one(
comodel_name='mail.activity.team',
default=lambda s: s._get_default_team_id(),
)
2018-11-27 09:35:55 +01:00
2018-11-27 12:22:49 +01:00
@api.onchange('user_id')
def _onchange_user_id(self):
2018-11-27 09:35:55 +01:00
res = {'domain': {'team_id': []}}
2018-11-27 12:22:49 +01:00
if not self.user_id:
return res
res['domain']['team_id'] = [
'|',
('res_model_ids', '=', False),
('res_model_ids', 'in', self.res_model_id.ids)]
if self.team_id and self.user_id in self.team_id.member_ids:
return res
self.team_id = self.with_context(
default_res_model=self.res_model_id.id).\
_get_default_team_id(user_id=self.user_id.id)
2018-11-27 09:35:55 +01:00
return res
2018-11-27 12:22:49 +01:00
@api.onchange('team_id')
def _onchange_team_id(self):
res = {'domain': {'user_id': []}}
if not self.team_id:
return res
res['domain']['user_id'] = [('id', 'in', self.team_id.member_ids.ids)]
if self.user_id not in self.team_id.member_ids:
if self.team_id.user_id:
self.user_id = self.team_id.user_id
elif len(self.team_id.member_ids) == 1:
self.user_id = self.team_id.member_ids
else:
self.user_id = self.env['res.users']
2018-11-27 12:22:49 +01:00
return res
@api.multi
@api.constrains('team_id', 'user_id')
def _check_team_and_user(self):
for activity in self:
if activity.team_id and activity.user_id and \
activity.user_id not in self.team_id.member_ids:
raise ValidationError(
_('The assigned user is not member of the team.'))