From 352dedba42075d5b4e36e8b8404af5d7ad7d3e05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 25 Aug 2026 12:26:08 +0200 Subject: [PATCH] Display the new record form of wizard after setting the default values We must delay the display after the default values of the record has been set otherwise we may trigger unnecessary RPCs (like search/reading for useless domain). Closes #15030 --- sao/src/screen.js | 12 +++++++---- sao/src/wizard.js | 21 +++++++++++-------- .../gui/window/view_form/screen/screen.py | 9 ++++---- tryton/tryton/gui/window/wizard.py | 3 ++- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/sao/src/screen.js b/sao/src/screen.js index 4b31de4baf..580a9706bf 100644 --- a/sao/src/screen.js +++ b/sao/src/screen.js @@ -1603,7 +1603,7 @@ return this.current_record.id; } }, - new_: function(default_=true, defaults=null) { + new_: function(default_=true, defaults=null, display=true) { var previous_view = this.current_view; var prm = jQuery.when(); if (this.current_view && @@ -1636,10 +1636,14 @@ if (previous_view.view_type == 'calendar') { previous_view.set_default_date(record, selected_date); } - return this.display().then(() => { - this.set_cursor(true, true); + if (display) { + return this.display().then(() => { + this.set_cursor(true, true); + return record; + }); + } else { return record; - }); + } }); }); }, diff --git a/sao/src/wizard.js b/sao/src/wizard.js index 52c3ef66dd..754aa737bd 100644 --- a/sao/src/wizard.js +++ b/sao/src/wizard.js @@ -78,15 +78,18 @@ var view = result.view; this.update(view.fields_view, view.buttons); - prms.push(this.screen.new_(false).then(() => { - return this.screen.current_record.set_default( - view.defaults || {}) - .then(() => { - this.screen.current_record.set( - view.values || {}); - this.update_buttons(); - this.screen.set_cursor(); - }); + prms.push(this.screen.new_(false, null, false) + .then(() => { + return this.screen.current_record.set_default( + view.defaults || {}) + .then(() => { + this.screen.current_record.set( + view.values || {}); + this.update_buttons(); + return this.screen.display().then(() => { + this.screen.set_cursor(); + }); + }); })); this.screen_state = view.state; diff --git a/tryton/tryton/gui/window/view_form/screen/screen.py b/tryton/tryton/gui/window/view_form/screen/screen.py index 3cd85489e9..2b23a5af37 100644 --- a/tryton/tryton/gui/window/view_form/screen/screen.py +++ b/tryton/tryton/gui/window/view_form/screen/screen.py @@ -681,7 +681,7 @@ class Screen: return view - def new(self, default=True, defaults=None): + def new(self, default=True, defaults=None, display=True): previous_view = self.current_view if self.current_view and self.current_view.view_type == 'calendar': selected_date = self.current_view.get_selected_date() @@ -698,9 +698,10 @@ class Screen: if previous_view.view_type == 'calendar': previous_view.set_default_date(record, selected_date) self.current_record = record - self.display() - # Postpone set of the cursor to ensure widgets are allocated - GLib.idle_add(self.set_cursor, True) + if display: + self.display() + # Postpone set of the cursor to ensure widgets are allocated + GLib.idle_add(self.set_cursor, True) return self.current_record @property diff --git a/tryton/tryton/gui/window/wizard.py b/tryton/tryton/gui/window/wizard.py index 1a80444119..5104e22388 100644 --- a/tryton/tryton/gui/window/wizard.py +++ b/tryton/tryton/gui/window/wizard.py @@ -109,12 +109,13 @@ class Wizard(InfoBar): view = result['view'] self.update(view['fields_view'], view['buttons']) - self.screen.new(default=False) + self.screen.new(default=False, display=False) if 'defaults' in view: self.screen.current_record.set_default(view['defaults']) if 'values' in view: self.screen.current_record.set(view['values']) self.update_buttons() + self.screen.display() self.screen.set_cursor() self.screen_state = view['state']