You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
# -*- coding: utf-8 -*- # © 2016 Antonio Espinosa - <antonio.espinosa@tecnativa.com> # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import models, api, fields
class ResPartner(models.Model): _inherit = 'res.partner'
tracking_email_ids = fields.Many2many( string="Tracking emails", comodel_name="mail.tracking.email", readonly=True) tracking_emails_count = fields.Integer( string="Tracking emails count", store=True, readonly=True, compute="_compute_tracking_emails_count") email_score = fields.Float( string="Email score", readonly=True, default=50.0)
def email_score_calculate(self): # This is not a compute method because is causing a inter-block # in mail_tracking_email PostgreSQL table # We suspect that tracking_email write to state field block that # table and then inside write ORM try to read from DB # tracking_email_ids because it's not in cache. # PostgreSQL blocks read because we have not committed yet the write for partner in self: partner.email_score = partner.tracking_email_ids.email_score()
@api.depends('tracking_email_ids') def _compute_tracking_emails_count(self): for partner in self: partner.tracking_emails_count = self.env['mail.tracking.email'].\ search_count([ ('recipient_address', '=ilike', partner.email) ])
def write(self, vals): email = vals.get('email') if email is not None: m_track = self.env['mail.tracking.email'] vals['tracking_email_ids'] = m_track._tracking_ids_to_write(email) vals['email_score'] = m_track.email_score_from_email(email) return super(ResPartner, self).write(vals)
|