[CNG] make forms worse but pagination not break in case of manyrecords

bzr revid: xmo@openerp.com-20120209170748-l70q7grxgsumha2i
This commit is contained in:
Xavier Morel 2012-02-09 18:07:48 +01:00
parent 5c57613d08
commit a7354829cd
3 changed files with 24 additions and 10 deletions

View File

@ -787,21 +787,24 @@ class DataSet(openerpweb.Controller):
context, domain = eval_context_and_domain(
req.session, req.context, domain)
ids = Model.search(domain, 0, False, sort or False, context)
# need to fill the dataset with all ids for the (domain, context) pair,
# so search un-paginated and paginate manually before reading
paginated_ids = ids[offset:(offset + limit if limit else None)]
ids = Model.search(domain, offset or 0, limit or False, sort or False, context)
if limit and len(ids) == limit:
length = Model.search_count(domain, context)
else:
length = len(ids) + (offset or 0)
if fields and fields == ['id']:
# shortcut read if we only want the ids
return {
'ids': ids,
'records': [{'id': id} for id in paginated_ids]
'length': length,
'records': [{'id': id} for id in ids]
}
records = Model.read(paginated_ids, fields or False, context)
records = Model.read(ids, fields or False, context)
records.sort(key=lambda obj: ids.index(obj['id']))
return {
'ids': ids,
'length': length,
'records': records
}

View File

@ -522,6 +522,9 @@ openerp.web.DataSet = openerp.web.OldWidget.extend( /** @lends openerp.web.Data
this._sort.unshift((reverse ? '-' : '') + field);
return undefined;
},
size: function () {
return this.ids.length;
}
});
openerp.web.DataSetStatic = openerp.web.DataSet.extend({
@ -568,6 +571,7 @@ openerp.web.DataSetSearch = openerp.web.DataSet.extend(/** @lends openerp.web.D
this._super(parent, model, context);
this.domain = domain || [];
this.offset = 0;
this._length;
// subset records[offset:offset+limit]
// is it necessary ?
this.ids = [];
@ -599,6 +603,7 @@ openerp.web.DataSetSearch = openerp.web.DataSet.extend(/** @lends openerp.web.D
}).pipe(function (result) {
self.ids = result.ids;
self.offset = offset;
self._length = result.length;
return result.records;
});
},
@ -619,6 +624,12 @@ openerp.web.DataSetSearch = openerp.web.DataSet.extend(/** @lends openerp.web.D
if (callback)
callback(result);
}, error_callback);
},
size: function () {
if (this._length !== undefined) {
return this._length;
}
return this._super();
}
});
openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({

View File

@ -246,7 +246,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
self.page = 0; break;
case 'last':
self.page = Math.floor(
self.dataset.ids.length / self.limit());
self.dataset.size() / self.limit());
break;
case 'next':
self.page += 1; break;
@ -293,7 +293,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
this.dataset.ids = dataset.ids;
var limit = this.limit(),
total = dataset.ids.length,
total = dataset.size(),
first = (this.page * limit),
last;
if (!limit || (total - first) < limit) {
@ -1317,11 +1317,11 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L
if (!self.datagroup.openable) {
view.configure_pager(dataset);
} else {
if (dataset.ids.length == records.length) {
if (dataset.size() == records.length) {
// only one page
self.$row.find('td.oe-group-pagination').empty();
} else {
var pages = Math.ceil(dataset.ids.length / limit);
var pages = Math.ceil(dataset.size() / limit);
self.$row
.find('.oe-pager-state')
.text(_.str.sprintf(_t("%(page)d/%(page_count)d"), {