[CNG] make forms worse but pagination not break in case of manyrecords
bzr revid: xmo@openerp.com-20120209170748-l70q7grxgsumha2i
This commit is contained in:
parent
5c57613d08
commit
a7354829cd
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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({
|
||||
|
|
|
@ -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"), {
|
||||
|
|
Loading…
Reference in New Issue