summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/view_form.js
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2015-01-06 11:49:04 +0100
committerChristophe Simonis <chs@odoo.com>2015-01-06 11:49:04 +0100
commitfab4d6d442ebbf081ead7e747f04b61e01ae9db2 (patch)
tree3dd9aad0f429f4229e500db503bbf8b7155f9c38 /addons/web/static/src/js/view_form.js
parent7fea986fd9f6f3ce1cc6c015a2523fdd23cf814d (diff)
parentea54d4af9f75e518c5871213a668a9f516e56830 (diff)
[MERGE] forward port of branch 8.0 up to ea54d4a
Diffstat (limited to 'addons/web/static/src/js/view_form.js')
-rw-r--r--addons/web/static/src/js/view_form.js100
1 files changed, 58 insertions, 42 deletions
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index 933b662d3ff..b004fef331f 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -510,38 +510,47 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
}
this.onchanges_mutex.exec(function(){
return def.then(function(response) {
- if (widget && widget.field['change_default']) {
- var fieldname = widget.name;
- var value_;
- if (response.value && (fieldname in response.value)) {
- // Use value from onchange if onchange executed
- value_ = response.value[fieldname];
- } else {
- // otherwise get form value for field
- value_ = self.fields[fieldname].get_value();
- }
- var condition = fieldname + '=' + value_;
-
- if (value_) {
- return self.alive(new instance.web.Model('ir.values').call(
- 'get_defaults', [self.model, condition]
- )).then(function (results) {
- if (!results.length) {
+ var fields = {};
+ if (widget){
+ fields[widget.name] = widget.field;
+ }
+ else{
+ fields = self.fields_view.fields;
+ }
+ var defs = [];
+ _.each(fields, function(field, fieldname){
+ if (field && field.change_default) {
+ var value_;
+ if (response.value && (fieldname in response.value)) {
+ // Use value from onchange if onchange executed
+ value_ = response.value[fieldname];
+ } else {
+ // otherwise get form value for field
+ value_ = self.fields[fieldname].get_value();
+ }
+ var condition = fieldname + '=' + value_;
+
+ if (value_) {
+ defs.push(self.alive(new instance.web.Model('ir.values').call(
+ 'get_defaults', [self.model, condition]
+ )).then(function (results) {
+ if (!results.length) {
+ return response;
+ }
+ if (!response.value) {
+ response.value = {};
+ }
+ for(var i=0; i<results.length; ++i) {
+ // [whatever, key, value]
+ var triplet = results[i];
+ response.value[triplet[1]] = triplet[2];
+ }
return response;
- }
- if (!response.value) {
- response.value = {};
- }
- for(var i=0; i<results.length; ++i) {
- // [whatever, key, value]
- var triplet = results[i];
- response.value[triplet[1]] = triplet[2];
- }
- return response;
- });
+ }));
+ }
}
- }
- return response;
+ });
+ return _.isEmpty(defs) ? response : $.when.apply(null, defs);
}).then(function(response) {
return self.on_processed_onchange(response);
});
@@ -1151,7 +1160,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
},
build_eval_context: function() {
var a_dataset = this.dataset;
- return new instance.web.CompoundContext(a_dataset.get_context(), this._build_view_fields_values());
+ return new instance.web.CompoundContext(this._build_view_fields_values(), a_dataset.get_context());
},
});
@@ -3244,9 +3253,7 @@ instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.w
click_change_value: function (event) {
var val = $(event.target).val();
val = this.field.type == "selection" ? val : +val;
- if (val == this.get_value()) {
- this.set_value(false);
- } else {
+ if (val !== this.get_value()) {
this.set_value(val);
}
},
@@ -3762,7 +3769,14 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
// disabled to solve a bug, but may cause others
//close: anyoneLoosesFocus,
minLength: 0,
- delay: 250
+ delay: 250,
+ });
+ var appendTo = this.$el.parents('.oe_view_manager_body, .modal-dialog').last();
+ if (appendTo.length === 0){
+ appendTo = '.oe_application > *';
+ }
+ this.$input.autocomplete({
+ appendTo: appendTo
});
// set position for list of suggestions box
this.$input.autocomplete( "option", "position", { my : "left top", at: "left bottom" } );
@@ -4069,16 +4083,18 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({
var self = this;
self.load_views();
- this.is_loaded.done(function() {
- self.on("change:effective_readonly", self, function() {
- self.is_loaded = self.is_loaded.then(function() {
- self.viewmanager.destroy();
- return $.when(self.load_views()).done(function() {
- self.reload_current_view();
- });
+ var destroy = function() {
+ self.is_loaded = self.is_loaded.then(function() {
+ self.viewmanager.destroy();
+ return $.when(self.load_views()).done(function() {
+ self.reload_current_view();
});
});
+ };
+ this.is_loaded.done(function() {
+ self.on("change:effective_readonly", self, destroy);
});
+ this.view.on("on_button_cancel", self, destroy);
this.is_started = true;
this.reload_current_view();
},