@datarailsshared/dr_renderer 1.2.52 → 1.2.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datarailsshared/dr_renderer",
3
- "version": "1.2.52",
3
+ "version": "1.2.56",
4
4
  "description": "DataRails charts and tables renderer",
5
5
  "keywords": [
6
6
  "datarails",
@@ -3,7 +3,7 @@ let initDRPivotTable = function($, window, document) {
3
3
  var slice = [].slice;
4
4
  var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
5
5
 
6
- var DRPivotData, sortDateStrings, getSort, processKey, SubtotalRenderer, getFormattedNumber, largeToSmallSort, NovixRenderer;
6
+ var DRPivotData, sortDateStrings, getSort, processKey, SubtotalRenderer, getFormattedNumber, largeToSmallSort, largeToSmallSortByAbsolute, NovixRenderer;
7
7
 
8
8
  var delim = " , ";
9
9
  const newTableColors = ['rgb(127, 196, 255)', 'rgb(200, 243,243)', 'rgb(247, 161, 173)', 'rgb(255, 237, 178)', 'rgb(221, 239, 255)',
@@ -133,75 +133,88 @@ let initDRPivotTable = function($, window, document) {
133
133
  return key;
134
134
  };
135
135
 
136
- let newProcessKey = function (record, totals, keys, attrs, getAggregator) {
137
- var addKey, attr, flatKey, k, key, len, ref;
138
- key = [];
139
- addKey = false;
140
- for (k = 0, len = attrs.length; k < len; k++) {
141
- attr = attrs[k];
142
- if (record.hasOwnProperty(attr)) {
143
- key.push((ref = record[attr]));
144
- flatKey = key.join(delim);
145
- }
146
- if (totals[flatKey] && totals[flatKey].isChangeable) {
147
- continue;
148
- }
149
- if (!flatKey) return [];
150
- if (!totals[flatKey]) {
151
- totals[flatKey] = getAggregator(key.slice());
152
- addKey = true;
153
- } else {
154
- totals[flatKey] = getAggregator(key.slice());
155
- totals[flatKey].push(record);
156
- }
157
- }
158
- if (addKey) {
159
- keys.push(key);
160
- }
161
- return key;
162
- };
163
-
164
136
  DRPivotData.prototype.processRecord = function(record, useTotalsCalculation) {
165
- var colKey, fColKey, fRowKey, flatColKey, flatRowKey, i, j, k, m, n, ref, results, rowKey;
166
- rowKey = [];
167
- colKey = [];
168
137
  if (useTotalsCalculation) {
169
- rowKey = newProcessKey(record, this.rowTotals, this.rowKeys, this.rowAttrs, (function(_this) {
138
+ if (!this.notFirst) {
139
+ this.keysLength = Object.keys(record).length - 1;
140
+ this.notFirst = true;
141
+ }
142
+ let getRowAggregator = (function(_this) {
170
143
  return function(key) {
171
144
  return _this.aggregator(_this, key, []);
172
145
  };
173
- })(this));
174
- colKey = newProcessKey(record, this.colTotals, this.colKeys, this.colAttrs, (function(_this) {
146
+ })(this);
147
+ let getColAggregator = (function(_this) {
175
148
  return function(key) {
176
149
  return _this.aggregator(_this, [], key);
177
150
  };
178
- })(this));
151
+ })(this);
179
152
 
180
- if (!colKey.length && !rowKey.length) {
181
- this.allTotal.push(record);
153
+ let rowKey = [];
154
+ for (k = 0; k < this.rowAttrs.length; k++) {
155
+ let attr = this.rowAttrs[k];
156
+ if (record.hasOwnProperty(attr)) {
157
+ rowKey.push((ref = record[attr]) != null ? ref : "null");
158
+ }
182
159
  }
183
- if (!colKey.length && rowKey.length === 1) {
184
- this.rowTotals[rowKey[0]].push(record);
185
- this.rowTotals[rowKey[0]].isChangeable = true;
160
+
161
+ let colKey = [];
162
+ for (k = 0; k < this.colAttrs.length; k++) {
163
+ let attr = this.colAttrs[k];
164
+ if (record.hasOwnProperty(attr)) {
165
+ colKey.push((ref = record[attr]) != null ? ref : "null");
166
+ }
186
167
  }
187
- if (!rowKey.length && colKey.length === 1) {
188
- this.colTotals[colKey[0]].push(record);
189
- this.colTotals[colKey[0]].isChangeable = true;
168
+
169
+ let flatRowKey = rowKey.join(delim);
170
+ let flatColKey = colKey.join(delim);
171
+
172
+ if (this.keysLength === rowKey.length + colKey.length) {
173
+ if (!this.rowKeys.some(rKey => rKey.join(delim) === flatRowKey)) {
174
+ this.rowKeys.push(rowKey);
175
+ }
176
+ if (!this.colKeys.some(cKey => cKey.join(delim) === flatColKey)) {
177
+ this.colKeys.push(colKey);
178
+ }
190
179
  }
191
- } else {
192
- this.allTotal.push(record);
193
- rowKey = processKey(record, this.rowTotals, this.rowKeys, this.rowAttrs, (function(_this) {
194
- return function(key) {
195
- return _this.aggregator(_this, key, []);
196
- };
197
- })(this));
198
- colKey = processKey(record, this.colTotals, this.colKeys, this.colAttrs, (function(_this) {
199
- return function(key) {
200
- return _this.aggregator(_this, [], key);
201
- };
202
- })(this));
180
+
181
+ if (!colKey.length && !rowKey.length) {
182
+ this.allTotal.push(record);
183
+ } else if (!colKey.length && rowKey.length) {
184
+ if (!this.rowTotals[flatRowKey]) {
185
+ this.rowTotals[flatRowKey] = getRowAggregator(rowKey.slice());
186
+ this.rowTotals[flatRowKey].push(record);
187
+ }
188
+ } else if (!rowKey.length && colKey.length) {
189
+ if (!this.colTotals[flatColKey]) {
190
+ this.colTotals[flatColKey] = getColAggregator(rowKey.slice());
191
+ this.colTotals[flatColKey].push(record);
192
+ }
193
+ } else {
194
+ if (!this.tree[flatRowKey]) {
195
+ this.tree[flatRowKey] = {};
196
+ }
197
+ this.tree[flatRowKey][flatColKey] = this.aggregator(this, rowKey, colKey);
198
+ this.tree[flatRowKey][flatColKey].push(record);
199
+ }
200
+ return;
203
201
  }
204
202
 
203
+ var colKey, fColKey, fRowKey, flatColKey, flatRowKey, i, j, k, m, n, ref, results, rowKey;
204
+ rowKey = [];
205
+ colKey = [];
206
+ this.allTotal.push(record);
207
+ rowKey = processKey(record, this.rowTotals, this.rowKeys, this.rowAttrs, (function(_this) {
208
+ return function(key) {
209
+ return _this.aggregator(_this, key, []);
210
+ };
211
+ })(this));
212
+ colKey = processKey(record, this.colTotals, this.colKeys, this.colAttrs, (function(_this) {
213
+ return function(key) {
214
+ return _this.aggregator(_this, [], key);
215
+ };
216
+ })(this));
217
+
205
218
  m = rowKey.length - 1;
206
219
  n = colKey.length - 1;
207
220
  if (m < 0 || n < 0) {
@@ -340,7 +353,11 @@ let initDRPivotTable = function($, window, document) {
340
353
  };
341
354
  };
342
355
 
343
- largeToSmallSort = function(as, bs) {
356
+ largeToSmallSortByAbsolute = function (as, bs) {
357
+ return largeToSmallSort(as , bs, true);
358
+ }
359
+
360
+ largeToSmallSort = function(as, bs, is_abs = false) {
344
361
  var a, a1, b, b1, rd, rx, rz;
345
362
  rx = /(\d+)|(\D+)/g;
346
363
  rd = /\d/;
@@ -352,6 +369,11 @@ let initDRPivotTable = function($, window, document) {
352
369
  if (isNaN(bs)) {
353
370
  return 1;
354
371
  }
372
+
373
+ if (is_abs) {
374
+ return Math.abs(bs) - Math.abs(as);
375
+ }
376
+
355
377
  return bs - as;
356
378
  }
357
379
  a = String(as).toLowerCase();
@@ -2217,6 +2239,7 @@ let initDRPivotTable = function($, window, document) {
2217
2239
  $.pivotUtilities.getFormattedNumber = getFormattedNumber;
2218
2240
  $.pivotUtilities.sortDateStrings = sortDateStrings;
2219
2241
  $.pivotUtilities.largeToSmallSort = largeToSmallSort;
2242
+ $.pivotUtilities.largeToSmallSortByAbsolute = largeToSmallSortByAbsolute;
2220
2243
  $.pivotUtilities.getPivotDataModel = function(input, opts){ return new DRPivotData(input, opts); }
2221
2244
  $.pivotUtilities.getPivotTableFormula = function(rowData, opts, func, colFields, rowFields, aggregationDefaults, utils) {
2222
2245
  let totalStr = 'Grand Totals';
@@ -891,14 +891,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
891
891
  return chartOptions;
892
892
  };
893
893
 
894
- highchartsRenderer.ptCreateBasicLineSeries = function (pivotData, colors, onlyNumbers, isUniqueVals, additionOptions) {
894
+ // Generate series for charts functions
895
+ highchartsRenderer.ptCreateBasicLineSeries = function (pivotData, colors, onlyNumbers, isUniqueVals, additionOptions, opts, chartOptions) {
895
896
  var chart_series = [],
896
897
  row_n_keys = pivotData.getRowKeys(),
897
898
  col_n_keys = pivotData.getColKeys();
898
899
 
899
- var num_cols = col_n_keys.length;
900
- var num_rows = row_n_keys.length;
901
-
902
900
  var has_delta = false;
903
901
  if (additionOptions && lodash.has(additionOptions, "delta_column.field") && additionOptions.delta_column.field == "series") {
904
902
  has_delta = true;
@@ -909,16 +907,22 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
909
907
 
910
908
  var i = 0;
911
909
  var variat_serias = null;
910
+ const n = col_n_keys.length;
911
+ const xSum = (1 + n) / 2 * n;
912
912
 
913
913
  lodash.forEach(row_n_keys, function (row_n_value) {
914
914
  var ob = {};
915
+ let ySum = 0;
916
+ let xySum = 0;
917
+ let squareXSum = 0;
915
918
  ob.data = [];
916
919
  if (row_n_value && row_n_value.length > 0)
917
920
  ob.name = row_n_value.join(highchartsRenderer.delimer);
918
921
 
919
- lodash.forEach(col_n_keys, function (col_n_value) {
922
+ lodash.forEach(col_n_keys, function (col_n_value, index) {
920
923
  var agg = pivotData.getAggregator(row_n_value, col_n_value);
921
924
  var val = agg.value();
925
+
922
926
  if (isUniqueVals && agg.uniq)
923
927
  val = agg.uniq.join('<br>');
924
928
 
@@ -937,6 +941,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
937
941
  else
938
942
  val = 0;
939
943
  }
944
+
945
+ xySum += Number(val) * (index + 1);
946
+ ySum += Number(val);
947
+ squareXSum += (index + 1) * (index + 1);
940
948
  ob.data.push(val);
941
949
  });
942
950
 
@@ -950,6 +958,24 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
950
958
  }
951
959
 
952
960
  chart_series.push(ob);
961
+
962
+ if (opts.trendLine) {
963
+ const a = ((ySum * squareXSum) - (xSum * xySum)) / ((n * squareXSum) - (xSum * xSum));
964
+ const b = ((n * xySum) - (xSum* ySum)) / ((n * squareXSum) - (xSum * xSum));
965
+
966
+ const trendSeries = lodash.clone(chart_series[chart_series.length - 1]);
967
+ trendSeries.name = 'Trend Line (' + trendSeries.name + ')';
968
+ trendSeries.dashStyle = 'shortdot';
969
+ trendSeries.type = 'line';
970
+ trendSeries.data = trendSeries.data.map((el, index) => a + b * (index + 1));
971
+
972
+ if (colors && colors[i]) {
973
+ trendSeries.color = colors[i];
974
+ }
975
+
976
+ chart_series.push(trendSeries);
977
+ }
978
+
953
979
  i++;
954
980
  });
955
981
 
@@ -970,30 +996,48 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
970
996
  }
971
997
  }
972
998
 
999
+ highchartsRenderer.moveSeriesToSecondYAxisIfNeeded(chart_series, pivotData, chartOptions, additionOptions, opts);
1000
+
1001
+ if (opts.total) {
1002
+ const newSeries = lodash.clone(chart_series[chart_series.length - 1]);
1003
+ newSeries.name = 'Total';
1004
+ newSeries.data = [];
1005
+ col_n_keys.forEach(columnKey => {
1006
+ let totalKey = columnKey;
1007
+ if (lodash.isArray(columnKey)) {
1008
+ totalKey = totalKey.join(' , ');
1009
+ }
1010
+ newSeries.data.push(pivotData.colTotals[totalKey].sum);
1011
+ })
1012
+
1013
+ chart_series.push(newSeries);
1014
+ }
1015
+
973
1016
  return chart_series;
974
1017
  };
975
1018
 
976
-
977
- highchartsRenderer.ptCreateColumnSeries = function (pivotData, colors, onlyNumbers, isUniqueVals, isNotDrilldown, additionOptions) {
1019
+ highchartsRenderer.ptCreateColumnSeries = function (pivotData, colors, onlyNumbers, isUniqueVals, isNotDrilldown, additionOptions, opts, chartOptions, chartType) {
978
1020
  var chart_series = [],
979
1021
  row_n_keys = pivotData.getRowKeys(),
980
1022
  col_n_keys = pivotData.getColKeys();
981
- var num_cols = col_n_keys.length;
982
- var num_rows = row_n_keys.length;
983
1023
 
984
1024
  var has_delta = false;
985
1025
  if (additionOptions && lodash.has(additionOptions, "delta_column.field") && additionOptions.delta_column.field == "series") {
986
1026
  has_delta = true;
987
1027
  }
988
1028
 
989
-
990
1029
  if (row_n_keys.length == 0)
991
1030
  row_n_keys.push([]);
992
1031
 
993
1032
  var i = 0;
994
1033
  var variat_serias = null;
1034
+ const n = col_n_keys.length;
1035
+ const xSum = (1 + n) / 2 * n;
995
1036
 
996
1037
  lodash.forEach(row_n_keys, function (row_n_value) {
1038
+ let ySum = 0;
1039
+ let xySum = 0;
1040
+ let squareXSum = 0;
997
1041
  var ob = {};
998
1042
  ob.data = [];
999
1043
  if (row_n_value && row_n_value.length > 0)
@@ -1006,7 +1050,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1006
1050
  style: highchartsRenderer.getDataLabelsStyle(additionOptions)
1007
1051
  }
1008
1052
 
1009
- lodash.forEach(col_n_keys, function (col_n_value) {
1053
+ lodash.forEach(col_n_keys, function (col_n_value, index) {
1010
1054
  var agg = pivotData.getAggregator(row_n_value, col_n_value);
1011
1055
  var val = agg.value();
1012
1056
 
@@ -1040,6 +1084,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1040
1084
  if (!isNotDrilldown)
1041
1085
  tmoobj.drilldown = true;
1042
1086
 
1087
+ xySum += Number(val) * (index + 1);
1088
+ ySum += Number(val);
1089
+ squareXSum += (index + 1) * (index + 1);
1043
1090
  ob.data.push(tmoobj);
1044
1091
  });
1045
1092
 
@@ -1053,6 +1100,23 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1053
1100
  }
1054
1101
 
1055
1102
  chart_series.push(ob);
1103
+
1104
+ if (opts.trendLine) {
1105
+ const a = ((ySum * squareXSum) - (xSum * xySum)) / ((n * squareXSum) - (xSum * xSum));
1106
+ const b = ((n * xySum) - (xSum* ySum)) / ((n * squareXSum) - (xSum * xSum));
1107
+
1108
+ const trendSeries = lodash.clone(chart_series[chart_series.length - 1]);
1109
+ trendSeries.name = 'Trend Line (' + trendSeries.name + ')';
1110
+ trendSeries.dashStyle = 'shortdot';
1111
+ trendSeries.type = 'line';
1112
+ trendSeries.data = trendSeries.data.map((data, index) => ({name: data.name, y: a + b * (index + 1)}));
1113
+
1114
+ if (colors && colors[i]) {
1115
+ trendSeries.color = colors[i];
1116
+ }
1117
+
1118
+ chart_series.push(trendSeries);
1119
+ }
1056
1120
  i++;
1057
1121
  });
1058
1122
 
@@ -1064,18 +1128,69 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1064
1128
  }
1065
1129
  }
1066
1130
 
1131
+ highchartsRenderer.moveSeriesToSecondYAxisIfNeeded(chart_series, pivotData, chartOptions, additionOptions, opts);
1132
+
1133
+ let weights = { line: 2,spline: 3 ,area:-2, areaspline: -1, scatter:4, column: 1 };
1134
+
1135
+ if (opts.comboOptions && chartType.includes('combo')) {
1136
+ chart_series.forEach((series, seriesIndex) => {
1137
+ const savedSeriesOption = lodash.find(opts.comboOptions.seriesOptions, {series: series.name});
1138
+ if (savedSeriesOption) {
1139
+ switch (savedSeriesOption.chartType) {
1140
+ case 'line-chart':
1141
+ series.type = 'line';
1142
+ break;
1143
+ case 'line-chart-smooth':
1144
+ series.type = 'spline';
1145
+ break;
1146
+ case 'area-chart':
1147
+ series.type = 'area';
1148
+ break;
1149
+ case 'area-chart-smooth':
1150
+ series.type = 'areaspline';
1151
+ break;
1152
+ case 'scatter-chart':
1153
+ series.type = 'scatter';
1154
+ break;
1155
+ case 'column-chart' || 'column-chart-stacked':
1156
+ delete series.type;
1157
+ break;
1158
+ }
1159
+ } else if (seriesIndex === chart_series.length - 1 && !has_delta) {
1160
+ series.type = 'line';
1161
+ }
1162
+ });
1163
+ }
1164
+
1165
+ if (opts.total) {
1166
+ const totalSeries = lodash.clone(chart_series[chart_series.length - 1]);
1167
+ totalSeries.name = 'Total';
1168
+ totalSeries.data = [];
1169
+ col_n_keys.forEach(columnKey => {
1170
+ let key = columnKey;
1171
+ let totalKey = columnKey;
1172
+ if (lodash.isArray(columnKey)) {
1173
+ key = columnKey[0];
1174
+ totalKey = totalKey.join(' , ');
1175
+ }
1176
+ totalSeries.data.push({name: lodash.unescape(key), y: pivotData.colTotals[totalKey].sum});
1177
+ });
1178
+
1179
+ chart_series.push(totalSeries);
1180
+ }
1181
+
1182
+ chart_series.sort((a,b) => {
1183
+ return (weights[a.type] || 0) > (weights[b.type] || 0) ? 1 : (weights[a.type] || 0) < (weights[b.type] || 0) ? -1 : 0
1184
+ });
1185
+
1067
1186
  return chart_series;
1068
- };
1187
+ }
1069
1188
 
1070
1189
  highchartsRenderer.getVariantSeries = function (series, delta_column_options) {
1071
1190
  const varianceColor = delta_column_options.color || highchartsRenderer.variance_color || Highcharts.getOptions().colors[7];
1072
1191
  series.name = delta_column_options.name.replace('_', '');
1073
1192
  series.color = varianceColor;
1074
1193
 
1075
- if (!delta_column_options.only_variant && !delta_column_options.same_yaxis) {
1076
- series.yAxis = 1;
1077
- }
1078
-
1079
1194
  if (delta_column_options.point_click_event) {
1080
1195
  series.allowPointSelect = true;
1081
1196
  series.point = {
@@ -1103,9 +1218,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1103
1218
  series.marker = {
1104
1219
  lineColor: varianceColor
1105
1220
  };
1106
- } else if (delta_column_options.chart == 'column') {
1221
+ } else if (delta_column_options.chart == 'column' || delta_column_options.chart == 'combo') {
1107
1222
  series.type = 'column';
1108
- } else {
1223
+ } else if (delta_column_options.chart == '' || delta_column_options == 'scatter-chart') {
1109
1224
  series.type = 'spline';
1110
1225
  series.lineWidth = 0;
1111
1226
  series.lineColor = varianceColor;
@@ -1145,11 +1260,20 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1145
1260
  }
1146
1261
  };
1147
1262
  }
1263
+ else if (delta_column_options.chart == 'area') {
1264
+ series.color = varianceColor;
1265
+ series.type = 'area'
1266
+ } else if (delta_column_options.chart == 'areaspline') {
1267
+ series.color = varianceColor;
1268
+ series.type = 'areaspline'
1269
+ } else if (delta_column_options.chart == 'spline') {
1270
+ series.color = varianceColor;
1271
+ series.type = 'spline'
1272
+ }
1148
1273
  return series;
1149
1274
  }
1150
1275
 
1151
-
1152
- highchartsRenderer.ptCreateSeriesToDrillDownChart = function (pivotData) {
1276
+ highchartsRenderer.ptCreateSeriesToDrillDownChart = function (pivotData, chartOptions, additionOptions, opts) {
1153
1277
  var pie_series = [];
1154
1278
 
1155
1279
  var col_n_keys = pivotData.getColKeys();
@@ -1180,13 +1304,15 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1180
1304
  pie_series.push(ob);
1181
1305
  });
1182
1306
 
1307
+ highchartsRenderer.moveSeriesToSecondYAxisIfNeeded(pie_series, pivotData, chartOptions, additionOptions, opts);
1308
+
1183
1309
  return ([{
1184
1310
  colorByPoint: true,
1185
1311
  data: pie_series
1186
1312
  }]);
1187
1313
  };
1188
1314
 
1189
- highchartsRenderer.ptCreateDrillDownSeriesToDrilldownChart = function (pivotData) {
1315
+ highchartsRenderer.ptCreateDrillDownSeriesToDrilldownChart = function (pivotData, chartOptions, additionOptions, opts) {
1190
1316
 
1191
1317
  var pie_drill_down_series = [],
1192
1318
  row_n_keys = pivotData.getRowKeys(),
@@ -1224,12 +1350,60 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1224
1350
  }
1225
1351
  });
1226
1352
 
1353
+ highchartsRenderer.moveSeriesToSecondYAxisIfNeeded(pie_drill_down_series, pivotData, chartOptions, additionOptions, opts);
1227
1354
 
1228
1355
  return ({
1229
1356
  series: pie_drill_down_series
1230
1357
  });
1231
1358
  };
1232
1359
 
1360
+ highchartsRenderer.moveSeriesToSecondYAxisIfNeeded = function(chartSeries, pivotData, chartOptions, additionOptions, opts) {
1361
+ if (!opts || !opts.comboOptions) {
1362
+ return;
1363
+ }
1364
+
1365
+ let addSecondYAxis = false;
1366
+ lodash.forEach(chartSeries, function (series) {
1367
+ let sOptions = lodash.find(opts.comboOptions.seriesOptions, function(sOptions) {
1368
+ return sOptions.series === series.name || sOptions.series.replace('_', '') === series.name
1369
+ });
1370
+ if (sOptions && sOptions.secondaryAxis) {
1371
+ series.yAxis = 1;
1372
+ addSecondYAxis = true;
1373
+ }
1374
+ });
1375
+
1376
+ if (addSecondYAxis) {
1377
+ highchartsRenderer.addSecondYAxis(pivotData, chartOptions, additionOptions, opts);
1378
+ }
1379
+ }
1380
+
1381
+ highchartsRenderer.addSecondYAxis = function (pivotData, chartOptions, additionOptions, opts) {
1382
+ const varianceColor = (additionOptions && additionOptions.delta_column.color) || (highchartsRenderer && highchartsRenderer.variance_color) || Highcharts.getOptions().colors[7];
1383
+ let labels_formatter = opts.comboOptions.secondaryAxisSettings.is_percentage ?
1384
+ highchartsRenderer.persantageValueLabelsFormatter(pivotData, opts) :
1385
+ highchartsRenderer.defaultValueLabelsFormatter(pivotData, opts);
1386
+
1387
+ chartOptions.yAxis = [chartOptions.yAxis];
1388
+ chartOptions.yAxis[1] = {
1389
+ min: !isNaN(parseInt(opts.comboOptions.secondaryAxisSettings.min)) ? opts.comboOptions.secondaryAxisSettings.min : null,
1390
+ max: !isNaN(parseInt(opts.comboOptions.secondaryAxisSettings.max)) ? opts.comboOptions.secondaryAxisSettings.max : null,
1391
+ title: {
1392
+ text: opts.comboOptions.secondaryAxisSettings.name,
1393
+ style: {
1394
+ color: varianceColor
1395
+ }
1396
+ },
1397
+ labels: {
1398
+ formatter: labels_formatter,
1399
+ style: {
1400
+ color: varianceColor
1401
+ }
1402
+ },
1403
+ opposite: true
1404
+ }
1405
+ };
1406
+
1233
1407
  highchartsRenderer.ptRenderBasicPie = function (pivotData, opts) {
1234
1408
  var chartOptions = {};
1235
1409
  var additionOptions = opts.chartOptions ? opts.chartOptions : highchartsRenderer.getDefaultValueForChart('pie-chart');
@@ -1409,7 +1583,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1409
1583
  }
1410
1584
 
1411
1585
  chartOptions.xAxis = {categories: pivotData.getColKeys()};
1412
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, true);
1586
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, true, null, null, opts, chartOptions);
1413
1587
 
1414
1588
  var total = [];
1415
1589
  lodash.forEach(chartOptions.series, function (obj) {
@@ -1550,7 +1724,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1550
1724
 
1551
1725
 
1552
1726
  chartOptions.xAxis = {categories: pivotData.getColKeys()};
1553
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, true);
1727
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, true, null, null, opts, chartOptions);
1554
1728
 
1555
1729
  var total = [];
1556
1730
  lodash.forEach(chartOptions.series, function (obj) {
@@ -1644,7 +1818,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1644
1818
  };
1645
1819
  var uniqueVals = kpioptions.value.value == "Unique";
1646
1820
 
1647
- let temp_series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, true, uniqueVals);
1821
+ let temp_series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, true, uniqueVals, null, opts, chartOptions);
1648
1822
 
1649
1823
  var total = [];
1650
1824
  lodash.forEach(temp_series, function (obj) {
@@ -1764,12 +1938,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1764
1938
  if (useNewUx) {
1765
1939
  chartOptions.tooltip.borderColor = '#fff';
1766
1940
  }
1767
- chartOptions.series = highchartsRenderer.ptCreateSeriesToDrillDownChart(pivotData);
1941
+ chartOptions.series = highchartsRenderer.ptCreateSeriesToDrillDownChart(pivotData, chartOptions, additionOptions, opts);
1768
1942
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, 1, false, true);
1769
1943
  if (drilldownFunc)
1770
1944
  chartOptions.drilldown = {}
1771
1945
  else
1772
- chartOptions.drilldown = highchartsRenderer.ptCreateDrillDownSeriesToDrilldownChart(pivotData);
1946
+ chartOptions.drilldown = highchartsRenderer.ptCreateDrillDownSeriesToDrilldownChart(pivotData, chartOptions, additionOptions, opts);
1773
1947
 
1774
1948
  return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
1775
1949
 
@@ -1826,7 +2000,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1826
2000
  formatter: highchartsRenderer.defaultValueLabelsFormatter(pivotData, opts)
1827
2001
  }
1828
2002
  };
1829
- highchartsRenderer.addSecondYAxisIfNeed(pivotData, chartOptions, additionOptions, opts);
1830
2003
 
1831
2004
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, true);
1832
2005
 
@@ -1871,7 +2044,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1871
2044
  }
1872
2045
  };
1873
2046
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
1874
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, additionOptions);
2047
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, additionOptions, opts, chartOptions);
1875
2048
 
1876
2049
  highchartsRenderer.handleGridLines(additionOptions, chartOptions)
1877
2050
  return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
@@ -1902,8 +2075,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1902
2075
  }
1903
2076
  };
1904
2077
 
1905
- highchartsRenderer.addSecondYAxisIfNeed(pivotData, chartOptions, additionOptions, opts);
1906
-
1907
2078
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, true);
1908
2079
 
1909
2080
  chartOptions.plotOptions = {
@@ -1950,7 +2121,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1950
2121
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
1951
2122
 
1952
2123
  var colors = ['#ff0202', '#b3060e', '#70000a'];
1953
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, colors, null, null, additionOptions);
2124
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, colors, null, null, additionOptions, opts, chartOptions);
1954
2125
 
1955
2126
  highchartsRenderer.handleGridLines(additionOptions, chartOptions)
1956
2127
 
@@ -1972,34 +2143,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1972
2143
 
1973
2144
  }
1974
2145
 
1975
- highchartsRenderer.addSecondYAxisIfNeed = function (pivotData, chartOptions, additionOptions, opts) {
1976
- if (additionOptions && additionOptions.delta_column && additionOptions.delta_column.field == "series") {
1977
- chartOptions.yAxis = [chartOptions.yAxis];
1978
-
1979
- let labels_formatter = highchartsRenderer.defaultValueLabelsFormatter(pivotData, opts);
1980
- if (additionOptions.delta_column.is_percentage) {
1981
- labels_formatter = highchartsRenderer.persantageValueLabelsFormatter(pivotData, opts);
1982
- }
1983
-
1984
- const varianceColor = additionOptions.delta_column.color || highchartsRenderer.variance_color || Highcharts.getOptions().colors[7];
1985
- chartOptions.yAxis[1] = {
1986
- title: {
1987
- text: additionOptions.delta_column.name.replace('_', ''),
1988
- style: {
1989
- color: varianceColor
1990
- }
1991
- },
1992
- labels: {
1993
- formatter: labels_formatter,
1994
- style: {
1995
- color: varianceColor
1996
- }
1997
- },
1998
- opposite: true
1999
- }
2000
- }
2001
- };
2002
-
2003
2146
  highchartsRenderer.ptRenderSpLine = function (pivotData, opts) {
2004
2147
  var chartOptions = {};
2005
2148
  var rowAttrs = pivotData.rowAttrs;
@@ -2025,8 +2168,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2025
2168
  }
2026
2169
  };
2027
2170
 
2028
- highchartsRenderer.addSecondYAxisIfNeed(pivotData, chartOptions, additionOptions, opts);
2029
-
2030
2171
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, true);
2031
2172
 
2032
2173
  chartOptions.plotOptions = {
@@ -2068,7 +2209,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2068
2209
  }
2069
2210
  };
2070
2211
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2071
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, additionOptions);
2212
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, additionOptions, opts, chartOptions);
2072
2213
 
2073
2214
  highchartsRenderer.handleGridLines(additionOptions, chartOptions);
2074
2215
  return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
@@ -2116,7 +2257,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2116
2257
  }
2117
2258
  };
2118
2259
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2119
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData);
2260
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, null, opts, chartOptions);
2120
2261
 
2121
2262
  highchartsRenderer.handleGridLines(additionOptions, chartOptions);
2122
2263
 
@@ -2213,14 +2354,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2213
2354
  },
2214
2355
  lineWidth: 0
2215
2356
  };
2216
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData);
2357
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, null, opts, chartOptions);
2217
2358
 
2218
2359
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, false);
2219
2360
 
2220
2361
  return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
2221
2362
  };
2222
2363
 
2223
- highchartsRenderer.ptRenderColumn = function (pivotData, opts, drilldownFunc) {
2364
+ highchartsRenderer.ptRenderColumn = function (pivotData, opts, drilldownFunc, chartType) {
2224
2365
  var chartOptions = {};
2225
2366
  var rowAttrs = pivotData.rowAttrs;
2226
2367
  var colAttrs = pivotData.colAttrs;
@@ -2275,8 +2416,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2275
2416
  }
2276
2417
  };
2277
2418
 
2278
- highchartsRenderer.addSecondYAxisIfNeed(pivotData, chartOptions, additionOptions, opts);
2279
-
2280
2419
  chartOptions.tooltip = {
2281
2420
  formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts),
2282
2421
  shadow: highchartsRenderer.tooltipShadow,
@@ -2290,7 +2429,13 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2290
2429
  highchartsRenderer.handleGridLines(additionOptions, chartOptions);
2291
2430
 
2292
2431
  var isNotDrilldown = !(colAttrs && colAttrs.length > 1);
2293
- chartOptions.series = highchartsRenderer.ptCreateColumnSeries(pivotData, null, null, null, isNotDrilldown, additionOptions);
2432
+ if (lodash.get(opts, 'paletteOptions.widgetPalette', null)) {
2433
+ const mc_palette = lodash.find(lodash.get(opts.paletteOptions, 'monochromePalettes', []), { selected: true });
2434
+ chartOptions.colors = mc_palette ? mc_palette.colors : opts.paletteOptions.widgetPalette;
2435
+ } else if (lodash.get(opts, 'paletteOptions.dashboardPalette.colors', null)) {
2436
+ chartOptions.colors = opts.paletteOptions.dashboardPalette.colors;
2437
+ }
2438
+ chartOptions.series = highchartsRenderer.ptCreateColumnSeries(pivotData, chartOptions.colors, null, null, isNotDrilldown, additionOptions, opts, chartOptions, chartType);
2294
2439
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2295
2440
  chartOptions.plotOptions = {
2296
2441
  column: {
@@ -2327,7 +2472,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2327
2472
  return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
2328
2473
  };
2329
2474
 
2330
- highchartsRenderer.ptRenderStackedColumn = function (pivotData, opts, drilldownFunc) {
2475
+ highchartsRenderer.ptRenderStackedColumn = function (pivotData, opts, drilldownFunc, chartType) {
2331
2476
  var chartOptions = {};
2332
2477
  var rowAttrs = pivotData.rowAttrs;
2333
2478
  var additionOptions = opts.chartOptions ? opts.chartOptions : highchartsRenderer.getDefaultValueForChart('column-chart-stacked');
@@ -2458,7 +2603,13 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2458
2603
  };
2459
2604
  //chartOptions.xAxis = { categories: pivotData.getColKeys() };
2460
2605
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2461
- chartOptions.series = highchartsRenderer.ptCreateColumnSeries(pivotData, null, null, true, true);
2606
+ if (lodash.get(opts, 'paletteOptions.widgetPalette', null)) {
2607
+ const mc_palette = lodash.find(lodash.get(opts.paletteOptions, 'monochromePalettes', []), { selected: true });
2608
+ chartOptions.colors = mc_palette ? mc_palette.colors : opts.paletteOptions.widgetPalette;
2609
+ } else if (lodash.get(opts, 'paletteOptions.dashboardPalette.colors', null)) {
2610
+ chartOptions.colors = opts.paletteOptions.dashboardPalette.colors;
2611
+ }
2612
+ chartOptions.series = highchartsRenderer.ptCreateColumnSeries(pivotData, chartOptions.colors, null, true, true, additionOptions, opts, chartOptions, chartType);
2462
2613
  //chartOptions.drilldown = {}
2463
2614
 
2464
2615
  highchartsRenderer.handleGridLines(additionOptions, chartOptions)
@@ -2535,11 +2686,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2535
2686
 
2536
2687
  chartOptions.xAxis = {type: 'category'};
2537
2688
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2538
- chartOptions.series = highchartsRenderer.ptCreateSeriesToDrillDownChart(pivotData);
2689
+ chartOptions.series = highchartsRenderer.ptCreateSeriesToDrillDownChart(pivotData, chartOptions, additionOptions, opts);
2539
2690
  //if (drilldownFunc)
2540
2691
  // chartOptions.drilldown = {}
2541
2692
  //else
2542
- chartOptions.drilldown = highchartsRenderer.ptCreateDrillDownSeriesToDrilldownChart(pivotData);
2693
+ chartOptions.drilldown = highchartsRenderer.ptCreateDrillDownSeriesToDrilldownChart(pivotData, chartOptions, additionOptions, opts);
2543
2694
 
2544
2695
  highchartsRenderer.handleGridLines(additionOptions, chartOptions)
2545
2696
 
@@ -2610,7 +2761,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2610
2761
  }
2611
2762
  };
2612
2763
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2613
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData);
2764
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, null, opts, chartOptions);
2614
2765
 
2615
2766
  highchartsRenderer.handleGridLines(additionOptions, chartOptions)
2616
2767
 
@@ -2724,7 +2875,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2724
2875
  }
2725
2876
  };
2726
2877
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2727
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData);
2878
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, null, opts, chartOptions);
2728
2879
 
2729
2880
  highchartsRenderer.handleGridLines(additionOptions, chartOptions)
2730
2881
 
@@ -2813,6 +2964,18 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2813
2964
  return format;
2814
2965
  }
2815
2966
 
2967
+ highchartsRenderer.isRowKeyShouldBePercentage = function(render_options, rowKey) {
2968
+ if (render_options && render_options.comboOptions && render_options.comboOptions.secondaryAxisSettings &&
2969
+ render_options.comboOptions.secondaryAxisSettings.is_percentage) {
2970
+ const rowKeyString = rowKey.join(highchartsRenderer.delimer);
2971
+ const rowKeyOptions = lodash.find(render_options.comboOptions.seriesOptions, {series: rowKeyString});
2972
+ if (rowKeyOptions && rowKeyOptions.secondaryAxis) {
2973
+ return true;
2974
+ }
2975
+ }
2976
+ return false;
2977
+ }
2978
+
2816
2979
  highchartsRenderer.ignoreIfCalculatedValue = function(data, rowKey, colKey, record, associatedFields, renderOptions, isGraph) {
2817
2980
  var eliminate = renderOptions && renderOptions.chartOptions && renderOptions.chartOptions.table_options &&
2818
2981
  renderOptions.chartOptions.table_options.eliminate_calc_totals && !_.isEmpty(associatedFields) && !isGraph;
@@ -2832,17 +2995,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2832
2995
 
2833
2996
  highchartsRenderer.rhPivotCount = function (arg, widget_values_format, is_graph, render_options, calculated_info) {
2834
2997
  var attr = arg[0];
2835
- var has_variants_persentage = false;
2836
- var variant_name = '';
2837
-
2838
- if (render_options && render_options.chartOptions &&
2839
- render_options.chartOptions.delta_column &&
2840
- render_options.chartOptions.delta_column.field === 'series' &&
2841
- render_options.chartOptions.delta_column.is_percentage) {
2842
- has_variants_persentage = true;
2843
- variant_name = render_options.chartOptions.delta_column.name;
2844
- }
2845
-
2846
2998
  return function (data, rowKey, colKey) {
2847
2999
  return {
2848
3000
  sum: 0,
@@ -2864,10 +3016,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2864
3016
  this.formats = lodash.uniq(this.formats);
2865
3017
  }
2866
3018
 
2867
- if (has_variants_persentage) {
2868
- if (rowKey == variant_name || lodash.includes(rowKey, variant_name)) {
2869
- this.widget_values_format = "#,###%";
2870
- }
3019
+ if (highchartsRenderer.isRowKeyShouldBePercentage(render_options, rowKey)) {
3020
+ this.widget_values_format = "#,###%";
2871
3021
  }
2872
3022
 
2873
3023
  if (highchartsRenderer.ignoreIfCalculatedValue(data, rowKey, colKey, record, calculated_info.associated_fields, render_options, is_graph)) {
@@ -2987,17 +3137,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2987
3137
  };
2988
3138
 
2989
3139
  highchartsRenderer.rhPivotAggregatorSum = function (arg, widget_values_format, is_graph, render_options, calculated_info) {
2990
- var attr;
2991
- attr = arg[0];
2992
- var has_variants_persentage = false;
2993
- var variant_name = '';
2994
- if (render_options && render_options.chartOptions &&
2995
- render_options.chartOptions.delta_column &&
2996
- render_options.chartOptions.delta_column.field == "series" &&
2997
- render_options.chartOptions.delta_column.is_percentage) {
2998
- has_variants_persentage = true;
2999
- variant_name = render_options.chartOptions.delta_column.name;
3000
- }
3140
+ var attr = arg[0];
3001
3141
  return function (data, rowKey, colKey) {
3002
3142
  return {
3003
3143
  sum: 0,
@@ -3030,10 +3170,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3030
3170
  this.formats = lodash.uniq(this.formats);
3031
3171
  }
3032
3172
 
3033
- if (has_variants_persentage) {
3034
- if (rowKey == variant_name || lodash.includes(rowKey, variant_name)) {
3035
- this.widget_values_format = "#,###%";
3036
- }
3173
+ if (highchartsRenderer.isRowKeyShouldBePercentage(render_options, rowKey)) {
3174
+ this.widget_values_format = "#,###%";
3037
3175
  }
3038
3176
 
3039
3177
  if (highchartsRenderer.ignoreIfCalculatedValue(data, rowKey, colKey, record, calculated_info.associated_fields, render_options, is_graph)) {
@@ -3087,17 +3225,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3087
3225
  };
3088
3226
 
3089
3227
  highchartsRenderer.rhPivotAggregatorMin = function (arg, widget_values_format, is_graph, render_options, calculated_info) {
3090
- var attr;
3091
- attr = arg[0];
3092
- var has_variants_persentage = false;
3093
- var variant_name = '';
3094
- if (render_options && render_options.chartOptions &&
3095
- render_options.chartOptions.delta_column &&
3096
- render_options.chartOptions.delta_column.field == "series" &&
3097
- render_options.chartOptions.delta_column.is_percentage) {
3098
- has_variants_persentage = true;
3099
- variant_name = render_options.chartOptions.delta_column.name;
3100
- }
3228
+ var attr = arg[0];
3101
3229
  return function (data, rowKey, colKey) {
3102
3230
  return {
3103
3231
  val: null,
@@ -3131,10 +3259,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3131
3259
  this.formats = lodash.uniq(this.formats);
3132
3260
  }
3133
3261
 
3134
- if (has_variants_persentage) {
3135
- if (rowKey == variant_name || lodash.includes(rowKey, variant_name)) {
3136
- this.widget_values_format = "#,###%";
3137
- }
3262
+ if (highchartsRenderer.isRowKeyShouldBePercentage(render_options, rowKey)) {
3263
+ this.widget_values_format = "#,###%";
3138
3264
  }
3139
3265
 
3140
3266
  if (highchartsRenderer.ignoreIfCalculatedValue(data, rowKey, colKey, record, calculated_info.associated_fields, render_options, is_graph)) {
@@ -3185,17 +3311,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3185
3311
  };
3186
3312
 
3187
3313
  highchartsRenderer.rhPivotAggregatorMax = function (arg, widget_values_format, is_graph, render_options, calculated_info) {
3188
- var attr;
3189
- attr = arg[0];
3190
- var has_variants_persentage = false;
3191
- var variant_name = '';
3192
- if (render_options && render_options.chartOptions &&
3193
- render_options.chartOptions.delta_column &&
3194
- render_options.chartOptions.delta_column.field == "series" &&
3195
- render_options.chartOptions.delta_column.is_percentage) {
3196
- has_variants_persentage = true;
3197
- variant_name = render_options.chartOptions.delta_column.name;
3198
- }
3314
+ var attr = arg[0];
3199
3315
  return function (data, rowKey, colKey) {
3200
3316
  return {
3201
3317
  val: null,
@@ -3229,10 +3345,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3229
3345
  this.formats = lodash.uniq(this.formats);
3230
3346
  }
3231
3347
 
3232
- if (has_variants_persentage) {
3233
- if (rowKey == variant_name || lodash.includes(rowKey, variant_name)) {
3234
- this.widget_values_format = "#,###%";
3235
- }
3348
+ if (highchartsRenderer.isRowKeyShouldBePercentage(render_options, rowKey)) {
3349
+ this.widget_values_format = "#,###%";
3236
3350
  }
3237
3351
 
3238
3352
  if (highchartsRenderer.ignoreIfCalculatedValue(data, rowKey, colKey, record, calculated_info.associated_fields, render_options, is_graph)) {
@@ -3283,17 +3397,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3283
3397
  };
3284
3398
 
3285
3399
  highchartsRenderer.rhPivotAggregatorAverage = function (arg, widget_values_format, is_graph, render_options, calculated_info) {
3286
- var attr;
3287
- attr = arg[0];
3288
- var has_variants_persentage = false;
3289
- var variant_name = '';
3290
- if (render_options && render_options.chartOptions &&
3291
- render_options.chartOptions.delta_column &&
3292
- render_options.chartOptions.delta_column.field == "series" &&
3293
- render_options.chartOptions.delta_column.is_percentage) {
3294
- has_variants_persentage = true;
3295
- variant_name = render_options.chartOptions.delta_column.name;
3296
- }
3400
+ var attr = arg[0];
3297
3401
  return function (data, rowKey, colKey) {
3298
3402
  return {
3299
3403
  sum: 0,
@@ -3328,10 +3432,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3328
3432
  this.formats = lodash.uniq(this.formats);
3329
3433
  }
3330
3434
 
3331
- if (has_variants_persentage) {
3332
- if (rowKey == variant_name || lodash.includes(rowKey, variant_name)) {
3333
- this.widget_values_format = "#,###%";
3334
- }
3435
+ if (highchartsRenderer.isRowKeyShouldBePercentage(render_options, rowKey)) {
3436
+ this.widget_values_format = "#,###%";
3335
3437
  }
3336
3438
 
3337
3439
  if (highchartsRenderer.ignoreIfCalculatedValue(data, rowKey, colKey, record, calculated_info.associated_fields, render_options, is_graph)) {
@@ -3879,11 +3981,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3879
3981
  pivotData.sorters = new_sorting_function;
3880
3982
  }
3881
3983
 
3882
- if (totalFilters && totalFilters.filter_options) {
3883
- result = highchartsRenderer.generateFilteredResult(totalFilters, optsFiltered, rowData, opts, pivotData);
3884
- } else {
3885
- result = opts.renderer(pivotData, opts.rendererOptions);
3886
- }
3984
+ result = opts.renderer(pivotData, opts.rendererOptions);
3887
3985
  } catch (_error) {
3888
3986
  e = _error;
3889
3987
  if (typeof console !== "undefined" && console !== null) {
@@ -4283,6 +4381,50 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4283
4381
  delete options.chartOptions.label;
4284
4382
  }
4285
4383
  }
4384
+
4385
+ if (!options.comboOptions) {
4386
+ options.comboOptions = {
4387
+ secondaryAxisSettings: {
4388
+ name: 'Secondary Axis',
4389
+ max: null,
4390
+ min: null,
4391
+ is_percentage: false,
4392
+ },
4393
+ seriesOptions: []
4394
+ }
4395
+ if (options.chartOptions.delta_column && options.chartOptions.delta_column.field === 'series') {
4396
+ let deltaColumnSeries = {
4397
+ series: options.chartOptions.delta_column.name,
4398
+ secondaryAxis: !options.chartOptions.delta_column.same_yaxis,
4399
+ };
4400
+ switch (options.chartOptions.delta_column.chart) {
4401
+ case 'line':
4402
+ deltaColumnSeries.chartType = 'line-chart';
4403
+ break;
4404
+ case 'spline':
4405
+ deltaColumnSeries.chartType = 'line-chart-smooth';
4406
+ break;
4407
+ case 'area':
4408
+ deltaColumnSeries.chartType = 'area-chart';
4409
+ break;
4410
+ case 'areaspline':
4411
+ deltaColumnSeries.chartType = 'area-chart-smooth';
4412
+ break;
4413
+ case 'scatter':
4414
+ deltaColumnSeries.chartType = 'scatter-chart';
4415
+ break;
4416
+ case 'column':
4417
+ deltaColumnSeries.chartType = 'column-chart';
4418
+ break;
4419
+ default:
4420
+ deltaColumnSeries.chartType = 'scatter-chart';
4421
+ break;
4422
+ }
4423
+ options.comboOptions.seriesOptions.push(deltaColumnSeries);
4424
+ options.comboOptions.secondaryAxisSettings.name = options.chartOptions.delta_column.name.replace('_', '');
4425
+ options.comboOptions.secondaryAxisSettings.is_percentage = options.chartOptions.delta_column.is_percentage;
4426
+ }
4427
+ }
4286
4428
  };
4287
4429
 
4288
4430
  highchartsRenderer.addPivotOptions = function (selectedTemplateWOData, widgetOptions, drilldownFunction, drillDownListFunction) {
@@ -4390,6 +4532,60 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4390
4532
  exTableOptions.pivot.calculatedValues = highchartsRenderer.objectCopyJsonMethod(exTableOptions.calculated_values || []);
4391
4533
  };
4392
4534
 
4535
+ highchartsRenderer.addTemplateDataToDynamicRangeOptions = function (selectedTemplate, dynamicRangeOptions) {
4536
+ highchartsRenderer.setWidgetFieldsToTemplate(selectedTemplate);
4537
+
4538
+ var fields = highchartsRenderer.objectCopyJsonMethod(selectedTemplate.widget_fields);
4539
+ var fieldOb;
4540
+ var filterFields = [];
4541
+ var selectedFields = [];
4542
+
4543
+ lodash.forEach(dynamicRangeOptions.filters, function (filterObj) {
4544
+ fieldOb = lodash.find(fields, {id: filterObj.field});
4545
+ if (fieldOb && filterObj.values && filterObj.values.datetype && filterObj.values.datetype === 'list') {
4546
+ filterObj.values = filterObj.values.val
4547
+ } else if (fieldOb && filterObj.values && filterObj.values.datetype && filterObj.values.datetype !== 'list') {
4548
+ fieldOb.values = filterObj.values;
4549
+ } else if (fieldOb && filterObj.values && filterObj.values.type === 'advanced') {
4550
+ fieldOb.values = filterObj.values;
4551
+ }
4552
+ if (fieldOb && filterObj.values && filterObj.values instanceof Array) {
4553
+ if (filterObj.is_excluded == true) {
4554
+ fieldOb.excludes = filterObj.values;
4555
+ } else {
4556
+ fieldOb.includes = filterObj.values;
4557
+ }
4558
+ }
4559
+ if (filterObj.allow_nulls && fieldOb) {
4560
+ fieldOb.allow_nulls = filterObj.allow_nulls;
4561
+ }
4562
+ });
4563
+
4564
+ // fill selected fields
4565
+ lodash.forEach(dynamicRangeOptions.fields, function (valObj) {
4566
+ fieldOb = lodash.find(fields, {id: valObj.field});
4567
+ if (fieldOb) {
4568
+ selectedFields.push(fieldOb);
4569
+ lodash.remove(fields, {id: fieldOb.id});
4570
+ }
4571
+ });
4572
+
4573
+ // fill filter fields
4574
+ lodash.forEach(dynamicRangeOptions.filters, function (valObj) {
4575
+ fieldOb = lodash.find(fields, {id: valObj.field});
4576
+ if (fieldOb) {
4577
+ filterFields.push(fieldOb);
4578
+ lodash.remove(fields, {id: fieldOb.id});
4579
+ }
4580
+ });
4581
+
4582
+ dynamicRangeOptions.pivot = {};
4583
+ dynamicRangeOptions.pivot.fieldsArray = fields;
4584
+ dynamicRangeOptions.pivot.selectedFieldsArray = selectedFields;
4585
+ dynamicRangeOptions.pivot.filtersArray = filterFields;
4586
+ dynamicRangeOptions.pivot.calculatedValues = highchartsRenderer.objectCopyJsonMethod(dynamicRangeOptions.calculated_values || []);
4587
+ }
4588
+
4393
4589
  highchartsRenderer.addTemplateDataToFunctionOptions = function (selectedTemplate, functionOptions) {
4394
4590
  highchartsRenderer.setWidgetFieldsToTemplate(selectedTemplate);
4395
4591
 
@@ -4834,6 +5030,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4834
5030
  value_name: 'remove_underscores',
4835
5031
  default_value: true
4836
5032
  },
5033
+ {
5034
+ element_type: 'checkbox',
5035
+ element_label: 'Use big data table',
5036
+ value_name: 'use_handsOnTable',
5037
+ default_value: false
5038
+ },
4837
5039
  {
4838
5040
  element_type: 'checkbox',
4839
5041
  element_label: 'Use new table design',
@@ -5358,7 +5560,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5358
5560
  element_options: [
5359
5561
  {label: 'Markers', value: ''},
5360
5562
  {label: 'Line', value: 'line'},
5563
+ {label: 'Smooth Line', value: 'spline'},
5361
5564
  {label: 'Column', value: 'column'},
5565
+ {label: 'Area', value: 'area'},
5566
+ {label: 'Smooth Area', value: 'areaspline'},
5362
5567
  ],
5363
5568
  default_value: ''
5364
5569
  }, {
@@ -5370,7 +5575,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5370
5575
  element_type: 'checkbox',
5371
5576
  element_label: 'Same yAxis',
5372
5577
  value_name: 'same_yaxis',
5373
- default_value: false
5578
+ default_value: false,
5579
+ hidden: true,
5374
5580
  }, {
5375
5581
  element_type: 'checkbox',
5376
5582
  element_label: 'Same xAxis',
@@ -5380,17 +5586,20 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5380
5586
  element_type: 'checkbox',
5381
5587
  element_label: 'Percentage',
5382
5588
  value_name: 'is_percentage',
5383
- default_value: false
5589
+ default_value: false,
5590
+ hidden: true,
5384
5591
  }, {
5385
5592
  element_type: 'checkbox',
5386
5593
  element_label: 'Sort by variance',
5387
5594
  value_name: 'sort_by_variance',
5388
- default_value: false
5595
+ default_value: false,
5596
+ hidden: true
5389
5597
  }, {
5390
5598
  element_type: 'checkbox',
5391
5599
  element_label: 'Sort by absolute variance',
5392
5600
  value_name: 'sort_by_absolute_variance',
5393
- default_value: false
5601
+ default_value: false,
5602
+ hidden: true
5394
5603
  }]
5395
5604
  },
5396
5605
  'delta_column_for_drill_down': {
@@ -5429,7 +5638,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5429
5638
  element_options: [
5430
5639
  {label: 'Markers', value: ''},
5431
5640
  {label: 'Line', value: 'line'},
5641
+ {label: 'Smooth Line', value: 'spline'},
5432
5642
  {label: 'Column', value: 'column'},
5643
+ {label: 'Area', value: 'area'},
5644
+ {label: 'Smooth Area', value: 'areaspline'},
5433
5645
  ],
5434
5646
  default_value: ''
5435
5647
  }, {
@@ -5441,7 +5653,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5441
5653
  element_type: 'checkbox',
5442
5654
  element_label: 'Same yAxis',
5443
5655
  value_name: 'same_yaxis',
5444
- default_value: false
5656
+ default_value: false,
5657
+ hidden: true,
5445
5658
  }, {
5446
5659
  element_type: 'checkbox',
5447
5660
  element_label: 'Same xAxis',
@@ -5451,17 +5664,20 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5451
5664
  element_type: 'checkbox',
5452
5665
  element_label: 'Percentage',
5453
5666
  value_name: 'is_percentage',
5454
- default_value: false
5667
+ default_value: false,
5668
+ hidden: true,
5455
5669
  }, {
5456
5670
  element_type: 'checkbox',
5457
5671
  element_label: 'Sort by variance',
5458
5672
  value_name: 'sort_by_variance',
5459
- default_value: false
5673
+ default_value: false,
5674
+ hidden: true
5460
5675
  }, {
5461
5676
  element_type: 'checkbox',
5462
5677
  element_label: 'Sort by absolute variance',
5463
5678
  value_name: 'sort_by_absolute_variance',
5464
- default_value: false
5679
+ default_value: false,
5680
+ hidden: true
5465
5681
  }, {
5466
5682
  element_type: 'checkbox',
5467
5683
  element_label: 'Filter zero values',
@@ -5526,6 +5742,39 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5526
5742
  };
5527
5743
 
5528
5744
  highchartsRenderer.chartsTypesInfo = {
5745
+ 'combo-chart': {
5746
+ name: 'Combo Chart ',
5747
+ label: 'Combo Chart ',
5748
+ title: 'Allows for multiple chart display formats in one widget',
5749
+ description: 'For example, Revenue and Cost of goods sold as clomuns, and Gross margin as a line',
5750
+ axisName: 'X - Axis',
5751
+ legendName: 'Data series',
5752
+ startedMessage: 'To add multiple chart types, click on “Combo Chart Options“. A Secondary Axis is available in this chart',
5753
+ axisTooltipTitle: 'Drag one or more fields here to create your x-axis.',
5754
+ legendTooltipTitle: 'Click to display these data series as line or area charts',
5755
+ },
5756
+ 'combo-column-chart': {
5757
+ name: 'Column Combo Chart ',
5758
+ label: 'Column Chart',
5759
+ title: 'Allows for multiple chart display formats in one widget',
5760
+ description: 'For example, Revenue and Cost of goods sold as clomuns, and Gross margin as a line',
5761
+ axisName: 'X - Axis',
5762
+ legendName: 'Data series',
5763
+ startedMessage: 'To add multiple chart types, click on “Combo Chart Options“. A Secondary Axis is available in this chart.',
5764
+ axisTooltipTitle: 'Drag one or more fields here to create your x-axis.',
5765
+ legendTooltipTitle: 'Click to display these data series as line or area charts.',
5766
+ },
5767
+ 'combo-stacked-chart': {
5768
+ name: 'Stacked Column Combo Chart ',
5769
+ label: 'Stacked Column',
5770
+ title: 'Allows for multiple chart display formats in one widget.',
5771
+ description: 'For example, different department stacked clomuns, and average as a line.',
5772
+ axisName: 'X - Axis',
5773
+ legendName: 'Data series',
5774
+ startedMessage: 'To add multiple chart types, click on “Combo Chart Options“. A Secondary Axis is available in this chart.',
5775
+ axisTooltipTitle: 'Drag one or more fields here to create your x-axis.',
5776
+ legendTooltipTitle: 'Click to display these data series as line or area charts.',
5777
+ },
5529
5778
  'line-chart': {
5530
5779
  name: 'Line chart',
5531
5780
  label: 'Line Chart',
@@ -5763,6 +6012,53 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5763
6012
  }
5764
6013
  ]
5765
6014
  },
6015
+ {
6016
+ type: 'combo',
6017
+ name: 'Combo',
6018
+ class: 'combo-chart',
6019
+ subtypes: [{
6020
+ type: 'combo-column-chart',
6021
+ name: highchartsRenderer.chartsTypesInfo['combo-column-chart'].name,
6022
+ class: 'combo-column-chart',
6023
+ render: highchartsRenderer.ptRenderColumn,
6024
+ suboptions: [
6025
+ highchartsRenderer.suboptions["default_show"],
6026
+ highchartsRenderer.suboptions["axisY"],
6027
+ highchartsRenderer.suboptions["axisX"],
6028
+ highchartsRenderer.suboptions["tooltips"],
6029
+ highchartsRenderer.suboptions["label"],
6030
+ highchartsRenderer.suboptions["subtitle"],
6031
+ highchartsRenderer.suboptions["table_options"],
6032
+ highchartsRenderer.suboptions["chart"],
6033
+ highchartsRenderer.suboptions["negative_number_format"],
6034
+ highchartsRenderer.suboptions["delta_column_for_drill_down"],
6035
+ highchartsRenderer.suboptions["error_policy"],
6036
+ highchartsRenderer.suboptions["from_version"],
6037
+ highchartsRenderer.suboptions["legends"],
6038
+ ],
6039
+ },
6040
+ {
6041
+ type: 'combo-stacked-chart',
6042
+ name: highchartsRenderer.chartsTypesInfo['combo-stacked-chart'].name,
6043
+ class: 'combo-stacked-chart',
6044
+ render: highchartsRenderer.ptRenderStackedColumn,
6045
+ suboptions: [
6046
+ highchartsRenderer.suboptions["default_show"],
6047
+ highchartsRenderer.suboptions["axisY"],
6048
+ highchartsRenderer.suboptions["axisX"],
6049
+ highchartsRenderer.suboptions["tooltips"],
6050
+ highchartsRenderer.suboptions["label_with_percentage"],
6051
+ highchartsRenderer.suboptions["subtitle"],
6052
+ highchartsRenderer.suboptions["table_options"],
6053
+ highchartsRenderer.suboptions["chart_grid"],
6054
+ highchartsRenderer.suboptions["delta_column"],
6055
+ highchartsRenderer.suboptions["error_policy"],
6056
+ highchartsRenderer.suboptions["from_version"],
6057
+ highchartsRenderer.suboptions["legends"],
6058
+ ]
6059
+ }
6060
+ ]
6061
+ },
5766
6062
  {
5767
6063
  type: 'area',
5768
6064
  name: 'Area',
@@ -6661,6 +6957,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6661
6957
  };
6662
6958
 
6663
6959
  highchartsRenderer.setNewFieldNames = function (res) {
6960
+ if (useTotalsCalculation) {
6961
+ return res;
6962
+ }
6963
+
6664
6964
  if (res && res[0] && res[0]['DR_Values']) {
6665
6965
  lodash.forEach(res, function (item) {
6666
6966
  item['DR_Values'] = highchartsRenderer.getFieldName(item['DR_Values']);
@@ -6674,7 +6974,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6674
6974
  var datesFields = [];
6675
6975
  datesFields = lodash.filter(widget.rows, element => element.type == 'Date');
6676
6976
  datesFields = datesFields.concat(lodash.filter(widget.cols, element => element.type == 'Date'));
6677
-
6977
+
6678
6978
  const isCustomSorting = widget.options.sortingFields && Array.isArray(widget.options.sortingFields) && widget.options.sortingFields.length > 0;
6679
6979
  if (isCustomSorting) {
6680
6980
  lodash.forEach(datesFields, function (field) {
@@ -6742,7 +7042,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6742
7042
  "name": field.name,
6743
7043
  "type": field.type,
6744
7044
  "values": [],
6745
- "sorting": field.sorting
7045
+ "sorting": field.sorting,
6746
7046
  });
6747
7047
  }
6748
7048
  } else if (field.sorting && field.sorting.type == "CustomOrder" && field.sorting.values) {
@@ -6827,6 +7127,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6827
7127
  if (field.sorting && field.sorting.type == "DateString") {
6828
7128
  return $.pivotUtilities.sortDateStrings(field.sorting.month_order);
6829
7129
  } else if (field.sorting && field.sorting.type == "largestToSmallest") {
7130
+ if (field.sorting.is_absolute)
7131
+ return $.pivotUtilities.largeToSmallSortByAbsolute;
7132
+
6830
7133
  return $.pivotUtilities.largeToSmallSort;
6831
7134
  } else {
6832
7135
  return $.pivotUtilities.sortAs(field.values);
@@ -7034,7 +7337,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7034
7337
  itemMarginTop: 2,
7035
7338
  };
7036
7339
  const none = {
7037
- enabled: false,
7340
+ enabled: false,
7038
7341
  };
7039
7342
 
7040
7343
  if (additionOptions.legends_position && additionOptions.legends_position.value) {