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
}
this._sort.unshift((reverse ? '-' : '') + field);
return undefined;
+ },
+ size: function () {
+ return this.ids.length;
}
});
openerp.web.DataSetStatic = openerp.web.DataSet.extend({
this._super(parent, model, context);
this.domain = domain || [];
this.offset = 0;
+ this._length;
// subset records[offset:offset+limit]
// is it necessary ?
this.ids = [];
}).pipe(function (result) {
self.ids = result.ids;
self.offset = offset;
+ self._length = result.length;
return result.records;
});
},
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({
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;
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) {
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"), {