Odoo Help


How to include project name in task notification message?

on 3/30/15, 11:31 AM 946 views


In the task notification messages (eg. "Stage changed...") I would like to include the Project name or, even better, a link to the Project or Analytic Account.

Could anybody point me in the right direction please?

On 4/2/15, 4:49 PM

I solved by overriding mail.thread message_track method. 

In short:

class mail_thread(osv.Model):

    _inherit = 'mail.thread' def message_track(self, cr, uid, ids, tracked_fields, initial_values, context=None):

        def convert_for_display(value, col_info): if not value and col_info['type'] == 'boolean': return 'False' if not value: return '' if col_info['type'] == 'many2one': return value.name_get()[0][1] if col_info['type'] == 'selection': return dict(col_info['selection'])[value] return value def format_message(message_description, tracked_values): message = '' if message_description: message = '<span>%s</span>' % message_description for name, change in tracked_values.items(): message += '<div> &nbsp; &nbsp; &bull; <b>%s</b>: ' % change.get('col_info') if change.get('old_value'): message += '%s &rarr; ' % change.get('old_value') message += '%s</div>' % change.get('new_value') return message if not tracked_fields: return True for browse_record in self.browse(cr, uid, ids, context=context): initial = initial_values[browse_record.id] changes = set() tracked_values = {} project_name = '' # if browse_record.project_id: try: project_name = '<div>%s</div>' % browse_record.project_id.name \ + '<div>%s</div>' % browse_record.name except: project_name = project_name # generate tracked_values data structure: {'col_name': {col_info, new_value, old_value}} for col_name, col_info in tracked_fields.items(): field = self._fields[col_name] initial_value = initial[col_name] record_value = getattr(browse_record, col_name) if record_value == initial_value and getattr(field, 'track_visibility', None) == 'always': tracked_values[col_name] = dict( col_info=col_info['string'], new_value=convert_for_display(record_value, col_info), ) elif record_value != initial_value and (record_value or initial_value): # because browse null != False if getattr(field, 'track_visibility', None) in ['always', 'onchange']: tracked_values[col_name] = dict( col_info=col_info['string'], old_value=convert_for_display(initial_value, col_info), new_value=convert_for_display(record_value, col_info), ) if col_name in tracked_fields: changes.add(col_name) if not changes: continue # find subtypes and post messages or log if no subtype found subtypes = [] # By passing this key, that allows to let the subtype empty and so don't sent email because partners_to_notify from mail_message._notify will be empty if not context.get('mail_track_log_only'): for field, track_info in self._track.items(): if field not in changes: continue for subtype, method in track_info.items(): if method(self, cr, uid, browse_record, context): subtypes.append(subtype) posted = False for subtype in subtypes: subtype_rec = self.pool.get('ir.model.data').xmlid_to_object(cr, uid, subtype, context=context) if not (subtype_rec and subtype_rec.exists()): _logger.debug('subtype %s not found' % subtype) continue message = project_name + format_message(subtype_rec.description if subtype_rec.description else subtype_rec.name, tracked_values) self.message_post(cr, uid, browse_record.id, body=message, subtype=subtype, context=context) posted = True if not posted: message = format_message(project_name, tracked_values) self.message_post(cr, uid, browse_record.id, body=message, context=context) return True

Tharaka Perera
On 7/20/15, 11:41 PM

Hi Raffaele,

i'm having the same issue. can you let me know how you edited the mail.thread message_track method?

I'll attach a brief sample to my answer. Please use properly the forum tools: this is not an answer, but a comment.

on 7/21/15, 2:55 AM

Hello Raffaele, I need to do the same thing, can you please tell how? If is possible to extend your answer. Or attach file? Thank you!

on 6/5/16, 8:11 PM

Ok, was missing this part at top of your code, -> from openerp.addons.mail.mail_thread import mail_thread

from openerp import models, fields, api

class mail_thread(models.Model):

on 6/7/16, 9:23 PM

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!

About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.


Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now

Question tools

1 follower(s)


Asked: 3/30/15, 11:31 AM
Seen: 946 times
Last updated: 7/21/15, 5:57 AM