[IMP] implement DataSet.find, rename .ids() to .fetch() (and the corresponding event), make list and form views use the new dataset API
bzr revid: xmo@openerp.com-20110323083441-ego3wphgpb94obrg
This commit is contained in:
parent
1284858cb1
commit
3d65a024d2
|
@ -170,11 +170,15 @@ class DataSet(openerpweb.Controller):
|
|||
return {'fields': req.session.model(model).fields_get()}
|
||||
|
||||
@openerpweb.jsonrequest
|
||||
def load(self, req, model, domain=[], fields=['id']):
|
||||
m = req.session.model(model)
|
||||
ids = m.search(domain)
|
||||
values = m.read(ids, fields)
|
||||
return {'ids': ids, 'values': values}
|
||||
def find(self, request, model, fields=False, offset=0, limit=False,
|
||||
domain=None, context=None, sort=None):
|
||||
Model = request.session.model(model)
|
||||
ids = Model.search(domain or [], offset or 0, limit or False,
|
||||
sort or False, context or False)
|
||||
if fields and fields == ['id']:
|
||||
# shortcut read if we only want the ids
|
||||
return map(lambda id: {'id': id}, ids)
|
||||
return Model.read(ids, fields or False)
|
||||
|
||||
|
||||
class DataRecord(openerpweb.Controller):
|
||||
|
|
|
@ -348,7 +348,6 @@
|
|||
<input id="mode_list" type="button" value="ListView"/>
|
||||
<input id="mode_form" type="button" value="FormView"/>
|
||||
</div>
|
||||
<div id="oe_action_dataset" style="display:none;"></div>
|
||||
<div id="oe_action_search" ></div>
|
||||
<div id="oe_action_list" ></div>
|
||||
<div id="oe_action_form" ></div>
|
||||
|
|
|
@ -44,7 +44,7 @@ openerp.base.Action = openerp.base.Controller.extend({
|
|||
},
|
||||
do_action_window: function(action) {
|
||||
this.formview_id = false;
|
||||
this.dataset = new openerp.base.DataSet(this.session, "oe_action_dataset", action.res_model);
|
||||
this.dataset = new openerp.base.DataSet(this.session, action.res_model);
|
||||
this.dataset.start();
|
||||
|
||||
// Locate first tree view
|
||||
|
@ -101,7 +101,7 @@ openerp.base.EmbbededView = openerp.base.Controller.extend({
|
|||
openerp.base.DataSet = openerp.base.Controller.extend({
|
||||
init: function(session, model) {
|
||||
this._super(session);
|
||||
this._model = model;
|
||||
this.model = model;
|
||||
|
||||
this._fields = null;
|
||||
|
||||
|
@ -115,7 +115,7 @@ openerp.base.DataSet = openerp.base.Controller.extend({
|
|||
},
|
||||
start: function() {
|
||||
// TODO: fields_view_get fields selection?
|
||||
this.rpc("/base/dataset/fields", {"model":this._model}, this.on_fields);
|
||||
this.rpc("/base/dataset/fields", {"model":this.model}, this.on_fields);
|
||||
},
|
||||
on_fields: function(result) {
|
||||
this._fields = result._fields;
|
||||
|
@ -132,11 +132,11 @@ openerp.base.DataSet = openerp.base.Controller.extend({
|
|||
* @param {Number} [limit=null] The maximum number of records to return
|
||||
* @returns itself
|
||||
*/
|
||||
ids: function (offset, limit) {
|
||||
fetch: function (offset, limit) {
|
||||
offset = offset || 0;
|
||||
limit = limit || null;
|
||||
this.rpc('/base/dataset/find', {
|
||||
model: this._model,
|
||||
model: this.model,
|
||||
fields: this._fields,
|
||||
domain: this._domain,
|
||||
context: this._context,
|
||||
|
@ -147,11 +147,11 @@ openerp.base.DataSet = openerp.base.Controller.extend({
|
|||
var data_records = _.map(
|
||||
records, function (record) {
|
||||
return new openerp.base.DataRecord(
|
||||
this.session, this._model,
|
||||
this.session, this.model,
|
||||
this._fields, record);
|
||||
}, this);
|
||||
|
||||
this.on_ids(data_records, {
|
||||
this.on_fetch(data_records, {
|
||||
offset: offset,
|
||||
limit: limit,
|
||||
domain: this._domain,
|
||||
|
@ -174,7 +174,7 @@ openerp.base.DataSet = openerp.base.Controller.extend({
|
|||
* @param {Object} event.context the context set on the DataSet before DataSet#ids was called
|
||||
* @param {Array} event.sort the sorting criteria used to get the ids
|
||||
*/
|
||||
on_ids: function (records, event) { },
|
||||
on_fetch: function (records, event) { },
|
||||
|
||||
/**
|
||||
* Fetch all the currently active records for this DataSet (records selected via DataSet#select)
|
||||
|
@ -188,7 +188,7 @@ openerp.base.DataSet = openerp.base.Controller.extend({
|
|||
this.on_active_ids(_.map(
|
||||
records, function (record) {
|
||||
return new openerp.base.DataRecord(
|
||||
this.session, this._model,
|
||||
this.session, this.model,
|
||||
this._fields, record);
|
||||
}, this));
|
||||
}, this));
|
||||
|
@ -215,7 +215,7 @@ openerp.base.DataSet = openerp.base.Controller.extend({
|
|||
var record = records[0];
|
||||
this.on_active_id(
|
||||
record && new openerp.base.DataRecord(
|
||||
this.session, this._model,
|
||||
this.session, this.model,
|
||||
this._fields, record));
|
||||
}, this));
|
||||
return this;
|
||||
|
@ -398,7 +398,7 @@ openerp.base.SearchView = openerp.base.Controller.extend({
|
|||
// collect all non disabled domains definitions, AND them
|
||||
// evaluate as python expression
|
||||
// save the result in this.domain
|
||||
this.dataset.do_load();
|
||||
this.dataset.fetch();
|
||||
},
|
||||
on_clear: function() {
|
||||
}
|
||||
|
@ -422,7 +422,6 @@ openerp.base.FormView = openerp.base.Controller.extend({
|
|||
init: function(session, element_id, dataset, view_id) {
|
||||
this._super(session, element_id);
|
||||
this.dataset = dataset;
|
||||
this.dataset_index = 0;
|
||||
this.model = dataset.model;
|
||||
this.view_id = view_id;
|
||||
this.fields_views = {};
|
||||
|
@ -447,22 +446,11 @@ openerp.base.FormView = openerp.base.Controller.extend({
|
|||
}
|
||||
// bind to all wdigets that have onchange ??
|
||||
|
||||
// When the dataset is loaded load the first record (like gtk)
|
||||
this.dataset.on_loaded.add_last(this.do_load_record);
|
||||
|
||||
// When a datarecord is loaded display the values in the inputs
|
||||
this.datarecord = new openerp.base.DataRecord(this.session, this.model,{});
|
||||
this.datarecord.on_loaded.add_last(this.on_record_loaded);
|
||||
|
||||
this.dataset.on_fetch.add(this.on_record_loaded);
|
||||
},
|
||||
do_load_record: function() {
|
||||
// if dataset is empty display the empty datarecord
|
||||
if(this.dataset.ids.length == 0) {
|
||||
this.on_record_loaded();
|
||||
}
|
||||
this.datarecord.load(this.dataset.ids[this.dataset_index]);
|
||||
},
|
||||
on_record_loaded: function() {
|
||||
on_record_loaded: function(records) {
|
||||
this.datarecord = records[0];
|
||||
console.log('record', this.datarecord);
|
||||
for (var f in this.fields) {
|
||||
this.fields[f].set_value(this.datarecord.values[f]);
|
||||
}
|
||||
|
@ -508,20 +496,18 @@ openerp.base.ListView = openerp.base.Controller.extend({
|
|||
this.colmodel.push({ name: col.attrs.name, index: col.attrs.name });
|
||||
}
|
||||
}
|
||||
//this.log(this.cols);
|
||||
this.dataset.fields = this.cols;
|
||||
this.dataset.on_loaded.add_last(this.do_fill_table);
|
||||
this.dataset.on_fetch.add(this.do_fill_table);
|
||||
},
|
||||
do_fill_table: function() {
|
||||
//this.log("do_fill_table");
|
||||
do_fill_table: function(records) {
|
||||
this.log("do_fill_table");
|
||||
|
||||
var self = this;
|
||||
//this.log(this.dataset.data);
|
||||
var rows = [];
|
||||
var ids = this.dataset.ids;
|
||||
for(var i = 0; i < ids.length; i++) {
|
||||
for(var i = 0; i < records.length; i++) {
|
||||
// TODO very strange is sometimes non existing ? even as admin ? example ir.ui.menu
|
||||
var row = this.dataset.values[ids[i]];
|
||||
var row = records[i].values;
|
||||
if(row)
|
||||
rows.push(row);
|
||||
// else
|
||||
|
|
|
@ -158,7 +158,7 @@ $(document).ready(function () {
|
|||
asyncTest("Baseline event attributes", 6, function () {
|
||||
var dataset = new openerp.base.DataSet(
|
||||
new Session());
|
||||
dataset.on_ids.add(function (records, event) {
|
||||
dataset.on_fetch.add(function (records, event) {
|
||||
deepEqual(records, [], 'No records returned');
|
||||
equal(event.offset, 0, 'No offset set in call');
|
||||
equal(event.limit, null, 'No limit set in call');
|
||||
|
@ -167,17 +167,17 @@ $(document).ready(function () {
|
|||
deepEqual(event.sort, [], 'The dataset is not sorted');
|
||||
start();
|
||||
});
|
||||
dataset.ids();
|
||||
dataset.fetch();
|
||||
});
|
||||
asyncTest("Offset and limit", 2, function () {
|
||||
var dataset = new openerp.base.DataSet(
|
||||
new Session());
|
||||
dataset.on_ids.add(function (records, event) {
|
||||
dataset.on_fetch.add(function (records, event) {
|
||||
equal(event.offset, 20);
|
||||
equal(event.limit, 42);
|
||||
start();
|
||||
});
|
||||
dataset.ids(20, 42);
|
||||
dataset.fetch(20, 42);
|
||||
});
|
||||
asyncTest("Domain and context propagation", 3, function () {
|
||||
var dataset = new openerp.base.DataSet(
|
||||
|
@ -185,7 +185,7 @@ $(document).ready(function () {
|
|||
var domain_value = [['foo', '=', 'bar']];
|
||||
var context_value= {active_id:3, active_ids:42};
|
||||
var sort_value = ['foo'];
|
||||
dataset.on_ids.add(function (records, event) {
|
||||
dataset.on_fetch.add(function (records, event) {
|
||||
deepEqual(event.domain, domain_value);
|
||||
deepEqual(event.context, context_value);
|
||||
deepEqual(event.sort, sort_value);
|
||||
|
@ -196,7 +196,7 @@ $(document).ready(function () {
|
|||
context: context_value,
|
||||
sort: sort_value
|
||||
});
|
||||
dataset.ids();
|
||||
dataset.fetch();
|
||||
});
|
||||
asyncTest("Data records", function () {
|
||||
var dataset = new openerp.base.DataSet({
|
||||
|
@ -208,7 +208,7 @@ $(document).ready(function () {
|
|||
]);
|
||||
}
|
||||
});
|
||||
dataset.on_ids.add(function (records) {
|
||||
dataset.on_fetch.add(function (records) {
|
||||
equal(records.length, 2, "I loaded two virtual records");
|
||||
var d1 = records[0],
|
||||
d2 = records[1];
|
||||
|
@ -216,7 +216,7 @@ $(document).ready(function () {
|
|||
ok(d2 instanceof openerp.base.DataRecord);
|
||||
start();
|
||||
});
|
||||
dataset.ids();
|
||||
dataset.fetch();
|
||||
});
|
||||
|
||||
var dataset;
|
||||
|
|
Loading…
Reference in New Issue