From e11f50599dd5d6f5d1358a58f0fa3f7269aab12d Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Mon, 28 Sep 2015 17:45:37 +0200 Subject: [PATCH] [FIX] web_graph: duplicates header in pivot For report with duplicated named headers, several columns could get squashed together. This fix check if a value is a duplicate or not, and if it is a duplicates postfix an number allowing to differentiate the two headers (for the human and the javascript). This is the exact same solution than #6722 Backport of 5cff8fbb7c70a372cb5116c2fb98fd622c4d4358 opw-650000 --- addons/web_graph/static/src/js/pivot_table.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/addons/web_graph/static/src/js/pivot_table.js b/addons/web_graph/static/src/js/pivot_table.js index a99bae1756f..15383af0930 100644 --- a/addons/web_graph/static/src/js/pivot_table.js +++ b/addons/web_graph/static/src/js/pivot_table.js @@ -22,6 +22,7 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({ this.measures = options.measures || []; this.rows = { groupby: options.row_groupby, headers: null }; this.cols = { groupby: options.col_groupby, headers: null }; + this.numbering = {}; }, // ---------------------------------------------------------------------- @@ -434,10 +435,10 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({ if (attrs.value[i] === false) { return _t('Undefined'); } else if (attrs.value[i] instanceof Array) { - return attrs.value[i][1]; + return self.get_numbered_value(attrs.value[i], grp); } else if (field && field.type === 'selection') { var selected = _.where(field.selection, {0: attrs.value[i]})[0]; - return selected ? selected[1] : attrs.value[i]; + return selected ? self.get_numbered_value(selected, grp) : attrs.value[i]; } return attrs.value[i]; }); @@ -448,6 +449,16 @@ openerp.web_graph.PivotTable = openerp.web.Class.extend({ }); }, + get_numbered_value: function(value, grp) { + var id = value[0]; + var name = value[1] + this.numbering[grp] = this.numbering[grp] || {}; + this.numbering[grp][name] = this.numbering[grp][name] || {}; + var numbers = this.numbering[grp][name]; + numbers[id] = numbers[id] || _.size(numbers) + 1; + return name + (numbers[id] > 1 ? " (" + numbers[id] + ")" : ""); + }, + // if field is a fieldname, returns field, if field is field_id:interval, retuns field_id raw_field: function (field) { return field.split(':')[0];