[imp] o2m wip
bzr revid: nicolas.vanhoren@openerp.com-20110616163709-gztnhlqhgvprtirf
This commit is contained in:
parent
33679aae4e
commit
cb50260aa8
|
@ -322,7 +322,7 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base.
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* name='', args=None, operator='ilike', context=None, limit=100
|
* name='', args=[], operator='ilike', context=None, limit=100
|
||||||
*/
|
*/
|
||||||
name_search: function (args, callback, error_callback) {
|
name_search: function (args, callback, error_callback) {
|
||||||
return this.call('name_search',
|
return this.call('name_search',
|
||||||
|
|
|
@ -1125,7 +1125,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
|
||||||
|
|
||||||
var dataset = new openerp.base.DataSetStatic(this.session, this.field.relation, []);
|
var dataset = new openerp.base.DataSetStatic(this.session, this.field.relation, []);
|
||||||
|
|
||||||
dataset.name_search([search_val, false, 'ilike', {}, this.limit + 1], function(data) {
|
dataset.name_search([search_val, [], 'ilike', {}, this.limit + 1], function(data) {
|
||||||
self.last_search = data.result;
|
self.last_search = data.result;
|
||||||
// possible selections for the m2o
|
// possible selections for the m2o
|
||||||
var values = _.map(data.result, function(x) {
|
var values = _.map(data.result, function(x) {
|
||||||
|
@ -1136,7 +1136,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
|
||||||
if (values.length > self.limit) {
|
if (values.length > self.limit) {
|
||||||
values = values.slice(0, self.limit);
|
values = values.slice(0, self.limit);
|
||||||
values.push({label: "<em> Search More...</em>", action: function() {
|
values.push({label: "<em> Search More...</em>", action: function() {
|
||||||
dataset.name_search([search_val, false, 'ilike', {}, false], function(data) {
|
dataset.name_search([search_val, [], 'ilike', {}, false], function(data) {
|
||||||
self._change_int_value(null);
|
self._change_int_value(null);
|
||||||
self._search_create_popup("search", data.result);
|
self._search_create_popup("search", data.result);
|
||||||
});
|
});
|
||||||
|
@ -1232,14 +1232,8 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
|
||||||
this.dataset = new openerp.base.DataSetStatic(this.session, this.field.relation);
|
this.dataset = new openerp.base.DataSetStatic(this.session, this.field.relation);
|
||||||
this.dataset.on_unlink.add_last(function(ids) {
|
this.dataset.on_unlink.add_last(function(ids) {
|
||||||
self.dataset.set_ids(_.without.apply(_, [self.dataset.ids].concat(ids)));
|
self.dataset.set_ids(_.without.apply(_, [self.dataset.ids].concat(ids)));
|
||||||
var view = self.viewmanager.views[self.viewmanager.active_view].controller;
|
|
||||||
if(self.viewmanager.active_view === "list") {
|
|
||||||
view.reload_content();
|
|
||||||
} else if (self.viewmanager.active_view === "form") {
|
|
||||||
// TODO niv: but fme did not implemented delete in form view anyway
|
|
||||||
}
|
|
||||||
|
|
||||||
self.on_ui_change();
|
self.on_ui_change();
|
||||||
|
self.reload_current_view();
|
||||||
});
|
});
|
||||||
|
|
||||||
var modes = this.node.attrs.mode;
|
var modes = this.node.attrs.mode;
|
||||||
|
@ -1252,17 +1246,23 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
|
||||||
}
|
}
|
||||||
if(view.view_type === "list") {
|
if(view.view_type === "list") {
|
||||||
view.options = {
|
view.options = {
|
||||||
"selectable": false
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
views.push(view);
|
views.push(view);
|
||||||
});
|
});
|
||||||
|
this.views = views;
|
||||||
|
|
||||||
this.viewmanager = new openerp.base.ViewManager(this.view.session,
|
this.viewmanager = new openerp.base.ViewManager(this.view.session,
|
||||||
this.element_id, this.dataset, views);
|
this.element_id, this.dataset, views);
|
||||||
|
var reg = new openerp.base.Registry();
|
||||||
|
reg.add("form", openerp.base.views.map["form"]);
|
||||||
|
reg.add("graph", openerp.base.views.map["graph"]);
|
||||||
|
reg.add("list", "openerp.base.form.One2ManyListView");
|
||||||
|
this.viewmanager.registry = reg;
|
||||||
|
|
||||||
this.viewmanager.on_controller_inited.add_last(function(view_type, controller) {
|
this.viewmanager.on_controller_inited.add_last(function(view_type, controller) {
|
||||||
if (view_type == "list") {
|
if (view_type == "list") {
|
||||||
// TODO niv
|
controller.o2m = self;
|
||||||
} else if (view_type == "form") {
|
} else if (view_type == "form") {
|
||||||
// TODO niv
|
// TODO niv
|
||||||
}
|
}
|
||||||
|
@ -1278,6 +1278,15 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
|
||||||
// TODO niv: handle other types of views
|
// TODO niv: handle other types of views
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
reload_current_view: function() {
|
||||||
|
var self = this;
|
||||||
|
var view = self.viewmanager.views[self.viewmanager.active_view].controller;
|
||||||
|
if(self.viewmanager.active_view === "list") {
|
||||||
|
view.reload_content();
|
||||||
|
} else if (self.viewmanager.active_view === "form") {
|
||||||
|
// TODO niv: but fme did not implemented delete in form view anyway
|
||||||
|
}
|
||||||
|
},
|
||||||
set_value: function(value) {
|
set_value: function(value) {
|
||||||
if(value != false) {
|
if(value != false) {
|
||||||
this.dataset.set_ids(value);
|
this.dataset.set_ids(value);
|
||||||
|
@ -1290,6 +1299,24 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
openerp.base.form.One2ManyListView = openerp.base.ListView.extend({
|
||||||
|
do_add_record: function () {
|
||||||
|
var self = this;
|
||||||
|
var pop = new openerp.base.form.SelectCreatePopup(null, self.o2m.view.session);
|
||||||
|
pop.select_element(self.o2m.field.relation,{
|
||||||
|
initial_view: "form",
|
||||||
|
alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined
|
||||||
|
});
|
||||||
|
pop.on_select_elements.add(function(element_ids) {
|
||||||
|
var ids = self.o2m.dataset.ids;
|
||||||
|
_.each(element_ids, function(x) {if (!_.include(ids, x)) ids.push(x);});
|
||||||
|
self.o2m.dataset.set_ids(ids);
|
||||||
|
self.o2m.on_ui_change();
|
||||||
|
self.o2m.reload_current_view();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({
|
openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({
|
||||||
init: function(view, node) {
|
init: function(view, node) {
|
||||||
this._super(view, node);
|
this._super(view, node);
|
||||||
|
@ -1313,7 +1340,6 @@ openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({
|
||||||
|
|
||||||
this.list_view = new openerp.base.form.Many2ManyListView(
|
this.list_view = new openerp.base.form.Many2ManyListView(
|
||||||
null, this.view.session, this.list_id, this.dataset, false, {
|
null, this.view.session, this.list_id, this.dataset, false, {
|
||||||
'selectable': false,
|
|
||||||
'addable': 'Add'
|
'addable': 'Add'
|
||||||
});
|
});
|
||||||
this.list_view.m2m_field = this;
|
this.list_view.m2m_field = this;
|
||||||
|
@ -1373,6 +1399,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.BaseWidget.extend({
|
||||||
* - initial_ids
|
* - initial_ids
|
||||||
* - initial_view: form or search (default search)
|
* - initial_view: form or search (default search)
|
||||||
* - disable_multiple_selection
|
* - disable_multiple_selection
|
||||||
|
* - alternative_form_view
|
||||||
*/
|
*/
|
||||||
select_element: function(model, options) {
|
select_element: function(model, options) {
|
||||||
this.model = model;
|
this.model = model;
|
||||||
|
@ -1386,7 +1413,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.BaseWidget.extend({
|
||||||
start: function() {
|
start: function() {
|
||||||
this._super();
|
this._super();
|
||||||
this.dataset = new openerp.base.DataSetSearch(this.session, this.model);
|
this.dataset = new openerp.base.DataSetSearch(this.session, this.model);
|
||||||
if (this.options.initial_view || "search" == "search") {
|
if ((this.options.initial_view || "search") == "search") {
|
||||||
this.setup_search_view();
|
this.setup_search_view();
|
||||||
} else { // "form"
|
} else { // "form"
|
||||||
this.new_object();
|
this.new_object();
|
||||||
|
@ -1457,6 +1484,10 @@ openerp.base.form.SelectCreatePopup = openerp.base.BaseWidget.extend({
|
||||||
this.dataset.index = null;
|
this.dataset.index = null;
|
||||||
this.view_form = new openerp.base.FormView(null, this.session,
|
this.view_form = new openerp.base.FormView(null, this.session,
|
||||||
this.element_id + "_view_form", this.dataset, false);
|
this.element_id + "_view_form", this.dataset, false);
|
||||||
|
if (this.options.alternative_form_view) {
|
||||||
|
debugger;
|
||||||
|
this.view_form.set_embedded_view(this.options.alternative_form_view);
|
||||||
|
}
|
||||||
this.view_form.start();
|
this.view_form.start();
|
||||||
this.view_form.on_loaded.add_last(function() {
|
this.view_form.on_loaded.add_last(function() {
|
||||||
var $buttons = self.view_form.$element.find(".oe_form_buttons");
|
var $buttons = self.view_form.$element.find(".oe_form_buttons");
|
||||||
|
|
|
@ -83,6 +83,7 @@ openerp.base.ViewManager = openerp.base.Controller.extend({
|
||||||
this.views = {};
|
this.views = {};
|
||||||
this.flags = this.flags || {};
|
this.flags = this.flags || {};
|
||||||
this.sidebar = new openerp.base.NullSidebar();
|
this.sidebar = new openerp.base.NullSidebar();
|
||||||
|
this.registry = openerp.base.views;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* @returns {jQuery.Deferred} initial view loading promise
|
* @returns {jQuery.Deferred} initial view loading promise
|
||||||
|
@ -117,7 +118,7 @@ openerp.base.ViewManager = openerp.base.Controller.extend({
|
||||||
var view = this.views[view_type];
|
var view = this.views[view_type];
|
||||||
if (!view.controller) {
|
if (!view.controller) {
|
||||||
// Lazy loading of views
|
// Lazy loading of views
|
||||||
var controllerclass = openerp.base.views.get_object(view_type);
|
var controllerclass = this.registry.get_object(view_type);
|
||||||
var controller = new controllerclass( this, this.session, this.element_id + "_view_" + view_type,
|
var controller = new controllerclass( this, this.session, this.element_id + "_view_" + view_type,
|
||||||
this.dataset, view.view_id, view.options);
|
this.dataset, view.view_id, view.options);
|
||||||
if (view.embedded_view) {
|
if (view.embedded_view) {
|
||||||
|
|
Loading…
Reference in New Issue