[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 <tde@odoo.com>
This commit is contained in:
committed by
Thibault Delavallée
co-authored by
Thibault Delavallee
parent
1efeffd297
commit
be8aa967f0
@@ -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='<p>Log on P1</p>',
|
||||
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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user