@datarailsshared/dr_renderer 1.2.53 → 1.2.54

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.53",
3
+ "version": "1.2.54",
4
4
  "description": "DataRails charts and tables renderer",
5
5
  "keywords": [
6
6
  "datarails",
@@ -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 && key.length === attrs.length) {
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) {
184
- this.rowTotals[rowKey.join(delim)].push(record);
185
- this.rowTotals[rowKey.join(delim)].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) {
188
- this.colTotals[colKey.join(delim)].push(record);
189
- this.colTotals[colKey.join(delim)].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) {
@@ -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,68 @@ 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 && opts.comboOptions.seriesOptions.length && chartType.includes('combo')) {
1136
+ opts.comboOptions.seriesOptions.forEach(option => {
1137
+ chart_series.forEach(series => {
1138
+ if (option.series === series.name) {
1139
+ switch (option.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
+ }
1160
+ })
1161
+ })
1162
+ }
1163
+
1164
+ if (opts.total) {
1165
+ const totalSeries = lodash.clone(chart_series[chart_series.length - 1]);
1166
+ totalSeries.name = 'Total';
1167
+ totalSeries.data = [];
1168
+ col_n_keys.forEach(columnKey => {
1169
+ let key = columnKey;
1170
+ let totalKey = columnKey;
1171
+ if (lodash.isArray(columnKey)) {
1172
+ key = columnKey[0];
1173
+ totalKey = totalKey.join(' , ');
1174
+ }
1175
+ totalSeries.data.push({name: lodash.unescape(key), y: pivotData.colTotals[totalKey].sum});
1176
+ });
1177
+
1178
+ chart_series.push(totalSeries);
1179
+ }
1180
+
1181
+ chart_series.sort((a,b) => {
1182
+ return (weights[a.type] || 0) > (weights[b.type] || 0) ? 1 : (weights[a.type] || 0) < (weights[b.type] || 0) ? -1 : 0
1183
+ });
1184
+
1067
1185
  return chart_series;
1068
- };
1186
+ }
1069
1187
 
1070
1188
  highchartsRenderer.getVariantSeries = function (series, delta_column_options) {
1071
1189
  const varianceColor = delta_column_options.color || highchartsRenderer.variance_color || Highcharts.getOptions().colors[7];
1072
1190
  series.name = delta_column_options.name.replace('_', '');
1073
1191
  series.color = varianceColor;
1074
1192
 
1075
- if (!delta_column_options.only_variant && !delta_column_options.same_yaxis) {
1076
- series.yAxis = 1;
1077
- }
1078
-
1079
1193
  if (delta_column_options.point_click_event) {
1080
1194
  series.allowPointSelect = true;
1081
1195
  series.point = {
@@ -1103,9 +1217,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1103
1217
  series.marker = {
1104
1218
  lineColor: varianceColor
1105
1219
  };
1106
- } else if (delta_column_options.chart == 'column') {
1220
+ } else if (delta_column_options.chart == 'column' || delta_column_options.chart == 'combo') {
1107
1221
  series.type = 'column';
1108
- } else {
1222
+ } else if (delta_column_options.chart == 'spline') {
1109
1223
  series.type = 'spline';
1110
1224
  series.lineWidth = 0;
1111
1225
  series.lineColor = varianceColor;
@@ -1145,11 +1259,20 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1145
1259
  }
1146
1260
  };
1147
1261
  }
1262
+ else if (delta_column_options.chart == 'area') {
1263
+ series.color = varianceColor;
1264
+ series.type = 'area'
1265
+ } else if (delta_column_options.chart == 'areaspline') {
1266
+ series.color = varianceColor;
1267
+ series.type = 'areaspline'
1268
+ } else if (delta_column_options.chart == 'scatter-chart') {
1269
+ series.color = varianceColor;
1270
+ series.type = 'scatter-chart'
1271
+ }
1148
1272
  return series;
1149
1273
  }
1150
1274
 
1151
-
1152
- highchartsRenderer.ptCreateSeriesToDrillDownChart = function (pivotData) {
1275
+ highchartsRenderer.ptCreateSeriesToDrillDownChart = function (pivotData, chartOptions, additionOptions, opts) {
1153
1276
  var pie_series = [];
1154
1277
 
1155
1278
  var col_n_keys = pivotData.getColKeys();
@@ -1180,13 +1303,15 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1180
1303
  pie_series.push(ob);
1181
1304
  });
1182
1305
 
1306
+ highchartsRenderer.moveSeriesToSecondYAxisIfNeeded(pie_series, pivotData, chartOptions, additionOptions, opts);
1307
+
1183
1308
  return ([{
1184
1309
  colorByPoint: true,
1185
1310
  data: pie_series
1186
1311
  }]);
1187
1312
  };
1188
1313
 
1189
- highchartsRenderer.ptCreateDrillDownSeriesToDrilldownChart = function (pivotData) {
1314
+ highchartsRenderer.ptCreateDrillDownSeriesToDrilldownChart = function (pivotData, chartOptions, additionOptions, opts) {
1190
1315
 
1191
1316
  var pie_drill_down_series = [],
1192
1317
  row_n_keys = pivotData.getRowKeys(),
@@ -1224,12 +1349,60 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1224
1349
  }
1225
1350
  });
1226
1351
 
1352
+ highchartsRenderer.moveSeriesToSecondYAxisIfNeeded(pie_drill_down_series, pivotData, chartOptions, additionOptions, opts);
1227
1353
 
1228
1354
  return ({
1229
1355
  series: pie_drill_down_series
1230
1356
  });
1231
1357
  };
1232
1358
 
1359
+ highchartsRenderer.moveSeriesToSecondYAxisIfNeeded = function(chartSeries, pivotData, chartOptions, additionOptions, opts) {
1360
+ if (!opts || !opts.comboOptions) {
1361
+ return;
1362
+ }
1363
+
1364
+ let addSecondYAxis = false;
1365
+ lodash.forEach(chartSeries, function (series) {
1366
+ let sOptions = lodash.find(opts.comboOptions.seriesOptions, function(sOptions) {
1367
+ return sOptions.series === series.name || sOptions.series.replace('_', '') === series.name
1368
+ });
1369
+ if (sOptions && sOptions.secondaryAxis) {
1370
+ series.yAxis = 1;
1371
+ addSecondYAxis = true;
1372
+ }
1373
+ });
1374
+
1375
+ if (addSecondYAxis) {
1376
+ highchartsRenderer.addSecondYAxis(pivotData, chartOptions, additionOptions, opts);
1377
+ }
1378
+ }
1379
+
1380
+ highchartsRenderer.addSecondYAxis = function (pivotData, chartOptions, additionOptions, opts) {
1381
+ const varianceColor = (additionOptions && additionOptions.delta_column.color) || (highchartsRenderer && highchartsRenderer.variance_color) || Highcharts.getOptions().colors[7];
1382
+ let labels_formatter = opts.comboOptions.secondaryAxisSettings.is_percentage ?
1383
+ highchartsRenderer.persantageValueLabelsFormatter(pivotData, opts) :
1384
+ highchartsRenderer.defaultValueLabelsFormatter(pivotData, opts);
1385
+
1386
+ chartOptions.yAxis = [chartOptions.yAxis];
1387
+ chartOptions.yAxis[1] = {
1388
+ min: !isNaN(parseInt(opts.comboOptions.secondaryAxisSettings.min)) ? opts.comboOptions.secondaryAxisSettings.min : null,
1389
+ max: !isNaN(parseInt(opts.comboOptions.secondaryAxisSettings.max)) ? opts.comboOptions.secondaryAxisSettings.max : null,
1390
+ title: {
1391
+ text: opts.comboOptions.secondaryAxisSettings.name,
1392
+ style: {
1393
+ color: varianceColor
1394
+ }
1395
+ },
1396
+ labels: {
1397
+ formatter: labels_formatter,
1398
+ style: {
1399
+ color: varianceColor
1400
+ }
1401
+ },
1402
+ opposite: true
1403
+ }
1404
+ };
1405
+
1233
1406
  highchartsRenderer.ptRenderBasicPie = function (pivotData, opts) {
1234
1407
  var chartOptions = {};
1235
1408
  var additionOptions = opts.chartOptions ? opts.chartOptions : highchartsRenderer.getDefaultValueForChart('pie-chart');
@@ -1409,7 +1582,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1409
1582
  }
1410
1583
 
1411
1584
  chartOptions.xAxis = {categories: pivotData.getColKeys()};
1412
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, true);
1585
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, true, null, null, opts, chartOptions);
1413
1586
 
1414
1587
  var total = [];
1415
1588
  lodash.forEach(chartOptions.series, function (obj) {
@@ -1550,7 +1723,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1550
1723
 
1551
1724
 
1552
1725
  chartOptions.xAxis = {categories: pivotData.getColKeys()};
1553
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, true);
1726
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, true, null, null, opts, chartOptions);
1554
1727
 
1555
1728
  var total = [];
1556
1729
  lodash.forEach(chartOptions.series, function (obj) {
@@ -1644,7 +1817,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1644
1817
  };
1645
1818
  var uniqueVals = kpioptions.value.value == "Unique";
1646
1819
 
1647
- let temp_series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, true, uniqueVals);
1820
+ let temp_series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, true, uniqueVals, null, opts, chartOptions);
1648
1821
 
1649
1822
  var total = [];
1650
1823
  lodash.forEach(temp_series, function (obj) {
@@ -1764,12 +1937,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1764
1937
  if (useNewUx) {
1765
1938
  chartOptions.tooltip.borderColor = '#fff';
1766
1939
  }
1767
- chartOptions.series = highchartsRenderer.ptCreateSeriesToDrillDownChart(pivotData);
1940
+ chartOptions.series = highchartsRenderer.ptCreateSeriesToDrillDownChart(pivotData, chartOptions, additionOptions, opts);
1768
1941
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, 1, false, true);
1769
1942
  if (drilldownFunc)
1770
1943
  chartOptions.drilldown = {}
1771
1944
  else
1772
- chartOptions.drilldown = highchartsRenderer.ptCreateDrillDownSeriesToDrilldownChart(pivotData);
1945
+ chartOptions.drilldown = highchartsRenderer.ptCreateDrillDownSeriesToDrilldownChart(pivotData, chartOptions, additionOptions, opts);
1773
1946
 
1774
1947
  return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
1775
1948
 
@@ -1826,7 +1999,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1826
1999
  formatter: highchartsRenderer.defaultValueLabelsFormatter(pivotData, opts)
1827
2000
  }
1828
2001
  };
1829
- highchartsRenderer.addSecondYAxisIfNeed(pivotData, chartOptions, additionOptions, opts);
1830
2002
 
1831
2003
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, true);
1832
2004
 
@@ -1871,7 +2043,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1871
2043
  }
1872
2044
  };
1873
2045
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
1874
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, additionOptions);
2046
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, additionOptions, opts, chartOptions);
1875
2047
 
1876
2048
  highchartsRenderer.handleGridLines(additionOptions, chartOptions)
1877
2049
  return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
@@ -1902,8 +2074,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1902
2074
  }
1903
2075
  };
1904
2076
 
1905
- highchartsRenderer.addSecondYAxisIfNeed(pivotData, chartOptions, additionOptions, opts);
1906
-
1907
2077
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, true);
1908
2078
 
1909
2079
  chartOptions.plotOptions = {
@@ -1950,7 +2120,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1950
2120
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
1951
2121
 
1952
2122
  var colors = ['#ff0202', '#b3060e', '#70000a'];
1953
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, colors, null, null, additionOptions);
2123
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, colors, null, null, additionOptions, opts, chartOptions);
1954
2124
 
1955
2125
  highchartsRenderer.handleGridLines(additionOptions, chartOptions)
1956
2126
 
@@ -1972,34 +2142,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1972
2142
 
1973
2143
  }
1974
2144
 
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
2145
  highchartsRenderer.ptRenderSpLine = function (pivotData, opts) {
2004
2146
  var chartOptions = {};
2005
2147
  var rowAttrs = pivotData.rowAttrs;
@@ -2025,8 +2167,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2025
2167
  }
2026
2168
  };
2027
2169
 
2028
- highchartsRenderer.addSecondYAxisIfNeed(pivotData, chartOptions, additionOptions, opts);
2029
-
2030
2170
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, true);
2031
2171
 
2032
2172
  chartOptions.plotOptions = {
@@ -2068,7 +2208,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2068
2208
  }
2069
2209
  };
2070
2210
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2071
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, additionOptions);
2211
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, additionOptions, opts, chartOptions);
2072
2212
 
2073
2213
  highchartsRenderer.handleGridLines(additionOptions, chartOptions);
2074
2214
  return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
@@ -2116,7 +2256,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2116
2256
  }
2117
2257
  };
2118
2258
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2119
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData);
2259
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, null, opts, chartOptions);
2120
2260
 
2121
2261
  highchartsRenderer.handleGridLines(additionOptions, chartOptions);
2122
2262
 
@@ -2213,14 +2353,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2213
2353
  },
2214
2354
  lineWidth: 0
2215
2355
  };
2216
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData);
2356
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, null, opts, chartOptions);
2217
2357
 
2218
2358
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, false);
2219
2359
 
2220
2360
  return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
2221
2361
  };
2222
2362
 
2223
- highchartsRenderer.ptRenderColumn = function (pivotData, opts, drilldownFunc) {
2363
+ highchartsRenderer.ptRenderColumn = function (pivotData, opts, drilldownFunc, chartType) {
2224
2364
  var chartOptions = {};
2225
2365
  var rowAttrs = pivotData.rowAttrs;
2226
2366
  var colAttrs = pivotData.colAttrs;
@@ -2275,8 +2415,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2275
2415
  }
2276
2416
  };
2277
2417
 
2278
- highchartsRenderer.addSecondYAxisIfNeed(pivotData, chartOptions, additionOptions, opts);
2279
-
2280
2418
  chartOptions.tooltip = {
2281
2419
  formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts),
2282
2420
  shadow: highchartsRenderer.tooltipShadow,
@@ -2290,7 +2428,13 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2290
2428
  highchartsRenderer.handleGridLines(additionOptions, chartOptions);
2291
2429
 
2292
2430
  var isNotDrilldown = !(colAttrs && colAttrs.length > 1);
2293
- chartOptions.series = highchartsRenderer.ptCreateColumnSeries(pivotData, null, null, null, isNotDrilldown, additionOptions);
2431
+ if (lodash.get(opts, 'paletteOptions.widgetPalette', null)) {
2432
+ const mc_palette = lodash.find(lodash.get(opts.paletteOptions, 'monochromePalettes', []), { selected: true });
2433
+ chartOptions.colors = mc_palette ? mc_palette.colors : opts.paletteOptions.widgetPalette;
2434
+ } else if (lodash.get(opts, 'paletteOptions.dashboardPalette.colors', null)) {
2435
+ chartOptions.colors = opts.paletteOptions.dashboardPalette.colors;
2436
+ }
2437
+ chartOptions.series = highchartsRenderer.ptCreateColumnSeries(pivotData, chartOptions.colors, null, null, isNotDrilldown, additionOptions, opts, chartOptions, chartType);
2294
2438
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2295
2439
  chartOptions.plotOptions = {
2296
2440
  column: {
@@ -2327,7 +2471,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2327
2471
  return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
2328
2472
  };
2329
2473
 
2330
- highchartsRenderer.ptRenderStackedColumn = function (pivotData, opts, drilldownFunc) {
2474
+ highchartsRenderer.ptRenderStackedColumn = function (pivotData, opts, drilldownFunc, chartType) {
2331
2475
  var chartOptions = {};
2332
2476
  var rowAttrs = pivotData.rowAttrs;
2333
2477
  var additionOptions = opts.chartOptions ? opts.chartOptions : highchartsRenderer.getDefaultValueForChart('column-chart-stacked');
@@ -2458,7 +2602,13 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2458
2602
  };
2459
2603
  //chartOptions.xAxis = { categories: pivotData.getColKeys() };
2460
2604
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2461
- chartOptions.series = highchartsRenderer.ptCreateColumnSeries(pivotData, null, null, true, true);
2605
+ if (lodash.get(opts, 'paletteOptions.widgetPalette', null)) {
2606
+ const mc_palette = lodash.find(lodash.get(opts.paletteOptions, 'monochromePalettes', []), { selected: true });
2607
+ chartOptions.colors = mc_palette ? mc_palette.colors : opts.paletteOptions.widgetPalette;
2608
+ } else if (lodash.get(opts, 'paletteOptions.dashboardPalette.colors', null)) {
2609
+ chartOptions.colors = opts.paletteOptions.dashboardPalette.colors;
2610
+ }
2611
+ chartOptions.series = highchartsRenderer.ptCreateColumnSeries(pivotData, chartOptions.colors, null, true, true, null, opts, chartOptions, chartType);
2462
2612
  //chartOptions.drilldown = {}
2463
2613
 
2464
2614
  highchartsRenderer.handleGridLines(additionOptions, chartOptions)
@@ -2535,11 +2685,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2535
2685
 
2536
2686
  chartOptions.xAxis = {type: 'category'};
2537
2687
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2538
- chartOptions.series = highchartsRenderer.ptCreateSeriesToDrillDownChart(pivotData);
2688
+ chartOptions.series = highchartsRenderer.ptCreateSeriesToDrillDownChart(pivotData, chartOptions, additionOptions, opts);
2539
2689
  //if (drilldownFunc)
2540
2690
  // chartOptions.drilldown = {}
2541
2691
  //else
2542
- chartOptions.drilldown = highchartsRenderer.ptCreateDrillDownSeriesToDrilldownChart(pivotData);
2692
+ chartOptions.drilldown = highchartsRenderer.ptCreateDrillDownSeriesToDrilldownChart(pivotData, chartOptions, additionOptions, opts);
2543
2693
 
2544
2694
  highchartsRenderer.handleGridLines(additionOptions, chartOptions)
2545
2695
 
@@ -2610,7 +2760,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2610
2760
  }
2611
2761
  };
2612
2762
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2613
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData);
2763
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, null, opts, chartOptions);
2614
2764
 
2615
2765
  highchartsRenderer.handleGridLines(additionOptions, chartOptions)
2616
2766
 
@@ -2724,7 +2874,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2724
2874
  }
2725
2875
  };
2726
2876
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2727
- chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData);
2877
+ chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, null, opts, chartOptions);
2728
2878
 
2729
2879
  highchartsRenderer.handleGridLines(additionOptions, chartOptions)
2730
2880
 
@@ -2813,6 +2963,18 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2813
2963
  return format;
2814
2964
  }
2815
2965
 
2966
+ highchartsRenderer.isRowKeyShouldBePercentage = function(render_options, rowKey) {
2967
+ if (render_options && render_options.comboOptions && render_options.comboOptions.secondaryAxisSettings &&
2968
+ render_options.comboOptions.secondaryAxisSettings.is_percentage) {
2969
+ const rowKeyString = rowKey.join(highchartsRenderer.delimer);
2970
+ const rowKeyOptions = lodash.find(render_options.comboOptions.seriesOptions, {series: rowKeyString});
2971
+ if (rowKeyOptions && rowKeyOptions.secondaryAxis) {
2972
+ return true;
2973
+ }
2974
+ }
2975
+ return false;
2976
+ }
2977
+
2816
2978
  highchartsRenderer.ignoreIfCalculatedValue = function(data, rowKey, colKey, record, associatedFields, renderOptions, isGraph) {
2817
2979
  var eliminate = renderOptions && renderOptions.chartOptions && renderOptions.chartOptions.table_options &&
2818
2980
  renderOptions.chartOptions.table_options.eliminate_calc_totals && !_.isEmpty(associatedFields) && !isGraph;
@@ -2832,17 +2994,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2832
2994
 
2833
2995
  highchartsRenderer.rhPivotCount = function (arg, widget_values_format, is_graph, render_options, calculated_info) {
2834
2996
  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
2997
  return function (data, rowKey, colKey) {
2847
2998
  return {
2848
2999
  sum: 0,
@@ -2864,10 +3015,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2864
3015
  this.formats = lodash.uniq(this.formats);
2865
3016
  }
2866
3017
 
2867
- if (has_variants_persentage) {
2868
- if (rowKey == variant_name || lodash.includes(rowKey, variant_name)) {
2869
- this.widget_values_format = "#,###%";
2870
- }
3018
+ if (highchartsRenderer.isRowKeyShouldBePercentage(render_options, rowKey)) {
3019
+ this.widget_values_format = "#,###%";
2871
3020
  }
2872
3021
 
2873
3022
  if (highchartsRenderer.ignoreIfCalculatedValue(data, rowKey, colKey, record, calculated_info.associated_fields, render_options, is_graph)) {
@@ -2987,17 +3136,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2987
3136
  };
2988
3137
 
2989
3138
  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
- }
3139
+ var attr = arg[0];
3001
3140
  return function (data, rowKey, colKey) {
3002
3141
  return {
3003
3142
  sum: 0,
@@ -3030,10 +3169,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3030
3169
  this.formats = lodash.uniq(this.formats);
3031
3170
  }
3032
3171
 
3033
- if (has_variants_persentage) {
3034
- if (rowKey == variant_name || lodash.includes(rowKey, variant_name)) {
3035
- this.widget_values_format = "#,###%";
3036
- }
3172
+ if (highchartsRenderer.isRowKeyShouldBePercentage(render_options, rowKey)) {
3173
+ this.widget_values_format = "#,###%";
3037
3174
  }
3038
3175
 
3039
3176
  if (highchartsRenderer.ignoreIfCalculatedValue(data, rowKey, colKey, record, calculated_info.associated_fields, render_options, is_graph)) {
@@ -3087,17 +3224,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3087
3224
  };
3088
3225
 
3089
3226
  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
- }
3227
+ var attr = arg[0];
3101
3228
  return function (data, rowKey, colKey) {
3102
3229
  return {
3103
3230
  val: null,
@@ -3131,10 +3258,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3131
3258
  this.formats = lodash.uniq(this.formats);
3132
3259
  }
3133
3260
 
3134
- if (has_variants_persentage) {
3135
- if (rowKey == variant_name || lodash.includes(rowKey, variant_name)) {
3136
- this.widget_values_format = "#,###%";
3137
- }
3261
+ if (highchartsRenderer.isRowKeyShouldBePercentage(render_options, rowKey)) {
3262
+ this.widget_values_format = "#,###%";
3138
3263
  }
3139
3264
 
3140
3265
  if (highchartsRenderer.ignoreIfCalculatedValue(data, rowKey, colKey, record, calculated_info.associated_fields, render_options, is_graph)) {
@@ -3185,17 +3310,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3185
3310
  };
3186
3311
 
3187
3312
  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
- }
3313
+ var attr = arg[0];
3199
3314
  return function (data, rowKey, colKey) {
3200
3315
  return {
3201
3316
  val: null,
@@ -3229,10 +3344,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3229
3344
  this.formats = lodash.uniq(this.formats);
3230
3345
  }
3231
3346
 
3232
- if (has_variants_persentage) {
3233
- if (rowKey == variant_name || lodash.includes(rowKey, variant_name)) {
3234
- this.widget_values_format = "#,###%";
3235
- }
3347
+ if (highchartsRenderer.isRowKeyShouldBePercentage(render_options, rowKey)) {
3348
+ this.widget_values_format = "#,###%";
3236
3349
  }
3237
3350
 
3238
3351
  if (highchartsRenderer.ignoreIfCalculatedValue(data, rowKey, colKey, record, calculated_info.associated_fields, render_options, is_graph)) {
@@ -3283,17 +3396,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3283
3396
  };
3284
3397
 
3285
3398
  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
- }
3399
+ var attr = arg[0];
3297
3400
  return function (data, rowKey, colKey) {
3298
3401
  return {
3299
3402
  sum: 0,
@@ -3328,10 +3431,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3328
3431
  this.formats = lodash.uniq(this.formats);
3329
3432
  }
3330
3433
 
3331
- if (has_variants_persentage) {
3332
- if (rowKey == variant_name || lodash.includes(rowKey, variant_name)) {
3333
- this.widget_values_format = "#,###%";
3334
- }
3434
+ if (highchartsRenderer.isRowKeyShouldBePercentage(render_options, rowKey)) {
3435
+ this.widget_values_format = "#,###%";
3335
3436
  }
3336
3437
 
3337
3438
  if (highchartsRenderer.ignoreIfCalculatedValue(data, rowKey, colKey, record, calculated_info.associated_fields, render_options, is_graph)) {
@@ -4279,6 +4380,50 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4279
4380
  delete options.chartOptions.label;
4280
4381
  }
4281
4382
  }
4383
+
4384
+ if (!options.comboOptions) {
4385
+ options.comboOptions = {
4386
+ secondaryAxisSettings: {
4387
+ name: 'Secondary Axis',
4388
+ max: null,
4389
+ min: null,
4390
+ is_percentage: false,
4391
+ },
4392
+ seriesOptions: []
4393
+ }
4394
+ if (options.chartOptions.delta_column && options.chartOptions.delta_column.field === 'series') {
4395
+ let deltaColumnSeries = {
4396
+ series: options.chartOptions.delta_column.name,
4397
+ secondaryAxis: !options.chartOptions.delta_column.same_yaxis,
4398
+ };
4399
+ switch (options.chartOptions.delta_column.chart) {
4400
+ case 'line':
4401
+ deltaColumnSeries.chartType = 'line-chart';
4402
+ break;
4403
+ case 'spline':
4404
+ deltaColumnSeries.chartType = 'line-chart-smooth';
4405
+ break;
4406
+ case 'area':
4407
+ deltaColumnSeries.chartType = 'area-chart';
4408
+ break;
4409
+ case 'areaspline':
4410
+ deltaColumnSeries.chartType = 'area-chart-smooth';
4411
+ break;
4412
+ case 'scatter':
4413
+ deltaColumnSeries.chartType = 'scatter-chart';
4414
+ break;
4415
+ case 'column':
4416
+ deltaColumnSeries.chartType = 'column-chart';
4417
+ break;
4418
+ default:
4419
+ deltaColumnSeries.chartType = 'scatter-chart';
4420
+ break;
4421
+ }
4422
+ options.comboOptions.seriesOptions.push(deltaColumnSeries);
4423
+ options.comboOptions.secondaryAxisSettings.name = options.chartOptions.delta_column.name.replace('_', '');
4424
+ options.comboOptions.secondaryAxisSettings.is_percentage = options.chartOptions.delta_column.is_percentage;
4425
+ }
4426
+ }
4282
4427
  };
4283
4428
 
4284
4429
  highchartsRenderer.addPivotOptions = function (selectedTemplateWOData, widgetOptions, drilldownFunction, drillDownListFunction) {
@@ -4386,6 +4531,60 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4386
4531
  exTableOptions.pivot.calculatedValues = highchartsRenderer.objectCopyJsonMethod(exTableOptions.calculated_values || []);
4387
4532
  };
4388
4533
 
4534
+ highchartsRenderer.addTemplateDataToDynamicRangeOptions = function (selectedTemplate, dynamicRangeOptions) {
4535
+ highchartsRenderer.setWidgetFieldsToTemplate(selectedTemplate);
4536
+
4537
+ var fields = highchartsRenderer.objectCopyJsonMethod(selectedTemplate.widget_fields);
4538
+ var fieldOb;
4539
+ var filterFields = [];
4540
+ var selectedFields = [];
4541
+
4542
+ lodash.forEach(dynamicRangeOptions.filters, function (filterObj) {
4543
+ fieldOb = lodash.find(fields, {id: filterObj.field});
4544
+ if (fieldOb && filterObj.values && filterObj.values.datetype && filterObj.values.datetype === 'list') {
4545
+ filterObj.values = filterObj.values.val
4546
+ } else if (fieldOb && filterObj.values && filterObj.values.datetype && filterObj.values.datetype !== 'list') {
4547
+ fieldOb.values = filterObj.values;
4548
+ } else if (fieldOb && filterObj.values && filterObj.values.type === 'advanced') {
4549
+ fieldOb.values = filterObj.values;
4550
+ }
4551
+ if (fieldOb && filterObj.values && filterObj.values instanceof Array) {
4552
+ if (filterObj.is_excluded == true) {
4553
+ fieldOb.excludes = filterObj.values;
4554
+ } else {
4555
+ fieldOb.includes = filterObj.values;
4556
+ }
4557
+ }
4558
+ if (filterObj.allow_nulls && fieldOb) {
4559
+ fieldOb.allow_nulls = filterObj.allow_nulls;
4560
+ }
4561
+ });
4562
+
4563
+ // fill selected fields
4564
+ lodash.forEach(dynamicRangeOptions.fields, function (valObj) {
4565
+ fieldOb = lodash.find(fields, {id: valObj.field});
4566
+ if (fieldOb) {
4567
+ selectedFields.push(fieldOb);
4568
+ lodash.remove(fields, {id: fieldOb.id});
4569
+ }
4570
+ });
4571
+
4572
+ // fill filter fields
4573
+ lodash.forEach(dynamicRangeOptions.filters, function (valObj) {
4574
+ fieldOb = lodash.find(fields, {id: valObj.field});
4575
+ if (fieldOb) {
4576
+ filterFields.push(fieldOb);
4577
+ lodash.remove(fields, {id: fieldOb.id});
4578
+ }
4579
+ });
4580
+
4581
+ dynamicRangeOptions.pivot = {};
4582
+ dynamicRangeOptions.pivot.fieldsArray = fields;
4583
+ dynamicRangeOptions.pivot.selectedFieldsArray = selectedFields;
4584
+ dynamicRangeOptions.pivot.filtersArray = filterFields;
4585
+ dynamicRangeOptions.pivot.calculatedValues = highchartsRenderer.objectCopyJsonMethod(dynamicRangeOptions.calculated_values || []);
4586
+ }
4587
+
4389
4588
  highchartsRenderer.addTemplateDataToFunctionOptions = function (selectedTemplate, functionOptions) {
4390
4589
  highchartsRenderer.setWidgetFieldsToTemplate(selectedTemplate);
4391
4590
 
@@ -5360,7 +5559,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5360
5559
  element_options: [
5361
5560
  {label: 'Markers', value: ''},
5362
5561
  {label: 'Line', value: 'line'},
5562
+ {label: 'Smooth Line', value: 'spline'},
5363
5563
  {label: 'Column', value: 'column'},
5564
+ {label: 'Area', value: 'area'},
5565
+ {label: 'Smooth Area', value: 'areaspline'},
5364
5566
  ],
5365
5567
  default_value: ''
5366
5568
  }, {
@@ -5372,7 +5574,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5372
5574
  element_type: 'checkbox',
5373
5575
  element_label: 'Same yAxis',
5374
5576
  value_name: 'same_yaxis',
5375
- default_value: false
5577
+ default_value: false,
5578
+ hidden: true,
5376
5579
  }, {
5377
5580
  element_type: 'checkbox',
5378
5581
  element_label: 'Same xAxis',
@@ -5382,7 +5585,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5382
5585
  element_type: 'checkbox',
5383
5586
  element_label: 'Percentage',
5384
5587
  value_name: 'is_percentage',
5385
- default_value: false
5588
+ default_value: false,
5589
+ hidden: true,
5386
5590
  }, {
5387
5591
  element_type: 'checkbox',
5388
5592
  element_label: 'Sort by variance',
@@ -5433,7 +5637,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5433
5637
  element_options: [
5434
5638
  {label: 'Markers', value: ''},
5435
5639
  {label: 'Line', value: 'line'},
5640
+ {label: 'Smooth Line', value: 'spline'},
5436
5641
  {label: 'Column', value: 'column'},
5642
+ {label: 'Area', value: 'area'},
5643
+ {label: 'Smooth Area', value: 'areaspline'},
5437
5644
  ],
5438
5645
  default_value: ''
5439
5646
  }, {
@@ -5445,7 +5652,85 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5445
5652
  element_type: 'checkbox',
5446
5653
  element_label: 'Same yAxis',
5447
5654
  value_name: 'same_yaxis',
5655
+ default_value: false,
5656
+ hidden: true,
5657
+ }, {
5658
+ element_type: 'checkbox',
5659
+ element_label: 'Same xAxis',
5660
+ value_name: 'same_xaxis',
5661
+ default_value: false
5662
+ }, {
5663
+ element_type: 'checkbox',
5664
+ element_label: 'Percentage',
5665
+ value_name: 'is_percentage',
5666
+ default_value: false,
5667
+ hidden: true,
5668
+ }, {
5669
+ element_type: 'checkbox',
5670
+ element_label: 'Sort by variance',
5671
+ value_name: 'sort_by_variance',
5672
+ default_value: false
5673
+ }, {
5674
+ element_type: 'checkbox',
5675
+ element_label: 'Sort by absolute variance',
5676
+ value_name: 'sort_by_absolute_variance',
5677
+ default_value: false
5678
+ }, {
5679
+ element_type: 'checkbox',
5680
+ element_label: 'Filter zero values',
5681
+ value_name: 'is_filter_zero',
5682
+ default_value: false
5683
+ }]
5684
+ },
5685
+ 'delta_column_combo': {
5686
+ category_class: 'google-visualization-charteditor-mini-more',
5687
+ category_label: 'Variance',
5688
+ category_type: 'delta_column',
5689
+ elements: [{
5690
+ element_type: 'radio',
5691
+ value_name: 'field',
5692
+ element_label: 'Select Field',
5693
+ element_options: [
5694
+ {label: 'None', value: ''},
5695
+ {label: 'Axis', value: 'category'},
5696
+ {label: 'Legend', value: 'series'},
5697
+ ],
5698
+ default_value: ''
5699
+ }, {
5700
+ element_type: 'input',
5701
+ value_name: 'name',
5702
+ element_label: 'Name',
5703
+ default_value: '_Variance'
5704
+ }, {
5705
+ element_type: 'input',
5706
+ value_name: 'formula',
5707
+ element_label: 'Formula',
5708
+ default_value: 'x2-x1'
5709
+ }, {
5710
+ hidden: true,
5711
+ element_type: 'radio',
5712
+ value_name: 'chart',
5713
+ element_label: 'Chart',
5714
+ element_options: [
5715
+ {label: 'Markers', value: ''},
5716
+ {label: 'Line', value: 'line'},
5717
+ {label: 'Smooth Line', value: 'spline'},
5718
+ {label: 'Column', value: 'column'},
5719
+ {label: 'Area', value: 'area'},
5720
+ {label: 'Smooth Area', value: 'areaspline'},
5721
+ ],
5722
+ default_value: ''
5723
+ }, {
5724
+ element_type: 'checkbox',
5725
+ element_label: 'Only variance',
5726
+ value_name: 'only_variant',
5448
5727
  default_value: false
5728
+ }, {
5729
+ element_type: 'checkbox',
5730
+ element_label: 'Same yAxis',
5731
+ value_name: 'same_yaxis',
5732
+ default_value: false,
5733
+ hidden: true,
5449
5734
  }, {
5450
5735
  element_type: 'checkbox',
5451
5736
  element_label: 'Same xAxis',
@@ -5455,7 +5740,85 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5455
5740
  element_type: 'checkbox',
5456
5741
  element_label: 'Percentage',
5457
5742
  value_name: 'is_percentage',
5743
+ default_value: false,
5744
+ hidden: true,
5745
+ }, {
5746
+ element_type: 'checkbox',
5747
+ element_label: 'Sort by variance',
5748
+ value_name: 'sort_by_variance',
5458
5749
  default_value: false
5750
+ }, {
5751
+ element_type: 'checkbox',
5752
+ element_label: 'Sort by absolute variance',
5753
+ value_name: 'sort_by_absolute_variance',
5754
+ default_value: false
5755
+ }]
5756
+ },
5757
+ 'delta_column_for_drill_down_combo': {
5758
+ category_class: 'google-visualization-charteditor-mini-more',
5759
+ category_label: 'Variance',
5760
+ category_type: 'delta_column',
5761
+ elements: [{
5762
+ element_type: 'radio',
5763
+ value_name: 'field',
5764
+ element_label: 'Select Field',
5765
+ element_options: [
5766
+ {label: 'None', value: ''},
5767
+ {label: 'Axis', value: 'category'},
5768
+ {label: 'Legend', value: 'series'},
5769
+ ],
5770
+ default_value: ''
5771
+ }, {
5772
+ element_type: 'input',
5773
+ value_name: 'name',
5774
+ element_label: 'Name',
5775
+ default_value: '_Variance'
5776
+ }, {
5777
+ element_type: 'input',
5778
+ value_name: 'formula',
5779
+ element_label: 'Formula',
5780
+ default_value: 'x2-x1'
5781
+ }, {
5782
+ element_type: 'input',
5783
+ value_name: 'color',
5784
+ element_label: 'Color',
5785
+ default_value: ''
5786
+ }, {
5787
+ hidden: true,
5788
+ element_type: 'radio',
5789
+ value_name: 'chart',
5790
+ element_label: 'Chart',
5791
+ element_options: [
5792
+ {label: 'Markers', value: ''},
5793
+ {label: 'Line', value: 'line'},
5794
+ {label: 'Smooth Line', value: 'spline'},
5795
+ {label: 'Column', value: 'column'},
5796
+ {label: 'Area', value: 'area'},
5797
+ {label: 'Smooth Area', value: 'areaspline'},
5798
+ ],
5799
+ default_value: ''
5800
+ }, {
5801
+ element_type: 'checkbox',
5802
+ element_label: 'Only variance',
5803
+ value_name: 'only_variant',
5804
+ default_value: false
5805
+ }, {
5806
+ element_type: 'checkbox',
5807
+ element_label: 'Same yAxis',
5808
+ value_name: 'same_yaxis',
5809
+ default_value: false,
5810
+ hidden: true,
5811
+ }, {
5812
+ element_type: 'checkbox',
5813
+ element_label: 'Same xAxis',
5814
+ value_name: 'same_xaxis',
5815
+ default_value: false
5816
+ }, {
5817
+ element_type: 'checkbox',
5818
+ element_label: 'Percentage',
5819
+ value_name: 'is_percentage',
5820
+ default_value: false,
5821
+ hidden: true,
5459
5822
  }, {
5460
5823
  element_type: 'checkbox',
5461
5824
  element_label: 'Sort by variance',
@@ -5532,6 +5895,39 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5532
5895
  };
5533
5896
 
5534
5897
  highchartsRenderer.chartsTypesInfo = {
5898
+ 'combo-chart': {
5899
+ name: 'Column Combo Chart ',
5900
+ label: 'Column Combo Chart ',
5901
+ title: 'Allows for multiple chart display formats in one widget',
5902
+ description: 'For example, Revenue and Cost of goods sold as clomuns, and Gross margin as a line',
5903
+ axisName: 'X - Axis',
5904
+ legendName: 'Data series',
5905
+ startedMessage: 'To add multiple chart types, click on “Combo Chart Options“. A Secondary Axis is available in this chart',
5906
+ axisTooltipTitle: 'Drag one or more fields here to create your x-axis.',
5907
+ legendTooltipTitle: 'Click to display these data series as line or area charts',
5908
+ },
5909
+ 'combo-column-chart': {
5910
+ name: 'Column Combo Chart ',
5911
+ label: 'Column Chart',
5912
+ title: 'Allows for multiple chart display formats in one widget',
5913
+ description: 'For example, Revenue and Cost of goods sold as clomuns, and Gross margin as a line',
5914
+ axisName: 'X - Axis',
5915
+ legendName: 'Data series',
5916
+ startedMessage: 'To add multiple chart types, click on “Combo Chart Options“. A Secondary Axis is available in this chart.',
5917
+ axisTooltipTitle: 'Drag one or more fields here to create your x-axis.',
5918
+ legendTooltipTitle: 'Click to display these data series as line or area charts.',
5919
+ },
5920
+ 'combo-stacked-chart': {
5921
+ name: 'Stacked Column Combo Chart ',
5922
+ label: 'Stacked Column',
5923
+ title: 'Allows for multiple chart display formats in one widget.',
5924
+ description: 'For example, different department stacked clomuns, and average as a line.',
5925
+ axisName: 'X - Axis',
5926
+ legendName: 'Data series',
5927
+ startedMessage: 'To add multiple chart types, click on “Combo Chart Options“. A Secondary Axis is available in this chart.',
5928
+ axisTooltipTitle: 'Drag one or more fields here to create your x-axis.',
5929
+ legendTooltipTitle: 'Click to display these data series as line or area charts.',
5930
+ },
5535
5931
  'line-chart': {
5536
5932
  name: 'Line chart',
5537
5933
  label: 'Line Chart',
@@ -5761,6 +6157,53 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5761
6157
  highchartsRenderer.suboptions["table_options_transpose"],
5762
6158
  highchartsRenderer.suboptions["chart_grid"],
5763
6159
  highchartsRenderer.suboptions["negative_number_format"],
6160
+ highchartsRenderer.suboptions["delta_column_combo"],
6161
+ highchartsRenderer.suboptions["error_policy"],
6162
+ highchartsRenderer.suboptions["from_version"],
6163
+ highchartsRenderer.suboptions["legends"],
6164
+ ]
6165
+ }
6166
+ ]
6167
+ },
6168
+ {
6169
+ type: 'combo',
6170
+ name: 'Combo',
6171
+ class: 'combo-chart',
6172
+ subtypes: [{
6173
+ type: 'combo-column-chart',
6174
+ name: highchartsRenderer.chartsTypesInfo['combo-column-chart'].name,
6175
+ class: 'combo-column-chart',
6176
+ render: highchartsRenderer.ptRenderColumn,
6177
+ suboptions: [
6178
+ highchartsRenderer.suboptions["default_show"],
6179
+ highchartsRenderer.suboptions["axisY"],
6180
+ highchartsRenderer.suboptions["axisX"],
6181
+ highchartsRenderer.suboptions["tooltips"],
6182
+ highchartsRenderer.suboptions["label"],
6183
+ highchartsRenderer.suboptions["subtitle"],
6184
+ highchartsRenderer.suboptions["table_options"],
6185
+ highchartsRenderer.suboptions["chart"],
6186
+ highchartsRenderer.suboptions["negative_number_format"],
6187
+ highchartsRenderer.suboptions["delta_column_for_drill_down_combo"],
6188
+ highchartsRenderer.suboptions["error_policy"],
6189
+ highchartsRenderer.suboptions["from_version"],
6190
+ highchartsRenderer.suboptions["legends"],
6191
+ ],
6192
+ },
6193
+ {
6194
+ type: 'combo-stacked-chart',
6195
+ name: highchartsRenderer.chartsTypesInfo['combo-stacked-chart'].name,
6196
+ class: 'combo-stacked-chart',
6197
+ render: highchartsRenderer.ptRenderStackedColumn,
6198
+ suboptions: [
6199
+ highchartsRenderer.suboptions["default_show"],
6200
+ highchartsRenderer.suboptions["axisY"],
6201
+ highchartsRenderer.suboptions["axisX"],
6202
+ highchartsRenderer.suboptions["tooltips"],
6203
+ highchartsRenderer.suboptions["label_with_percentage"],
6204
+ highchartsRenderer.suboptions["subtitle"],
6205
+ highchartsRenderer.suboptions["table_options"],
6206
+ highchartsRenderer.suboptions["chart_grid"],
5764
6207
  highchartsRenderer.suboptions["delta_column"],
5765
6208
  highchartsRenderer.suboptions["error_policy"],
5766
6209
  highchartsRenderer.suboptions["from_version"],
@@ -6684,7 +7127,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6684
7127
  var datesFields = [];
6685
7128
  datesFields = lodash.filter(widget.rows, element => element.type == 'Date');
6686
7129
  datesFields = datesFields.concat(lodash.filter(widget.cols, element => element.type == 'Date'));
6687
-
7130
+
6688
7131
  const isCustomSorting = widget.options.sortingFields && Array.isArray(widget.options.sortingFields) && widget.options.sortingFields.length > 0;
6689
7132
  if (isCustomSorting) {
6690
7133
  lodash.forEach(datesFields, function (field) {
@@ -7047,7 +7490,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7047
7490
  itemMarginTop: 2,
7048
7491
  };
7049
7492
  const none = {
7050
- enabled: false,
7493
+ enabled: false,
7051
7494
  };
7052
7495
 
7053
7496
  if (additionOptions.legends_position && additionOptions.legends_position.value) {