[MERGE] list pagination branch

bzr revid: xmo@openerp.com-20110706083214-1thifexcz5pk0jih
This commit is contained in:
Xavier Morel 2011-07-06 10:32:14 +02:00
commit 1847dbc017
10 changed files with 242 additions and 93 deletions

View File

@ -1,7 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import base64 import base64
import glob, os import glob, os
import pprint
from xml.etree import ElementTree from xml.etree import ElementTree
from cStringIO import StringIO from cStringIO import StringIO
@ -392,9 +391,10 @@ class DataSet(openerpweb.Controller):
req.session.eval_context(req.context))} req.session.eval_context(req.context))}
@openerpweb.jsonrequest @openerpweb.jsonrequest
def search_read(self, request, model, fields=False, offset=0, limit=False, domain=None, context=None, sort=None): def search_read(self, request, model, fields=False, offset=0, limit=False, domain=None, sort=None):
return self.do_search_read(request, model, fields, offset, limit, domain, context, sort) return self.do_search_read(request, model, fields, offset, limit, domain, sort)
def do_search_read(self, request, model, fields=False, offset=0, limit=False, domain=None, context=None, sort=None): def do_search_read(self, request, model, fields=False, offset=0, limit=False, domain=None
, sort=None):
""" Performs a search() followed by a read() (if needed) using the """ Performs a search() followed by a read() (if needed) using the
provided search criteria provided search criteria
@ -407,22 +407,33 @@ class DataSet(openerpweb.Controller):
:param int limit: the maximum number of records to return :param int limit: the maximum number of records to return
:param list domain: the search domain for the query :param list domain: the search domain for the query
:param list sort: sorting directives :param list sort: sorting directives
:returns: a list of result records :returns: A structure (dict) with two keys: ids (all the ids matching
the (domain, context) pair) and records (paginated records
matching fields selection set)
:rtype: list :rtype: list
""" """
Model = request.session.model(model) Model = request.session.model(model)
context, domain = eval_context_and_domain(request.session, request.context, domain) context, domain = eval_context_and_domain(
request.session, request.context, domain)
ids = Model.search(domain, offset or 0, limit or False,
sort or False, context)
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)]
if fields and fields == ['id']: if fields and fields == ['id']:
# shortcut read if we only want the ids # shortcut read if we only want the ids
return map(lambda id: {'id': id}, ids) return {
'ids': ids,
'records': map(lambda id: {'id': id}, paginated_ids)
}
records = Model.read(paginated_ids, fields or False, context)
records.sort(key=lambda obj: ids.index(obj['id']))
return {
'ids': ids,
'records': records
}
reads = Model.read(ids, fields or False, context)
reads.sort(key=lambda obj: ids.index(obj['id']))
return reads
@openerpweb.jsonrequest @openerpweb.jsonrequest
def get(self, request, model, ids, fields=False): def get(self, request, model, ids, fields=False):

View File

@ -606,6 +606,9 @@ background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,
vertical-align: middle; vertical-align: middle;
text-align: left; text-align: left;
} }
.openerp .oe-listview td.oe-record-delete {
text-align: right;
}
.openerp .oe-listview th.oe-sortable, .openerp .oe-listview th.oe-sortable,
.openerp .oe-listview th.oe-sortable .ui-icon { .openerp .oe-listview th.oe-sortable .ui-icon {
cursor: pointer; cursor: pointer;
@ -636,6 +639,17 @@ background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,
.openerp .oe-listview th.oe-list-pager { .openerp .oe-listview th.oe-list-pager {
text-align: right; text-align: right;
} }
.openerp .oe-list-pager .oe-pager-state {
cursor: pointer;
}
.openerp .oe-listview .oe-group-name {
padding-right: 1em;
}
.openerp .oe-listview .oe-group-name,
.openerp .oe-listview .oe-group-pagination {
white-space: nowrap;
}
.openerp .oe-listview tfoot td { .openerp .oe-listview tfoot td {
padding: 3px 3px 0; padding: 3px 3px 0;

View File

@ -196,7 +196,9 @@ openerp.base.GrouplessDataGroup = openerp.base.DataGroup.extend(
this._super(session, model, domain, context, null, level); this._super(session, model, domain, context, null, level);
}, },
list: function (ifGroups, ifRecords) { list: function (ifGroups, ifRecords) {
ifRecords(new openerp.base.DataSetSearch(this.session, this.model, this.context, this.domain)); ifRecords(_.extend(
new openerp.base.DataSetSearch(this.session, this.model),
{domain: this.domain, context: this.context}));
} }
}); });
@ -421,13 +423,10 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({
sort: this.sort(), sort: this.sort(),
offset: offset, offset: offset,
limit: limit limit: limit
}, function (records) { }, function (result) {
self.ids.splice(0, self.ids.length); self.ids = result.ids;
self.offset = offset; self.offset = offset;
for (var i=0; i < records.length; i++ ) { callback(result.records);
self.ids.push(records[i].id);
}
callback(records);
}); });
}, },
/** /**

View File

@ -166,7 +166,6 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
this.ready = false; this.ready = false;
var onchange = _.trim(widget.node.attrs.on_change); var onchange = _.trim(widget.node.attrs.on_change);
var call = onchange.match(/^\s?(.*?)\((.*?)\)\s?$/); var call = onchange.match(/^\s?(.*?)\((.*?)\)\s?$/);
console.log("Onchange triggered for field '%s' -> %s", widget.name, onchange);
if (call) { if (call) {
var method = call[1], args = []; var method = call[1], args = [];
var context_index = null; var context_index = null;
@ -226,14 +225,12 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
on_processed_onchange: function(response, processed) { on_processed_onchange: function(response, processed) {
var result = response.result; var result = response.result;
if (result.value) { if (result.value) {
console.log(" |-> Onchange Response :", result.value);
for (var f in result.value) { for (var f in result.value) {
var field = this.fields[f]; var field = this.fields[f];
if (field) { if (field) {
var value = result.value[f]; var value = result.value[f];
processed.push(field.name); processed.push(field.name);
if (field.get_value() != value) { if (field.get_value() != value) {
console.log(" |-> Onchange Action : change '%s' value from '%s' to '%s'", field.name, field.get_value(), value);
field.set_value(value); field.set_value(value);
field.touched = true; field.touched = true;
if (_.indexOf(processed, field.name) < 0) { if (_.indexOf(processed, field.name) < 0) {
@ -242,12 +239,11 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
} }
} else { } else {
// this is a common case, the normal behavior should be to ignore it // this is a common case, the normal behavior should be to ignore it
console.debug("on_processed_onchange can't find field " + f, result);
} }
} }
this.on_form_changed(); this.on_form_changed();
} }
if (result.warning && !_.isEmpty(result.warning)) { if (!_.isEmpty(result.warning)) {
$(QWeb.render("DialogWarning", result.warning)).dialog({ $(QWeb.render("DialogWarning", result.warning)).dialog({
modal: true, modal: true,
buttons: { buttons: {
@ -396,12 +392,13 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
this.on_attachments_loaded([]); this.on_attachments_loaded([]);
} else { } else {
// TODO fme: modify this so it doesn't try to load attachments when there is not sidebar // TODO fme: modify this so it doesn't try to load attachments when there is not sidebar
/*this.rpc('/base/dataset/search_read', { /*(new openerp.base.DataSetSearch(
model: 'ir.attachment', this.session, 'ir.attachment', this.dataset.get_context(),
fields: ['name', 'url', 'type'], [['res_model', '=', this.dataset.model],
domain: [['res_model', '=', this.dataset.model], ['res_id', '=', this.datarecord.id], ['type', 'in', ['binary', 'url']]], ['res_id', '=', this.datarecord.id],
context: this.dataset.get_context() ['type', 'in', ['binary', 'url']]])).read_slice(
}, this.on_attachments_loaded);*/ ['name', 'url', 'type'], false, false,
this.on_attachments_loaded);*/
} }
}, },
on_attachments_loaded: function(attachments) { on_attachments_loaded: function(attachments) {

View File

@ -116,6 +116,23 @@ openerp.base.list.editable = function (openerp) {
delete this.edition_index; delete this.edition_index;
delete this.edition; delete this.edition;
}, },
/**
* Adapts this list's view description to be suitable to the inner form view of a row being edited.
*
* @returns {Object} fields_view_get's view section suitable for putting into form view of editable rows.
*/
get_form_fields_view: function () {
// deep copy of view
var view = $.extend(true, {}, this.group.view.fields_view);
_(view.arch.children).each(function (widget) {
widget.attrs.nolabel = true;
if (widget.tag === 'button') {
delete widget.attrs.string;
}
});
view.arch.attrs.col = 2 * view.arch.children.length;
return view;
},
render_row_as_form: function (row) { render_row_as_form: function (row) {
this.cancel_pending_edition(); this.cancel_pending_edition();
@ -161,7 +178,7 @@ openerp.base.list.editable = function (openerp) {
template: 'ListView.row.form', template: 'ListView.row.form',
registry: openerp.base.list.form.widgets registry: openerp.base.list.form.widgets
}); });
$.when(this.edition_form.on_loaded({fields_view: this.get_fields_view()})).then(function () { $.when(this.edition_form.on_loaded({fields_view: this.get_form_fields_view()})).then(function () {
// put in $.when just in case FormView.on_loaded becomes asynchronous // put in $.when just in case FormView.on_loaded becomes asynchronous
$new_row.find('td') $new_row.find('td')
.addClass('oe-field-cell') .addClass('oe-field-cell')

View File

@ -59,6 +59,24 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
if (this.dataset instanceof openerp.base.DataSetStatic) { if (this.dataset instanceof openerp.base.DataSetStatic) {
this.groups.datagroup = new openerp.base.StaticDataGroup(this.dataset); this.groups.datagroup = new openerp.base.StaticDataGroup(this.dataset);
} }
this.page = 0;
},
/**
* Retrieves the view's number of records per page (|| section)
*
* options > defaults > view_manager.action.limit > indefinite
*
* @returns {Number|null}
*/
limit: function () {
if (this._limit === undefined) {
this._limit = (this.options.limit
|| this.defaults.limit
|| (this.view_manager.action || {}).limit
|| null);
}
return this._limit;
}, },
/** /**
* Set a custom Group construct as the root of the List View. * Set a custom Group construct as the root of the List View.
@ -134,10 +152,10 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
this.$element.html(QWeb.render("ListView", this)); this.$element.html(QWeb.render("ListView", this));
// Head hook // Head hook
this.$element.find('#oe-list-add') this.$element.find('.oe-list-add')
.click(this.do_add_record) .click(this.do_add_record)
.attr('disabled', grouped && this.options.editable); .attr('disabled', grouped && this.options.editable);
this.$element.find('#oe-list-delete') this.$element.find('.oe-list-delete')
.attr('disabled', true) .attr('disabled', true)
.click(this.do_delete_selected); .click(this.do_delete_selected);
this.$element.find('thead').delegate('th[data-id]', 'click', function (e) { this.$element.find('thead').delegate('th[data-id]', 'click', function (e) {
@ -149,8 +167,75 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
self.reload_view(); self.reload_view();
}); });
this.$element.find('.oe-list-pager')
.delegate('button', 'click', function () {
var $this = $(this);
switch ($this.data('pager-action')) {
case 'first':
self.page = 0; break;
case 'last':
self.page = Math.floor(
self.dataset.ids.length / self.limit());
break;
case 'next':
self.page += 1; break;
case 'previous':
self.page -= 1; break;
}
self.reload_content();
}).find('.oe-pager-state')
.click(function (e) {
e.stopPropagation();
var $this = $(this);
var $select = $('<select>')
.appendTo($this.empty())
.click(function (e) {e.stopPropagation();})
.append('<option value="80">80</option>' +
'<option value="100">100</option>' +
'<option value="200">200</option>' +
'<option value="500">500</option>' +
'<option value="NaN">Unlimited</option>')
.change(function () {
var val = parseInt($select.val(), 10);
self._limit = (isNaN(val) ? null : val);
self.page = 0;
self.reload_content();
})
.val(self._limit || 'NaN');
});
this.view_manager.sidebar.set_toolbar(data.fields_view.toolbar); this.view_manager.sidebar.set_toolbar(data.fields_view.toolbar);
}, },
/**
* Configures the ListView pager based on the provided dataset's information
*
* Horrifying side-effect: sets the dataset's data on this.dataset?
*
* @param {openerp.base.DataSet} dataset
*/
configure_pager: function (dataset) {
this.dataset.ids = dataset.ids;
var limit = this.limit(),
total = dataset.ids.length,
first = (this.page * limit),
last;
if (!limit || (total - first) < limit) {
last = total;
} else {
last = first + limit;
}
this.$element.find('span.oe-pager-state').empty().text(_.sprintf(
"[%d to %d] of %d", first + 1, last, total));
this.$element
.find('button[data-pager-action=first], button[data-pager-action=previous]')
.attr('disabled', this.page === 0)
.end()
.find('button[data-pager-action=last], button[data-pager-action=next]')
.attr('disabled', last === total);
},
/** /**
* Sets up the listview's columns: merges view and fields data, move * Sets up the listview's columns: merges view and fields data, move
* grouped-by columns to the front of the columns list and make them all * grouped-by columns to the front of the columns list and make them all
@ -182,7 +267,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
} }
return column; return column;
}; };
this.columns.splice(0, this.columns.length); this.columns.splice(0, this.columns.length);
this.columns.push.apply( this.columns.push.apply(
this.columns, this.columns,
@ -264,10 +349,8 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
*/ */
reload_view: function (grouped) { reload_view: function (grouped) {
var self = this; var self = this;
this.dataset.offset = 0;
this.dataset.limit = false;
var callback = function (field_view_get) { var callback = function (field_view_get) {
self.on_loaded(field_view_get, grouped); self.on_loaded(field_view_get, grouped);
}; };
if (this.embedded_view) { if (this.embedded_view) {
return $.Deferred().then(callback).resolve({fields_view: this.embedded_view}); return $.Deferred().then(callback).resolve({fields_view: this.embedded_view});
@ -346,7 +429,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
* @param {Array} records selected record values * @param {Array} records selected record values
*/ */
do_select: function (ids, records) { do_select: function (ids, records) {
this.$element.find('#oe-list-delete') this.$element.find('.oe-list-delete')
.attr('disabled', !ids.length); .attr('disabled', !ids.length);
if (!records.length) { if (!records.length) {
@ -505,6 +588,7 @@ openerp.base.ListView.List = Class.extend( /** @lends openerp.base.ListView.List
init: function (group, opts) { init: function (group, opts) {
var self = this; var self = this;
this.group = group; this.group = group;
this.view = group.view;
this.options = opts.options; this.options = opts.options;
this.columns = opts.columns; this.columns = opts.columns;
@ -555,18 +639,6 @@ openerp.base.ListView.List = Class.extend( /** @lends openerp.base.ListView.List
this.$current = this.$_element.clone(true); this.$current = this.$_element.clone(true);
this.$current.empty().append(QWeb.render('ListView.rows', this)); this.$current.empty().append(QWeb.render('ListView.rows', this));
}, },
get_fields_view: function () {
// deep copy of view
var view = $.extend(true, {}, this.group.view.fields_view);
_(view.arch.children).each(function (widget) {
widget.attrs.nolabel = true;
if (widget.tag === 'button') {
delete widget.attrs.string;
}
});
view.arch.attrs.col = 2 * view.arch.children.length;
return view;
},
/** /**
* Gets the ids of all currently selected records, if any * Gets the ids of all currently selected records, if any
* @returns {Object} object with the keys ``ids`` and ``records``, holding respectively the ids of all selected records and the records themselves. * @returns {Object} object with the keys ``ids`` and ``records``, holding respectively the ids of all selected records and the records themselves.
@ -715,13 +787,10 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr
this.columns = view.columns; this.columns = view.columns;
this.datagroup = null; this.datagroup = null;
this.sections = []; this.$row = null;
this.children = {}; this.children = {};
},
pad: function ($row) { this.page = 0;
if (this.options.selectable) {
$row.append('<td>');
}
}, },
make_fragment: function () { make_fragment: function () {
return document.createDocumentFragment(); return document.createDocumentFragment();
@ -753,10 +822,35 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr
} }
return red_letter_tboday; return red_letter_tboday;
}, },
make_paginator: function () {
var self = this;
var $prev = $('<button type="button" data-pager-action="previous">&lt;</button>')
.click(function (e) {
e.stopPropagation();
self.page -= 1;
self.$row.closest('tbody').next()
.replaceWith(self.render());
});
var $next = $('<button type="button" data-pager-action="next">&gt;</button>')
.click(function (e) {
e.stopPropagation();
self.page += 1;
self.$row.closest('tbody').next()
.replaceWith(self.render());
});
this.$row.children().last()
.append($prev)
.append('<span class="oe-pager-state"></span>')
.append($next);
},
open: function (point_insertion) { open: function (point_insertion) {
this.render().insertAfter(point_insertion); this.render().insertAfter(point_insertion);
this.make_paginator();
}, },
close: function () { close: function () {
this.$row.children().last().empty();
this.apoptosis(); this.apoptosis();
}, },
/** /**
@ -788,7 +882,7 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr
self.bind_child_events(child); self.bind_child_events(child);
child.datagroup = group; child.datagroup = group;
var $row = $('<tr>'); var $row = child.$row = $('<tr>');
if (group.openable) { if (group.openable) {
$row.click(function (e) { $row.click(function (e) {
if (!$row.data('open')) { if (!$row.data('open')) {
@ -808,7 +902,7 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr
} }
placeholder.appendChild($row[0]); placeholder.appendChild($row[0]);
var $group_column = $('<th>').appendTo($row); var $group_column = $('<th class="oe-group-name">').appendTo($row);
if (group.grouped_on) { if (group.grouped_on) {
// Don't fill this if group_by_no_leaf but no group_by // Don't fill this if group_by_no_leaf but no group_by
$group_column $group_column
@ -822,8 +916,10 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr
self.indent($group_column, group.level); self.indent($group_column, group.level);
// count column // count column
$('<td>').text(group.length).appendTo($row); $('<td>').text(group.length).appendTo($row);
self.pad($row); if (self.options.selectable) {
$row.append('<td>');
}
_(self.columns).chain() _(self.columns).chain()
.filter(function (column) {return !column.invisible;}) .filter(function (column) {return !column.invisible;})
.each(function (column) { .each(function (column) {
@ -844,6 +940,9 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr
$row.append('<td>'); $row.append('<td>');
} }
}); });
if (self.options.deletable) {
$row.append('<td class="oe-group-pagination">');
}
}); });
return placeholder; return placeholder;
}, },
@ -867,6 +966,7 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr
}, },
render_dataset: function (dataset) { render_dataset: function (dataset) {
var rows = [], var rows = [],
self = this,
list = new openerp.base.ListView.List(this, { list = new openerp.base.ListView.List(this, {
options: this.options, options: this.options,
columns: this.columns, columns: this.columns,
@ -875,11 +975,30 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr
}); });
this.bind_child_events(list); this.bind_child_events(list);
var d = new $.Deferred(); var view = this.view,
limit = view.limit(),
d = new $.Deferred(),
page = this.datagroup.openable ? this.page : view.page;
dataset.read_slice( dataset.read_slice(
_.filter(_.pluck(_.select(this.columns, function(x) {return x.tag == "field";}), 'name'), _.identity), _.filter(_.pluck(_.select(this.columns, function(x) {return x.tag == "field";}), 'name'), _.identity),
0, false, page * limit, limit,
function (records) { function (records) {
if (!self.datagroup.openable) {
view.configure_pager(dataset);
} else {
var pages = Math.ceil(dataset.ids.length / limit);
self.$row
.find('.oe-pager-state')
.text(_.sprintf('%d/%d', page + 1, pages))
.end()
.find('button[data-pager-action=previous]')
.attr('disabled', page === 0)
.end()
.find('button[data-pager-action=next]')
.attr('disabled', page === pages - 1);
}
var form_records = _(records).map( var form_records = _(records).map(
$.proxy(list, 'transform_record')); $.proxy(list, 'transform_record'));

View File

@ -243,11 +243,11 @@
<th t-if="actions_span" t-att-colspan="actions_span" <th t-if="actions_span" t-att-colspan="actions_span"
class="oe-actions"> class="oe-actions">
<t t-if="flags.action_buttons !== false"> <t t-if="flags.action_buttons !== false">
<button type="button" id="oe-list-add" <button type="button" class="oe-list-add"
t-if="options.addable"> t-if="options.addable">
<t t-esc="options.addable"/> <t t-esc="options.addable"/>
</button> </button>
<button type="button" id="oe-list-delete" <button type="button" class="oe-list-delete"
t-if="options.selectable and options.deletable"> t-if="options.selectable and options.deletable">
Delete Delete
</button> </button>
@ -256,16 +256,19 @@
<th t-att-colspan="columns_count - actions_span" <th t-att-colspan="columns_count - actions_span"
class="oe-list-pager"> class="oe-list-pager">
<t t-if="flags.pager !== false"> <t t-if="flags.pager !== false">
<button type="button" data-pager-action="first">First</button> <button type="button" disabled="disabled"
<button type="button" data-pager-action="previous" data-pager-action="first">First</button>
<button type="button" disabled="disabled"
data-pager-action="previous"
>&lt;&lt;</button> >&lt;&lt;</button>
<span class="oe-pager-first">1</span> <span class="oe-pager-state">
to <span class="oe-pager-last">1</span> </span>
of <span class="oe-pager-total">1</span>
<button type="button" data-pager-action="next">&gt;&gt;</button> <button type="button" disabled="disabled"
<button type="button" data-pager-action="last">Last</button> data-pager-action="next">&gt;&gt;</button>
<button type="button" disabled="disabled"
data-pager-action="last">Last</button>
</t> </t>
</th> </th>
</tr> </tr>

View File

@ -149,7 +149,7 @@ $(document).ready(function () {
listview.$element.find('tbody th input:eq(1)') listview.$element.find('tbody th input:eq(1)')
.attr('checked', true); .attr('checked', true);
listview.$element.find('#oe-list-delete').click(); listview.$element.find('.oe-list-delete').click();
deepEqual(deleted, [2, 3]); deepEqual(deleted, [2, 3]);
}); });
}); });

View File

@ -262,21 +262,13 @@ init: function(view_manager, session, element_id, dataset, view_id) {
throw "Unrecognized date/time format"; throw "Unrecognized date/time format";
}, },
reload_gantt: function(domain) { reload_gantt: function() {
var self = this; var self = this;
var ajax = { this.dataset.read_slice(false, false, false, function(response) {
url: '/base/dataset/search_read', ganttChartControl.clearAll();
async: false jQuery("#GanttDiv").children().remove();
}; self.load_event(response);
this.rpc(ajax, { });
model: this.dataset.model,
domain: self.dataset.domain,
context :self.dataset.get_context()
}, function(response) {
ganttChartControl.clearAll();
jQuery("#GanttDiv").children().remove();
self.load_event(response);
});
}, },
do_search: function (domains, contexts, groupbys) { do_search: function (domains, contexts, groupbys) {
@ -290,7 +282,7 @@ init: function(view_manager, session, element_id, dataset, view_id) {
}, function (results) { }, function (results) {
self.dataset.context = results.context; self.dataset.context = results.context;
self.dataset.domain = results.domain; self.dataset.domain = results.domain;
return self.reload_gantt(self.dataset.domain); self.reload_gantt();
}); });
} }

View File

@ -90,11 +90,8 @@ openerp.web_mobile.ListView = openerp.base.Controller.extend({
on_action: function(action) { on_action: function(action) {
var self = this; var self = this;
var view_id = action.views[0][0]; var view_id = action.views[0][0];
var model = action.res_model; (new openerp.base.DataSetSearch(this.session, action.res_model, null, null))
.read_slice(false, false, false, function(result){
self.rpc('/base/dataset/search_read', {
model: model
},function(result){
this.listview = new openerp.web_mobile.ListView(this.session, "oe_app"); this.listview = new openerp.web_mobile.ListView(this.session, "oe_app");
self.$element.html(QWeb.render("ListView", {'records' : result})); self.$element.html(QWeb.render("ListView", {'records' : result}));
}); });