summaryrefslogtreecommitdiff
path: root/addons/base/static/src/js/form.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/base/static/src/js/form.js')
-rw-r--r--addons/base/static/src/js/form.js99
1 files changed, 82 insertions, 17 deletions
diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js
index 6eeff025e1f..e7bc2d51eba 100644
--- a/addons/base/static/src/js/form.js
+++ b/addons/base/static/src/js/form.js
@@ -1,5 +1,5 @@
openerp.base.form = function (openerp) {
-
+
var _t = openerp.base._t;
openerp.base.views.add('form', 'openerp.base.FormView');
@@ -346,7 +346,10 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
});
}
} else {
- return false;
+ setTimeout(function() {
+ self.on_saved({ result: true }, success);
+ });
+ return true;
}
},
do_save_edit: function() {
@@ -458,9 +461,7 @@ openerp.base.form.SidebarAttachments = openerp.base.Widget.extend({
['res_model', '=', this.view.dataset.model],
['res_id', '=', this.view.datarecord.id],
['type', 'in', ['binary', 'url']]
- ])).read_slice(
- {fields: ['name', 'url', 'type']},
- this.on_attachments_loaded);
+ ])).read_slice(['name', 'url', 'type'], this.on_attachments_loaded);
}
},
on_attachments_loaded: function(attachments) {
@@ -811,6 +812,7 @@ openerp.base.form.WidgetLabel = openerp.base.form.Widget.extend({
this.$element.find("label").dblclick(function() {
var widget = self['for'] || self;
self.log(widget.element_id , widget);
+ window.w = widget;
});
}
});
@@ -841,9 +843,12 @@ openerp.base.form.Field = openerp.base.form.Widget.extend({
this.value = value;
this.invalid = false;
this.update_dom();
+ this.on_value_changed();
},
set_value_from_ui: function() {
- this.value = undefined;
+ this.on_value_changed();
+ },
+ on_value_changed: function() {
},
get_value: function() {
return this.value;
@@ -942,6 +947,7 @@ openerp.base.form.FieldChar = openerp.base.form.Field.extend({
},
set_value_from_ui: function() {
this.value = this.$element.find('input').val();
+ this._super();
},
validate: function() {
this.invalid = false;
@@ -1016,6 +1022,7 @@ openerp.base.form.FieldFloat = openerp.base.form.FieldChar.extend({
},
set_value_from_ui: function() {
this.value = Number(this.$element.find('input').val().replace(/,/g, '.'));
+ this._super();
}
});
@@ -1036,6 +1043,7 @@ openerp.base.form.FieldInteger = openerp.base.form.FieldFloat.extend({
},
set_value_from_ui: function() {
this.value = Number(this.$element.find('input').val());
+ this._super();
}
});
@@ -1073,6 +1081,7 @@ openerp.base.form.FieldDatetime = openerp.base.form.Field.extend({
if (this.value) {
this.value = this.format(this.value);
}
+ this._super();
},
update_dom: function() {
this._super.apply(this, arguments);
@@ -1092,8 +1101,8 @@ openerp.base.form.FieldDatetime = openerp.base.form.Field.extend({
focus: function() {
this.$element.find('input').focus();
},
- parse: openerp.base.parse_datetime,
- format: openerp.base.format_datetime
+ parse: openerp.base.str_to_datetime,
+ format: openerp.base.datetime_to_str
});
openerp.base.form.FieldDate = openerp.base.form.FieldDatetime.extend({
@@ -1102,8 +1111,8 @@ openerp.base.form.FieldDate = openerp.base.form.FieldDatetime.extend({
this.jqueryui_object = 'datepicker';
this.validation_regex = /^\d+-\d+-\d+$/;
},
- parse: openerp.base.parse_date,
- format: openerp.base.format_date
+ parse: openerp.base.str_to_date,
+ format: openerp.base.date_to_str
});
openerp.base.form.FieldFloatTime = openerp.base.form.FieldChar.extend({
@@ -1124,6 +1133,7 @@ openerp.base.form.FieldFloatTime = openerp.base.form.FieldChar.extend({
set_value_from_ui: function() {
var time = this.$element.find('input').val().split(':');
this.set_value(parseInt(time[0], 10) + parseInt(time[1], 10) / 60);
+ this._super();
}
});
@@ -1148,6 +1158,7 @@ openerp.base.form.FieldText = openerp.base.form.Field.extend({
},
set_value_from_ui: function() {
this.value = this.$element.find('textarea').val();
+ this._super();
},
validate: function() {
this.invalid = false;
@@ -1183,6 +1194,7 @@ openerp.base.form.FieldBoolean = openerp.base.form.Field.extend({
},
set_value_from_ui: function() {
this.value = this.$element.find('input').is(':checked');
+ this._super();
},
update_dom: function() {
this._super.apply(this, arguments);
@@ -1265,6 +1277,7 @@ openerp.base.form.FieldSelection = openerp.base.form.Field.extend({
var ikey = this.$element.find('select').val();
var option = _.detect(this.field_index, function(x) {return x.ikey === ikey;});
this.value = option === undefined ? false : option.ekey;
+ this._super();
},
update_dom: function() {
this._super.apply(this, arguments);
@@ -1529,7 +1542,6 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
this.on_ui_change();
}
},
- set_value_from_ui: function() {},
set_value: function(value) {
value = value || null;
var self = this;
@@ -1697,7 +1709,6 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
});
}
},
- set_value_from_ui: function() {},
set_value: function(value) {
value = value || [];
var self = this;
@@ -1918,7 +1929,6 @@ openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({
get_value: function() {
return [commands.replace_with(this.dataset.ids)];
},
- set_value_from_ui: function() {},
validate: function() {
this.invalid = false;
// TODO niv
@@ -2192,10 +2202,67 @@ openerp.base.form.FormOpenPopup = openerp.base.OldWidget.extend({
}
});
-openerp.base.form.FieldReference = openerp.base.form.FieldChar.extend({
+openerp.base.form.FieldReference = openerp.base.form.Field.extend({
init: function(view, node) {
this._super(view, node);
- //this.template = "FieldReference";
+ this.template = "FieldReference";
+ this.fields_view = {
+ fields: {
+ selection: {
+ selection: view.fields_view.fields[this.name].selection
+ },
+ m2o: {
+ relation: null
+ }
+ }
+ }
+ this.get_fields_values = view.get_fields_values;
+ this.do_onchange = this.on_form_changed = this.on_nop;
+ this.widgets = {};
+ this.fields = {};
+ this.selection = new openerp.base.form.FieldSelection(this, { attrs: {
+ name: 'selection',
+ widget: 'selection'
+ }});
+ this.selection.on_value_changed.add_last(this.on_selection_changed);
+ this.m2o = new openerp.base.form.FieldMany2One(this, { attrs: {
+ name: 'm2o',
+ widget: 'many2one'
+ }});
+ },
+ on_nop: function() {
+ },
+ on_selection_changed: function() {
+ this.m2o.field.relation = this.selection.get_value();
+ this.m2o.set_value(null);
+ },
+ start: function() {
+ this._super();
+ this.selection.start();
+ this.m2o.start();
+ },
+ is_valid: function() {
+ return this.required === false || typeof(this.get_value()) === 'string';
+ },
+ is_dirty: function() {
+ return this.selection.is_dirty() || this.m2o.is_dirty();
+ },
+ set_value: function(value) {
+ this._super(value);
+ if (typeof(value) === 'string') {
+ var vals = value.split(',');
+ this.selection.set_value(vals[0]);
+ this.m2o.set_value(parseInt(vals[1], 10));
+ }
+ },
+ get_value: function() {
+ var model = this.selection.get_value(),
+ id = this.m2o.get_value();
+ if (typeof(model) === 'string' && typeof(id) === 'number') {
+ return model + ',' + id;
+ } else {
+ return false;
+ }
}
});
@@ -2211,8 +2278,6 @@ openerp.base.form.FieldBinary = openerp.base.form.Field.extend({
this.$element.find('button.oe-binary-file-save').click(this.on_save_as);
this.$element.find('.oe-binary-file-clear').click(this.on_clear);
},
- set_value_from_ui: function() {
- },
update_dom: function() {
this._super.apply(this, arguments);
this.$element.find('.oe-binary').toggle(!this.readonly);