diff --git a/addons/calendar/models/calendar.py b/addons/calendar/models/calendar.py index 7e5ee7c18f8..2fe06683269 100644 --- a/addons/calendar/models/calendar.py +++ b/addons/calendar/models/calendar.py @@ -1396,13 +1396,14 @@ class Meeting(models.Model): return super(Meeting, self.browse(thread_id)).message_post(**kwargs) @api.multi - def message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None, force=True): + def message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None): records = self.browse(get_real_ids(self.ids)) - return super(Meeting, records).message_subscribe( - partner_ids=partner_ids, - channel_ids=channel_ids, - subtype_ids=subtype_ids, - force=force) + return super(Meeting, records).message_subscribe(partner_ids=partner_ids, channel_ids=channel_ids, subtype_ids=subtype_ids) + + @api.multi + def _message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None, customer_ids=None): + records = self.browse(get_real_ids(self.ids)) + return super(Meeting, records)._message_subscribe(partner_ids=partner_ids, channel_ids=channel_ids, subtype_ids=subtype_ids, customer_ids=customer_ids) @api.multi def message_unsubscribe(self, partner_ids=None, channel_ids=None): diff --git a/addons/crm/tests/test_new_lead_notification.py b/addons/crm/tests/test_new_lead_notification.py index 20f958e25c7..7c9b6d151a3 100644 --- a/addons/crm/tests/test_new_lead_notification.py +++ b/addons/crm/tests/test_new_lead_notification.py @@ -17,8 +17,7 @@ class NewLeadNotification(TestCrmCases): }) subtype = self.env.ref("crm.mt_salesteam_lead") - sales_team_1.message_subscribe(partner_ids=[self.crm_salesman.partner_id.id], subtype_ids=[subtype.id]) - sales_team_1.message_subscribe(channel_ids=[channel_listen.id], subtype_ids=[subtype.id]) + sales_team_1.message_subscribe(partner_ids=[self.crm_salesman.partner_id.id], channel_ids=[channel_listen.id], subtype_ids=[subtype.id]) # Imitate what happens in the controller when somebody creates a new # lead from the website form diff --git a/addons/hr/models/hr.py b/addons/hr/models/hr.py index 60fa38e7b14..eeec14e12cf 100644 --- a/addons/hr/models/hr.py +++ b/addons/hr/models/hr.py @@ -286,7 +286,7 @@ class Department(models.Model): department = super(Department, self.with_context(mail_create_nosubscribe=True)).create(vals) manager = self.env['hr.employee'].browse(vals.get("manager_id")) if manager.user_id: - department.message_subscribe_users(user_ids=manager.user_id.ids) + department.message_subscribe(partner_ids=manager.user_id.partner_id.ids) return department @api.multi @@ -303,7 +303,7 @@ class Department(models.Model): manager = self.env['hr.employee'].browse(manager_id) # subscribe the manager user if manager.user_id: - self.message_subscribe_users(user_ids=manager.user_id.ids) + self.message_subscribe(partner_ids=manager.user_id.partner_id.ids) # set the employees's parent to the new manager self._update_employee_manager(manager_id) return super(Department, self).write(vals) diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py index f021eb4d10f..5519ca8a888 100644 --- a/addons/hr_expense/models/hr_expense.py +++ b/addons/hr_expense/models/hr_expense.py @@ -574,7 +574,7 @@ class HrExpenseSheet(models.Model): def _add_followers(self): users = self._get_users_to_subscribe() - self.message_subscribe_users(user_ids=users.ids) + self.message_subscribe(partner_ids=users.mapped('partner_id').ids) @api.model def _create_set_followers(self, values): diff --git a/addons/hr_holidays/models/hr_leave.py b/addons/hr_holidays/models/hr_leave.py index 03c90176363..5a79fef7c54 100644 --- a/addons/hr_holidays/models/hr_leave.py +++ b/addons/hr_holidays/models/hr_leave.py @@ -223,7 +223,7 @@ class HolidaysRequest(models.Model): def add_follower(self, employee_id): employee = self.env['hr.employee'].browse(employee_id) if employee.user_id: - self.message_subscribe_users(user_ids=employee.user_id.ids) + self.message_subscribe(partner_ids=employee.user_id.partner_id.ids) @api.multi @api.constrains('holiday_status_id') diff --git a/addons/hr_holidays/models/hr_leave_allocation.py b/addons/hr_holidays/models/hr_leave_allocation.py index fd98213e091..45b0057d889 100644 --- a/addons/hr_holidays/models/hr_leave_allocation.py +++ b/addons/hr_holidays/models/hr_leave_allocation.py @@ -124,7 +124,7 @@ class HolidaysAllocation(models.Model): def add_follower(self, employee_id): employee = self.env['hr.employee'].browse(employee_id) if employee.user_id: - self.message_subscribe_users(user_ids=employee.user_id.ids) + self.message_subscribe(partner_ids=employee.user_id.partner_id.ids) @api.multi @api.constrains('holiday_status_id') diff --git a/addons/hr_maintenance/models/equipment.py b/addons/hr_maintenance/models/equipment.py index 717275d89a9..ebfa6eb03fe 100644 --- a/addons/hr_maintenance/models/equipment.py +++ b/addons/hr_maintenance/models/equipment.py @@ -36,29 +36,29 @@ class MaintenanceEquipment(models.Model): def create(self, vals): equipment = super(MaintenanceEquipment, self).create(vals) # subscribe employee or department manager when equipment assign to him. - user_ids = [] + partner_ids = [] if equipment.employee_id and equipment.employee_id.user_id: - user_ids.append(equipment.employee_id.user_id.id) + partner_ids.append(equipment.employee_id.user_id.partner_id.id) if equipment.department_id and equipment.department_id.manager_id and equipment.department_id.manager_id.user_id: - user_ids.append(equipment.department_id.manager_id.user_id.id) - if user_ids: - equipment.message_subscribe_users(user_ids=user_ids) + partner_ids.append(equipment.department_id.manager_id.user_id.partner_id.id) + if partner_ids: + equipment.message_subscribe(partner_ids=partner_ids) return equipment @api.multi def write(self, vals): - user_ids = [] + partner_ids = [] # subscribe employee or department manager when equipment assign to employee or department. if vals.get('employee_id'): user_id = self.env['hr.employee'].browse(vals['employee_id'])['user_id'] if user_id: - user_ids.append(user_id.id) + partner_ids.append(user_id.partner_id.id) if vals.get('department_id'): department = self.env['hr.department'].browse(vals['department_id']) if department and department.manager_id and department.manager_id.user_id: - user_ids.append(department.manager_id.user_id.id) - if user_ids: - self.message_subscribe_users(user_ids=user_ids) + partner_ids.append(department.manager_id.user_id.partner_id.id) + if partner_ids: + self.message_subscribe(partner_ids=partner_ids) return super(MaintenanceEquipment, self).write(vals) @api.multi @@ -105,7 +105,7 @@ class MaintenanceRequest(models.Model): def create(self, vals): result = super(MaintenanceRequest, self).create(vals) if result.employee_id.user_id: - result.message_subscribe_users(user_ids=[result.employee_id.user_id.id]) + result.message_subscribe(partner_ids=[result.employee_id.user_id.partner_id.id]) return result @api.multi @@ -113,7 +113,7 @@ class MaintenanceRequest(models.Model): if vals.get('employee_id'): employee = self.env['hr.employee'].browse(vals['employee_id']) if employee and employee.user_id: - self.message_subscribe_users(user_ids=[employee.user_id.id]) + self.message_subscribe(partner_ids=[employee.user_id.partner_id.id]) return super(MaintenanceRequest, self).write(vals) @api.model diff --git a/addons/mail/models/ir_actions.py b/addons/mail/models/ir_actions.py index a8faa2703b8..bd4b03f3a4c 100644 --- a/addons/mail/models/ir_actions.py +++ b/addons/mail/models/ir_actions.py @@ -40,7 +40,7 @@ class ServerActions(models.Model): Model = self.env[action.model_id.model] if self.partner_ids or self.channel_ids and hasattr(Model, 'message_subscribe'): records = Model.browse(self._context.get('active_ids', self._context.get('active_id'))) - records.message_subscribe(self.partner_ids.ids, self.channel_ids.ids, force=False) + records.message_subscribe(self.partner_ids.ids, self.channel_ids.ids) return False @api.model diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index d58b6d7dd33..6891e016ced 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -1849,7 +1849,7 @@ class MailThread(models.AbstractModel): partner_to_subscribe = partner_ids if self._context.get('mail_post_autofollow_partner_ids'): partner_to_subscribe = [p for p in partner_ids if p in self._context.get('mail_post_autofollow_partner_ids')] - self.message_subscribe(list(partner_to_subscribe), force=False) + self.message_subscribe(list(partner_to_subscribe)) # _mail_flat_thread: automatically set free messages to the first posted message MailMessage = self.env['mail.message'] @@ -1908,7 +1908,7 @@ class MailThread(models.AbstractModel): # Post-process: subscribe author if values['author_id'] and values['model'] and self.ids and values['message_type'] != 'notification' and not self._context.get('mail_create_nosubscribe'): - self.message_subscribe([values['author_id']], force=False) + self._message_subscribe([values['author_id']]) @api.multi def message_post_with_view(self, views_or_xmlid, **kwargs): @@ -2034,26 +2034,18 @@ class MailThread(models.AbstractModel): # ------------------------------------------------------ @api.multi - def message_subscribe_users(self, user_ids=None, subtype_ids=None): - """ Wrapper on message_subscribe, using users. If user_ids is not - provided, subscribe uid instead. """ - if user_ids is None: - user_ids = [self._uid] - return self.message_subscribe(self.env['res.users'].browse(user_ids).mapped('partner_id').ids, subtype_ids=subtype_ids) - - @api.multi - def message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None, force=True): - """ Add partners to the records followers. """ - # not necessary for computation, but saves an access right check - if not partner_ids and not channel_ids: + def message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None): + """ Main public API to add followers to a record set. Its main purpose is + to perform access rights checks before calling ``_message_subscribe``. """ + if not self or (not partner_ids and not channel_ids): return True - if partner_ids is None: - partner_ids = [] - if channel_ids is None: - channel_ids = [] - # TDE CHECK THIS - if not channel_ids and partner_ids and set(partner_ids) == set([self.env.user.partner_id.id]): + partner_ids = partner_ids or [] + channel_ids = channel_ids or [] + adding_current = set(partner_ids) == set([self.env.user.partner_id.id]) + customer_ids = [] if adding_current else None + + if not channel_ids and partner_ids and adding_current: try: self.check_access_rights('read') self.check_access_rule('read') @@ -2063,25 +2055,38 @@ class MailThread(models.AbstractModel): self.check_access_rights('write') self.check_access_rule('write') - partner_data = dict((pid, subtype_ids) for pid in partner_ids) - channel_data = dict((cid, subtype_ids) for cid in channel_ids) - gen, part = self.env['mail.followers']._add_follower_command(self._name, self.ids, partner_data, channel_data, force=force) - self.sudo().write({'message_follower_ids': gen}) - for record in self.filtered(lambda self: self.id in part): - record.write({'message_follower_ids': part[record.id]}) + return self._message_subscribe(partner_ids, channel_ids, subtype_ids, customer_ids=customer_ids) + + def _message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None, customer_ids=None): + """ Main private API to add followers to a record set. This method adds + partners and channels, given their IDs, as followers of all records + contained in the record set. + + If subtypes are given existing followers are erased with new subtypes. + If default one have to be computed only missing followers will be added + with default subtypes matching the record set model. + + This private method does not specifically check for access right. Use + ``message_subscribe`` public API when not sure about access rights. + + :param customer_ids: see ``_insert_followers`` """ + if not self: + return True + + if not subtype_ids: + self.env['mail.followers']._insert_followers( + self._name, self.ids, partner_ids, None, channel_ids, None, + customer_ids=customer_ids) + else: + self.env['mail.followers']._insert_followers( + self._name, self.ids, + partner_ids, dict((pid, subtype_ids) for pid in partner_ids), + channel_ids, dict((cid, subtype_ids) for cid in channel_ids), + customer_ids=customer_ids, check_existing=True, existing_policy='force') self.invalidate_cache() return True - @api.multi - def message_unsubscribe_users(self, user_ids=None): - """ Wrapper on message_subscribe, using users. If user_ids is not - provided, unsubscribe uid instead. """ - if user_ids is None: - user_ids = [self._uid] - partner_ids = [user.partner_id.id for user in self.env['res.users'].browse(user_ids)] - return self.message_unsubscribe(partner_ids) - @api.multi def message_unsubscribe(self, partner_ids=None, channel_ids=None): """ Remove partners from the records followers. """ @@ -2224,10 +2229,10 @@ class MailThread(models.AbstractModel): for pid, subtypes in new_partners.items(): subtypes = list(subtypes) if subtypes is not None else None - self.message_subscribe(partner_ids=[pid], subtype_ids=subtypes, force=(subtypes != None)) + self.message_subscribe(partner_ids=[pid], subtype_ids=subtypes) for cid, subtypes in new_channels.items(): subtypes = list(subtypes) if subtypes is not None else None - self.message_subscribe(channel_ids=[cid], subtype_ids=subtypes, force=(subtypes != None)) + self.message_subscribe(channel_ids=[cid], subtype_ids=subtypes) # remove the current user from the needaction partner to avoid to notify the author of the message user_pids = [user.partner_id.id for user in to_add_users if user != self.env.user] diff --git a/addons/maintenance/models/maintenance.py b/addons/maintenance/models/maintenance.py index e324123595f..6f4e02b4814 100644 --- a/addons/maintenance/models/maintenance.py +++ b/addons/maintenance/models/maintenance.py @@ -208,13 +208,13 @@ class MaintenanceEquipment(models.Model): def create(self, vals): equipment = super(MaintenanceEquipment, self).create(vals) if equipment.owner_user_id: - equipment.message_subscribe_users(user_ids=[equipment.owner_user_id.id]) + equipment.message_subscribe(partner_ids=[equipment.owner_user_id.partner_id.id]) return equipment @api.multi def write(self, vals): if vals.get('owner_user_id'): - self.message_subscribe_users(user_ids=[vals['owner_user_id']]) + self.message_subscribe(partner_ids=self.env['res.users'].browse(vals['owner_user_id']).partner_id.ids) return super(MaintenanceEquipment, self).write(vals) @api.model @@ -377,8 +377,8 @@ class MaintenanceRequest(models.Model): def _add_followers(self): for request in self: - user_ids = (request.owner_user_id + request.technician_user_id).ids - request.message_subscribe_users(user_ids=user_ids) + partner_ids = (request.owner_user_id.partner_id + request.technician_user_id.partner_id).ids + request.message_subscribe(partner_ids=partner_ids) @api.model def _read_group_stage_ids(self, stages, domain, order): diff --git a/addons/project/models/project.py b/addons/project/models/project.py index e46bbd11a82..f0e6a3394ac 100644 --- a/addons/project/models/project.py +++ b/addons/project/models/project.py @@ -358,16 +358,14 @@ class Project(models.Model): return super(Project, self).get_access_action(access_uid) @api.multi - def message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None, force=True): + def message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None): """ Subscribe to all existing active tasks when subscribing to a project """ - res = super(Project, self).message_subscribe(partner_ids=partner_ids, channel_ids=channel_ids, subtype_ids=subtype_ids, force=force) - if not subtype_ids or any(subtype.parent_id.res_model == 'project.task' for subtype in self.env['mail.message.subtype'].browse(subtype_ids)): - for partner_id in partner_ids or []: - self.mapped('tasks').filtered(lambda task: not task.stage_id.fold and partner_id not in task.message_partner_ids.ids).message_subscribe( - partner_ids=[partner_id], channel_ids=None, subtype_ids=None, force=False) - for channel_id in channel_ids or []: - self.mapped('tasks').filtered(lambda task: not task.stage_id.fold and channel_id not in task.message_channel_ids.ids).message_subscribe( - partner_ids=None, channel_ids=[channel_id], subtype_ids=None, force=False) + res = super(Project, self).message_subscribe(partner_ids=partner_ids, channel_ids=channel_ids, subtype_ids=subtype_ids) + project_subtypes = self.env['mail.message.subtype'].browse(subtype_ids) if subtype_ids else None + task_subtypes = project_subtypes.mapped('parent_id').ids if project_subtypes else None + if not subtype_ids or task_subtypes: + self.mapped('tasks').message_subscribe( + partner_ids=partner_ids, channel_ids=channel_ids, subtype_ids=task_subtypes) return res @api.multi diff --git a/addons/project/tests/test_access_rights.py b/addons/project/tests/test_access_rights.py index 0016a71f71f..fe184147492 100644 --- a/addons/project/tests/test_access_rights.py +++ b/addons/project/tests/test_access_rights.py @@ -79,7 +79,7 @@ class TestPortalProject(TestPortalProjectBase): # Do: Donovan reads project -> ko (public ko employee) self.assertRaises(AccessError, pigs.sudo(self.user_public).read, ['user_id']) - pigs.message_subscribe_users(user_ids=[self.user_projectuser.id]) + pigs.message_subscribe(partner_ids=[self.user_projectuser.partner_id.id]) # Do: Alfred reads project -> ok (follower ok followers) prout = pigs.sudo(self.user_projectuser) @@ -93,7 +93,7 @@ class TestPortalProject(TestPortalProjectBase): 'name': 'Pigs task', 'project_id': pigs.id }) # not follower user should not be able to create a task - pigs.sudo(self.user_projectuser).message_unsubscribe_users(user_ids=[self.user_projectuser.id]) + pigs.sudo(self.user_projectuser).message_unsubscribe(partner_ids=[self.user_projectuser.partner_id.id]) self.assertRaises(AccessError, self.env['project.task'].sudo(self.user_projectuser).with_context({ 'mail_create_nolog': True}).create, {'name': 'Pigs task', 'project_id': pigs.id}) diff --git a/addons/project/tests/test_portal.py b/addons/project/tests/test_portal.py index 6413488da2e..ba18b5a5a16 100644 --- a/addons/project/tests/test_portal.py +++ b/addons/project/tests/test_portal.py @@ -25,9 +25,9 @@ class TestPortalProject(TestPortalProjectBase): self.assertRaises(AccessError, self.env['project.task'].sudo(self.user_noone).search, [('project_id', '=', pigs.id)]) # Data: task follower - pigs.sudo(self.user_projectmanager).message_subscribe_users(user_ids=[self.user_portal.id]) - self.task_1.sudo(self.user_projectuser).message_subscribe_users(user_ids=[self.user_portal.id]) - self.task_3.sudo(self.user_projectuser).message_subscribe_users(user_ids=[self.user_portal.id]) + pigs.sudo(self.user_projectmanager).message_subscribe(partner_ids=[self.user_portal.partner_id.id]) + self.task_1.sudo(self.user_projectuser).message_subscribe(partner_ids=[self.user_portal.partner_id.id]) + self.task_3.sudo(self.user_projectuser).message_subscribe(partner_ids=[self.user_portal.partner_id.id]) # Do: Chell reads project -> ok (portal ok public) pigs.sudo(self.user_portal).read(['user_id']) # Do: Donovan reads project -> ko (public ko portal) @@ -35,5 +35,5 @@ class TestPortalProject(TestPortalProjectBase): # Test: no access right to project.task self.assertRaises(AccessError, self.env['project.task'].sudo(self.user_public).search, []) # Data: task follower cleaning - self.task_1.sudo(self.user_projectuser).message_unsubscribe_users(user_ids=[self.user_portal.id]) - self.task_3.sudo(self.user_projectuser).message_unsubscribe_users(user_ids=[self.user_portal.id]) + self.task_1.sudo(self.user_projectuser).message_unsubscribe(partner_ids=[self.user_portal.partner_id.id]) + self.task_3.sudo(self.user_projectuser).message_unsubscribe(partner_ids=[self.user_portal.partner_id.id]) diff --git a/addons/test_mail/tests/test_mail_followers.py b/addons/test_mail/tests/test_mail_followers.py index 3d2600facce..20e94c288fd 100644 --- a/addons/test_mail/tests/test_mail_followers.py +++ b/addons/test_mail/tests/test_mail_followers.py @@ -26,7 +26,7 @@ class BaseFollowersTest(common.BaseFunctionalTest): test_record = self.test_record.sudo(self.user_employee) followed_before = test_record.search([('message_is_follower', '=', True)]) self.assertFalse(test_record.message_is_follower) - test_record.message_subscribe_users(user_ids=[self.user_employee.id]) + test_record.message_subscribe(partner_ids=[self.user_employee.partner_id.id]) followed_after = test_record.search([('message_is_follower', '=', True)]) self.assertTrue(test_record.message_is_follower) self.assertEqual(followed_before | test_record, followed_after) @@ -80,7 +80,7 @@ class BaseFollowersTest(common.BaseFunctionalTest): self.assertEqual(follower, test_record.message_follower_ids) self.assertEqual(follower.subtype_ids, self.mt_mg_nodef) - def test_followers_multiple_subscription(self): + def test_followers_multiple_subscription_force(self): test_record = self.test_record.sudo(self.user_employee) test_record.message_subscribe(partner_ids=[self.user_admin.partner_id.id], subtype_ids=[self.mt_mg_nodef.id]) @@ -102,7 +102,7 @@ class BaseFollowersTest(common.BaseFunctionalTest): self.assertEqual(test_record.message_follower_ids.subtype_ids, self.mt_mg_nodef | self.mt_al_nodef) # set new subtypes with force=False, meaning no rewriting of the subscription is done -> result should not change - test_record.message_subscribe(partner_ids=[self.user_admin.partner_id.id], force=False) + test_record.message_subscribe(partner_ids=[self.user_admin.partner_id.id]) self.assertEqual(test_record.message_partner_ids, self.user_admin.partner_id) self.assertEqual(test_record.message_channel_ids, self.env['mail.channel']) self.assertEqual(test_record.message_follower_ids.subtype_ids, self.mt_mg_nodef | self.mt_al_nodef) diff --git a/addons/test_mail/tests/test_message_compose.py b/addons/test_mail/tests/test_message_compose.py index 08b7760f3bd..517f0faeb1c 100644 --- a/addons/test_mail/tests/test_message_compose.py +++ b/addons/test_mail/tests/test_message_compose.py @@ -32,7 +32,7 @@ class TestMessagePost(BaseFunctionalTest, MockEmails, TestRecipients): _body, _body_alt, _subject = '
Test Body
', 'Test Body', 'Test Subject' # subscribe second employee to the group to test notifications - self.test_record.message_subscribe_users(user_ids=[self.user_admin.id]) + self.test_record.message_subscribe(partner_ids=[self.user_admin.partner_id.id]) msg = self.test_record.sudo(self.user_employee).message_post( body=_body, subject=_subject, @@ -61,7 +61,7 @@ class TestMessagePost(BaseFunctionalTest, MockEmails, TestRecipients): @mute_logger('odoo.addons.mail.models.mail_mail') def test_post_notifications_keep_emails(self): - self.test_record.message_subscribe_users(user_ids=[self.user_admin.id]) + self.test_record.message_subscribe(partner_ids=[self.user_admin.partner_id.id]) msg = self.test_record.sudo(self.user_employee).message_post( body='Test', subject='Test', diff --git a/addons/test_mail/tests/test_performance.py b/addons/test_mail/tests/test_performance.py index feca36fde86..8ac43339e4a 100644 --- a/addons/test_mail/tests/test_performance.py +++ b/addons/test_mail/tests/test_performance.py @@ -99,7 +99,7 @@ class TestMailPerformance(TransactionCase): @users('admin', 'emp') @warmup def test_create_mail_simple(self): - with self.assertQueryCount(admin=9, emp=9): # test_mail only: 9 - 9 + with self.assertQueryCount(admin=8, emp=8): # test_mail only: 8 - 8 self.env['mail.test.simple'].create({'name': 'Test'}) @users('admin', 'emp') @@ -160,7 +160,7 @@ class TestAdvMailPerformance(TransactionCase): 'default_res_model': 'mail.test.activity', }) - with self.assertQueryCount(admin=27, emp=33): # test_mail only: 26 - 32 + with self.assertQueryCount(admin=11, emp=15): # test_mail only: 11 - 15 activity = MailActivity.create({ 'summary': 'Test Activity', 'res_id': record.id, @@ -176,7 +176,7 @@ class TestAdvMailPerformance(TransactionCase): def test_adv_activity_mixin(self): record = self.env['mail.test.activity'].create({'name': 'Test'}) - with self.assertQueryCount(admin=27, emp=33): # test_mail only: 26 - 32 + with self.assertQueryCount(admin=11, emp=15): # test_mail only: 11 - 15 record.action_start('Test Start') record.write({'name': 'Dupe write'}) @@ -193,7 +193,7 @@ class TestAdvMailPerformance(TransactionCase): self.user_test.write({'notification_type': 'email'}) record = self.env['mail.test.track'].create({'name': 'Test'}) - with self.assertQueryCount(admin=88, emp=115): # test_mail only: 86 - 113 + with self.assertQueryCount(admin=86, emp=111): # test_mail only: 84 - 109 record.write({ 'user_id': self.user_test.id, }) @@ -203,7 +203,7 @@ class TestAdvMailPerformance(TransactionCase): def test_message_assignation_inbox(self): record = self.env['mail.test.track'].create({'name': 'Test'}) - with self.assertQueryCount(admin=48, emp=63): # test_mail only: 48 - 63 + with self.assertQueryCount(admin=47, emp=60): # com runbot 46 - 59 // test_mail only: 46 - 59 record.write({ 'user_id': self.user_test.id, }) @@ -223,7 +223,7 @@ class TestAdvMailPerformance(TransactionCase): def test_message_log_with_post(self): record = self.env['mail.test.simple'].create({'name': 'Test'}) - with self.assertQueryCount(admin=27, emp=38): # test_mail only: 27 - 38 + with self.assertQueryCount(admin=24, emp=34): # test_mail only: 24 - 34 record.message_post( body='Test message_post as log
', subtype='mail.mt_note', @@ -234,7 +234,7 @@ class TestAdvMailPerformance(TransactionCase): def test_message_post_no_notification(self): record = self.env['mail.test.simple'].create({'name': 'Test'}) - with self.assertQueryCount(admin=27, emp=38): # test_mail only: 27 - 38 + with self.assertQueryCount(admin=24, emp=34): # test_mail only: 24 - 34 record.message_post( body='Test Post Performances basic
', partner_ids=[], @@ -247,7 +247,7 @@ class TestAdvMailPerformance(TransactionCase): def test_message_post_one_email_notification(self): record = self.env['mail.test.simple'].create({'name': 'Test'}) - with self.assertQueryCount(admin=78, emp=105): # com runbot 76 - 103 // test_mail only: 76 - 103 + with self.assertQueryCount(admin=75, emp=101): # com runbot 73 - 99 // test_mail only: 73 - 99 record.message_post( body='Test Post Performances with an email ping
', partner_ids=self.customer.ids, @@ -259,7 +259,7 @@ class TestAdvMailPerformance(TransactionCase): def test_message_post_one_inbox_notification(self): record = self.env['mail.test.simple'].create({'name': 'Test'}) - with self.assertQueryCount(admin=40, emp=52): # com runbot 38 - 50 // test_mail only: 40 - 52 + with self.assertQueryCount(admin=37, emp=48): # com runbot 35 - 46 // test_mail only: 37 - 48 record.message_post( body='Test Post Performances with an inbox ping
', partner_ids=self.user_test.partner_id.ids, @@ -272,10 +272,10 @@ class TestAdvMailPerformance(TransactionCase): def test_message_subscribe_default(self): record = self.env['mail.test.simple'].create({'name': 'Test'}) - with self.assertQueryCount(admin=7, emp=8): # test_mail only: 7 - 8 + with self.assertQueryCount(admin=6, emp=6): # test_mail only: 6 - 6 record.message_subscribe(partner_ids=self.user_test.partner_id.ids) - with self.assertQueryCount(admin=19, emp=19): # test_mail only: 19 - 19 + with self.assertQueryCount(admin=3, emp=3): # test_mail only: 3 - 3 record.message_subscribe(partner_ids=self.user_test.partner_id.ids) @mute_logger('odoo.models.unlink') @@ -285,10 +285,10 @@ class TestAdvMailPerformance(TransactionCase): record = self.env['mail.test.simple'].create({'name': 'Test'}) subtype_ids = (self.env.ref('test_mail.st_mail_test_simple_external') | self.env.ref('mail.mt_comment')).ids - with self.assertQueryCount(admin=7, emp=8): # test_mail only: 7 - 8 + with self.assertQueryCount(admin=5, emp=5): # test_mail only: 5 - 5 record.message_subscribe(partner_ids=self.user_test.partner_id.ids, subtype_ids=subtype_ids) - with self.assertQueryCount(admin=19, emp=19): # test_mail only: 18 - 18 + with self.assertQueryCount(admin=14, emp=14): # test_mail only: 14 - 14 record.message_subscribe(partner_ids=self.user_test.partner_id.ids, subtype_ids=subtype_ids) @@ -424,35 +424,33 @@ class TestHeavyMailPerformance(TransactionCase): self.assertEqual(rec.message_channel_ids, self.env['mail.channel']) # subscribe new followers with forced given subtypes - with self.assertQueryCount(admin=20, emp=21): # test_mail only: 20 - 21 + with self.assertQueryCount(admin=16, emp=16): # test_mail only: 16 - 16 rec.message_subscribe( partner_ids=pids[:4], channel_ids=cids, - subtype_ids=subtype_ids, + subtype_ids=subtype_ids ) self.assertEqual(rec.message_partner_ids, self.env.user.partner_id | self.user_portal.partner_id | self.partners[:4]) self.assertEqual(rec.message_channel_ids, self.channel) # subscribe existing and new followers with force=False, meaning only some new followers will be added - with self.assertQueryCount(admin=11, emp=12): # test_mail only: 11 - 12 + with self.assertQueryCount(admin=8, emp=8): # test_mail only: 8 - 8 rec.message_subscribe( partner_ids=pids[:6], channel_ids=cids, - subtype_ids=None, - force=False, + subtype_ids=None ) self.assertEqual(rec.message_partner_ids, self.env.user.partner_id | self.user_portal.partner_id | self.partners[:6]) self.assertEqual(rec.message_channel_ids, self.channel) # subscribe existing and new followers with force=True, meaning all will have the same subtypes - with self.assertQueryCount(admin=48, emp=49): # test_mail only: 48 - 49 + with self.assertQueryCount(admin=42, emp=43): # test_mail only: 42 - 43 rec.message_subscribe( partner_ids=pids, channel_ids=cids, - subtype_ids=subtype_ids, - force=True, + subtype_ids=subtype_ids ) self.assertEqual(rec.message_partner_ids, self.env.user.partner_id | self.user_portal.partner_id | self.partners) @@ -471,7 +469,7 @@ class TestHeavyMailPerformance(TransactionCase): }) self.assertEqual(rec.message_partner_ids, self.partners | self.env.user.partner_id) - with self.assertQueryCount(admin=90, emp=119): # test_mail only: 88 - 117 + with self.assertQueryCount(admin=88, emp=115): # test_mail only: 86 - 113 rec.write({'user_id': self.user_portal.id}) self.assertEqual(rec.message_partner_ids, self.partners | self.env.user.partner_id | self.user_portal.partner_id) @@ -494,7 +492,7 @@ class TestHeavyMailPerformance(TransactionCase): customer_id = self.customer.id user_id = self.user_portal.id - with self.assertQueryCount(admin=318, emp=379): # com runbot: 318 - 378 // test_mail only: 311 - 372 + with self.assertQueryCount(admin=266, emp=317): #com runbot: 266 - 316 // test_mail only: 259 - 310 rec = self.env['mail.test.full'].create({ 'name': 'Test', 'umbrella_id': umbrella_id, @@ -523,7 +521,7 @@ class TestHeavyMailPerformance(TransactionCase): }) self.assertEqual(rec.message_partner_ids, self.user_portal.partner_id | self.env.user.partner_id) - with self.assertQueryCount(admin=227, emp=264): # test_mail only: 223 - 260 + with self.assertQueryCount(admin=178, emp=205): # test_mail only: 174 - 201 rec.write({ 'name': 'Test2', 'umbrella_id': self.umbrella.id, @@ -561,7 +559,7 @@ class TestHeavyMailPerformance(TransactionCase): }) self.assertEqual(rec.message_partner_ids, self.user_portal.partner_id | self.env.user.partner_id) - with self.assertQueryCount(admin=230, emp=268): # test_mail only: 225 - 264 + with self.assertQueryCount(admin=181, emp=210): # test_mail only: 176 - 205 rec.write({ 'name': 'Test2', 'umbrella_id': umbrella_id, @@ -595,7 +593,7 @@ class TestHeavyMailPerformance(TransactionCase): }) self.assertEqual(rec.message_partner_ids, self.partners | self.env.user.partner_id | self.user_portal.partner_id) - with self.assertQueryCount(admin=63, emp=90): # test_mail only: 61 - 88 + with self.assertQueryCount(admin=61, emp=86): # test_mail only: 59 - 84 rec.write({ 'name': 'Test2', 'customer_id': customer_id, diff --git a/addons/website_event_track/controllers/main.py b/addons/website_event_track/controllers/main.py index eaf17861741..ec7d6b806df 100644 --- a/addons/website_event_track/controllers/main.py +++ b/addons/website_event_track/controllers/main.py @@ -135,7 +135,7 @@ class WebsiteEventTrackController(http.Controller): 'description': escape(post['description']) }) if request.env.user != request.website.user_id: - track.sudo().message_subscribe_users(user_ids=request.env.user.ids) + track.sudo().message_subscribe(partner_ids=request.env.user.partner_id.ids) else: partner = request.env['res.partner'].sudo().search([('email', '=', post['email_from'])]) if partner: diff --git a/addons/website_slides/models/slides.py b/addons/website_slides/models/slides.py index d390570d448..410ef170ebb 100644 --- a/addons/website_slides/models/slides.py +++ b/addons/website_slides/models/slides.py @@ -392,7 +392,7 @@ class Slide(models.Model): if not self.user_has_groups('website.group_website_publisher'): values['website_published'] = False slide = super(Slide, self).create(values) - slide.channel_id.message_subscribe_users() + slide.channel_id.message_subscribe(partner_ids=self.env.user.partner_id.ids) slide._post_publication() return slide