Odoo Mindscape. Understand Odoo faster. Explore modules, fields, dependencies and version differences in one place instead of digging through the source code.

Module: Email Marketing

Entity: mailing.contact

Compute Method: _compute_statistics

View 20.0
Inputs Method Outputs
  • id
+ """ Compute the mailing statistics for the mailing contact """
+ result = self.env["mailing.trace"].sudo()._read_group(
+             [('model', '=', 'mailing.contact'), ('res_id', 'in', self.ids)],
+             ['res_id', 'trace_status'],
+             ['__count'])
+ result_per_contact = defaultdict(lambda: defaultdict(int))
+ for res_id, trace_status, count in result:
+             result_per_contact[res_id][trace_status] = count
+ for contact in self:
+             line = result_per_contact[contact.id]
+             expected = sum(line.values())
+             delivered = line['sent'] + line['open'] + line['reply']
+             opened = line['open'] + line['reply']
+             failed = line['error'] + line['bounce']
+             total = (expected - line['cancel']) or 1
+             total_no_error = (expected - line['cancel'] - failed) or 1
+             contact.mailing_count = delivered
+             contact.received_ratio = float_round(100.0 * delivered / total, precision_digits=2)
+             contact.opened_ratio = float_round(100.0 * opened / total_no_error, precision_digits=2)
+             contact.replied_ratio = float_round(100.0 * line['reply'] / total_no_error, precision_digits=2)
  • mailing_count
  • received_ratio
  • opened_ratio
  • replied_ratio

Back to entity