From be8aa967f012c217fa15ffa35460a180af404a4c Mon Sep 17 00:00:00 2001 From: Raf Ven Date: Thu, 3 Jun 2021 09:04:16 +0000 Subject: [PATCH] [IMP] base: merge activities of merged partners When merging partners through the ``base.partner.merge.automatic.wizard`` wizard, messages and followers are merged. However activities are not probably because its underlying model is "newer" then messages and followers. This commits fixes that behavior. Task-2641572 PR odoo#76159 Closes #71654 X-original-commit: 7e17678ec6ebbbe37b807a5d264cc5afd46bae1a Part-of: odoo/odoo#77005 Co-authored-by: Thibault Delavallee --- addons/mail/tests/test_res_partner.py | 46 +++++++++++++++++++ odoo/addons/base/wizard/base_partner_merge.py | 1 + 2 files changed, 47 insertions(+) diff --git a/addons/mail/tests/test_res_partner.py b/addons/mail/tests/test_res_partner.py index 8032b9d9714..be9784d0717 100644 --- a/addons/mail/tests/test_res_partner.py +++ b/addons/mail/tests/test_res_partner.py @@ -2,6 +2,8 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo.addons.mail.tests.common import MailCommon +from odoo.tests.common import Form, users + # samples use effective TLDs from the Mozilla public suffix # list at http://publicsuffix.org @@ -123,3 +125,47 @@ class TestPartner(MailCommon): new_msg = new_user.message_ids[0] self.assertIn('Portal Access Granted', new_msg.body) self.assertEqual(new_msg.subtype_id, subtype_note) + + @users('admin') + def test_res_partner_merge_wizards(self): + Partner = self.env['res.partner'] + + p1 = Partner.create({'name': 'Customer1', 'email': 'test1@test.example.com'}) + p1_msg_ids_init = p1.message_ids + p2 = Partner.create({'name': 'Customer2', 'email': 'test2@test.example.com'}) + p2_msg_ids_init = p2.message_ids + p3 = Partner.create({'name': 'Other (dup email)', 'email': 'test1@test.example.com'}) + + # add some mail related documents + p1.message_subscribe(partner_ids=p3.ids) + p1_act1 = p1.activity_schedule(act_type_xmlid='mail.mail_activity_data_todo') + p1_msg1 = p1.message_post( + body='

Log on P1

', + subtype_id=self.env.ref('mail.mt_comment').id + ) + self.assertEqual(p1.activity_ids, p1_act1) + self.assertEqual(p1.message_follower_ids.partner_id, self.partner_admin + p3) + self.assertEqual(p1.message_ids, p1_msg_ids_init + p1_msg1) + self.assertEqual(p2.activity_ids, self.env['mail.activity']) + self.assertEqual(p2.message_follower_ids.partner_id, self.partner_admin) + self.assertEqual(p2.message_ids, p2_msg_ids_init) + + MergeForm = Form(self.env['base.partner.merge.automatic.wizard'].with_context( + active_model='res.partner', + active_ids=(p1 + p2).ids + )) + self.assertEqual(MergeForm.partner_ids[:], p1 + p2) + self.assertEqual(MergeForm.dst_partner_id, p2) + merge_form = MergeForm.save() + merge_form.action_merge() + + # check destination and removal + self.assertFalse(p1.exists()) + self.assertTrue(p2.exists()) + # check mail documents have been moved + self.assertEqual(p2.activity_ids, p1_act1) + # TDE note: currently not working as soon as there is a single partner duplicated -> should be improved + # self.assertEqual(p2.message_follower_ids.partner_id, self.partner_admin + p3) + all_msg = p2_msg_ids_init + p1_msg_ids_init + p1_msg1 + self.assertEqual(len(p2.message_ids), len(all_msg) + 1, 'Should have original messages + a log') + self.assertTrue(all(msg in p2.message_ids for msg in all_msg)) diff --git a/odoo/addons/base/wizard/base_partner_merge.py b/odoo/addons/base/wizard/base_partner_merge.py index d862d35b532..cc55e20a164 100644 --- a/odoo/addons/base/wizard/base_partner_merge.py +++ b/odoo/addons/base/wizard/base_partner_merge.py @@ -204,6 +204,7 @@ class MergePartnerAutomatic(models.TransientModel): update_records('calendar', src=partner, field_model='model_id.model') update_records('ir.attachment', src=partner, field_model='res_model') update_records('mail.followers', src=partner, field_model='res_model') + update_records('mail.activity', src=partner, field_model='res_model') update_records('mail.message', src=partner) update_records('ir.model.data', src=partner)