[fix] fix a big bug in the one2many
bzr revid: nicolas.vanhoren@openerp.com-20110718152807-bgy47f32tlx9xdzb
This commit is contained in:
parent
dc764a3832
commit
193fc86c38
|
@ -388,9 +388,6 @@ openerp.base.DataSetStatic = openerp.base.DataSet.extend({
|
||||||
this._super(session, model, context);
|
this._super(session, model, context);
|
||||||
// all local records
|
// all local records
|
||||||
this.ids = ids || [];
|
this.ids = ids || [];
|
||||||
if (this.ids.length) {
|
|
||||||
this.index = 0;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
read_slice: function (fields, offset, limit, callback) {
|
read_slice: function (fields, offset, limit, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
@ -400,8 +397,10 @@ openerp.base.DataSetStatic = openerp.base.DataSet.extend({
|
||||||
},
|
},
|
||||||
set_ids: function (ids) {
|
set_ids: function (ids) {
|
||||||
this.ids = ids;
|
this.ids = ids;
|
||||||
this.index = this.index <= this.ids.length - 1 ?
|
if (this.index !== null) {
|
||||||
this.index : (this.ids.length > 0 ? this.length - 1 : 0);
|
this.index = this.index <= this.ids.length - 1 ?
|
||||||
|
this.index : (this.ids.length > 0 ? this.length - 1 : 0);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
unlink: function(ids) {
|
unlink: function(ids) {
|
||||||
this.on_unlink(ids);
|
this.on_unlink(ids);
|
||||||
|
@ -478,8 +477,10 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({
|
||||||
var self = this;
|
var self = this;
|
||||||
return this._super(ids, function(result) {
|
return this._super(ids, function(result) {
|
||||||
self.ids = _.without.apply(_, [self.ids].concat(ids));
|
self.ids = _.without.apply(_, [self.ids].concat(ids));
|
||||||
self.index = self.index <= self.ids.length - 1 ?
|
if (this.index !== null) {
|
||||||
self.index : (self.ids.length > 0 ? self.ids.length -1 : 0);
|
self.index = self.index <= self.ids.length - 1 ?
|
||||||
|
self.index : (self.ids.length > 0 ? self.ids.length -1 : 0);
|
||||||
|
}
|
||||||
if (callback)
|
if (callback)
|
||||||
callback(result);
|
callback(result);
|
||||||
}, error_callback);
|
}, error_callback);
|
||||||
|
|
|
@ -17,7 +17,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
|
||||||
*
|
*
|
||||||
* @property {openerp.base.Registry} registry=openerp.base.form.widgets widgets registry for this form view instance
|
* @property {openerp.base.Registry} registry=openerp.base.form.widgets widgets registry for this form view instance
|
||||||
*/
|
*/
|
||||||
init: function(view_manager, session, element_id, dataset, view_id) {
|
init: function(view_manager, session, element_id, dataset, view_id, options) {
|
||||||
this._super(session, element_id);
|
this._super(session, element_id);
|
||||||
this.view_manager = view_manager || new openerp.base.NullViewManager();
|
this.view_manager = view_manager || new openerp.base.NullViewManager();
|
||||||
this.dataset = dataset;
|
this.dataset = dataset;
|
||||||
|
@ -37,6 +37,8 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
|
||||||
this.registry = openerp.base.form.widgets;
|
this.registry = openerp.base.form.widgets;
|
||||||
this.has_been_loaded = $.Deferred();
|
this.has_been_loaded = $.Deferred();
|
||||||
this.$form_header = null;
|
this.$form_header = null;
|
||||||
|
this.options = options || {};
|
||||||
|
_.defaults(this.options, {"always_show_new_button": true});
|
||||||
},
|
},
|
||||||
start: function() {
|
start: function() {
|
||||||
//this.log('Starting FormView '+this.model+this.view_id)
|
//this.log('Starting FormView '+this.model+this.view_id)
|
||||||
|
@ -88,14 +90,16 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
|
||||||
},
|
},
|
||||||
do_show: function () {
|
do_show: function () {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
var promise;
|
||||||
if (this.dataset.index === null) {
|
if (this.dataset.index === null) {
|
||||||
// null index means we should start a new record
|
// null index means we should start a new record
|
||||||
this.on_button_new();
|
promise = this.on_button_new();
|
||||||
} else {
|
} else {
|
||||||
this.dataset.read_index(_.keys(this.fields_view.fields), this.on_record_loaded);
|
promise = this.dataset.read_index(_.keys(this.fields_view.fields), this.on_record_loaded);
|
||||||
}
|
}
|
||||||
self.$element.show();
|
self.$element.show();
|
||||||
this.view_manager.sidebar.do_refresh(true);
|
this.view_manager.sidebar.do_refresh(true);
|
||||||
|
return promise;
|
||||||
},
|
},
|
||||||
do_hide: function () {
|
do_hide: function () {
|
||||||
this.$element.hide();
|
this.$element.hide();
|
||||||
|
@ -107,7 +111,9 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
|
||||||
if (!record.id) {
|
if (!record.id) {
|
||||||
this.$form_header.find('.oe_form_on_create').show();
|
this.$form_header.find('.oe_form_on_create').show();
|
||||||
this.$form_header.find('.oe_form_on_update').hide();
|
this.$form_header.find('.oe_form_on_update').hide();
|
||||||
this.$form_header.find('button.oe_form_button_new').hide();
|
if (!this.options["always_show_new_button"]) {
|
||||||
|
this.$form_header.find('button.oe_form_button_new').hide();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this.$form_header.find('.oe_form_on_create').hide();
|
this.$form_header.find('.oe_form_on_create').hide();
|
||||||
this.$form_header.find('.oe_form_on_update').show();
|
this.$form_header.find('.oe_form_on_update').show();
|
||||||
|
@ -271,10 +277,14 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
|
||||||
},
|
},
|
||||||
on_button_new: function() {
|
on_button_new: function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
var def = $.Deferred();
|
||||||
$.when(this.has_been_loaded).then(function() {
|
$.when(this.has_been_loaded).then(function() {
|
||||||
self.dataset.default_get(
|
self.dataset.default_get(
|
||||||
_.keys(self.fields_view.fields), self.on_record_loaded);
|
_.keys(self.fields_view.fields)).then(self.on_record_loaded).then(function() {
|
||||||
|
def.resolve();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
return def.promise();
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Triggers saving the form's record. Chooses between creating a new
|
* Triggers saving the form's record. Chooses between creating a new
|
||||||
|
@ -1555,6 +1565,7 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
|
||||||
this._super(view, node);
|
this._super(view, node);
|
||||||
this.template = "FieldOne2Many";
|
this.template = "FieldOne2Many";
|
||||||
this.is_started = $.Deferred();
|
this.is_started = $.Deferred();
|
||||||
|
this.form_last_update = $.Deferred();
|
||||||
},
|
},
|
||||||
start: function() {
|
start: function() {
|
||||||
this._super.apply(this, arguments);
|
this._super.apply(this, arguments);
|
||||||
|
@ -1588,14 +1599,19 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
|
||||||
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);
|
||||||
this.viewmanager.registry = openerp.base.views.clone({
|
this.viewmanager.registry = openerp.base.views.clone({
|
||||||
list: 'openerp.base.form.One2ManyListView'
|
list: 'openerp.base.form.One2ManyListView',
|
||||||
|
form: 'openerp.base.form.One2ManyFormView'
|
||||||
|
});
|
||||||
|
var once = $.Deferred().then(function() {
|
||||||
|
self.form_last_update.resolve();
|
||||||
});
|
});
|
||||||
|
|
||||||
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") {
|
||||||
controller.o2m = self;
|
controller.o2m = self;
|
||||||
} else if (view_type == "form") {
|
} else if (view_type == "form") {
|
||||||
// TODO niv
|
controller.on_record_loaded.add_last(function() {
|
||||||
|
once.resolve();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
self.is_started.resolve();
|
self.is_started.resolve();
|
||||||
});
|
});
|
||||||
|
@ -1609,7 +1625,12 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
|
||||||
if(self.viewmanager.active_view === "list") {
|
if(self.viewmanager.active_view === "list") {
|
||||||
view.reload_content();
|
view.reload_content();
|
||||||
} else if (self.viewmanager.active_view === "form") {
|
} else if (self.viewmanager.active_view === "form") {
|
||||||
// TODO niv: implement
|
if (this.dataset.index === null && this.dataset.ids.length >= 1) {
|
||||||
|
this.dataset.index = 0;
|
||||||
|
}
|
||||||
|
this.form_last_update.then(function() {
|
||||||
|
this.form_last_update = view.do_show();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
set_value_from_ui: function() {},
|
set_value_from_ui: function() {},
|
||||||
|
@ -1700,6 +1721,10 @@ openerp.base.form.One2ManyDataSet = openerp.base.BufferedDataSet.extend({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
openerp.base.form.One2ManyFormView = openerp.base.FormView.extend({
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
openerp.base.form.One2ManyListView = openerp.base.ListView.extend({
|
openerp.base.form.One2ManyListView = openerp.base.ListView.extend({
|
||||||
do_add_record: function () {
|
do_add_record: function () {
|
||||||
if (this.options.editable) {
|
if (this.options.editable) {
|
||||||
|
|
Loading…
Reference in New Issue