diff options
| author | Mathieu Duckerts-Antoine <dam@odoo.com> | 2019-06-05 12:03:43 +0000 |
|---|---|---|
| committer | Vincent Schippefilt <vsc@odoo.com> | 2019-07-30 06:53:11 +0000 |
| commit | adeeb0149ad6a4c894cc4c46d568a6a5eff9ac5a (patch) | |
| tree | 46bf6d023232cc125fe8e2e90a171ca25255c45f /addons/web/static/src/js/views | |
| parent | a9d013c5812a367b57b6b5435e98b2c1a033e2b9 (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/views')
| -rw-r--r-- | addons/web/static/src/js/views/graph/graph_controller.js | 2 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/graph/graph_renderer.js | 32 |
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; |
