diff --git a/mail_restrict_follower_selection/__manifest__.py b/mail_restrict_follower_selection/__manifest__.py index 84eb63beb0..7d58876693 100644 --- a/mail_restrict_follower_selection/__manifest__.py +++ b/mail_restrict_follower_selection/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Restrict follower selection", - "version": "17.0.1.0.0", + "version": "18.0.1.0.0", "author": "Therp BV,Creu Blanca,Odoo Community Association (OCA)", "license": "AGPL-3", "category": "Social Network", diff --git a/mail_restrict_follower_selection/models/mail_followers.py b/mail_restrict_follower_selection/models/mail_followers.py index fc4235e3a8..9b942bb667 100644 --- a/mail_restrict_follower_selection/models/mail_followers.py +++ b/mail_restrict_follower_selection/models/mail_followers.py @@ -32,9 +32,11 @@ def _add_followers( check_existing=check_existing, existing_policy=existing_policy, ) - domain = self.env[ - "mail.wizard.invite" - ]._mail_restrict_follower_selection_get_domain(res_model=res_model) + domain = str( + self.env["mail.wizard.invite"]._mail_restrict_follower_selection_get_domain( + res_model=res_model + ) + ) partners = self.env["res.partner"].search( [("id", "in", partner_ids)] + safe_eval( diff --git a/mail_restrict_follower_selection/models/mail_thread.py b/mail_restrict_follower_selection/models/mail_thread.py index 740bb91a43..56af245273 100644 --- a/mail_restrict_follower_selection/models/mail_thread.py +++ b/mail_restrict_follower_selection/models/mail_thread.py @@ -23,18 +23,18 @@ def _message_add_suggested_recipient( "mail.wizard.invite" ]._mail_restrict_follower_selection_get_domain() eval_domain = safe_eval( - domain, locals_dict={"ref": lambda str_id: _id_get(self.env, str_id)} + str(domain), locals_dict={"ref": lambda str_id: _id_get(self.env, str_id)} ) - for key in result: - items_to_remove = [] - for item in result[key]: - partner_id = item[0] - if partner_id: - partner = self.env["res.partner"].search( - [("id", "=", partner_id)] + eval_domain - ) - if not partner: - items_to_remove.append(item) - for item in items_to_remove: - result[key].remove(item) + items_to_remove = [] + for item in result: + partner_id = item.get("partner_id", False) + if partner_id: + partner_count = self.env["res.partner"].search_count( + [("id", "=", partner_id)] + eval_domain + ) + if not partner_count: + items_to_remove.append(item) + for item in items_to_remove: + result.remove(item) + return result diff --git a/mail_restrict_follower_selection/models/mail_wizard_invite.py b/mail_restrict_follower_selection/models/mail_wizard_invite.py index f60257df8b..24cadd3e16 100644 --- a/mail_restrict_follower_selection/models/mail_wizard_invite.py +++ b/mail_restrict_follower_selection/models/mail_wizard_invite.py @@ -41,7 +41,7 @@ def get_view(self, view_id=None, view_type="form", **options): arch = etree.fromstring(result["arch"]) domain = self._mail_restrict_follower_selection_get_domain() eval_domain = safe_eval( - domain, locals_dict={"ref": lambda str_id: _id_get(self.env, str_id)} + str(domain), locals_dict={"ref": lambda str_id: _id_get(self.env, str_id)} ) for field in arch.xpath('//field[@name="partner_ids"]'): field.attrib["domain"] = str(eval_domain) diff --git a/mail_restrict_follower_selection/tests/test_mail_restrict_follower_selection.py b/mail_restrict_follower_selection/tests/test_mail_restrict_follower_selection.py index a8ccb3add0..e01f50e9d0 100644 --- a/mail_restrict_follower_selection/tests/test_mail_restrict_follower_selection.py +++ b/mail_restrict_follower_selection/tests/test_mail_restrict_follower_selection.py @@ -30,7 +30,8 @@ def setUp(self): def _use_ref_in_domain(self): """Change the general domain to test the safe_eval.""" param = self.env.ref("mail_restrict_follower_selection.parameter_domain") - param.value = "[('country_id', '!=', ref('base.ch'))]" + country_id = self.env.ref("base.ch").id + param.value = f"[('country_id', '!=', {country_id})]" def test_fields_view_get(self): result = self.env["mail.wizard.invite"].get_view(view_type="form") @@ -78,18 +79,18 @@ def test_followers_not_meet(self): def test_message_add_suggested_recipient(self): res = self.partner.with_context( test_restrict_follower=True - )._message_add_suggested_recipient({self.partner.id: []}, partner=self.partner) - self.assertEqual(res[self.partner.id][0][0], self.partner.id) + )._message_add_suggested_recipient([], partner=self.partner) + self.assertEqual(res[0]["partner_id"], self.partner.id) new_res = self.partner.with_context( test_restrict_follower=True - )._message_add_suggested_recipient({self.partner.id: []}) - self.assertFalse(new_res[self.partner.id][0][0]) + )._message_add_suggested_recipient([]) + self.assertFalse(new_res[0].get("partner_id")) - def test_fields_view_get_eval(self): + def test_get_view_eval(self): """Check using safe_eval in field_view_get.""" self._use_ref_in_domain() - result = self.env["mail.wizard.invite"].fields_view_get(view_type="form") + result = self.env["mail.wizard.invite"].get_view(view_type="form") for field in etree.fromstring(result["arch"]).xpath( '//field[@name="partner_ids"]' ): @@ -101,13 +102,10 @@ def test_message_add_suggested_recipient_eval(self): """Check using safe_eval when adding recipients.""" self._use_ref_in_domain() partner = self.partner.with_context(test_restrict_follower=True) - res = partner._message_add_suggested_recipient( - {self.partner.id: []}, partner=self.partner - ) - self.assertEqual(res[self.partner.id][0][0], self.partner.id) + res = partner._message_add_suggested_recipient([], partner=self.partner) + self.assertEqual(res[0]["partner_id"], self.partner.id) + # Partner from Swizterland should be excluded partner.country_id = self.switzerland - res = partner._message_add_suggested_recipient( - {self.partner.id: []}, partner=self.partner - ) - self.assertFalse(res[self.partner.id]) + res = partner._message_add_suggested_recipient([], partner=self.partner) + self.assertFalse(res)