summaryrefslogtreecommitdiff
path: root/addons/web_graph/static/src/js
diff options
context:
space:
mode:
authorGery Debongnie <ged@openerp.com>2014-02-26 12:17:10 +0100
committerGery Debongnie <ged@openerp.com>2014-02-26 12:17:10 +0100
commite7306f2c4ad577fd94bbb28e1c7636ef6799bad7 (patch)
tree94284a977fe01a7d634e10b4d10813e0f57d8dbd /addons/web_graph/static/src/js
parent3279c76c6258b1fb1cdb1261f3f7eb51aed30662 (diff)
[FIX] fixes various problems with the graph view and the filters in the searchbar. Now, it should properly compute and update the groupby/col_groupby in the search bar (addon web_graph)
bzr revid: ged@openerp.com-20140226111710-q11qx1tb2l0nryxf
Diffstat (limited to 'addons/web_graph/static/src/js')
-rw-r--r--addons/web_graph/static/src/js/graph_view.js94
-rw-r--r--addons/web_graph/static/src/js/graph_widget.js4
2 files changed, 62 insertions, 36 deletions
diff --git a/addons/web_graph/static/src/js/graph_view.js b/addons/web_graph/static/src/js/graph_view.js
index ace2f14ae20..25a1f932cc4 100644
--- a/addons/web_graph/static/src/js/graph_view.js
+++ b/addons/web_graph/static/src/js/graph_view.js
@@ -81,9 +81,9 @@ instance.web_graph.GraphView = instance.web.View.extend({
this.ignore_do_search = false;
return;
}
-
var self = this,
- col_group_by = self.get_groupbys_from_searchview('ColGroupBy', 'col_group_by');
+ groupbys = this.get_groupbys_from_searchview(),
+ col_group_by = groupbys.col_group_by;
if (!this.graph_widget) {
if (group_by.length) {
@@ -95,10 +95,10 @@ instance.web_graph.GraphView = instance.web.View.extend({
this.graph_widget = new openerp.web_graph.Graph(this, this.model, domain, this.widget_config);
this.graph_widget.appendTo(this.$el);
this.ViewManager.on('switch_mode', this, function (e) {
- var col_gb = self.get_groupbys_from_searchview('ColGroupBy', 'col_group_by'),
- row_gb = self.get_groupbys_from_searchview('GroupBy', 'group_by');
-
- if (e === 'graph') this.graph_widget.set(domain, row_gb, col_gb);
+ if (e === 'graph') {
+ var group_bys = self.get_groupbys_from_searchview();
+ this.graph_widget.set(domain, group_bys.group_by, group_bys.col_group_by);
+ }
});
return;
}
@@ -106,19 +106,27 @@ instance.web_graph.GraphView = instance.web.View.extend({
this.graph_widget.set(domain, group_by, col_group_by);
},
- extract_groupby: function (cat_field, context) {
- context = (_.isString(context)) ? py.eval(context) : context;
- return context[cat_field];
- },
+ get_groupbys_from_searchview: function () {
+ var result = { group_by: [], col_group_by: []},
+ searchdata = this.search_view.build_search_data();
- get_groupbys_from_searchview: function (cat_name, cat_field) {
- var self=this,
- facet = this.search_view.query.findWhere({category:cat_name}),
- groupby_list = facet ? facet.values.models : [];
- return _.map(groupby_list, function (g) {
- var context = g.attributes.value.attrs.context;
- return self.extract_groupby(cat_field, context);
+ _.each(searchdata.groupbys, function (data) {
+ data = (_.isString(data)) ? py.eval(data) : data;
+ result.group_by = result.group_by.concat(data.group_by);
+ if (data.col_group_by) {
+ result.col_group_by = result.col_group_by.concat(data.col_group_by);
+ }
+ });
+
+ if (result.col_group_by.length) {
+ return result;
+ }
+ _.each(searchdata.contexts, function (context) {
+ if (context.col_group_by) {
+ result.col_group_by = result.col_group_by.concat(context.col_group_by);
+ }
});
+ return result;
},
do_show: function () {
@@ -132,11 +140,20 @@ instance.web_graph.GraphView = instance.web.View.extend({
// add groupby to the search view
register_groupby: function(row_groupby, col_groupby) {
- var query = this.search_view.query;
+ var query = this.search_view.query,
+ groupbys = this.get_groupbys_from_searchview(),
+ search_row_groupby = groupbys.group_by,
+ search_col_groupby = groupbys.col_group_by,
+ row_gb_changed = !_.isEqual(_.pluck(row_groupby, 'field'), search_row_groupby),
+ col_gb_changed = !_.isEqual(_.pluck(col_groupby, 'field'), search_col_groupby);
if (!_.has(this.search_view, '_s_groupby')) { return; }
- if (row_groupby.length && col_groupby.length) {
+ if (!row_gb_changed && !col_gb_changed) {
+ return;
+ }
+
+ if (row_gb_changed && col_gb_changed) {
// when two changes to the search view will be done, the method do_search
// will be called twice, once with the correct groupby and incorrect col_groupby,
// and once with correct informations. This flag is necessary to prevent the
@@ -144,26 +161,31 @@ instance.web_graph.GraphView = instance.web.View.extend({
this.ignore_do_search = true;
}
- // add row groupbys
- var row_facet = this.make_row_groupby_facets(row_groupby),
- row_search_facet = query.findWhere({category:'GroupBy'});
+ if (row_gb_changed) {
+ // add row groupbys
+ var row_facet = this.make_row_groupby_facets(row_groupby),
+ row_search_facet = query.findWhere({category:'GroupBy'});
- if (row_search_facet) {
- row_search_facet.values.reset(row_facet.values);
- } else {
- if (row_groupby.length) {
- query.add(row_facet);
+ if (row_search_facet) {
+ row_search_facet.values.reset(row_facet.values);
+ } else {
+ if (row_groupby.length) {
+ query.add(row_facet);
+ }
}
}
- // add col groupbys
- var col_facet = this.make_col_groupby_facets(col_groupby),
- col_search_facet = query.findWhere({category:'ColGroupBy'});
-
- if (col_search_facet) {
- col_search_facet.values.reset(col_facet.values);
- } else {
- if (col_groupby.length) {
- query.add(col_facet);
+
+ if (col_gb_changed) {
+ // add col groupbys
+ var col_facet = this.make_col_groupby_facets(col_groupby),
+ col_search_facet = query.findWhere({category:'ColGroupBy'});
+
+ if (col_search_facet) {
+ col_search_facet.values.reset(col_facet.values);
+ } else {
+ if (col_groupby.length) {
+ query.add(col_facet);
+ }
}
}
},
diff --git a/addons/web_graph/static/src/js/graph_widget.js b/addons/web_graph/static/src/js/graph_widget.js
index 26f479790df..f060e62fa8c 100644
--- a/addons/web_graph/static/src/js/graph_widget.js
+++ b/addons/web_graph/static/src/js/graph_widget.js
@@ -37,6 +37,8 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
if (this.mode !== 'pivot') {
this.$('.graph_heatmap label').addClass('disabled');
+ } else {
+ this.$('.graph_main_content').css('position', 'initial');
}
return this.model.call('fields_get', []).then(function (f) {
@@ -159,8 +161,10 @@ openerp.web_graph.Graph = openerp.web.Widget.extend({
if (mode === 'pivot') {
this.$('.graph_heatmap label').removeClass('disabled');
+ this.$('.graph_main_content').css('position', 'initial');
} else {
this.$('.graph_heatmap label').addClass('disabled');
+ this.$('.graph_main_content').css('position', 'relative');
}
this.display_data();
},