diff --git a/addons/event/views/event_event_views.xml b/addons/event/views/event_event_views.xml index 1b26f398ba2..566bc9a90c7 100644 --- a/addons/event/views/event_event_views.xml +++ b/addons/event/views/event_event_views.xml @@ -15,7 +15,7 @@ type="action" class="oe_stat_button" icon="fa-line-chart">
- Registration statistics + Registration
@@ -117,7 +117,6 @@ event.event diff --git a/addons/mass_mailing/models/mailing.py b/addons/mass_mailing/models/mailing.py index d11ca8bfc0b..2fd89771c74 100644 --- a/addons/mass_mailing/models/mailing.py +++ b/addons/mass_mailing/models/mailing.py @@ -22,6 +22,7 @@ from odoo import api, fields, models, tools, _ from odoo.addons.base_import.models.base_import import ImportValidationError from odoo.exceptions import UserError, ValidationError from odoo.osv import expression +from odoo.tools.float_utils import float_round _logger = logging.getLogger(__name__) @@ -216,11 +217,11 @@ class MassMailing(models.Model): replied = fields.Integer(compute="_compute_statistics") bounced = fields.Integer(compute="_compute_statistics") failed = fields.Integer(compute="_compute_statistics") - received_ratio = fields.Integer(compute="_compute_statistics", string='Received Ratio') - opened_ratio = fields.Integer(compute="_compute_statistics", string='Opened Ratio') - replied_ratio = fields.Integer(compute="_compute_statistics", string='Replied Ratio') - bounced_ratio = fields.Integer(compute="_compute_statistics", string='Bounced Ratio') - clicks_ratio = fields.Integer(compute="_compute_clicks_ratio", string="Number of Clicks") + received_ratio = fields.Float(compute="_compute_statistics", string='Received Ratio') + opened_ratio = fields.Float(compute="_compute_statistics", string='Opened Ratio') + replied_ratio = fields.Float(compute="_compute_statistics", string='Replied Ratio') + bounced_ratio = fields.Float(compute="_compute_statistics", string='Bounced Ratio') + clicks_ratio = fields.Float(compute="_compute_clicks_ratio", string="Number of Clicks") next_departure = fields.Datetime(compute="_compute_next_departure", string='Scheduled date') # UX warning_message = fields.Char( @@ -287,7 +288,7 @@ class MassMailing(models.Model): GROUP BY stats.mass_mailing_id """, [tuple(self.ids) or (None,)]) mass_mailing_data = self.env.cr.dictfetchall() - mapped_data = dict([(m['id'], 100 * m['nb_clicks'] / m['nb_mails']) for m in mass_mailing_data]) + mapped_data = dict([(m['id'], float_round(100 * m['nb_clicks'] / m['nb_mails'], precision_digits=2)) for m in mass_mailing_data]) for mass_mailing in self: mass_mailing.clicks_ratio = mapped_data.get(mass_mailing.id, 0) @@ -329,10 +330,10 @@ class MassMailing(models.Model): """, (tuple(self.ids), )) for row in self.env.cr.dictfetchall(): total = (row['expected'] - row['canceled']) or 1 - row['received_ratio'] = 100.0 * row['delivered'] / total - row['opened_ratio'] = 100.0 * row['opened'] / total - row['replied_ratio'] = 100.0 * row['replied'] / total - row['bounced_ratio'] = 100.0 * row['bounced'] / total + row['received_ratio'] = float_round(100.0 * row['delivered'] / total, precision_digits=2) + row['opened_ratio'] = float_round(100.0 * row['opened'] / total, precision_digits=2) + row['replied_ratio'] = float_round(100.0 * row['replied'] / total, precision_digits=2) + row['bounced_ratio'] = float_round(100.0 * row['bounced'] / total, precision_digits=2) self.browse(row.pop('mailing_id')).update(row) def _compute_next_departure(self): diff --git a/addons/mass_mailing/models/utm_campaign.py b/addons/mass_mailing/models/utm_campaign.py index 9183b4f36b0..ceb6f20c2d5 100644 --- a/addons/mass_mailing/models/utm_campaign.py +++ b/addons/mass_mailing/models/utm_campaign.py @@ -6,6 +6,7 @@ from dateutil.relativedelta import relativedelta from odoo import api, fields, models, _ from odoo.exceptions import ValidationError +from odoo.tools.float_utils import float_round class UtmCampaign(models.Model): @@ -37,10 +38,10 @@ class UtmCampaign(models.Model): help="Selection to determine the winner mailing that will be sent.") # stat fields - received_ratio = fields.Integer(compute="_compute_statistics", string='Received Ratio') - opened_ratio = fields.Integer(compute="_compute_statistics", string='Opened Ratio') - replied_ratio = fields.Integer(compute="_compute_statistics", string='Replied Ratio') - bounced_ratio = fields.Integer(compute="_compute_statistics", string='Bounced Ratio') + received_ratio = fields.Float(compute="_compute_statistics", string='Received Ratio') + opened_ratio = fields.Float(compute="_compute_statistics", string='Opened Ratio') + replied_ratio = fields.Float(compute="_compute_statistics", string='Replied Ratio') + bounced_ratio = fields.Float(compute="_compute_statistics", string='Bounced Ratio') @api.depends('ab_testing_winner_mailing_id') def _compute_ab_testing_completed(self): @@ -110,10 +111,10 @@ class UtmCampaign(models.Model): total = (stats['expected'] - stats['cancel']) or 1 delivered = stats['sent'] - stats['bounce'] vals = { - 'received_ratio': 100.0 * delivered / total, - 'opened_ratio': 100.0 * stats['open'] / total, - 'replied_ratio': 100.0 * stats['reply'] / total, - 'bounced_ratio': 100.0 * stats['bounce'] / total + 'received_ratio': float_round(100.0 * delivered / total, precision_digits=2), + 'opened_ratio': float_round(100.0 * stats['open'] / total, precision_digits=2), + 'replied_ratio': float_round(100.0 * stats['reply'] / total, precision_digits=2), + 'bounced_ratio': float_round(100.0 * stats['bounce'] / total, precision_digits=2) } campaign.update(vals) diff --git a/addons/mass_mailing/tests/test_mailing_ab_testing.py b/addons/mass_mailing/tests/test_mailing_ab_testing.py index b951cb094d5..02569670535 100644 --- a/addons/mass_mailing/tests/test_mailing_ab_testing.py +++ b/addons/mass_mailing/tests/test_mailing_ab_testing.py @@ -50,7 +50,7 @@ class TestMailingABTesting(MassMailCommon): self.ab_testing_mailing_2.mailing_trace_ids[:15].set_opened() self.ab_testing_mailing_ids.invalidate_recordset() - self.assertEqual(self.ab_testing_mailing_1.opened_ratio, 66) + self.assertEqual(self.ab_testing_mailing_1.opened_ratio, 66.67) self.assertEqual(self.ab_testing_mailing_2.opened_ratio, 50) with self.mock_mail_gateway(): @@ -82,7 +82,7 @@ class TestMailingABTesting(MassMailCommon): self.ab_testing_mailing_2.mailing_trace_ids[:15].set_opened() self.ab_testing_mailing_ids.invalidate_recordset() - self.assertEqual(self.ab_testing_mailing_1.opened_ratio, 66) + self.assertEqual(self.ab_testing_mailing_1.opened_ratio, 66.67) self.assertEqual(self.ab_testing_mailing_2.opened_ratio, 50) with self.mock_mail_gateway(): @@ -165,7 +165,7 @@ class TestMailingABTesting(MassMailCommon): self.ab_testing_mailing_2.mailing_trace_ids[:15].set_opened() self.ab_testing_mailing_ids.invalidate_recordset() - self.assertEqual(self.ab_testing_mailing_1.opened_ratio, 66) + self.assertEqual(self.ab_testing_mailing_1.opened_ratio, 66.67) self.assertEqual(self.ab_testing_mailing_2.opened_ratio, 50) with self.mock_mail_gateway(): diff --git a/addons/mass_mailing/views/mailing_mailing_views.xml b/addons/mass_mailing/views/mailing_mailing_views.xml index 56c706f6af9..ef423c295a7 100644 --- a/addons/mass_mailing/views/mailing_mailing_views.xml +++ b/addons/mass_mailing/views/mailing_mailing_views.xml @@ -130,14 +130,6 @@
- + - + + +