[imp] refactored dataset to use get_context()
added parenting in o2m & form view modified on_change to raise an exception when it can't resolve correctly one of the arguments bzr revid: nicolas.vanhoren@openerp.com-20110629143506-8kr93moo0dug9u6m
This commit is contained in:
parent
00cf247377
commit
42a474d8ee
|
@ -259,7 +259,8 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base.
|
|||
return this.rpc('/base/dataset/get', {
|
||||
model: this.model,
|
||||
ids: ids,
|
||||
fields: fields
|
||||
fields: fields,
|
||||
context: this.get_context()
|
||||
}, callback);
|
||||
},
|
||||
/**
|
||||
|
@ -288,14 +289,14 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base.
|
|||
return this.rpc('/base/dataset/default_get', {
|
||||
model: this.model,
|
||||
fields: fields,
|
||||
context: this.context
|
||||
context: this.get_context()
|
||||
}, callback);
|
||||
},
|
||||
create: function(data, callback, error_callback) {
|
||||
return this.rpc('/base/dataset/create', {
|
||||
model: this.model,
|
||||
data: data,
|
||||
context: this.context
|
||||
context: this.get_context()
|
||||
}, callback, error_callback);
|
||||
},
|
||||
write: function (id, data, callback) {
|
||||
|
@ -303,12 +304,12 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base.
|
|||
model: this.model,
|
||||
id: id,
|
||||
data: data,
|
||||
context: this.context
|
||||
context: this.get_context()
|
||||
}, callback);
|
||||
},
|
||||
unlink: function(ids, callback, error_callback) {
|
||||
var self = this;
|
||||
return this.call_and_eval("unlink", [ids, this.context], null, 1,
|
||||
return this.call_and_eval("unlink", [ids, this.get_context()], null, 1,
|
||||
callback, error_callback);
|
||||
},
|
||||
call: function (method, args, callback, error_callback) {
|
||||
|
@ -337,18 +338,18 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base.
|
|||
}, callback, error_callback);
|
||||
},
|
||||
name_get: function(ids, callback) {
|
||||
return this.call_and_eval('name_get', [ids, this.context], null, 1, callback);
|
||||
return this.call_and_eval('name_get', [ids, this.get_context()], null, 1, callback);
|
||||
},
|
||||
/*
|
||||
* args = domain
|
||||
*/
|
||||
name_search: function (name, args, operator, limit, callback) {
|
||||
return this.call_and_eval('name_search',
|
||||
[name || '', args || false, operator || 'ilike', this.context, limit || 100],
|
||||
[name || '', args || false, operator || 'ilike', this.get_context(), limit || 100],
|
||||
1, 3, callback);
|
||||
},
|
||||
name_create: function(name, callback) {
|
||||
return this.call_and_eval('name_create', [name, this.context], null, 1, callback);
|
||||
return this.call_and_eval('name_create', [name, this.get_context()], null, 1, callback);
|
||||
},
|
||||
exec_workflow: function (id, signal, callback) {
|
||||
return this.rpc('/base/dataset/exec_workflow', {
|
||||
|
@ -356,6 +357,9 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base.
|
|||
id: id,
|
||||
signal: signal
|
||||
}, callback);
|
||||
},
|
||||
get_context: function() {
|
||||
return this.context;
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -413,7 +417,7 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({
|
|||
model: this.model,
|
||||
fields: fields,
|
||||
domain: this.domain,
|
||||
context: this.context,
|
||||
context: this.get_context(),
|
||||
sort: this.sort(),
|
||||
offset: offset,
|
||||
limit: limit
|
||||
|
|
|
@ -174,17 +174,32 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
|
|||
'True' : true,
|
||||
'None' : null
|
||||
}
|
||||
var parent_fields = null;
|
||||
_.each(call[2].split(','), function(a) {
|
||||
var field = _.trim(a);
|
||||
if (field in argument_replacement) {
|
||||
args.push(argument_replacement[field]);
|
||||
return;
|
||||
} else if (self.fields[field]) {
|
||||
var value = self.fields[field].get_value();
|
||||
args.push(value == null ? false : value);
|
||||
return;
|
||||
} else {
|
||||
args.push(false);
|
||||
self.log("warning : on_change can't find field " + field, onchange);
|
||||
debugger;
|
||||
var splitted = field.split('.');
|
||||
if (splitted.length > 1 && _.trim(splitted[0]) === "parent" && self.dataset.parent_view) {
|
||||
if (parent_fields === null) {
|
||||
parent_fields = self.dataset.parent_view.get_fields_values();
|
||||
}
|
||||
var p_val = parent_fields[_.trim(splitted[1])];
|
||||
if (p_val !== undefined) {
|
||||
args.push(value ? value : false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
throw "Could not get field with name '" + field +
|
||||
"' for onchange '" + onchange + "'";
|
||||
});
|
||||
var ajax = {
|
||||
url: '/base/dataset/call',
|
||||
|
@ -1083,28 +1098,26 @@ openerp.base.form.FieldSelection = openerp.base.form.Field.extend({
|
|||
});
|
||||
})();
|
||||
|
||||
var build_view_fields_values = function(view) {
|
||||
var a_dataset = view.dataset || {};
|
||||
var fields_values = view.get_fields_values();
|
||||
var parent_values = a_dataset.parent_view ? a_dataset.parent_view.get_fields_values() : {};
|
||||
fields_values.parent = parent_values;
|
||||
return fields_values;
|
||||
}
|
||||
/**
|
||||
* Builds a new context usable for operations related to fields by merging
|
||||
* the fields'context with the action's context.
|
||||
*/
|
||||
var build_relation_context = function(relation_field) {
|
||||
var a_context = relation_field.view.dataset.context || {};
|
||||
var fields_values = relation_field.view.get_fields_values();
|
||||
var parent_values = a_context.get_eval_context ? a_context.get_eval_context() || {} : {};
|
||||
parent_values = _.clone(parent_values);
|
||||
delete parent_values.parent;
|
||||
fields_values.parent = parent_values;
|
||||
var a_context = relation_field.view.dataset.get_context() || {};
|
||||
var fields_values = build_view_fields_values(relation_field.view);
|
||||
var f_context = new openerp.base.CompoundContext(relation_field.field.context || {}).set_eval_context(fields_values);
|
||||
var ctx = new openerp.base.CompoundContext(a_context, f_context);
|
||||
return ctx;
|
||||
}
|
||||
var build_relation_domain = function(relation_field) {
|
||||
var a_context = relation_field.view.dataset.context || {};
|
||||
var fields_values = relation_field.view.get_fields_values();
|
||||
var parent_values = a_context.get_eval_context ? a_context.get_eval_context() || {} : {};
|
||||
parent_values = _.clone(parent_values);
|
||||
delete parent_values.parent;
|
||||
fields_values.parent = parent_values;
|
||||
var fields_values = build_view_fields_values(relation_field.view);
|
||||
var f_domain = new openerp.base.CompoundDomain(relation_field.field.domain || []).set_eval_context(fields_values);
|
||||
return f_domain;
|
||||
}
|
||||
|
@ -1404,7 +1417,9 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
|
|||
|
||||
var self = this;
|
||||
|
||||
this.dataset = new openerp.base.BufferedDataSet(this.session, this.field.relation);
|
||||
this.dataset = new openerp.base.form.One2ManyDataSet(this.session, this.field.relation);
|
||||
this.dataset.o2m = this;
|
||||
this.dataset.parent_view = this.view;
|
||||
this.dataset.on_change.add_last(function() {
|
||||
self.on_ui_change();
|
||||
});
|
||||
|
@ -1491,6 +1506,8 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
|
|||
},
|
||||
get_value: function() {
|
||||
var self = this;
|
||||
if (!this.dataset)
|
||||
return [];
|
||||
var val = _.map(this.dataset.ids, function(id) {
|
||||
var alter_order = _.detect(self.dataset.to_create, function(x) {return x.id === id;});
|
||||
if (alter_order) {
|
||||
|
@ -1512,6 +1529,13 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
|
|||
}
|
||||
});
|
||||
|
||||
openerp.base.form.One2ManyDataSet = openerp.base.BufferedDataSet.extend({
|
||||
get_context: function() {
|
||||
this.context = build_relation_context(this.o2m);
|
||||
return this.context;
|
||||
}
|
||||
});
|
||||
|
||||
openerp.base.form.One2ManyListView = openerp.base.ListView.extend({
|
||||
do_add_record: function () {
|
||||
var self = this;
|
||||
|
@ -1519,8 +1543,9 @@ openerp.base.form.One2ManyListView = openerp.base.ListView.extend({
|
|||
pop.select_element(self.o2m.field.relation,{
|
||||
initial_view: "form",
|
||||
alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined,
|
||||
auto_create: false
|
||||
});
|
||||
auto_create: false,
|
||||
parent_view: self.o2m.view
|
||||
}, build_relation_domain(self.o2m), build_relation_context(self.o2m));
|
||||
pop.on_create.add(function(data) {
|
||||
self.o2m.dataset.create(data, function(r) {
|
||||
self.o2m.dataset.set_ids(self.o2m.dataset.ids.concat([r.result]));
|
||||
|
@ -1616,6 +1641,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.BaseWidget.extend({
|
|||
* - disable_multiple_selection
|
||||
* - alternative_form_view
|
||||
* - auto_create (default true)
|
||||
* - parent_view
|
||||
*/
|
||||
select_element: function(model, options, domain, context) {
|
||||
this.model = model;
|
||||
|
@ -1632,6 +1658,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.BaseWidget.extend({
|
|||
this._super();
|
||||
this.dataset = new openerp.base.ReadOnlyDataSetSearch(this.session, this.model,
|
||||
this.context, this.domain);
|
||||
this.dataset.parent_view = this.options.parent_view;
|
||||
if (this.options.initial_view == "search") {
|
||||
this.setup_search_view();
|
||||
} else { // "form"
|
||||
|
@ -1687,6 +1714,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.BaseWidget.extend({
|
|||
return;
|
||||
var self = this;
|
||||
var wdataset = new openerp.base.DataSetSearch(this.session, this.model, this.context, this.domain);
|
||||
wdataset = this.options.parent_view;
|
||||
wdataset.create(data, function(r) {
|
||||
self.on_select_elements([r.result]);
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue