From dc764a3832cffad51746149821ab527fdf9370ac Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 18 Jul 2011 16:29:23 +0200 Subject: [PATCH 1/2] [fix] little correction in clean_action bzr revid: nicolas.vanhoren@openerp.com-20110718142923-drk0tvdl8jj2z54f --- addons/base/controllers/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 36dd21901a9..da471499087 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -264,7 +264,7 @@ def clean_action(action, session): action['domain'] = eval( action['domain'], session.evaluation_context( - action['context'])) or [] + action.get('context', {}))) or [] if 'flags' not in action: # Set empty flags dictionary for web client. action['flags'] = dict() From 193fc86c38fb2a3241e16b6afcc79627f4c1886a Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 18 Jul 2011 17:28:07 +0200 Subject: [PATCH 2/2] [fix] fix a big bug in the one2many bzr revid: nicolas.vanhoren@openerp.com-20110718152807-bgy47f32tlx9xdzb --- addons/base/static/src/js/data.js | 15 ++++++----- addons/base/static/src/js/form.js | 43 ++++++++++++++++++++++++------- 2 files changed, 42 insertions(+), 16 deletions(-) diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index c1b64b93307..c70e23c516a 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -388,9 +388,6 @@ openerp.base.DataSetStatic = openerp.base.DataSet.extend({ this._super(session, model, context); // all local records this.ids = ids || []; - if (this.ids.length) { - this.index = 0; - } }, read_slice: function (fields, offset, limit, callback) { var self = this; @@ -400,8 +397,10 @@ openerp.base.DataSetStatic = openerp.base.DataSet.extend({ }, set_ids: function (ids) { this.ids = ids; - this.index = this.index <= this.ids.length - 1 ? - this.index : (this.ids.length > 0 ? this.length - 1 : 0); + if (this.index !== null) { + this.index = this.index <= this.ids.length - 1 ? + this.index : (this.ids.length > 0 ? this.length - 1 : 0); + } }, unlink: function(ids) { this.on_unlink(ids); @@ -478,8 +477,10 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({ var self = this; return this._super(ids, function(result) { self.ids = _.without.apply(_, [self.ids].concat(ids)); - self.index = self.index <= self.ids.length - 1 ? - self.index : (self.ids.length > 0 ? self.ids.length -1 : 0); + if (this.index !== null) { + self.index = self.index <= self.ids.length - 1 ? + self.index : (self.ids.length > 0 ? self.ids.length -1 : 0); + } if (callback) callback(result); }, error_callback); diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 19f5e271858..a580de3a2ff 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -17,7 +17,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV * * @property {openerp.base.Registry} registry=openerp.base.form.widgets widgets registry for this form view instance */ - init: function(view_manager, session, element_id, dataset, view_id) { + init: function(view_manager, session, element_id, dataset, view_id, options) { this._super(session, element_id); this.view_manager = view_manager || new openerp.base.NullViewManager(); this.dataset = dataset; @@ -37,6 +37,8 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV this.registry = openerp.base.form.widgets; this.has_been_loaded = $.Deferred(); this.$form_header = null; + this.options = options || {}; + _.defaults(this.options, {"always_show_new_button": true}); }, start: function() { //this.log('Starting FormView '+this.model+this.view_id) @@ -88,14 +90,16 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV }, do_show: function () { var self = this; + var promise; if (this.dataset.index === null) { // null index means we should start a new record - this.on_button_new(); + promise = this.on_button_new(); } else { - this.dataset.read_index(_.keys(this.fields_view.fields), this.on_record_loaded); + promise = this.dataset.read_index(_.keys(this.fields_view.fields), this.on_record_loaded); } self.$element.show(); this.view_manager.sidebar.do_refresh(true); + return promise; }, do_hide: function () { this.$element.hide(); @@ -107,7 +111,9 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV if (!record.id) { this.$form_header.find('.oe_form_on_create').show(); this.$form_header.find('.oe_form_on_update').hide(); - this.$form_header.find('button.oe_form_button_new').hide(); + if (!this.options["always_show_new_button"]) { + this.$form_header.find('button.oe_form_button_new').hide(); + } } else { this.$form_header.find('.oe_form_on_create').hide(); this.$form_header.find('.oe_form_on_update').show(); @@ -271,10 +277,14 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV }, on_button_new: function() { var self = this; + var def = $.Deferred(); $.when(this.has_been_loaded).then(function() { self.dataset.default_get( - _.keys(self.fields_view.fields), self.on_record_loaded); + _.keys(self.fields_view.fields)).then(self.on_record_loaded).then(function() { + def.resolve(); + }); }); + return def.promise(); }, /** * Triggers saving the form's record. Chooses between creating a new @@ -1555,6 +1565,7 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({ this._super(view, node); this.template = "FieldOne2Many"; this.is_started = $.Deferred(); + this.form_last_update = $.Deferred(); }, start: function() { this._super.apply(this, arguments); @@ -1588,14 +1599,19 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({ this.viewmanager = new openerp.base.ViewManager(this.view.session, this.element_id, this.dataset, views); this.viewmanager.registry = openerp.base.views.clone({ - list: 'openerp.base.form.One2ManyListView' + list: 'openerp.base.form.One2ManyListView', + form: 'openerp.base.form.One2ManyFormView' + }); + var once = $.Deferred().then(function() { + self.form_last_update.resolve(); }); - this.viewmanager.on_controller_inited.add_last(function(view_type, controller) { if (view_type == "list") { controller.o2m = self; } else if (view_type == "form") { - // TODO niv + controller.on_record_loaded.add_last(function() { + once.resolve(); + }); } self.is_started.resolve(); }); @@ -1609,7 +1625,12 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({ if(self.viewmanager.active_view === "list") { view.reload_content(); } else if (self.viewmanager.active_view === "form") { - // TODO niv: implement + if (this.dataset.index === null && this.dataset.ids.length >= 1) { + this.dataset.index = 0; + } + this.form_last_update.then(function() { + this.form_last_update = view.do_show(); + }); } }, set_value_from_ui: function() {}, @@ -1700,6 +1721,10 @@ openerp.base.form.One2ManyDataSet = openerp.base.BufferedDataSet.extend({ } }); +openerp.base.form.One2ManyFormView = openerp.base.FormView.extend({ + +}); + openerp.base.form.One2ManyListView = openerp.base.ListView.extend({ do_add_record: function () { if (this.options.editable) {