summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js
diff options
context:
space:
mode:
authorMathieu Duckerts-Antoine <dam@odoo.com>2019-06-05 12:03:43 +0000
committerVincent Schippefilt <vsc@odoo.com>2019-07-30 06:53:11 +0000
commitadeeb0149ad6a4c894cc4c46d568a6a5eff9ac5a (patch)
tree46bf6d023232cc125fe8e2e90a171ca25255c45f /addons/web/static/src/js
parenta9d013c5812a367b57b6b5435e98b2c1a033e2b9 (diff)
[IMP] web: bar charts not stacked if not enough datasets
Co-Authored-By: Thomas Werland <twe@odoo.com>
Diffstat (limited to 'addons/web/static/src/js')
-rw-r--r--addons/web/static/src/js/views/graph/graph_controller.js2
-rw-r--r--addons/web/static/src/js/views/graph/graph_renderer.js32
2 files changed, 30 insertions, 4 deletions
diff --git a/addons/web/static/src/js/views/graph/graph_controller.js b/addons/web/static/src/js/views/graph/graph_controller.js
index 9e2ebfc0a78..8cfed52a050 100644
--- a/addons/web/static/src/js/views/graph/graph_controller.js
+++ b/addons/web/static/src/js/views/graph/graph_controller.js
@@ -172,7 +172,7 @@ var GraphController = AbstractController.extend(GroupByMenuMixin,{
.find('.o_graph_button[data-mode="stack"]')
.data('stacked', state.stacked)
.toggleClass('active', state.stacked)
- .toggleClass('o_hidden', state.mode !== 'bar');
+ .toggleClass('o_hidden', state.mode !== 'bar' || !this.renderer.isStackable);
_.each(this.$measureList.find('.dropdown-item'), function (item) {
var $item = $(item);
$item.toggleClass('selected', $item.data('field') === state.measure);
diff --git a/addons/web/static/src/js/views/graph/graph_renderer.js b/addons/web/static/src/js/views/graph/graph_renderer.js
index f594a7fb131..017d0046998 100644
--- a/addons/web/static/src/js/views/graph/graph_renderer.js
+++ b/addons/web/static/src/js/views/graph/graph_renderer.js
@@ -45,7 +45,6 @@ var FORMAT_OPTIONS = {
},
};
-
var NO_DATA = [_t('No data')];
NO_DATA.isNoData = true;
@@ -71,6 +70,8 @@ return AbstractRenderer.extend({
this.chart = null;
this.chartId = _.uniqueId('chart');
+ // the bar charts are considered stackable a priori
+ this.isStackable = true;
this.$tooltip = null;
},
/**
@@ -460,7 +461,6 @@ return AbstractRenderer.extend({
display: !this.isEmbedded,
labelString: this.fields[this.state.measure].string,
},
- stacked: this.state.mode === 'bar' && this.state.stacked,
ticks: {
callback: this._formatValue.bind(this),
suggestedMin: 0,
@@ -761,9 +761,35 @@ return AbstractRenderer.extend({
// prepare data
var data = this._prepareData(dataPoints);
+
+ // The datapoints (with non zero value) can be grouped by
+ // their originIndex and associated labels.
+ // If at least one group formed in that way has two elements
+ // this.isStackable will be true.
+ var groupMemberCounts = data.labels.map(function () {
+ return {};
+ });
+ this.isStackable = false;
+ for (var i = 0; i < data.datasets.length; i++) {
+ var dataset = data.datasets[i];
+ var originIndex = dataset.originIndex;
+ if (this.isStackable) {
+ break;
+ }
+ for (var j = 0; j < dataset.data.length; j++) {
+ if (dataset.data[j]) {
+ if (originIndex in groupMemberCounts[j]) {
+ this.isStackable = true;
+ break;
+ } else {
+ groupMemberCounts[j][originIndex] = 1;
+ }
+ }
+ }
+ }
data.datasets.forEach(function (dataset, index) {
// used when stacked
- dataset.stack = self.state.stacked ? self.state.origins[dataset.originIndex] : undefined;
+ dataset.stack = self.isStackable && self.state.stacked ? self.state.origins[dataset.originIndex] : undefined;
// set dataset color
var color = self._getColor(index);
dataset.backgroundColor = color;