Use defaults dictionary for new default values

Replace the rec_name argument by a dictionary of default values.
This commit is contained in:
Cédric Krier committed 2023-09-26 14:55:34 +02:00
1 parent d8530fc867
commit 96c2cd16f1
12 files changed
+88 -51

No files matched your search

+7 -5
View File
@@ -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);
+3 -3
View File
@@ -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();
}
+35 -14
View File
@@ -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('<button/>', {
'class': 'btn btn-default btn-sm',
@@ -3519,19 +3525,27 @@ function eval_pyson(value){
}
this.screen.remove(false, true, false);
},
new_: function(event_) {
new_: function(defaults=null) {
if (!Sao.common.MODELACCESS.get(this.screen.model_name).create) {
return;
}
if (this.attributes.add_remove) {
if (defaults) {
defaults = jQuery.extend({}, defaults);
} else {
defaults = {};
}
defaults.rec_name = this.wid_text.val();
}
this.validate().done(() => {
if (this.attributes.product) {
this.new_product();
this.new_product(defaults);
} else {
this.new_single();
this.new_single(defaults);
}
});
},
new_single: function() {
new_single: function(defaults=null) {
var sequence = this._sequence();
const update_sequence = () => {
if (sequence) {
@@ -3549,17 +3563,18 @@ function eval_pyson(value){
field_size -= this.field.get_eval(record).length;
var win = new Sao.Window.Form(this.screen, update_sequence, {
new_: true,
defaults: defaults,
many: field_size,
});
}
},
new_product: function() {
new_product: function(defaults=null) {
var fields = this.attributes.product.split(',');
var product = {};
var screen = this.screen;
screen.new_(false).then(first => {
first.default_get().then(default_ => {
first.default_get(defaults).then(default_ => {
first.set_default(default_);
const search_set = () => {
@@ -3661,7 +3676,7 @@ function eval_pyson(value){
key_press: function(event_) {
if (event_.which == Sao.common.F3_KEYCODE) {
event_.preventDefault();
this.new_(event_);
this.new_();
} else if (event_.which == Sao.common.F2_KEYCODE) {
event_.preventDefault();
this.add(event_);
@@ -4052,8 +4067,15 @@ function eval_pyson(value){
new Sao.Window.Form(screen, callback);
});
},
new_: function() {
new_: function(defauts=null) {
var screen = this._get_screen_form();
if (defaults) {
defaults = jQuery.extend({}, defaults);
} else {
defaults = {};
}
defaults.rec_name = this.entry.val();
const callback = result => {
if (result) {
var record = screen.current_record;
@@ -4061,12 +4083,11 @@ function eval_pyson(value){
}
this.entry.val('');
};
var text = this.entry.val();
screen.switch_view().done(() => {
new Sao.Window.Form(screen, callback, {
'new_': true,
'save_current': true,
rec_name: text,
'defaults': defaults,
});
});
},
+1 -1
View File
@@ -166,7 +166,7 @@
.done(() => {
if (kwargs.new_ &&
(this.screen.current_view.view_type == view_type)) {
this.screen.new_(undefined, kwargs.rec_name);
this.screen.new_(undefined, kwargs.defaults);
}
});
var dialog = new Sao.Dialog('', 'window-form', 'lg', false);
@@ -378,10 +378,10 @@ class Group(list):
if changed:
self.record_modified()
def new(self, default=True, obj_id=None, rec_name=None):
def new(self, default=True, obj_id=None, defaults=None):
record = Record(self.model_name, obj_id, group=self)
if default:
record.default_get(rec_name=rec_name)
record.default_get(defaults=defaults)
return record
def unremove(self, record, modified=True):
@@ -374,10 +374,12 @@ class Record:
self.parent.save(force_reload=force_reload)
return self.id
def default_get(self, rec_name=None):
def default_get(self, defaults=None):
if len(self.group.fields):
context = self.get_context()
context.setdefault('default_rec_name', rec_name)
if defaults is not None:
for name, value in defaults.items():
context.setdefault(f'default_{name}', value)
try:
vals = RPCExecute('model', self.model_name, 'default_get',
list(self.group.fields.keys()), context=context)
@@ -640,7 +640,7 @@ class Screen:
return view
def new(self, default=True, rec_name=None):
def new(self, default=True, defaults=None):
previous_view = self.current_view
if self.current_view.view_type == 'calendar':
selected_date = self.current_view.get_selected_date()
@@ -652,7 +652,7 @@ class Screen:
group = self.current_record.group
else:
group = self.group
record = group.new(default, rec_name=rec_name)
record = group.new(default, defaults=defaults)
group.add(record, self.new_position)
if previous_view.view_type == 'calendar':
previous_view.set_default_date(record, selected_date)
@@ -230,8 +230,10 @@ class Many2Many(Widget):
self.screen.display()
WinForm(screen, callback)
def _sig_new(self):
def _sig_new(self, defaults=None):
screen = self._get_screen_form()
defaults = defaults.copy() if defaults is not None else {}
defaults['rec_name'] = self.wid_text.get_text()
def callback(result):
self.focus_out = True
@@ -242,8 +244,8 @@ class Many2Many(Widget):
self.wid_text.grab_focus()
self.focus_out = False
WinForm(screen, callback, new=True, save_current=True,
rec_name=self.wid_text.get_text())
WinForm(
screen, callback, new=True, save_current=True, defaults=defaults)
def _readonly_set(self, value):
self._readonly = value
@@ -161,11 +161,13 @@ class Many2One(Widget):
exclude_field=self.attrs.get('relation_field'),
breadcrumb=breadcrumb)
def sig_new(self, *args):
def sig_new(self, defaults=None):
if not self.create_access:
return
self.focus_out = False
screen = self.get_screen(search=True)
defaults = defaults.copy() if defaults is not None else {}
defaults['rec_name'] = self.wid_text.get_text()
def callback(result):
if result:
@@ -173,8 +175,8 @@ class Many2One(Widget):
self.value_from_id(screen.current_record.id,
screen.current_record.rec_name()))
self.focus_out = True
WinForm(screen, callback, new=True, save_current=True,
rec_name=self.wid_text.get_text())
WinForm(
screen, callback, new=True, save_current=True, defaults=defaults)
def sig_edit(self, entry=None, icon_pos=None, *args):
if entry:
@@ -243,7 +245,7 @@ class Many2One(Widget):
if (event.keyval == Gdk.KEY_F3
and editable
and self.create_access):
self.sig_new(widget, event)
self.sig_new()
return True
elif event.keyval == Gdk.KEY_F2 and self.read_access:
self.sig_edit(widget)
@@ -119,7 +119,7 @@ class One2Many(Widget):
self.but_new = Gtk.Button(can_focus=False)
tooltips.set_tip(self.but_new, _('Create a new record'))
self.but_new.connect('clicked', self._sig_new)
self.but_new.connect('clicked', lambda *a: self._sig_new())
self.but_new.add(common.IconFactory.get_image(
'tryton-create', Gtk.IconSize.SMALL_TOOLBAR))
self.but_new.set_relief(Gtk.ReliefStyle.NONE)
@@ -210,7 +210,7 @@ class One2Many(Widget):
def on_keypress(self, widget, event):
if ((event.keyval == Gdk.KEY_F3)
and self.but_new.get_property('sensitive')):
self._sig_new(widget)
self._sig_new()
return True
if event.keyval == Gdk.KEY_F2:
if widget == self.screen.widget:
@@ -353,18 +353,21 @@ class One2Many(Widget):
if sequence:
return sequence
def _sig_new(self, *args):
def _sig_new(self, defaults=None):
if not self.create_access:
return
if not self._validate():
return
if self.attrs.get('add_remove'):
defaults = defaults.copy() if defaults is not None else {}
defaults['rec_name'] = self.wid_text.get_text()
if self.attrs.get('product'):
self._new_product()
self._new_product(defaults)
else:
self._new_single()
self._new_single(defaults)
def _new_single(self):
def _new_single(self, defaults=None):
sequence = self._sequence()
def update_sequence():
@@ -379,15 +382,16 @@ class One2Many(Widget):
else:
field_size = self.record.expr_eval(self.attrs.get('size')) or -1
field_size -= len(self.field.get_eval(self.record)) + 1
WinForm(self.screen, lambda a: update_sequence(), new=True,
many=field_size)
WinForm(
self.screen, lambda a: update_sequence(), new=True,
defaults=defaults, many=field_size)
def _new_product(self):
def _new_product(self, defaults=None):
fields = self.attrs['product'].split(',')
product = {}
first = self.screen.new(default=False)
default = first.default_get()
default = first.default_get(defaults=defaults)
first.set_default(default)
def search_set(*args):
@@ -882,7 +882,8 @@ class M2O(GenericText):
changed(editable)
return False
def open_remote(self, record, create=True, changed=False, text=None,
def open_remote(
self, record, create=True, changed=False, text=None, defaults=None,
callback=None):
field = record.group.fields[self.attrs['name']]
model = self.get_model(record, field)
@@ -923,8 +924,11 @@ class M2O(GenericText):
screen.load([target_id])
WinForm(screen, open_callback, save_current=True)
else:
WinForm(screen, open_callback, new=True, save_current=True,
rec_name=text)
defaults = defaults.copy() if defaults is not None else {}
defaults['rec_name'] = text
WinForm(
screen, open_callback, new=True, save_current=True,
defaults=defaults)
def search_remote(self, record, field, text, callback=None):
model = self.get_model(record, field)
+2 -2
View File
@@ -23,7 +23,7 @@ class WinForm(NoModal, InfoBar):
def __init__(self, screen, callback=None, view_type='form',
new=False, many=0, domain=None, context=None,
save_current=False, title='', rec_name=None):
save_current=False, title='', defaults=None):
tooltips = common.Tooltips()
NoModal.__init__(self)
self.screen = screen
@@ -52,7 +52,7 @@ class WinForm(NoModal, InfoBar):
self.destroy()
return
if new:
self.screen.new(rec_name=rec_name)
self.screen.new(defaults=defaults)
self.win = Gtk.Dialog(
title=_('Link'), transient_for=self.parent,
destroy_with_parent=True)