From 0cecdac970f884fcd2d65a1dea7880b27358fb51 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Thu, 21 Mar 2013 13:49:52 +0100 Subject: [IMP] view_form: statusbar with folded selection bzr revid: chm@openerp.com-20130321124952-kwexraafd2681isg --- addons/web/static/src/js/view_form.js | 47 +++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 22 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index b057616b6ab..a6ed212fbdc 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -5263,8 +5263,8 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ this.options.clickable = this.options.clickable || (this.node.attrs || {}).clickable || false; this.options.visible = this.options.visible || (this.node.attrs || {}).statusbar_visible || false; this.set({value: false}); - this.selection = []; - this.set("selection", []); + this.selection = {'unfolded': [], 'folded': []}; + this.set("selection", {'unfolded': [], 'folded': []}); this.selection_dm = new instance.web.DropMisordered(); }, start: function() { @@ -5278,7 +5278,7 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ }); this.get_selection(); if (this.options.clickable) { - this.$el.on('click','li',this.on_click_stage); + this.$el.on('click','li:not(.oe_folded)',this.on_click_stage); } if (this.$el.parent().is('header')) { this.$el.after('
'); @@ -5293,7 +5293,10 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ }, render_value: function() { var self = this; - var content = QWeb.render("FieldStatus.content", {widget: self}); + var content = QWeb.render("FieldStatus.content", { + 'widget': self, + 'value_folded': _.find(self.selection.folded, function(i){return i[0] === self.get('value')}) + }); self.$el.html(content); var colors = JSON.parse((self.node.attrs || {}).statusbar_colors || "{}"); var color = colors[self.get('value')]; @@ -5303,15 +5306,8 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ }, calc_domain: function() { var d = instance.web.pyeval.eval('domain', this.build_domain()); - var domain = []; //if there is no domain defined, fetch all the records - - if (d.length) { - domain = ['|',['id', '=', this.get('value')]].concat(d); - } - - if (! _.isEqual(domain, this.get("evaluated_selection_domain"))) { - this.set("evaluated_selection_domain", domain); - } + this.set("evaluated_selection_domain", ['&', ['fold', '=', false], '|', ['id', '=', this.get('value')]].concat(d)); + this.set("evaluated_selection_domain_folded", ['&', ['fold', '!=', false], '|', ['id', '=', this.get('value')]].concat(d)); }, /** Get the selection and render it * selection: [[identifier, value_to_display], ...] @@ -5320,18 +5316,24 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ */ get_selection: function() { var self = this; - var selection = []; + var selection_unfolded = []; + var selection_folded = []; var calculation = _.bind(function() { if (this.field.type == "many2one") { - var domain = []; - var ds = new instance.web.DataSetSearch(this, this.field.relation, - self.build_context(), this.get("evaluated_selection_domain")); - return ds.read_slice(['name'], {}).then(function (records) { - for(var i = 0; i < records.length; i++) { - selection.push([records[i].id, records[i].name]); - } - }); + var ds_unfold = new instance.web.DataSetSearch(self, self.field.relation, self.build_context(), this.get("evaluated_selection_domain")) + .read_slice(['name'], {}).then(function (records) { + _.each(records, function (record) { + selection_unfolded.push([record.id, record.name]); + }); + }); + var ds_fold = new instance.web.DataSetSearch(self, self.field.relation, self.build_context(), this.get("evaluated_selection_domain_folded")) + .read_slice(['name'], {}).then(function (records) { + _.each(records, function (record) { + selection_folded.push([record.id, record.name]); + }); + }); + return $.when(ds_unfold, ds_fold); } else { // For field type selection filter values according to // statusbar_visible attribute of the field. For example: @@ -5347,6 +5349,7 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ } }, this); this.selection_dm.add(calculation()).then(function () { + var selection = {'unfolded': selection_unfolded, 'folded': selection_folded}; if (! _.isEqual(selection, self.get("selection"))) { self.set("selection", selection); } -- cgit v1.2.3 From 4e43bccebcd414ee3c3aa436cea96926c22718cb Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Thu, 21 Mar 2013 16:21:56 +0100 Subject: [FIX] view_form: FieldStatus bzr revid: chm@openerp.com-20130321152156-3w3vnzn35effxji6 --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index a6ed212fbdc..28c31b80dd6 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -5342,7 +5342,7 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ for(var i=0; i < select.length; i++) { var key = select[i][0]; if(key == this.get('value') || !this.options.visible || this.options.visible.indexOf(key) != -1) { - selection.push(select[i]); + selection_unfolded.push(select[i]); } } return $.when(); -- cgit v1.2.3 From cc4b2bbb2729077eea4dde9282eb696ce83188d4 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Thu, 21 Mar 2013 17:11:23 +0100 Subject: [IMP] view_form: fix FieldStatus bzr revid: chm@openerp.com-20130321161123-j2qc2ynchneibf1o --- addons/web/static/src/js/view_form.js | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 28c31b80dd6..4f5d2e1cc47 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -5306,8 +5306,7 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ }, calc_domain: function() { var d = instance.web.pyeval.eval('domain', this.build_domain()); - this.set("evaluated_selection_domain", ['&', ['fold', '=', false], '|', ['id', '=', this.get('value')]].concat(d)); - this.set("evaluated_selection_domain_folded", ['&', ['fold', '!=', false], '|', ['id', '=', this.get('value')]].concat(d)); + this.set("evaluated_selection_domain", ['|', ['id', '=', this.get('value')]].concat(d)); }, /** Get the selection and render it * selection: [[identifier, value_to_display], ...] @@ -5321,19 +5320,16 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ var calculation = _.bind(function() { if (this.field.type == "many2one") { - var ds_unfold = new instance.web.DataSetSearch(self, self.field.relation, self.build_context(), this.get("evaluated_selection_domain")) - .read_slice(['name'], {}).then(function (records) { + return new instance.web.DataSetSearch(self, self.field.relation, self.build_context(), this.get("evaluated_selection_domain")) + .read_slice(['name', 'fold'], {}).then(function (records) { _.each(records, function (record) { - selection_unfolded.push([record.id, record.name]); - }); - }); - var ds_fold = new instance.web.DataSetSearch(self, self.field.relation, self.build_context(), this.get("evaluated_selection_domain_folded")) - .read_slice(['name'], {}).then(function (records) { - _.each(records, function (record) { - selection_folded.push([record.id, record.name]); + if (record.fold) { + selection_folded.push([record.id, record.name]); + } else { + selection_unfolded.push([record.id, record.name]); + } }); }); - return $.when(ds_unfold, ds_fold); } else { // For field type selection filter values according to // statusbar_visible attribute of the field. For example: -- cgit v1.2.3 From 11ffa1be3bc41b79c3edb877164e6a7ed2912a81 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Thu, 28 Mar 2013 11:41:16 +0100 Subject: [IMP] view_form: statusbar: see the folded stage where i am bzr revid: chm@openerp.com-20130328104116-gn6ve3g2p4d496ss --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 4f5d2e1cc47..1e69df1e6d1 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -5323,7 +5323,7 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ return new instance.web.DataSetSearch(self, self.field.relation, self.build_context(), this.get("evaluated_selection_domain")) .read_slice(['name', 'fold'], {}).then(function (records) { _.each(records, function (record) { - if (record.fold) { + if (record.fold && record.id != self.get('value')) { selection_folded.push([record.id, record.name]); } else { selection_unfolded.push([record.id, record.name]); -- cgit v1.2.3 From 764b3181434e2f8d2d0915809db1f788ace89904 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Tue, 23 Apr 2013 16:09:42 +0200 Subject: [IMP] view_form: FieldStatus, calc_domain: if there is no domain defined, fetch all the records bzr revid: chm@openerp.com-20130423140942-lu1cakf0a0rgf9pf --- addons/web/static/src/js/view_form.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 1e69df1e6d1..975262c9c5c 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -5306,7 +5306,15 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ }, calc_domain: function() { var d = instance.web.pyeval.eval('domain', this.build_domain()); - this.set("evaluated_selection_domain", ['|', ['id', '=', this.get('value')]].concat(d)); + var domain = []; //if there is no domain defined, fetch all the records + + if (d.length) { + domain = ['|',['id', '=', this.get('value')]].concat(d); + } + + if (! _.isEqual(domain, this.get("evaluated_selection_domain"))) { + this.set("evaluated_selection_domain", domain); + } }, /** Get the selection and render it * selection: [[identifier, value_to_display], ...] -- cgit v1.2.3 From fccada6257e56c31fc7014b315cf061e49ecadb8 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Mon, 29 Apr 2013 16:36:21 +0200 Subject: [IMP] view_form: statusbar: add a get_distant_fields method to check if the field 'fold' exists, and use a name_get bzr revid: chm@openerp.com-20130429143621-eulbq3ivu5g9lu4u --- addons/web/static/src/js/view_form.js | 37 +++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 975262c9c5c..65e9501fa51 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -5266,11 +5266,11 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ this.selection = {'unfolded': [], 'folded': []}; this.set("selection", {'unfolded': [], 'folded': []}); this.selection_dm = new instance.web.DropMisordered(); + this.dataset = new instance.web.DataSetStatic(this, this.field.relation, this.build_context()); }, start: function() { this.field_manager.on("view_content_has_changed", this, this.calc_domain); this.calc_domain(); - this.on("change:value", this, this.get_selection); this.on("change:evaluated_selection_domain", this, this.get_selection); this.on("change:selection", this, function() { this.selection = this.get("selection"); @@ -5328,16 +5328,23 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ var calculation = _.bind(function() { if (this.field.type == "many2one") { - return new instance.web.DataSetSearch(self, self.field.relation, self.build_context(), this.get("evaluated_selection_domain")) - .read_slice(['name', 'fold'], {}).then(function (records) { - _.each(records, function (record) { - if (record.fold && record.id != self.get('value')) { - selection_folded.push([record.id, record.name]); - } else { - selection_unfolded.push([record.id, record.name]); - } + return self.get_distant_fields().then(function(fields) { + return new instance.web.DataSetSearch(self, self.field.relation, self.build_context(), self.get("evaluated_selection_domain")) + .read_slice(fields.fold ? ['fold'] : ['id'], {}).then(function (records) { + + var ids = _.map(records, function (val) {return val.id}); + return self.dataset.name_get(ids).then(function (records_name) { + _.each(records, function (record) { + var name = _.find(records_name, function (val) {return val[0] == record.id;})[1]; + if (record.fold && record.id != self.get('value')) { + selection_folded.push([record.id, name]); + } else { + selection_unfolded.push([record.id, name]); + } + }); + }) }); - }); + }); } else { // For field type selection filter values according to // statusbar_visible attribute of the field. For example: @@ -5359,6 +5366,16 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ } }); }, + get_distant_fields: function() { + var self = this; + if (this.distant_fields) { + return $.when(this.distant_fields); + } + return new instance.web.Model(self.field.relation).call("fields_get", [["fold"]]).then(function(fields) { + self.distant_fields = fields; + return fields; + }) + }, on_click_stage: function (ev) { var self = this; var $li = $(ev.currentTarget); -- cgit v1.2.3