diff --git a/sao/src/model.js b/sao/src/model.js index 07f06edf45..3d6faed833 100644 --- a/sao/src/model.js +++ b/sao/src/model.js @@ -123,11 +123,11 @@ } } }; - array.new_ = function(default_, id, rec_name) { + array.new_ = function(default_, id, defaults=null) { var record = new Sao.Record(this.model, id); record.group = this; if (default_) { - record.default_get(rec_name); + record.default_get(defaults); } return record; }; @@ -919,11 +919,13 @@ field_set_client: function(name, value, force_change) { this.model.fields[name].set_client(this, value, force_change); }, - default_get: function(rec_name) { + default_get: function(defaults=null) { if (!jQuery.isEmptyObject(this.model.fields)) { var context = this.get_context(); - if (context.default_rec_name === undefined) { - context.default_rec_name = rec_name; + if (defaults) { + for (const name in defaults) { + Sao.setdefault(context, `default_${name}` ,defaults[name]); + } } var prm = this.model.execute('default_get', [Object.keys(this.model.fields)], context); diff --git a/sao/src/screen.js b/sao/src/screen.js index 1dbfd6e82f..89acb8a6c5 100644 --- a/sao/src/screen.js +++ b/sao/src/screen.js @@ -1499,7 +1499,7 @@ return this.current_record.id; } }, - new_: function(default_=true, rec_name=null) { + new_: function(default_=true, defaults=null) { var previous_view = this.current_view; var prm = jQuery.when(); if (this.current_view.view_type == 'calendar') { @@ -1518,10 +1518,10 @@ } else { group = this.group; } - var record = group.new_(false, undefined, rec_name); + var record = group.new_(false); var prm; if (default_) { - prm = record.default_get(rec_name); + prm = record.default_get(defaults); } else { prm = jQuery.when(); } diff --git a/sao/src/view/form.js b/sao/src/view/form.js index ef6641e233..8e5c5e64d4 100644 --- a/sao/src/view/form.js +++ b/sao/src/view/form.js @@ -2766,12 +2766,19 @@ function eval_pyson(value){ return; } }, - new_: function(evt) { + new_: function(defaults=null) { var model = this.get_model(); if (!model || ! Sao.common.MODELACCESS.get(model).create) { return; } var screen = this.get_screen(true); + if (defaults) { + defaults = jQuery.extend({}, defaults); + } else { + defaults = {}; + } + defaults.rec_name = this.entry.val(); + const callback = result => { if (result) { var rec_name_prm = screen.current_record.rec_name(); @@ -2782,12 +2789,11 @@ function eval_pyson(value){ }); } }; - var rec_name = this.entry.val(); screen.switch_view().done(() => { var win = new Sao.Window.Form(screen, callback, { new_: true, save_current: true, - rec_name: rec_name + defaults: defaults, }); }); }, @@ -3217,7 +3223,7 @@ function eval_pyson(value){ 'title': Sao.i18n.gettext("New"), }).append(Sao.common.ICONFACTORY.get_icon_img('tryton-create') ).appendTo(buttons); - this.but_new.click(disable_during(this.new_.bind(this))); + this.but_new.click(disable_during(() => this.new_(this))); this.but_open = jQuery('