diff --git a/resource_booking/models/calendar_event.py b/resource_booking/models/calendar_event.py index 03a50258..12a4c7b2 100644 --- a/resource_booking/models/calendar_event.py +++ b/resource_booking/models/calendar_event.py @@ -52,51 +52,13 @@ def write(self, vals): rescheduled._validate_booking_modifications() return result - def _notify_thread(self, message, msg_vals=False, **kwargs): - """If we are creating the calendar event from the resource booking - (detected from the resource_booking_event context key), we need to - inject the standard mail context `mail_notify_author` to super to get - the own author notified when someone books a reservation, but only - in the case that the mail is being sent to them, as if not the author - may receive one copy per each of the attendees. This happens only when - the the subtype not is enabled by default in the instance. - """ - if self.env.context.get("resource_booking_event") and msg_vals.get( - "author_id" - ) in msg_vals.get("partner_ids", []): - self = self.with_context(mail_notify_author=True) - return super()._notify_thread(message=message, msg_vals=msg_vals, **kwargs) - - def _notify_get_recipients(self, message, msg_vals, **kwargs): - """If we are creating the calendar event from resource booking, we want to - notify only the partner_ids and not all the followers (to avoid that each email - is sent to all followers). Example: Resource booking with combination of several - users. This only happens when the subtype note is enabled by default in the - instance. - """ - res = super()._notify_get_recipients( - message=message, msg_vals=msg_vals, **kwargs - ) - if self.env.context.get("resource_booking_event"): - res2 = [] - partner_ids = msg_vals.get("partner_ids", []) - for item in res: - if item["id"] in partner_ids: - res2.append(item) - return res2 - return res - @api.model_create_multi def create(self, vals_list): """Transfer resource booking to _attendees_values by context. We need to serialize the creation in that case. - resource_booking_event custom key from context is necessary. - We cannot use mail_notify_author key in the context because if the mail_note - subtype is set by default, the email of each attendee would be sent also to - the author (example: a meeting with 2 attendees would send 2 emails but - each of them would be sent to the partner of the attendee + author of - the email). + mail_notify_author key from context is necessary to force the notification + to be sent to author. """ vals_list2 = [] records = self.env["calendar.event"] @@ -106,7 +68,7 @@ def create(self, vals_list): CalendarEvent, self.with_context( resource_booking_ids=vals["resource_booking_ids"], - resource_booking_event=True, + mail_notify_author=True, ), ).create(vals) else: diff --git a/resource_booking/tests/test_backend.py b/resource_booking/tests/test_backend.py index ca9b301f..91d0353c 100644 --- a/resource_booking/tests/test_backend.py +++ b/resource_booking/tests/test_backend.py @@ -1080,13 +1080,17 @@ def test_resource_booking_message_01(self): lambda x: x.partner_id == meeting.user_id.partner_id ) self.assertIn(self.mt_note, follower.subtype_ids) - meesages = meeting.message_ids.filtered( - lambda x: x.message_type != "notification" + messages = self.env["mail.message"].search( + [ + ("model", "=", meeting._name), + ("res_id", "=", meeting.id), + ("message_type", "=", "user_notification"), + ] ) - self.assertEqual(len(meesages), 2) - partner_message = meesages.filtered(lambda x: self.partner in x.partner_ids) + self.assertEqual(len(messages), 2) + partner_message = messages.filtered(lambda x: self.partner in x.partner_ids) self.assertNotIn(rb.user_id.partner_id, partner_message.notified_partner_ids) - user_message = meesages.filtered( + user_message = messages.filtered( lambda x: meeting.user_id.partner_id in x.partner_ids ) self.assertIn(meeting.user_id.partner_id, user_message.notified_partner_ids) @@ -1122,14 +1126,18 @@ def test_resource_booking_message_02(self): lambda x: x.partner_id == meeting.user_id.partner_id ) self.assertIn(self.mt_note, follower.subtype_ids) - meesages = meeting.message_ids.filtered( - lambda x: x.message_type != "notification" + messages = self.env["mail.message"].search( + [ + ("model", "=", meeting._name), + ("res_id", "=", meeting.id), + ("message_type", "=", "user_notification"), + ] ) - self.assertEqual(len(meesages), 3) - partner_message = meesages.filtered(lambda x: self.partner in x.partner_ids) + self.assertEqual(len(messages), 3) + partner_message = messages.filtered(lambda x: self.partner in x.partner_ids) self.assertNotIn(user_0.partner_id, partner_message.notified_partner_ids) self.assertNotIn(user_1.partner_id, partner_message.notified_partner_ids) - user_0_message = meesages.filtered(lambda x: user_0.partner_id in x.partner_ids) + user_0_message = messages.filtered(lambda x: user_0.partner_id in x.partner_ids) self.assertIn(user_0.partner_id, user_0_message.notified_partner_ids) - user_1_message = meesages.filtered(lambda x: user_1.partner_id in x.partner_ids) + user_1_message = messages.filtered(lambda x: user_1.partner_id in x.partner_ids) self.assertIn(user_1.partner_id, user_1_message.notified_partner_ids)