diff options
| author | Christophe Simonis <chs@openerp.com> | 2011-09-27 10:54:35 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@openerp.com> | 2011-09-27 10:54:35 +0200 |
| commit | 1d2d17a36591abee75b35b99ca9f0db0ec6e1269 (patch) | |
| tree | 62bdfc7e6f61b372639e1f9cfaef4a16d0040ebf /addons/web/static/src | |
| parent | 4261f1ad11fbe4772319190e59df80e504849bc4 (diff) | |
| parent | 5e303d0ea4260cbd7ea00870381998150f0e6bcf (diff) | |
[MERGE] merge upstream + code adaptation to revid:al@openerp.com-20110927001435-vttw23epyru5gm0b
bzr revid: chs@openerp.com-20110927085435-pipko7w752conp3a
Diffstat (limited to 'addons/web/static/src')
| -rw-r--r-- | addons/web/static/src/js/data.js | 23 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_form.js | 67 |
2 files changed, 54 insertions, 36 deletions
diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index e5d323c8a96..00281628e75 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -608,15 +608,23 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ init: function() { this._super.apply(this, arguments); this.reset_ids([]); + this.last_default_get = {}; + }, + default_get: function(fields, callback) { + return this._super(fields).then(this.on_default_get).then(callback); + }, + on_default_get: function(res) { + this.last_default_get = res; }, create: function(data, callback, error_callback) { - var cached = {id:_.uniqueId(this.virtual_id_prefix), values: data}; + var cached = {id:_.uniqueId(this.virtual_id_prefix), values: data, + defaults: this.last_default_get}; this.to_create.push(cached); this.cache.push(cached); this.on_change(); - var to_return = $.Deferred().then(callback); - to_return.resolve({result: cached.id}); - return to_return.promise(); + var prom = $.Deferred().then(callback); + setTimeout(function() {prom.resolve({result: cached.id});}, 0); + return prom.promise(); }, write: function (id, data, options, callback) { var self = this; @@ -676,7 +684,8 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ var cached = _.detect(self.cache, function(x) {return x.id === id;}); var created = _.detect(self.to_create, function(x) {return x.id === id;}); if (created) { - _.each(fields, function(x) {if (cached.values[x] === undefined) cached.values[x] = false;}); + _.each(fields, function(x) {if (cached.values[x] === undefined) + cached.values[x] = created.defaults[x] || false;}); } else { if (!cached || !_.all(fields, function(x) {return cached.values[x] !== undefined})) to_get.push(id); @@ -716,6 +725,10 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({ } }); openerp.web.ReadOnlyDataSetSearch = openerp.web.DataSetSearch.extend({ + default_get: function(fields, callback) { + return this._super(fields, callback).then(this.on_default_get); + }, + on_default_get: function(result) {}, create: function(data, callback, error_callback) { this.on_create(data); var to_return = $.Deferred().then(callback); diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 4b9432ca41a..c7ffb896186 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -345,7 +345,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# do_save: function(success, prepend_on_create) { var self = this; if (!this.ready) { - return false; + return $.Deferred().reject(); } var form_dirty = false, form_invalid = false, @@ -367,17 +367,17 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# if (form_invalid) { first_invalid_field.focus(); this.on_invalid(); - return false; + return $.Deferred().reject(); } else { console.log("About to save", values); if (!this.datarecord.id) { - return this.dataset.create(values, function(r) { - self.on_created(r, success, prepend_on_create); - }); + return this.dataset.create(values).pipe(function(r) { + return self.on_created(r, undefined, prepend_on_create); + }).then(success); } else { - return this.dataset.write(this.datarecord.id, values, {}, function(r) { - self.on_saved(r, success); - }); + return this.dataset.write(this.datarecord.id, values, {}).pipe(function(r) { + return self.on_saved(r); + }).then(success); } } }, @@ -402,11 +402,10 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# on_saved: function(r, success) { if (!r.result) { // should not happen in the server, but may happen for internal purpose + return $.Deferred().reject(); } else { - if (success) { - success(r); - } this.reload(); + return $.Deferred().then(success).resolve(r); } }, /** @@ -425,6 +424,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# on_created: function(r, success, prepend_on_create) { if (!r.result) { // should not happen in the server, but may happen for internal purpose + return $.Deferred().reject(); } else { this.datarecord.id = r.result; if (!prepend_on_create) { @@ -439,10 +439,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.sidebar.attachments.do_update(); } console.debug("The record has been created with id #" + this.datarecord.id); - if (success) { - success(_.extend(r, {created: true})); - } this.reload(); + return $.Deferred().then(success).resolve(_.extend(r, {created: true})); } }, do_search: function (domains, contexts, groupbys) { @@ -472,6 +470,13 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# get_selected_ids: function() { var id = this.dataset.ids[this.dataset.index]; return id ? [id] : []; + }, + recursive_save: function() { + var self = this; + return $.when(this.do_save()).pipe(function(res) { + if (self.dataset.parent_view) + return self.dataset.parent_view.recursive_save(); + }); } }); openerp.web.FormDialog = openerp.web.Dialog.extend({ @@ -830,30 +835,31 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ this._super.apply(this, arguments); this.$element.click(this.on_click); }, - on_click: function(saved) { + on_click: function() { var self = this; - if ((!this.node.attrs.special && this.view.dirty_for_user && saved !== true) || !this.view.datarecord.id) { - this.view.do_save(function() { - self.on_click(true); - }); - } else { - if (this.node.attrs.confirm) { - var dialog = $('<div>' + this.node.attrs.confirm + '</div>').dialog({ + var exec_action = function() { + if (self.node.attrs.confirm) { + var dialog = $('<div>' + self.node.attrs.confirm + '</div>').dialog({ title: 'Confirm', modal: true, buttons: { Ok: function() { self.on_confirmed(); - $(this).dialog("close"); + $(self).dialog("close"); }, Cancel: function() { - $(this).dialog("close"); + $(self).dialog("close"); } } }); } else { - this.on_confirmed(); + self.on_confirmed(); } + }; + if ((!this.node.attrs.special && this.view.dirty_for_user) || !this.view.datarecord.id) { + this.view.recursive_save().then(exec_action); + } else { + exec_action(); } }, on_confirmed: function() { @@ -1945,11 +1951,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ var view = this.viewmanager.views[this.viewmanager.active_view].controller; if (this.viewmanager.active_view === "form") { var res = $.when(view.do_save()); - if (res === false) { - // ignore - } else if (res.isRejected()) { - throw "Save or create on one2many dataset is not supposed to fail."; - } else if (!res.isResolved()) { + if (!res.isResolved() && !res.isRejected()) { throw "Asynchronous get_value() is not supported in form view."; } return res; @@ -2002,6 +2004,7 @@ openerp.web.form.One2ManyListView = openerp.web.ListView.extend({ } else { var self = this; var pop = new openerp.web.form.SelectCreatePopup(this); + pop.on_default_get.add(self.dataset.on_default_get); pop.select_element(self.o2m.field.relation,{ initial_view: "form", alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined, @@ -2163,6 +2166,7 @@ openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends ope this.dataset = new openerp.web.ReadOnlyDataSetSearch(this, this.model, this.context); this.dataset.parent_view = this.options.parent_view; + this.dataset.on_default_get.add(this.on_default_get); if (this.options.initial_view == "search") { this.setup_search_view(); } else { // "form" @@ -2285,7 +2289,8 @@ openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends ope this.on_select_elements(this.created_elements); } this.stop(); - } + }, + on_default_get: function(res) {} }); openerp.web.form.SelectCreateListView = openerp.web.ListView.extend({ |
