From 13c75281b07c1f3169478f137a17e8956e1f88be Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 11 Aug 2011 09:00:50 +0200 Subject: [PATCH] [IMP] change DataSet.read_slice to take an options object for optional fields, offset and limit args bzr revid: xmo@openerp.com-20110811070050-pkz6x39tf0i4e49r --- addons/base/static/src/js/data.js | 48 ++++++++++--------- addons/base/static/src/js/form.js | 14 +++--- addons/base/static/src/js/list.js | 11 +++-- addons/base/static/src/js/view_tree.js | 2 +- .../base_calendar/static/src/js/calendar.js | 8 +++- .../base_dashboard/static/src/js/dashboard.js | 9 ++-- .../base_default_home/static/src/js/home.js | 2 +- addons/base_gantt/static/src/js/gantt.js | 4 +- addons/base_graph/static/src/js/graph.js | 6 +-- .../web_mobile/static/src/js/form_mobile.js | 4 +- 10 files changed, 59 insertions(+), 49 deletions(-) diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index aa409a36bb7..2e3d6cf8f03 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -270,12 +270,11 @@ openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.Data * Read records. * * @param {Array} ids identifiers of the records to read - * @param {Array} [fields] fields to read and return, by default all fields are returned + * @param {Array} fields fields to read and return, by default all fields are returned * @param {Function} callback function called with read result * @returns {$.Deferred} */ read_ids: function (ids, fields, callback) { - var self = this; return this.rpc('/base/dataset/get', { model: this.model, ids: ids, @@ -287,14 +286,14 @@ openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.Data * Read a slice of the records represented by this DataSet, based on its * domain and context. * - * @param {Array} [fields] fields to read and return, by default all fields are returned - * @param {Number} [offset=0] The index from which selected records should be returned - * @param {Number} [limit=null] The maximum number of records to return + * @params {Object} options + * @param {Array} [options.fields] fields to read and return, by default all fields are returned + * @param {Number} [options.offset=0] The index from which selected records should be returned + * @param {Number} [options.limit=null] The maximum number of records to return * @param {Function} callback function called with read_slice result * @returns {$.Deferred} */ - read_slice: function (fields, offset, limit, callback) { - }, + read_slice: function (options, callback) { return null; }, /** * Reads the current dataset record (from its index) * @@ -476,9 +475,11 @@ openerp.base.DataSetStatic = openerp.base.DataSet.extend({ // all local records this.ids = ids || []; }, - read_slice: function (fields, offset, limit, callback) { - var self = this; - offset = offset || 0; + read_slice: function (options, callback) { + var self = this, + offset = options.offset || 0, + limit = options.limit || false, + fields = options.fields || false; var end_pos = limit && limit !== -1 ? offset + limit : undefined; return this.read_ids(this.ids.slice(offset, end_pos), fields, callback); }, @@ -515,25 +516,28 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({ // is it necessary ? this.ids = []; }, - read_slice: function (fields, offset, limit, callback) { + /** + * Read a slice of the records represented by this DataSet, based on its + * domain and context. + * + * @params {Object} options + * @param {Array} [options.fields] fields to read and return, by default all fields are returned + * @param {Number} [options.offset=0] The index from which selected records should be returned + * @param {Number} [options.limit=null] The maximum number of records to return + * @param {Function} callback function called with read_slice result + * @returns {$.Deferred} + */ + read_slice: function (options, callback) { var self = this; - offset = offset || 0; - // cached search, not sure it's a good idea - if(this.offset <= offset) { - var start = offset - this.offset; - if(this.ids.length - start >= limit) { - // TODO: check if this could work do only read if possible - // return read_ids(ids.slice(start,start+limit),fields,callback) - } - } + var offset = options.offset || 0; return this.rpc('/base/dataset/search_read', { model: this.model, - fields: fields, + fields: options.fields || false, domain: this.domain, context: this.get_context(), sort: this.sort(), offset: offset, - limit: limit + limit: options.limit || false }, function (result) { self.ids = result.ids; self.offset = offset; diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 7e739b6bc90..2eb06eba81f 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -451,12 +451,14 @@ openerp.base.form.SidebarAttachments = openerp.base.Widget.extend({ this.on_attachments_loaded([]); } else { (new openerp.base.DataSetSearch( - this, 'ir.attachment', this.view.dataset.get_context(), - [['res_model', '=', this.view.dataset.model], - ['res_id', '=', this.view.datarecord.id], - ['type', 'in', ['binary', 'url']]])).read_slice( - ['name', 'url', 'type'], false, false, - this.on_attachments_loaded); + this, 'ir.attachment', this.view.dataset.get_context(), + [ + ['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); } }, on_attachments_loaded: function(attachments) { diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index e34b4b75f54..45da03e470c 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -478,7 +478,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi _.extend(this.dataset, { domain: dataset.domain, context: dataset.get_context() - }).read_slice([], 0, false, function () { + }).read_slice({}, function () { self.select_record(index); }); }, @@ -1033,10 +1033,11 @@ openerp.base.ListView.Groups = openerp.base.Class.extend( /** @lends openerp.bas d = new $.Deferred(), page = this.datagroup.openable ? this.page : view.page; - dataset.read_slice( - _.filter(_.pluck(_.select(this.columns, function(x) {return x.tag == "field";}), 'name'), _.identity), - page * limit, limit, - function (records) { + dataset.read_slice({ + fields: _.filter(_.pluck(_.select(this.columns, function(x) {return x.tag == "field";}), 'name'), _.identity), + offset: page * limit, + limit: limit + }, function (records) { if (!self.datagroup.openable) { view.configure_pager(dataset); } else { diff --git a/addons/base/static/src/js/view_tree.js b/addons/base/static/src/js/view_tree.js index 9951d9429f8..da426080574 100644 --- a/addons/base/static/src/js/view_tree.js +++ b/addons/base/static/src/js/view_tree.js @@ -72,7 +72,7 @@ openerp.base.TreeView = openerp.base.View.extend({ 'toolbar': has_toolbar })); - this.dataset.read_slice(this.fields_list(), 0, false, function (records) { + this.dataset.read_slice({fields: this.fields_list()}, function (records) { if (!has_toolbar) { // WARNING: will do a second read on the same ids, but only on // first load so not very important diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index fcbe1084f2f..b53ed9ba900 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -131,7 +131,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ }, load_scheduler: function() { var self = this; - this.dataset.read_slice([], 0, false, function(events) { + this.dataset.read_slice({}, function(events) { if (self.session.locale_code) { // TODO: replace $LAB $LAB.setOptions({AlwaysPreserveOrder: true}).script([ @@ -340,7 +340,11 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ // TODO: handle non-empty results.group_by with read_group self.dataset.context = self.context = results.context; self.dataset.domain = self.domain = results.domain; - self.dataset.read_slice(_.keys(self.fields), 0, self.limit, self.on_events_loaded); + self.dataset.read_slice({ + fields: _.keys(self.fields), + offset:0, + limit: self.limit + }, self.on_events_loaded); }); }); }, diff --git a/addons/base_dashboard/static/src/js/dashboard.js b/addons/base_dashboard/static/src/js/dashboard.js index b4e04dbd22a..422d279a485 100644 --- a/addons/base_dashboard/static/src/js/dashboard.js +++ b/addons/base_dashboard/static/src/js/dashboard.js @@ -290,7 +290,7 @@ openerp.base_dashboard.ConfigOverview = openerp.base.View.extend({ this.dataset.domain = [['type', '=', 'manual']]; }, start: function () { - $.when(this.dataset.read_slice(['state', 'action_id', 'category_id']), + $.when(this.dataset.read_slice({fields: ['state', 'action_id', 'category_id']}), this.dataset.call('progress')) .then(this.on_records_loaded); }, @@ -353,8 +353,8 @@ openerp.base_dashboard.ApplicationTiles = openerp.base.View.extend({ start: function () { var self = this; this.dataset.read_slice( - ['name', 'web_icon_data', 'web_icon_hover_data'], - null, null, function (applications) { + {fields: ['name', 'web_icon_data', 'web_icon_hover_data']}, + function (applications) { // Create a matrix of 3*x applications var rows = []; while (applications.length) { @@ -384,7 +384,8 @@ openerp.base_dashboard.Widgets = openerp.base.View.extend({ this.widgets = new openerp.base.DataSetSearch(this, 'res.widget'); }, start: function () { - this.user_widgets.read_slice(['widget_id', 'user_id'], null, null, + this.user_widgets.read_slice( + {fields: ['widget_id', 'user_id']}, this.on_widgets_list_loaded); }, on_widgets_list_loaded: function (user_widgets) { diff --git a/addons/base_default_home/static/src/js/home.js b/addons/base_default_home/static/src/js/home.js index 1cf2ed3ab25..ebdf7ea7d00 100644 --- a/addons/base_default_home/static/src/js/home.js +++ b/addons/base_default_home/static/src/js/home.js @@ -86,7 +86,7 @@ openerp.base_default_home = function (openerp) { $.blockUI({ message: '' }); - Modules.read_slice(['id'], null, null, function (records) { + Modules.read_slice({fields: ['id']}, function (records) { if (!(records.length === 1)) { return; } Modules.call('state_update', [_.pluck(records, 'id'), 'to install', ['uninstalled']], diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index 09174e25ab7..4a38747bf8a 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -81,7 +81,7 @@ init: function(view_manager, session, element_id, dataset, view_id) { get_events: function() { var self = this; - this.dataset.read_slice(false, false, false, function(result) { + this.dataset.read_slice({}, function(result) { self.load_event(result); }); @@ -460,7 +460,7 @@ init: function(view_manager, session, element_id, dataset, view_id) { reload_gantt: function() { var self = this; - this.dataset.read_slice(false, false, false, function(response) { + this.dataset.read_slice({}, function(response) { ganttChartControl.clearAll(); jQuery("#GanttDiv").children().remove(); self.load_event(response); diff --git a/addons/base_graph/static/src/js/graph.js b/addons/base_graph/static/src/js/graph.js index 5ad85e4a8b0..f7c949dc194 100644 --- a/addons/base_graph/static/src/js/graph.js +++ b/addons/base_graph/static/src/js/graph.js @@ -89,7 +89,7 @@ openerp.base_graph.GraphView = openerp.base.View.extend({ } this.dataset.domain = domain; this.dataset.context = this.view_manager.dataset.context; - this.dataset.read_slice(_(this.fields).keys(), 0, false, function(res) { + this.dataset.read_slice({fields: _(this.fields).keys()}, function(res) { self.schedule_chart(res); }); } @@ -468,9 +468,7 @@ openerp.base_graph.GraphView = openerp.base.View.extend({ } self.dataset.context = results.context; self.dataset.domain = results.domain; - self.dataset.read_slice([], 0, false,function(response){ - self.load_chart(response); - }); + self.dataset.read_slice({}, $.proxy(self, 'load_chart')); }); } }); diff --git a/addons/web_mobile/static/src/js/form_mobile.js b/addons/web_mobile/static/src/js/form_mobile.js index 51bfd719c7f..a8c7bcc480e 100644 --- a/addons/web_mobile/static/src/js/form_mobile.js +++ b/addons/web_mobile/static/src/js/form_mobile.js @@ -12,7 +12,7 @@ openerp.web_mobile.FormView = openerp.base.Widget.extend({ view_id = this.action.views[1][0]; this.dataset = new openerp.base.DataSetSearch(this.session, this.action.res_model, null, null); - this.dataset.read_slice(false, false, false, function (result) { + this.dataset.read_slice({}, function (result) { for (var i = 0; i < result.length; i++) { if (result[i].id == id) { @@ -101,4 +101,4 @@ openerp.web_mobile.FormView = openerp.base.Widget.extend({ }, }); -} \ No newline at end of file +}