From d43b2c1eb850a55be0b7c155aeaf115d2bcfb7c1 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Thu, 23 Dec 2021 16:14:32 +0100 Subject: [PATCH] [FIX] base_changeset: assign values for all computed fields --- .../models/record_changeset_change.py | 22 ++++++++++++++----- base_changeset/tests/test_changeset_flow.py | 2 ++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/base_changeset/models/record_changeset_change.py b/base_changeset/models/record_changeset_change.py index b7bb17ef4..c1bc47a0b 100644 --- a/base_changeset/models/record_changeset_change.py +++ b/base_changeset/models/record_changeset_change.py @@ -155,14 +155,24 @@ class RecordChangesetChange(models.Model): @api.depends("changeset_id.res_id", "changeset_id.model") def _compute_origin_values(self): states = self.get_pending_changes_states() + field_names = [ + field_name + for field_name in self._fields.keys() + if field_name.startswith("origin_value_") + and field_name != "origin_value_display" + ] for rec in self: field_name = rec.get_field_for_type(rec.field_id, "origin") - if rec.state in states: - value = rec.record_id[rec.field_id.name] - else: - old_field = rec.get_field_for_type(rec.field_id, "old") - value = rec[old_field] - setattr(rec, field_name, value) + for fname in field_names: + if fname == field_name: + if rec.state in states: + value = rec.record_id[rec.field_id.name] + else: + old_field = rec.get_field_for_type(rec.field_id, "old") + value = rec[old_field] + setattr(rec, fname, value) + else: + setattr(rec, fname, False) @api.depends(lambda self: self._value_fields) def _compute_value_display(self): diff --git a/base_changeset/tests/test_changeset_flow.py b/base_changeset/tests/test_changeset_flow.py index c6cb3ec2a..7b86193c0 100644 --- a/base_changeset/tests/test_changeset_flow.py +++ b/base_changeset/tests/test_changeset_flow.py @@ -115,6 +115,8 @@ class TestChangesetFlow(ChangesetTestCommon, TransactionCase): self.assertEqual(self.partner.count_pending_changesets, 0) self.assertEqual(self.partner.name, "Y") self.assertEqual(changeset.change_ids.state, "done") + # All computed fields are assigned + changeset.change_ids.read() def test_apply_done_change(self): """ Done changes do not apply (already applied) """