From 8abfc76ea559ac4229916e97206e95e726d6f8b4 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 21 Jun 2011 14:12:22 +0200 Subject: [PATCH] [imp] created first version of one2manydataset and implemented delete bzr revid: nicolas.vanhoren@openerp.com-20110621121222-3bjpeh66un137ip6 --- addons/base/static/src/js/form.js | 55 ++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 90357325928..5cfe5db1dd2 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -1267,6 +1267,15 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ } }); +/* +# Values: (0, 0, { fields }) create +# (1, ID, { fields }) update +# (2, ID) remove (delete) +# (3, ID) unlink one (target id or target of relation) +# (4, ID) link +# (5) unlink all (only valid for one2many) +*/ + openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({ init: function(view, node) { this._super(view, node); @@ -1279,9 +1288,8 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({ var self = this; - this.dataset = new openerp.base.DataSetStatic(this.session, this.field.relation); - this.dataset.on_unlink.add_last(function(ids) { - self.dataset.set_ids(_.without.apply(_, [self.dataset.ids].concat(ids))); + this.dataset = new openerp.base.form.One2ManyDataset(this.session, this.field.relation); + this.dataset.on_change.add_last(function() { self.on_ui_change(); self.reload_current_view(); }); @@ -1337,18 +1345,47 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({ // TODO niv: but fme did not implemented delete in form view anyway } }, + set_value_from_ui: function() {}, set_value: function(value) { if(value != false) { - this.dataset.set_ids(value); + this.dataset.reset_ids(value); this.is_setted.resolve(); } }, - get_value: function(value) { - //TODO niv - return []; + get_value: function() { + var val = _.map(this.dataset.to_delete, function(v, k) {return [2, parseInt(k, 10)];}); + var val = val.concat(_.map(this.dataset.to_create, function(x) {return [0, 0, x];})); + return val; + }, + validate: function() { + this.invalid = false; + // TODO niv } }); +openerp.base.form.One2ManyDataset = openerp.base.DataSetStatic.extend({ + init: function() { + this._super.apply(this, arguments); + this.reset_ids([]); + }, + create: function(data, callback, error_callback) { + }, + write: function (id, data, callback) { + }, + unlink: function(ids) { + var self = this; + this.set_ids(_.without.apply(_, [this.ids].concat(ids))); + _.each(ids, function(x) {self.to_delete[x] = true;}); + this.on_change(); + }, + reset_ids: function(ids) { + this.set_ids(ids); + this.to_delete = {}; + this.to_create = {}; + }, + on_change: function() {} +}); + openerp.base.form.One2ManyListView = openerp.base.ListView.extend({ do_add_record: function () { var self = this; @@ -1505,7 +1542,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.BaseWidget.extend({ $sbutton.click(function() { self.on_select_elements(self.selected_ids); }); - self.view_list = new openerp.base.form.Many2XPopupListView( null, self.session, + self.view_list = new openerp.base.form.SelectCreateListView( null, self.session, self.element_id + "_view_list", self.dataset, false, {'deletable': false}); self.view_list.popup = self; @@ -1563,7 +1600,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.BaseWidget.extend({ } }); -openerp.base.form.Many2XPopupListView = openerp.base.ListView.extend({ +openerp.base.form.SelectCreateListView = openerp.base.ListView.extend({ do_add_record: function () { this.popup.new_object(); },