From e1be2b071a0bef11c1a579b457e9878de3dc3349 Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Wed, 19 Dec 2012 01:42:22 +0100 Subject: [PATCH] [FIX] fix _track stuff bzr revid: fp@tinyerp.com-20121219004222-x0gt6qhvwhcpdgld --- addons/crm/crm_lead.py | 2 +- addons/mail/mail_thread.py | 40 ++++++++++++++++++++------------------ 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index e450aa81bb1..0e0b718a5f6 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -224,7 +224,7 @@ class crm_lead(base_stage, format_address, osv.osv): return [('id', '=', '0')] _columns = { - 'partner_id': fields.many2one('res.partner', 'Partner', ondelete='set null', + 'partner_id': fields.many2one('res.partner', 'Partner', ondelete='set null', track_visibility=1, select=True, help="Linked partner (optional). Usually created when converting the lead."), 'id': fields.integer('ID', readonly=True), diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 9d8b9106738..98d28d9bbf7 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -79,15 +79,15 @@ class mail_thread(osv.AbstractModel): %if message_description: ${message_description} %endif - """ def _get_message_data(self, cr, uid, ids, name, args, context=None): @@ -249,15 +249,12 @@ class mail_thread(osv.AbstractModel): def write(self, cr, uid, ids, values, context=None): tracked_fields = self._get_tracked_fields(cr, uid, values.keys(), context=context) - #to_log = [name for name in values.keys() if name in tracked_fields] if tracked_fields: initial = self.read(cr, uid, ids, tracked_fields.keys(), context=context) initial_values = dict((item['id'], item) for item in initial) - result = super(mail_thread, self).write(cr, uid, ids, values, context=context) - if tracked_fields: - self.message_track(cr, uid, ids, tracked_fields, initial_values, values.keys(), context=context) + self.message_track(cr, uid, ids, tracked_fields, initial_values, context=context) return result def unlink(self, cr, uid, ids, context=None): @@ -298,7 +295,7 @@ class mail_thread(osv.AbstractModel): lst.append(name) return self.fields_get(cr, uid, lst, context=context) - def message_track(self, cr, uid, ids, tracked_fields, initial_values, modified_fields=[], context=None): + def message_track(self, cr, uid, ids, tracked_fields, initial_values, context=None): if not tracked_fields: return True def convert_for_display(value, field_obj): @@ -310,28 +307,33 @@ class mail_thread(osv.AbstractModel): return dict(field_obj['selection'])[value] return value - - for record in self.read(cr, uid, ids, tracked_fields, context=context): + for record in self.read(cr, uid, ids, tracked_fields.keys(), context=context): initial = initial_values[record['id']] + changes = [] tracked_values = {} - changes_found = False # generate tracked_values data structure: {'col_name': {col_info, new_value, old_value}} for col_name, col_info in tracked_fields.items(): - if record[col_name] == initial[col_name] and (getattr(self._all_columns[col_name], 'track_visibility', 0) == 2): + if record[col_name] == initial[col_name] and (getattr(self._all_columns[col_name].column, 'track_visibility', 0) == 2): tracked_values[col_name] = dict(col_info=col_info['string'], new_value=convert_for_display(record[col_name], col_info)) - elif record[col_name] != initial[col_name]: + elif record[col_name] != initial[col_name] and (getattr(self._all_columns[col_name].column, 'track_visibility', 0) == 1): tracked_values[col_name] = dict(col_info=col_info['string'], old_value=convert_for_display(initial[col_name], col_info), new_value=convert_for_display(record[col_name], col_info)) - changes_found = True - if not changes_found: + changes.append(col_name) + if not changes: continue # find subtypes and post messages or log if no subtype found - subtypes = set([subtype for field, track_info in self._track.items() if field in tracked_fields - for subtype, method in track_info.items() if method(self, cr, uid, record, context)]) + + subtypes = [] + 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, record, context): + subtypes.append(subtype) + posted = False for subtype in subtypes: try: