Use defaults dictionary for new default values
Replace the rec_name argument by a dictionary of default values.
This commit is contained in:
1 parent
d8530fc867
commit
96c2cd16f1
12 files changed
+88
-51
No files matched your search
+7
-5
@@ -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
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user