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.
 
 
 
 

70 lines
2.9 KiB

# -*- coding: utf-8 -*-
# © 2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from lxml import etree
from openerp import api, fields, models
class MailNotification(models.Model):
_inherit = 'mail.notification'
record = fields.Reference(
selection=lambda self: [
(m.model, m.name) for m in self.env['ir.model'].search([])
],
compute='_compute_record')
record_access_link = fields.Char(compute='_compute_record')
@api.multi
def _notify_email(self, message_id, force_send=False, user_signature=True):
if not self.mapped('message_id.subtype_id.template_id'):
return super(MailNotification, self)._notify_email(
message_id, force_send=force_send,
user_signature=user_signature)
message_ids = []
for this in self:
if not this.mapped('message_id.subtype_id.template_id'):
super(MailNotification, this)._notify_email(
message_id, force_send=force_send,
user_signature=user_signature)
continue
message = this.message_id
if not this.get_partners_to_email(message):
continue
custom_values = {
'references': message.parent_id.message_id,
'author_id': message.author_id.id
}
if message.res_id and hasattr(
self.env[message.model], 'message_get_email_values'
):
message_values = self.env[message.model].browse(
message.res_id
).message_get_email_values(message)
# message_get_email_values is guessed to @api.one
if message_values and isinstance(message_values, list):
message_values = message_values[0]
custom_values.update(message_values)
message_id = message.subtype_id.template_id.send_mail(this.id)
if 'mail_message_id' in custom_values:
custom_values.pop('mail_message_id')
self.env['mail.mail'].browse(message_id).write(custom_values)
message_ids.append(message_id)
return message_ids or True
@api.multi
def _compute_record(self):
for this in self:
if not this.message_id.model or not this.message_id.res_id:
continue
this.record = self.env[this.message_id.model].browse(
this.message_id.res_id)
link_html = self.env['mail.mail']._get_partner_access_link(
self.env['mail.mail'].new({
'notification': True,
'mail_message_id': this.message_id.id,
}),
this.partner_id
)
for a in etree.HTML(link_html or '<html/>').xpath('//a[@href]'):
this.record_access_link = a.get('href')