From 6159c55203b4050a95230636f54673617f20f434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 8 May 2025 18:22:54 +0200 Subject: [PATCH] Set default value via domain inversion only when deferred operand is id Other cases for deferred operand can not be deduced as unique for sure. Closes #14005 --- sao/src/model.js | 19 +++++-------------- .../gui/window/view_form/model/field.py | 12 ++++-------- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/sao/src/model.js b/sao/src/model.js index df6926c6c8..7f6a6229e6 100644 --- a/sao/src/model.js +++ b/sao/src/model.js @@ -1771,7 +1771,6 @@ // XXX to remove once server domains are fixed value = null; } - var setdefault = true; var original_domain; if (!jQuery.isEmptyObject(record.group.domain)) { original_domain = inversion.merge(record.group.domain); @@ -1779,20 +1778,12 @@ original_domain = inversion.merge(domain); } var domain_readonly = original_domain[0] == 'AND'; + let setdefault; if (leftpart.contains('.')) { - var recordpart = leftpart.split('.', 1)[0]; - var localpart = leftpart.split('.', 1)[1]; - var constraintfields = []; - if (domain_readonly) { - for (const leaf of inversion.localize_domain( - original_domain.slice(1))) { - constraintfields.push(leaf); - } - } - if ((localpart != 'id') || - !~constraintfields.indexOf(recordpart)) { - setdefault = false; - } + let localpart = leftpart.split('.').slice(1).join('.'); + setdefault = localpart == 'id'; + } else { + setdefault = true; } if (setdefault && jQuery.isEmptyObject(pre_validate)) { this.set_client(record, value); diff --git a/tryton/tryton/gui/window/view_form/model/field.py b/tryton/tryton/gui/window/view_form/model/field.py index 9bbe5427e5..69e6e01578 100644 --- a/tryton/tryton/gui/window/view_form/model/field.py +++ b/tryton/tryton/gui/window/view_form/model/field.py @@ -132,20 +132,16 @@ class Field(object): if value is False: # XXX to remove once server domains are fixed value = None - setdefault = True if record.group.domain: original_domain = merge(record.group.domain) else: original_domain = merge(domain) domain_readonly = original_domain[0] == 'AND' if '.' in leftpart: - recordpart, localpart = leftpart.split('.', 1) - constraintfields = set() - if domain_readonly: - for leaf in localize_domain(original_domain[1:]): - constraintfields.add(leaf[0]) - if localpart != 'id' or recordpart not in constraintfields: - setdefault = False + localpart = leftpart.split('.', 1)[1] + setdefault = localpart == 'id' + else: + setdefault = True if setdefault and not pre_validate: self.set_client(record, value) state_attrs['domain_readonly'] = domain_readonly