summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwan <wan@odoo.com>2021-02-03 13:53:08 +0000
committerwan <wan@odoo.com>2021-02-03 13:53:08 +0000
commitcfd98d7b0e022b876a4cc99becc2da4f972ea030 (patch)
tree2db4cc7ef508e0a3765b965c8c9c35ea1b9bfdb1
parent3ad005a49e44ce35800edcb8a178fc3544d99633 (diff)
[FIX] account: track the changes on account.move.line
The method `_mail_tracker`` must be called after the super call on `write` closes odoo/odoo#65457 Signed-off-by: Laurent Smet <smetl@users.noreply.github.com>
-rw-r--r--addons/account/models/account_move.py65
1 files changed, 33 insertions, 32 deletions
diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py
index eed9d8e3105..ef6aea79031 100644
--- a/addons/account/models/account_move.py
+++ b/addons/account/models/account_move.py
@@ -3853,38 +3853,6 @@ class AccountMoveLine(models.Model):
move_initial_values[line.move_id.id] = {}
move_initial_values[line.move_id.id].update({field: line[field]})
- # Create the dict for the message post
- tracking_values = {} # Tracking values to write in the message post
- for move_id, modified_lines in move_initial_values.items():
- tmp_move = {move_id: []}
- for line in self.filtered(lambda l: l.move_id.id == move_id):
- changes, tracking_value_ids = line._mail_track(ref_fields, modified_lines) # Return a tuple like (changed field, ORM command)
- tmp = {'line_id': line.id}
- if tracking_value_ids:
- selected_field = tracking_value_ids[0][2] # Get the last element of the tuple in the list of ORM command. (changed, [(0, 0, THIS)])
- tmp.update({
- **{'field_name': selected_field.get('field_desc')},
- **self._get_formated_values(selected_field)
- })
- elif changes:
- field_name = line._fields[changes.pop()].string # Get the field name
- tmp.update({
- 'error': True,
- 'field_error': field_name
- })
- else:
- continue
- tmp_move[move_id].append(tmp)
- if len(tmp_move[move_id]) > 0:
- tracking_values.update(tmp_move)
-
- # Write in the chatter.
- for move in self.mapped('move_id'):
- fields = tracking_values.get(move.id, [])
- if len(fields) > 0:
- msg = self._get_tracking_field_string(tracking_values.get(move.id))
- move.message_post(body=msg) # Write for each concerned move the message in the chatter
-
result = True
for line in self:
cleaned_vals = line.move_id._cleanup_write_orm_values(line, vals)
@@ -3930,6 +3898,39 @@ class AccountMoveLine(models.Model):
self.mapped('move_id')._synchronize_business_models({'line_ids'})
+ if not self.env.context.get('tracking_disable', False):
+ # Create the dict for the message post
+ tracking_values = {} # Tracking values to write in the message post
+ for move_id, modified_lines in move_initial_values.items():
+ tmp_move = {move_id: []}
+ for line in self.filtered(lambda l: l.move_id.id == move_id):
+ changes, tracking_value_ids = line._mail_track(ref_fields, modified_lines) # Return a tuple like (changed field, ORM command)
+ tmp = {'line_id': line.id}
+ if tracking_value_ids:
+ selected_field = tracking_value_ids[0][2] # Get the last element of the tuple in the list of ORM command. (changed, [(0, 0, THIS)])
+ tmp.update({
+ **{'field_name': selected_field.get('field_desc')},
+ **self._get_formated_values(selected_field)
+ })
+ elif changes:
+ field_name = line._fields[changes.pop()].string # Get the field name
+ tmp.update({
+ 'error': True,
+ 'field_error': field_name
+ })
+ else:
+ continue
+ tmp_move[move_id].append(tmp)
+ if len(tmp_move[move_id]) > 0:
+ tracking_values.update(tmp_move)
+
+ # Write in the chatter.
+ for move in self.mapped('move_id'):
+ fields = tracking_values.get(move.id, [])
+ if len(fields) > 0:
+ msg = self._get_tracking_field_string(tracking_values.get(move.id))
+ move.message_post(body=msg) # Write for each concerned move the message in the chatter
+
return result
def _valid_field_parameter(self, field, name):