diff --git a/addons/calendar/models/res_partner.py b/addons/calendar/models/res_partner.py index 9ed019d7fd4..d86878f9103 100644 --- a/addons/calendar/models/res_partner.py +++ b/addons/calendar/models/res_partner.py @@ -41,18 +41,18 @@ class Partner(models.Model): meeting_data = self.env.cr.fetchall() # Create a dict {partner_id: event_ids} and fill with events linked to the partner - meetings = {p.id: set() for p in all_partners} - for m in meeting_data: - meetings[m[0]].add(m[1]) + meetings = {} + for p_id, m_id, _ in meeting_data: + meetings.setdefault(p_id, set()).add(m_id) # Add the events linked to the children of the partner - for p in all_partners: + for p in self.browse(meetings.keys()): partner = p - while partner: - if partner in self: - meetings[partner.id] |= meetings[p.id] + while partner.parent_id: partner = partner.parent_id - return {p_id: list(meetings[p_id]) for p_id in self.ids} + if partner in self: + meetings[partner.id] = meetings.get(partner.id, set()) | meetings[p.id] + return {p_id: list(meetings.get(p_id, set())) for p_id in self.ids} return {} def get_attendee_detail(self, meeting_ids): diff --git a/addons/calendar/tests/test_res_partner.py b/addons/calendar/tests/test_res_partner.py index 3e20cb8f0b8..fd293a71c38 100644 --- a/addons/calendar/tests/test_res_partner.py +++ b/addons/calendar/tests/test_res_partner.py @@ -24,6 +24,8 @@ class TestResPartner(TransactionCase): test_partner_3 = Partner.create({'name': 'test_partner_3', 'parent_id': test_partner_1.id}) test_partner_4 = Partner.create({'name': 'test_partner_4', 'parent_id': test_partner_3.id}) test_partner_5 = Partner.create({'name': 'test_partner_5'}) + test_partner_6 = Partner.create({'name': 'test_partner_6'}) + test_partner_7 = Partner.create({'name': 'test_partner_7', 'parent_id': test_partner_6.id}) Event.create({'name': 'event_1', 'partner_ids': [(6, 0, [test_partner_1.id, @@ -48,7 +50,8 @@ class TestResPartner(TransactionCase): Event.create({'name': 'event_7', 'partner_ids': [(6, 0, [test_partner_5.id])]}) Event.create({'name': 'event_8', - 'partner_ids': [(6, 0, [test_partner_5.id])]}) + 'partner_ids': [(6, 0, [test_partner_5.id, + test_partner_7.id])]}) #Test rule to see if ir.rules are applied calendar_event_model_id = self.env['ir.model']._get('calendar.event').id @@ -71,3 +74,5 @@ class TestResPartner(TransactionCase): self.assertEqual(test_partner_3.meeting_count, 6) self.assertEqual(test_partner_4.meeting_count, 3) self.assertEqual(test_partner_5.meeting_count, 2) + self.assertEqual(test_partner_6.meeting_count, 1) + self.assertEqual(test_partner_7.meeting_count, 1)