diff --git a/addons/mass_mailing/data/mailing_data_templates.xml b/addons/mass_mailing/data/mailing_data_templates.xml index 35091fcd56c..53baaf0c224 100644 --- a/addons/mass_mailing/data/mailing_data_templates.xml +++ b/addons/mass_mailing/data/mailing_data_templates.xml @@ -117,7 +117,7 @@

The winner has already been sent. Use Compare Version to get an overview of this A/B testing campaign.

- +

A sample of % of recipients will receive this version.
diff --git a/addons/mass_mailing/models/mailing.py b/addons/mass_mailing/models/mailing.py index 92a45a3dfbf..2a48e9b036d 100644 --- a/addons/mass_mailing/models/mailing.py +++ b/addons/mass_mailing/models/mailing.py @@ -203,6 +203,7 @@ class MassMailing(models.Model): related="campaign_id.ab_testing_winner_selection", readonly=False, default="opened_ratio", copy=True) + is_ab_test_sent = fields.Boolean(compute="_compute_is_ab_test_sent") kpi_mail_required = fields.Boolean('KPI mail required', copy=False) # statistics data mailing_trace_ids = fields.One2many('mailing.trace', 'mass_mailing_id', string='Emails Statistics') @@ -472,6 +473,13 @@ class MassMailing(models.Model): mailing._get_ab_testing_description_values() ) + @api.depends('campaign_id.mailing_mail_ids.state') + def _compute_is_ab_test_sent(self): + for rec in self: + ab_testing_mailings = rec._get_ab_testing_siblings_mailings() + selected_mailings = ab_testing_mailings.filtered(lambda m: m.state == 'done') + rec.is_ab_test_sent = bool(selected_mailings) + def _get_ab_testing_description_modifying_fields(self): return ['ab_testing_enabled', 'ab_testing_pc', 'ab_testing_schedule_datetime', 'ab_testing_winner_selection', 'campaign_id'] @@ -853,6 +861,7 @@ class MassMailing(models.Model): raise ValueError(_("A/B test option has not been enabled")) final_mailing = self.copy({ 'ab_testing_pc': 100, + 'name': _(" %(subject)s (final)", subject=self.name) # Add suffix on name to show it's the final mailing }) self.campaign_id.ab_testing_winner_mailing_id = final_mailing final_mailing.action_launch() @@ -868,6 +877,7 @@ class MassMailing(models.Model): self.ensure_one() return { 'mailing': self, + 'ab_testing_count': self.ab_testing_mailings_count, 'ab_testing_winner_selection_description': self._get_ab_testing_winner_selection()['description'], 'total_ab_testing_pc': sum([ mailing.ab_testing_pc for mailing in self._get_ab_testing_siblings_mailings() diff --git a/addons/mass_mailing/views/mailing_mailing_views.xml b/addons/mass_mailing/views/mailing_mailing_views.xml index 83cd32db080..740e7ec61a8 100644 --- a/addons/mass_mailing/views/mailing_mailing_views.xml +++ b/addons/mass_mailing/views/mailing_mailing_views.xml @@ -276,22 +276,21 @@ attrs="{'required': [('ab_testing_enabled', '=', True), ('mailing_type', '=', 'mail')], 'invisible': ['|', ('ab_testing_enabled', '=', False), ('mailing_type', '!=', 'mail')], 'readonly': [('state', '!=', 'draft')]}"/> +

-
+
- diff --git a/addons/mass_mailing_sms/models/mailing_mailing.py b/addons/mass_mailing_sms/models/mailing_mailing.py index 14ae27c23e8..3d1ba768b43 100644 --- a/addons/mass_mailing_sms/models/mailing_mailing.py +++ b/addons/mass_mailing_sms/models/mailing_mailing.py @@ -52,6 +52,7 @@ class Mailing(models.Model): ab_testing_sms_winner_selection = fields.Selection( related="campaign_id.ab_testing_sms_winner_selection", default="clicks_ratio", readonly=False, copy=True) + ab_testing_mailings_sms_count = fields.Integer(related="campaign_id.ab_testing_mailings_sms_count") @api.depends('mailing_type') def _compute_medium_id(self): @@ -337,6 +338,7 @@ class Mailing(models.Model): values = super()._get_ab_testing_description_values() if self.mailing_type == 'sms': values.update({ + 'ab_testing_count': self.ab_testing_mailings_sms_count, 'ab_testing_winner_selection': self.ab_testing_sms_winner_selection, }) return values diff --git a/addons/mass_mailing_sms/views/mailing_mailing_views.xml b/addons/mass_mailing_sms/views/mailing_mailing_views.xml index 877f9970f4f..7b023ea278a 100644 --- a/addons/mass_mailing_sms/views/mailing_mailing_views.xml +++ b/addons/mass_mailing_sms/views/mailing_mailing_views.xml @@ -159,6 +159,9 @@ ('mail_server_available', '=', False)], 'readonly': [('state', 'in', ('sending', 'done'))]} + + + - - {'invisible': ['|', ('ab_testing_winner_selection', '!=', 'manual'), - ('ab_testing_sms_winner_selection', '!=', 'manual')]} + + {'invisible': ['|', ('ab_testing_enabled', '=', False), '&', + ('ab_testing_mailings_count', '<', 2), + ('ab_testing_mailings_sms_count', '<', 2)]} - - {'invisible': [('ab_testing_winner_selection', '=', 'manual'), - ('ab_testing_sms_winner_selection', '=', 'manual')]} - - - {'invisible': ['|', ('ab_testing_completed', '!=', False), '|', + + {'invisible': ['|', ('is_ab_test_sent', '!=', True), '|', ('ab_testing_completed', '=', True), '|', ('ab_testing_winner_selection', '=', 'manual'), ('ab_testing_sms_winner_selection', '=', 'manual')]} + + {'invisible': ['|', '|', ('ab_testing_enabled', '=', False), + ('ab_testing_mailings_count', '>=', 2), + ('ab_testing_mailings_sms_count', '>=', 2)]} +