diff --git a/mass_mailing_partner/models/mailing_list.py b/mass_mailing_partner/models/mailing_list.py index f6d9727e12..1bc391fc86 100644 --- a/mass_mailing_partner/models/mailing_list.py +++ b/mass_mailing_partner/models/mailing_list.py @@ -15,11 +15,16 @@ class MailingList(models.Model): partner_category = fields.Many2one( comodel_name="res.partner.category", string="Partner Tag" ) + partner_unique = fields.Boolean( + string="Partner unique?", + help="If is checked, multiple contacts cannot be linked to the same partner", + default=True, + ) - @api.constrains("contact_ids") + @api.constrains("partner_unique", "contact_ids") def _check_contact_ids_partner_id(self): contact_obj = self.env["mailing.contact"] - for mailing_list in self: + for mailing_list in self.filtered("partner_unique"): data = contact_obj.read_group( [ ("id", "in", mailing_list.contact_ids.ids), diff --git a/mass_mailing_partner/tests/test_mail_mass_mailing_list.py b/mass_mailing_partner/tests/test_mail_mass_mailing_list.py index 570b700108..510d36464c 100644 --- a/mass_mailing_partner/tests/test_mail_mass_mailing_list.py +++ b/mass_mailing_partner/tests/test_mail_mass_mailing_list.py @@ -23,6 +23,23 @@ def test_create_mass_mailing_list(self): } ) + def test_create_mass_mailing_list_not_partner_unique(self): + contact_test_1 = self.create_mailing_contact( + {"name": "Contact test 1", "partner_id": self.partner.id} + ) + contact_test_2 = self.create_mailing_contact( + {"name": "Contact test 2", "partner_id": self.partner.id} + ) + mailing_list = self.create_mailing_list( + { + "name": "List test Create Mailing List", + "partner_unique": False, + "contact_ids": [(6, 0, (contact_test_1 | contact_test_2).ids)], + } + ) + with self.assertRaises(ValidationError): + mailing_list.partner_unique = True + def test_create_mass_mailing_list_with_subscription(self): contact_test_1 = self.create_mailing_contact( {"name": "Contact test 1", "partner_id": self.partner.id} @@ -37,3 +54,20 @@ def test_create_mass_mailing_list_with_subscription(self): "contact_ids": [(4, contact_test_1.id), (4, contact_test_2.id)], } ) + + def test_create_mass_mailing_list_with_subscription_not_partner_unique(self): + contact_test_1 = self.create_mailing_contact( + {"name": "Contact test 1", "partner_id": self.partner.id} + ) + contact_test_2 = self.create_mailing_contact( + {"name": "Contact test 2", "partner_id": self.partner.id} + ) + mailing_list = self.create_mailing_list( + { + "name": "List test Creat List With Subscription", + "partner_unique": False, + "contact_ids": [(4, contact_test_1.id), (4, contact_test_2.id)], + } + ) + with self.assertRaises(ValidationError): + mailing_list.partner_unique = True diff --git a/mass_mailing_partner/tests/test_mail_mass_mailing_list_contact_rel.py b/mass_mailing_partner/tests/test_mail_mass_mailing_list_contact_rel.py index 5d19b214a1..d3c7f94ae0 100644 --- a/mass_mailing_partner/tests/test_mail_mass_mailing_list_contact_rel.py +++ b/mass_mailing_partner/tests/test_mail_mass_mailing_list_contact_rel.py @@ -20,3 +20,21 @@ def test_create_mass_mailing_list(self): ) with self.assertRaises(ValidationError): list_3.contact_ids = [(4, contact_test_2.id)] + + def test_create_mass_mailing_list_not_partner_unique(self): + contact_test_1 = self.create_mailing_contact( + {"name": "Contact test 1", "partner_id": self.partner.id} + ) + contact_test_2 = self.create_mailing_contact( + {"name": "Contact test 2", "partner_id": self.partner.id} + ) + list_3 = self.create_mailing_list( + { + "name": "List test 3", + "partner_unique": False, + "contact_ids": [(4, contact_test_1.id)], + } + ) + list_3.contact_ids = [(4, contact_test_2.id)] + with self.assertRaises(ValidationError): + list_3.partner_unique = True diff --git a/mass_mailing_partner/views/mailing_view.xml b/mass_mailing_partner/views/mailing_view.xml index 3ed5e65422..b047e60d71 100644 --- a/mass_mailing_partner/views/mailing_view.xml +++ b/mass_mailing_partner/views/mailing_view.xml @@ -16,6 +16,7 @@ +