Built files from Bizgaze WebServer
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

_chart.js 127KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106
  1. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  2. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  3. return new (P || (P = Promise))(function (resolve, reject) {
  4. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  5. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  6. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  7. step((generator = generator.apply(thisArg, _arguments || [])).next());
  8. });
  9. };
  10. var Unibase;
  11. (function (Unibase) {
  12. let Platform;
  13. (function (Platform) {
  14. let Analytics;
  15. (function (Analytics) {
  16. let Components;
  17. (function (Components) {
  18. class _Chart extends Platform.Core.BaseComponent {
  19. constructor() {
  20. super();
  21. this.IsChartBuilder = true;
  22. this.ChartAxis = { Horizontal: 'XAxis', Vertical: 'YAxis', GroupBy: 'GroupBy', LineChart: 'LineChart' };
  23. this.xaxisColumns = [];
  24. this.yaxisColumns = [];
  25. this.groupColumns = [];
  26. this.chartBaseColumns = [];
  27. this.yaxisColors = [];
  28. this.groupColors = [];
  29. this.XaxisData = [];
  30. this.YaxisData = [];
  31. this.XaxisStackData = [];
  32. this.stackedDataSet = [];
  33. this.groupedStackedDataSet = [];
  34. this.Dataset = [];
  35. this.DataSetColors = [];
  36. this.paletteColors = [];
  37. this.DatasetTooltips = [];
  38. this.colorAppliedOn = 1;
  39. this.ColumnColors = [];
  40. this.RowColors = [];
  41. this.IsColorPalette = false;
  42. this.defaultColor = false;
  43. this.barThikness = 40;
  44. this.appliedColumnColor = [];
  45. this.appliedColumnValueColor = [];
  46. this.Colors = [];
  47. this.toolTipArray = [];
  48. this.isColumnRename = false;
  49. this.ChartSelectedColumns = [];
  50. this.SelectedValueColorColumns = [];
  51. this.CoordinateDisplayText = "";
  52. this.displayLegend = false;
  53. this.isFilterable = [];
  54. this.chartContainerId = "";
  55. this.lineChartColumns = [];
  56. this.xAxisLables = [];
  57. this.isDataLabel = false;
  58. this.isTooltipHeader = true;
  59. this._reportManager = Analytics.Managers.ReportManager.Instance();
  60. this._reportBuilder = Analytics.Reports.ReportBuilder.Instance();
  61. }
  62. selected_Coordinate(obj) {
  63. return __awaiter(this, void 0, void 0, function* () {
  64. var instance = this;
  65. let Chart = [];
  66. let html = "";
  67. let XAxis = false, YAxis = false, GroupBy = false, LineChart = false, isBaseColumn = false;
  68. var isFill = instance.isFilterable[obj.ColumnName];
  69. if (obj.CoordinateTypeId == instance.ChartAxis.Horizontal) {
  70. Chart = instance.xaxisColumns;
  71. XAxis = true;
  72. if (instance._reportBuilder.isEdit == true || instance._reportBuilder.reportid == 0) {
  73. html = instance._reportBuilderTemplate.loadSelect2Column(obj.ColumnId, obj.ColumnName, obj.DataType);
  74. instance._reportBuilder.setSelectOption("xaxis_select");
  75. }
  76. }
  77. else if (obj.CoordinateTypeId == instance.ChartAxis.Vertical) {
  78. Chart = instance.yaxisColumns;
  79. YAxis = true;
  80. if (instance._reportBuilder.isEdit == true || instance._reportBuilder.reportid == 0) {
  81. html = instance._reportBuilderTemplate.loadSelect2Column(obj.ColumnId, obj.ColumnName, obj.DataType);
  82. instance._reportBuilder.setSelectOption("yaxis_select");
  83. }
  84. }
  85. else if (obj.CoordinateTypeId == instance.ChartAxis.LineChart) {
  86. Chart = instance.lineChartColumns;
  87. LineChart = true;
  88. if (instance._reportBuilder.isEdit == true || instance._reportBuilder.reportid == 0) {
  89. html = instance._reportBuilderTemplate.loadSelect2Column(obj.ColumnId, obj.ColumnName, obj.DataType);
  90. instance._reportBuilder.setSelectOption("line_chart_select");
  91. }
  92. }
  93. else if (obj.CoordinateTypeId == instance.ChartAxis.BaseColumn) {
  94. Chart = instance.chartBaseColumns;
  95. isBaseColumn = true;
  96. if (instance._reportBuilder.isEdit == true || instance._reportBuilder.reportid == 0) {
  97. html = instance._reportBuilderTemplate.loadSelect2Column(obj.ColumnId, obj.ColumnName, obj.DataType);
  98. instance._reportBuilder.setSelectOption("base_column_select");
  99. }
  100. }
  101. else {
  102. Chart = instance.groupColumns;
  103. GroupBy = true;
  104. if (instance._reportBuilder.isEdit == true || instance._reportBuilder.reportid == 0) {
  105. html = instance._reportBuilderTemplate.loadSelect2Column(obj.ColumnId, obj.ColumnName, obj.DataType);
  106. instance._reportBuilder.setSelectOption("groupby_select");
  107. }
  108. }
  109. Chart.push({
  110. ChartColumnId: 0,
  111. ColumnId: obj.ColumnId,
  112. ColumnName: obj.ColumnName,
  113. AliasName: obj.AliasName,
  114. DataType: obj.DataType,
  115. IsHidden: true,
  116. Aggregation: Analytics.Reports.Enums.AggregationType.none,
  117. SortOrder: "none",
  118. DisplayText: obj.DisplayText,
  119. XAxis: XAxis,
  120. YAxis: YAxis,
  121. GroupBy: GroupBy,
  122. IsLineChart: LineChart,
  123. IsFilterable: (isFill) ? isFill.IsFilterable : false,
  124. YearComparisonType: 0,
  125. ColorType: obj.ColorType,
  126. IsBaseColumn: isBaseColumn,
  127. IsNumAbb: obj.IsNumAbb !== undefined ? obj.IsNumAbb : true
  128. });
  129. if (obj.divId != undefined && obj.divId != "") {
  130. $("#" + obj.divId).append(html);
  131. }
  132. var len = instance._reportBuilder.selectedColumns.length;
  133. var reportid = instance._reportBuilder.reportid;
  134. if ((len > 0 && reportid != 0) || (reportid == 0)) {
  135. let Index = instance._reportBuilder.getIndexByAliasName_selectedColumnsArray(obj.DisplayText);
  136. if (Index == -1) {
  137. var selCol = new SelectedColumns();
  138. selCol.ColumnId = obj.ColumnId;
  139. selCol.ColumnName = obj.ColumnName;
  140. selCol.AliasName = obj.AliasName;
  141. selCol.DisplayText = obj.DisplayText;
  142. selCol.DataType = obj.DataType;
  143. selCol.GroupBy = GroupBy;
  144. selCol.IsLineChart = LineChart;
  145. selCol.Isvisible = true;
  146. instance._reportBuilder._selectedColumns(selCol);
  147. yield instance._reportBuilder.load_data(instance._reportBuilder.table);
  148. }
  149. else {
  150. yield instance.chart_dataSet();
  151. }
  152. }
  153. if (instance.IsChartBuilder == true) {
  154. instance._chartBuilder.coordinate_DropDown(obj.CoordinateTypeId);
  155. instance._chartBuilder.CoordinateDisplayText = "";
  156. }
  157. instance.enableOrDisableChartIcons();
  158. });
  159. }
  160. clearChart(id) {
  161. let containerid = id.replace("-chart-canvas", "");
  162. let html = document.getElementById(id).outerHTML;
  163. if (id == "myChart_FullScreen") {
  164. document.getElementById("ChartCanvasDiv_FullScreen").innerHTML = ' ';
  165. document.getElementById("ChartCanvasDiv_FullScreen").innerHTML = html;
  166. }
  167. else if (id == "myChart") {
  168. document.getElementById("ChartCanvasDiv").innerHTML = ' ';
  169. document.getElementById("ChartCanvasDiv").innerHTML = html;
  170. $("#legend").empty();
  171. }
  172. else {
  173. document.getElementById("ChartCanvasDiv" + containerid).innerHTML = ' ';
  174. document.getElementById("ChartCanvasDiv" + containerid).innerHTML = html;
  175. }
  176. }
  177. groupedPivotRows(data, pivotRows) {
  178. var instance = this;
  179. let grouped = [];
  180. let pivotCol = instance._reportBuilder.pivot.ColumnName;
  181. var colId = instance.groupColumns[0].ColumnId;
  182. instance.addGroupColors(data, pivotCol, instance.ChartAxis.GroupBy);
  183. pivotRows.map(function (i) {
  184. let grpobj = grouped.find(x => x.Field == i) ? true : false;
  185. if (grpobj != true) {
  186. var grpcolor = instance.groupColors[pivotCol];
  187. grouped.push({
  188. Field: i,
  189. Color: grpcolor ? grpcolor.c : null
  190. });
  191. }
  192. });
  193. return { groupeddata: grouped, pivotdata: data };
  194. }
  195. PivotData_Old() {
  196. var instance = this;
  197. let data = instance.ChartData;
  198. let xaxiscols = instance.xaxisColumns[0];
  199. let grpcols = instance.groupColumns[0];
  200. instance.addGroupColors(data, grpcols.DisplayText, instance.ChartAxis.GroupBy);
  201. var colvalwithcolors = "";
  202. let pivotdata = [], grouped = [], stackedDataSetLabels = [];
  203. instance.XaxisStackData = [];
  204. instance.Colors = [];
  205. let index = 0;
  206. for (var i = 0; i < data.length; i++) {
  207. let dataitem = data[i];
  208. let grpobj = grouped.find(x => x.Field == dataitem[grpcols.DisplayText]) ? true : false;
  209. if (grpobj != true) {
  210. var grpcolor = instance.groupColors[dataitem[grpcols.DisplayText]];
  211. grouped.push({
  212. Field: dataitem[grpcols.DisplayText],
  213. Color: grpcolor ? grpcolor.c : null
  214. });
  215. index++;
  216. }
  217. for (let k = 0; k < instance.yaxisColumns.length; k++) {
  218. var yaxiscols = instance.yaxisColumns[k];
  219. let dataobj = pivotdata.find(x => x[xaxiscols.DisplayText] == dataitem[xaxiscols.DisplayText] && x.stack == "stack" + k);
  220. ;
  221. if (dataobj == null || dataobj == undefined) {
  222. let obj = {};
  223. obj[xaxiscols.DisplayText] = dataitem[xaxiscols.DisplayText];
  224. obj[dataitem[grpcols.DisplayText]] = dataitem[yaxiscols.DisplayText];
  225. obj["stack"] = "stack" + k;
  226. pivotdata.push(obj);
  227. instance.XaxisStackData.push(dataitem[xaxiscols.DisplayText]);
  228. }
  229. else {
  230. dataobj[dataitem[grpcols.DisplayText]] = dataitem[yaxiscols.DisplayText];
  231. }
  232. }
  233. }
  234. if (instance.defaultColor || instance.IsColorPalette)
  235. instance.Colors[grpcols.DisplayText] = { colors: colvalwithcolors, columnName: grpcols.DisplayText };
  236. return { groupeddata: grouped, pivotdata: pivotdata };
  237. }
  238. PivotData() {
  239. var instance = this;
  240. let data = instance.ChartData;
  241. let xaxiscols = instance.xaxisColumns[0];
  242. let grpcols = instance.groupColumns[0];
  243. instance.addGroupColors(data, grpcols.DisplayText, instance.ChartAxis.GroupBy);
  244. var colvalwithcolors = "";
  245. let pivotdata = [], grouped = [], stackedDataSetLabels = [];
  246. instance.XaxisStackData = [];
  247. instance.Colors = [];
  248. let index = 0;
  249. var groupedStackedData = [];
  250. for (let k = 0; k < instance.yaxisColumns.length; k++) {
  251. var yaxiscols = instance.yaxisColumns[k];
  252. for (var i = 0; i < data.length; i++) {
  253. let dataitem = data[i];
  254. let grpobj = grouped.find(x => x.Field == dataitem[grpcols.DisplayText]) ? true : false;
  255. if (grpobj != true) {
  256. var grpcolor = instance.groupColors[dataitem[grpcols.DisplayText]];
  257. grouped.push({
  258. Field: dataitem[grpcols.DisplayText],
  259. Color: grpcolor ? grpcolor.c : null
  260. });
  261. index++;
  262. }
  263. let dataobj = pivotdata.find(x => x[xaxiscols.DisplayText] == dataitem[xaxiscols.DisplayText]);
  264. if (dataobj == null || dataobj == undefined) {
  265. let obj = {};
  266. obj[xaxiscols.DisplayText] = dataitem[xaxiscols.DisplayText];
  267. obj[dataitem[grpcols.DisplayText]] = dataitem[yaxiscols.DisplayText];
  268. pivotdata.push(obj);
  269. instance.XaxisStackData.push(dataitem[xaxiscols.DisplayText]);
  270. }
  271. else {
  272. dataobj[dataitem[grpcols.DisplayText]] = dataitem[yaxiscols.DisplayText];
  273. }
  274. }
  275. groupedStackedData[yaxiscols.DisplayText] = { Data: pivotdata, Stack: "stack" + k };
  276. groupedStackedData.length = groupedStackedData.length + 1;
  277. pivotdata = [];
  278. }
  279. if (instance.defaultColor || instance.IsColorPalette)
  280. instance.Colors[grpcols.DisplayText] = { colors: colvalwithcolors, columnName: grpcols.DisplayText };
  281. return { groupeddata: grouped, pivotdata: pivotdata, groupedStackedData: groupedStackedData };
  282. }
  283. groupedStackDataSet() {
  284. var instance = this;
  285. var data = instance.PivotData();
  286. let grpdata = [], DataSet = [];
  287. for (var y = 0; y < instance.yaxisColumns.length; y++) {
  288. var pivotdata = data.groupedStackedData[instance.yaxisColumns[y].AliasName];
  289. for (var g = 0; g < data.groupeddata.length; g++) {
  290. pivotdata.Data.map(function (p) {
  291. if (p[data.groupeddata[g].Field])
  292. grpdata.push(p[data.groupeddata[g].Field]);
  293. else
  294. grpdata.push(0);
  295. });
  296. var color = "";
  297. if (instance.paletteColors.length > 0) {
  298. color = instance.paletteColors[g];
  299. }
  300. else {
  301. color = instance.getRandomColor();
  302. }
  303. DataSet.push({
  304. label: data.groupeddata[g].Field,
  305. data: grpdata,
  306. backgroundColor: color,
  307. stack: pivotdata.Stack,
  308. });
  309. grpdata = [];
  310. instance.PivotDataSet = DataSet;
  311. }
  312. }
  313. function removeDuplicates(arr) {
  314. return arr.filter((item, index) => arr.indexOf(item) === index);
  315. }
  316. instance.XaxisStackData = removeDuplicates(instance.XaxisStackData);
  317. }
  318. groupedStackDataSet_Old() {
  319. var instance = this;
  320. var data = instance.PivotData();
  321. let grpdata = [], DataSet = [];
  322. for (var i = 0; i < data.groupeddata.length; i++) {
  323. let stack = "";
  324. data.pivotdata.map(function (p) {
  325. if (p[data.groupeddata[i].Field])
  326. grpdata.push(p[data.groupeddata[i].Field]);
  327. else
  328. grpdata.push(0);
  329. stack = p.stack;
  330. });
  331. DataSet.push({
  332. label: data.groupeddata[i].Field,
  333. data: grpdata,
  334. backgroundColor: data.groupeddata[i].Color,
  335. stack: stack,
  336. });
  337. grpdata = [];
  338. }
  339. DataSet.push();
  340. instance.PivotDataSet = DataSet;
  341. }
  342. groupedStackDataSet_New() {
  343. var instance = this;
  344. instance.XaxisData = [];
  345. instance.groupedStackedDataSet = [];
  346. let data = instance.ChartData;
  347. let xaxiscols = instance.xaxisColumns[0];
  348. let grpcols = instance.groupColumns[0];
  349. for (var i = 0; i < data.length; i++) {
  350. var dataItem = data[i];
  351. var XData = dataItem[xaxiscols.DisplayText];
  352. instance.XaxisData.push(XData);
  353. for (var y = 0; y < instance.yaxisColumns.length; y++) {
  354. var yCol = instance.yaxisColumns[y];
  355. var gData = [];
  356. for (var g = 0; g < instance.ChartData.length; g++) {
  357. var gVal = instance.ChartData[g][grpcols.DisplayText];
  358. if (gVal == dataItem[grpcols.DisplayText])
  359. gData.push(dataItem[yCol.DisplayText]);
  360. else
  361. gData.push(0);
  362. }
  363. var color = "";
  364. if (instance.paletteColors.length > 0) {
  365. color = instance.paletteColors[i];
  366. }
  367. else {
  368. color = instance.getRandomColor();
  369. }
  370. var dataSet = {
  371. label: dataItem[grpcols.DisplayText],
  372. type: "bar",
  373. stack: "stack " + y,
  374. backgroundColor: color,
  375. data: gData,
  376. };
  377. instance.groupedStackedDataSet.push(dataSet);
  378. }
  379. }
  380. function removeDuplicates(arr) {
  381. return arr.filter((item, index) => arr.indexOf(item) === index);
  382. }
  383. instance.XaxisStackData = removeDuplicates(instance.XaxisStackData);
  384. }
  385. stackedBar() {
  386. var instance = this;
  387. instance.stackedDataSet = [];
  388. let xaxiscols = instance.xaxisColumns[0];
  389. let data = instance.ChartData;
  390. for (var i = 0; i < data.length; i++) {
  391. let dataitem = data[i];
  392. var color = "";
  393. if (instance.paletteColors.length > 0) {
  394. color = instance.paletteColors[i];
  395. }
  396. else {
  397. color = instance.getRandomColor();
  398. }
  399. for (let y = 0; y < instance.yaxisColumns.length; y++) {
  400. var yaxiscols = instance.yaxisColumns[y];
  401. var ydata = [];
  402. for (var x = 0; x < instance.XaxisData.length; x++) {
  403. if (instance.XaxisData[x] == dataitem[xaxiscols.DisplayText])
  404. ydata.push(dataitem[yaxiscols.DisplayText]);
  405. else
  406. ydata.push(0);
  407. }
  408. var obj = {
  409. label: dataitem[xaxiscols.DisplayText],
  410. type: "bar",
  411. stack: "stack " + y,
  412. backgroundColor: color,
  413. data: ydata,
  414. };
  415. instance.stackedDataSet.push(obj);
  416. }
  417. }
  418. }
  419. test(id) {
  420. let canvas = document.getElementById(id);
  421. let ctx = canvas.getContext("2d");
  422. var chart = new Chart(ctx, {
  423. type: 'bar',
  424. data: {
  425. labels: [2017, 2018, 2019, 2020, 2021, 2022, 2023],
  426. datasets: [{
  427. label: "Income - Base",
  428. type: "bar",
  429. stack: "stack 0",
  430. backgroundColor: "#eece01",
  431. data: [30, 31, 32, 33, 34, 35, 36],
  432. }, {
  433. label: "Tax - Base",
  434. type: "bar",
  435. stack: "stack 0",
  436. backgroundColor: "#87d84d",
  437. data: [-15, -16, -17, -18, -19, -20, -21],
  438. }, {
  439. label: "Income - Base",
  440. type: "bar",
  441. stack: "stack 1",
  442. backgroundColor: "#f8981f",
  443. data: [20, 21, 22, 23, 24, 25, 26],
  444. }, {
  445. label: "Tax - Sensitivity",
  446. type: "bar",
  447. stack: "stack 1",
  448. backgroundColor: "#00b300",
  449. data: [-10, -11, -12, -13, -14, -15, -16]
  450. }]
  451. },
  452. options: {
  453. scales: {
  454. xAxes: [{
  455. stacked: true,
  456. ticks: {
  457. beginAtZero: true,
  458. maxRotation: 0,
  459. minRotation: 0
  460. }
  461. }],
  462. yAxes: [{
  463. stacked: true,
  464. }]
  465. },
  466. }
  467. });
  468. }
  469. pivotDataSet() {
  470. var instance = this;
  471. let colors = "";
  472. var chartdata;
  473. var data;
  474. let pivotRows;
  475. instance.XaxisStackData = [];
  476. if (instance.IsChartBuilder) {
  477. chartdata = JSON.parse(instance._reportBuilder.tableData);
  478. }
  479. else {
  480. chartdata = instance.ChartData;
  481. }
  482. if (instance._reportBuilder.pivot.PivotRows.length != 0) {
  483. pivotRows = instance._reportBuilder.pivot.PivotRows;
  484. }
  485. data = instance.groupedPivotRows(chartdata, pivotRows);
  486. for (var i = 0; i < chartdata.length; i++) {
  487. let dataitem = chartdata[i];
  488. let xaxiscols = instance.xaxisColumns[0];
  489. instance.XaxisStackData.push(dataitem[xaxiscols.DisplayText]);
  490. }
  491. let grpdata = [], DataSet = [];
  492. for (var i = 0; i < data.groupeddata.length; i++) {
  493. data.pivotdata.map(function (p) {
  494. if (p[data.groupeddata[i].Field])
  495. grpdata.push(p[data.groupeddata[i].Field]);
  496. else
  497. grpdata.push(0);
  498. });
  499. DataSet.push({
  500. label: data.groupeddata[i].Field,
  501. data: grpdata,
  502. backgroundColor: data.groupeddata[i].Color
  503. });
  504. grpdata = [];
  505. }
  506. DataSet.push();
  507. instance.PivotDataSet = DataSet;
  508. instance.ValueColors = colors;
  509. }
  510. toolTip() {
  511. var instance = this;
  512. instance.DatasetTooltips = [];
  513. if (instance.toolTipArray.length > 0) {
  514. instance.toolTipArray.sort((x, y) => Number(x.Index) - Number(y.Index));
  515. for (var i = 0; i < instance.toolTipArray.length; i++) {
  516. var tooltiparr = instance.toolTipArray[i];
  517. let Labelarr = [];
  518. instance.ChartData.map(function (v) {
  519. Labelarr.push(v[tooltiparr.ColumnName]);
  520. });
  521. instance.DatasetTooltips.push({ ColumnName: tooltiparr.AliasName, DisplayText: tooltiparr.DisplayText, labels: Labelarr });
  522. }
  523. }
  524. }
  525. toolTipDataItem(tooltipItem, data) {
  526. var instance = this;
  527. let chartType = Unibase.Platform.Analytics.Charts.Enums.ChartType;
  528. if (instance.ChartTypeId == chartType.doughnut || instance.ChartTypeId == chartType.pie) {
  529. if (instance.DatasetTooltips.length != 0) {
  530. let labels = [];
  531. for (var i = 0; i < instance.DatasetTooltips.length; i++) {
  532. var label;
  533. label = instance.DatasetTooltips[i].DisplayText || '';
  534. if (label) {
  535. label += ': ';
  536. }
  537. label += instance.DatasetTooltips[i].labels[tooltipItem.dataIndex];
  538. labels.push(this.convertLabelToPascalCase(label).toString());
  539. }
  540. return labels;
  541. }
  542. else {
  543. let labels;
  544. labels = tooltipItem.dataset && tooltipItem.dataset.label && this.convertLabelToPascalCase(tooltipItem.dataset.label.toString().trim()) || '';
  545. if (labels) {
  546. labels += ': ';
  547. }
  548. labels += data[tooltipItem.dataIndex];
  549. return labels;
  550. }
  551. }
  552. else {
  553. if (instance.DatasetTooltips.length != 0) {
  554. let labels = [];
  555. for (var i = 0; i < instance.DatasetTooltips.length; i++) {
  556. var label;
  557. label = instance.DatasetTooltips[i].DisplayText || '';
  558. if (label) {
  559. label += ': ';
  560. }
  561. if (instance.ChartTypeId == chartType.bubble)
  562. label += instance.DatasetTooltips[i].labels[tooltipItem.dataIndex - 1];
  563. else
  564. label += instance.DatasetTooltips[i].labels[tooltipItem.dataIndex];
  565. labels.push(this.convertLabelToPascalCase(label.toString()));
  566. }
  567. return labels;
  568. }
  569. else {
  570. let labels;
  571. labels = tooltipItem.dataset && tooltipItem.dataset.label && tooltipItem.dataset.label.toString().trim() || '';
  572. if (labels) {
  573. labels += ': ';
  574. }
  575. labels = this.convertLabelToPascalCase(labels.toString());
  576. labels += (instance.ChartTypeId == chartType.horizontalBar || instance.ChartTypeId == chartType.stackedHorizontalBar || instance.ChartTypeId == chartType.groupedstackedHorizontalBar) ? tooltipItem.parsed.x : tooltipItem.parsed.y;
  577. return labels;
  578. }
  579. }
  580. }
  581. addColumnColors() {
  582. var instance = this;
  583. let html = "";
  584. let HasColors = 1;
  585. if (instance.appliedColumnColor.length == 0) {
  586. HasColors = 0;
  587. }
  588. $("#lstDatalists").empty();
  589. var columns = [];
  590. instance.appliedColumnColor = [];
  591. instance.ChartSelectedColumns = [];
  592. let ChartColorPickerColumns;
  593. instance.ChartSelectedColumns = instance._chartBuilder.coordinate_Elements(true, true, true, true, true, true);
  594. if (instance.groupColumns.length != 0)
  595. ChartColorPickerColumns = instance._chartBuilder.coordinate_Elements(false, false, true, false, false, false);
  596. else
  597. ChartColorPickerColumns = instance._chartBuilder.coordinate_Elements(true, false, false, false, false, false);
  598. for (var i = 0; i < ChartColorPickerColumns.length; i++) {
  599. let ColumnId = ChartColorPickerColumns[i].ColumnId;
  600. let ColumnName = ChartColorPickerColumns[i].ColumnName;
  601. let DisplayText = ChartColorPickerColumns[i].DisplayText;
  602. if (jQuery.inArray(DisplayText, columns) == -1) {
  603. if (!instance.IsColorPalette) {
  604. let randomcolor = instance.getRandomColor();
  605. instance.appliedColumnColor[DisplayText] = { "ColumnId": ColumnId, "ColumnName": ColumnName, "DisplayText": DisplayText, "Color": randomcolor };
  606. var Color_len = instance.appliedColumnColor.length;
  607. instance.appliedColumnColor.length = Color_len + 1;
  608. }
  609. else {
  610. instance.appliedColumnColor[DisplayText] = { "ColumnId": ColumnId, "ColumnName": ColumnName, "DisplayText": DisplayText, "Color": instance.ColumnColors[0] };
  611. var Color_len = instance.appliedColumnColor.length;
  612. instance.appliedColumnColor.length = Color_len + 1;
  613. }
  614. columns.push(DisplayText);
  615. }
  616. }
  617. }
  618. addColumnColors_new(tabledata) {
  619. var instance = this;
  620. instance.appliedColumnColor = [];
  621. instance.ChartSelectedColumns = [];
  622. instance.ChartSelectedColumns = instance._chartBuilder.coordinate_Elements(true, true, true, true, true, true);
  623. for (var i = 0; i < tabledata.length; i++) {
  624. var xaxiscol = instance.xaxisColumns[0];
  625. let ColumnId = xaxiscol.ColumnId;
  626. let ColumnName = xaxiscol.ColumnName;
  627. let DisplayText = xaxiscol.DisplayText;
  628. let xcolumnValueColor = tabledata[i][DisplayText];
  629. var isValExist = instance.appliedColumnColor[xcolumnValueColor + '_' + i];
  630. if (isValExist == undefined) {
  631. if (!instance.IsColorPalette) {
  632. let randomcolor = instance.getRandomColor();
  633. instance.appliedColumnColor[xcolumnValueColor + '_' + i] = { "ColumnId": ColumnId, "ColumnName": ColumnName, "DisplayText": DisplayText, "Value": xcolumnValueColor, "Color": randomcolor };
  634. var Color_len = instance.appliedColumnColor.length;
  635. instance.appliedColumnColor.length = Color_len + 1;
  636. }
  637. else {
  638. instance.appliedColumnColor[xcolumnValueColor + '_' + i] = { "ColumnId": ColumnId, "ColumnName": ColumnName, "DisplayText": DisplayText, "Value": xcolumnValueColor, "Color": instance.ColumnColors[0] };
  639. var Color_len = instance.appliedColumnColor.length;
  640. instance.appliedColumnColor.length = Color_len + 1;
  641. }
  642. }
  643. }
  644. }
  645. addValueColors(ColumnId, DisplayText, data) {
  646. var instance = this;
  647. let Color = "";
  648. let tabledata = "";
  649. let IsPivot = false;
  650. instance.ChartSelectedColumns = [];
  651. instance.appliedColumnValueColor = [];
  652. tabledata = data;
  653. if ((Unibase.Platform.Analytics.Reports.ReportBuilder.Instance().pivot.PivotRows)) {
  654. if (instance._reportBuilder.pivot.PivotRows.length != 0) {
  655. tabledata = instance._reportBuilder.pivot.PivotRows;
  656. IsPivot = true;
  657. }
  658. }
  659. var columnValues = [];
  660. for (var i = 0; i < tabledata.length; i++) {
  661. let Value = (IsPivot) ? tabledata[i] : tabledata[i][DisplayText];
  662. if (Value != null) {
  663. Value = Value.toString();
  664. }
  665. else {
  666. Value = "";
  667. }
  668. let OrgValue = Value;
  669. if (jQuery.inArray(OrgValue, columnValues) == -1) {
  670. if (!instance.IsColorPalette) {
  671. Color = instance.getRandomColor();
  672. instance.appliedColumnValueColor[DisplayText + '_' + OrgValue] = { "ColumnId": ColumnId, "DisplayText": DisplayText, "ColumnValue": OrgValue, "Color": Color };
  673. var Values_len = instance.appliedColumnValueColor.length;
  674. instance.appliedColumnValueColor.length = Values_len + 1;
  675. }
  676. else {
  677. instance.appliedColumnValueColor[DisplayText + '_' + OrgValue] = { "ColumnId": ColumnId, "DisplayText": DisplayText, "ColumnValue": OrgValue, "Color": instance.RowColors[i] };
  678. var Values_len = instance.appliedColumnValueColor.length;
  679. instance.appliedColumnValueColor.length = Values_len + 1;
  680. }
  681. columnValues.push(OrgValue);
  682. }
  683. }
  684. }
  685. addValueColors_new(data, displaytext, chartAxis) {
  686. var instance = this;
  687. let tabledata = "";
  688. let IsPivot = false;
  689. instance.ChartSelectedColumns = [];
  690. instance.appliedColumnValueColor = [];
  691. instance.ChartSelectedColumns = instance._chartBuilder.coordinate_Elements(true, true, true, true, true, true);
  692. tabledata = data;
  693. if ((Unibase.Platform.Analytics.Reports.ReportBuilder.Instance().pivot.PivotRows)) {
  694. if (instance._reportBuilder.pivot.PivotRows.length != 0) {
  695. tabledata = instance._reportBuilder.pivot.PivotRows;
  696. IsPivot = true;
  697. }
  698. }
  699. instance.valueColors_new(tabledata, displaytext, instance.yaxisColumns, chartAxis);
  700. }
  701. valueColors(tabledata, displaytext, ycolumns, chartAxis) {
  702. var instance = this;
  703. let Color = "";
  704. var groupvalues = [];
  705. let color_index = 0;
  706. for (var y = 0; y < ycolumns.length; y++) {
  707. var yaxiscol = ycolumns[y];
  708. let index = 0;
  709. for (var i = 0; i < tabledata.length; i++) {
  710. if (chartAxis == instance.ChartAxis.GroupBy) {
  711. var grpVal = groupvalues.find(g => g == tabledata[i][displaytext]) ? true : false;
  712. if (grpVal) {
  713. continue;
  714. }
  715. groupvalues.push(tabledata[i][displaytext]);
  716. }
  717. var xyaxiscolvals = index;
  718. if (!instance.IsColorPalette) {
  719. Color = instance.getRandomColor();
  720. instance.appliedColumnValueColor[xyaxiscolvals] = { "DisplayText": displaytext, "Value": xyaxiscolvals, "Color": Color };
  721. var Values_len = instance.appliedColumnValueColor.length;
  722. instance.appliedColumnValueColor.length = Values_len + 1;
  723. }
  724. else {
  725. instance.appliedColumnValueColor[xyaxiscolvals] = { "DisplayText": displaytext, "Value": xyaxiscolvals, "Color": instance.RowColors[color_index] };
  726. var Values_len = instance.appliedColumnValueColor.length;
  727. instance.appliedColumnValueColor.length = Values_len + 1;
  728. color_index++;
  729. }
  730. index++;
  731. }
  732. }
  733. }
  734. valueColors_new(tabledata, displaytext, ycolumns, chartAxis) {
  735. var instance = this;
  736. instance.yaxisColors = [];
  737. var groupvalues = [], valueColors = [];
  738. let color_index = 0;
  739. let color = "", colorwithpipe = "";
  740. for (var y = 0; y < ycolumns.length; y++) {
  741. var yaxiscol = ycolumns[y];
  742. let index = 0;
  743. colorwithpipe = "";
  744. for (var i = 0; i < tabledata.length; i++) {
  745. if (chartAxis == instance.ChartAxis.GroupBy) {
  746. var grpVal = groupvalues.find(g => g == tabledata[i][displaytext]) ? true : false;
  747. if (grpVal) {
  748. continue;
  749. }
  750. groupvalues.push(tabledata[i][displaytext]);
  751. }
  752. if (!instance.IsColorPalette) {
  753. color = instance.getRandomColor();
  754. valueColors.push(color);
  755. }
  756. else {
  757. color = instance.RowColors[color_index];
  758. valueColors.push(color);
  759. color_index++;
  760. }
  761. colorwithpipe += "" + color + "|";
  762. index++;
  763. }
  764. let yindex = true;
  765. if (instance.yaxisColors.length > 0)
  766. yindex = instance.yaxisColors.find(y => y.columnName != yaxiscol.ColumnName) ? true : false;
  767. if (yindex) {
  768. instance.yaxisColors.push({ columnName: yaxiscol.DisplayText, colors: valueColors, colorwithpipesymb: colorwithpipe });
  769. valueColors = [];
  770. }
  771. }
  772. }
  773. getRandomColor() {
  774. let randomcolor = '#' + Math.floor(Math.random() * 16777215).toString(16);
  775. if (randomcolor == '#000000') {
  776. randomcolor = '#' + Math.floor(Math.random() * 16777215).toString(16);
  777. }
  778. if (randomcolor.length == 6) {
  779. randomcolor = randomcolor.replace("#", "#0");
  780. }
  781. return randomcolor;
  782. }
  783. chartViewer_Colors(color, columnId, columnName) {
  784. var instance = this;
  785. if (color != "") {
  786. var Val = color.split("|");
  787. for (var i = 0; i < Val.length; i++) {
  788. instance.DataSetColors.push(Val[i]);
  789. instance.appliedColumnValueColor[i] = { "Value": i, "Color": Val[i] };
  790. var Values_len = instance.appliedColumnValueColor.length;
  791. instance.appliedColumnValueColor.length = Values_len + 1;
  792. }
  793. }
  794. }
  795. _dataSetColors_old(xdisplayText, displaytext, colorType) {
  796. var instance = this;
  797. var data = instance.ChartData;
  798. var colvalwithcolors = "";
  799. instance.DataSetColors = [];
  800. for (var i = 0; i < data.length; i++) {
  801. var dataValue = data[i];
  802. var ColumnColors = instance.appliedColumnValueColor[i];
  803. if (ColumnColors) {
  804. instance.DataSetColors.push(ColumnColors.Color);
  805. colvalwithcolors += "" + ColumnColors.Color + "|";
  806. }
  807. }
  808. instance.Colors[displaytext] = { colors: colvalwithcolors, columnName: displaytext };
  809. }
  810. addyAxisColors(tabledata, ycolumns, chartAxis) {
  811. var instance = this;
  812. instance.yaxisColors = [];
  813. var groupvalues = [];
  814. let color_index = 0, paletteindex = 0;
  815. var color = "";
  816. var colcolors = [], rowcolors = [];
  817. for (var y = 0; y < ycolumns.length; y++) {
  818. var yaxiscol = ycolumns[y];
  819. colcolors = [];
  820. rowcolors = [];
  821. if (instance.colorAppliedOn == Unibase.Platform.Analytics.Enums.ColorType.column) {
  822. if (instance.paletteColors.length > 0) {
  823. color = instance.paletteColors[y];
  824. }
  825. else {
  826. color = instance.getRandomColor();
  827. }
  828. colcolors.push(color);
  829. instance.yaxisColors.push({ columnName: yaxiscol.AliasName, colors: colcolors });
  830. }
  831. else {
  832. for (var i = 0; i < tabledata.length; i++) {
  833. if (instance.paletteColors.length > 0) {
  834. color = instance.paletteColors[paletteindex];
  835. paletteindex++;
  836. }
  837. else {
  838. color = instance.getRandomColor();
  839. }
  840. rowcolors.push(color);
  841. }
  842. instance.yaxisColors.push({ columnName: yaxiscol.AliasName, colors: rowcolors });
  843. }
  844. }
  845. }
  846. addGroupColors(tabledata, displaytext, chartAxis) {
  847. var instance = this;
  848. instance.groupColors = [];
  849. var color = "";
  850. if (chartAxis == instance.ChartAxis.GroupBy) {
  851. for (var i = 0; i < tabledata.length; i++) {
  852. var grpVal = instance.groupColors.find(g => g == tabledata[i][displaytext]) ? true : false;
  853. if (grpVal) {
  854. continue;
  855. }
  856. if (instance.paletteColors.length > 0) {
  857. color = instance.paletteColors[i];
  858. }
  859. else {
  860. color = instance.getRandomColor();
  861. }
  862. instance.groupColors[tabledata[i][displaytext]] = { c: color };
  863. }
  864. }
  865. }
  866. _dataSetColors(displaytext) {
  867. var instance = this;
  868. instance.DataSetColors = [];
  869. var ycol = instance.yaxisColors.find(y => y.columnName.toLowerCase() == displaytext);
  870. if (ycol) {
  871. instance.DataSetColors = ycol.colors;
  872. }
  873. }
  874. chart_dataSet() {
  875. return __awaiter(this, void 0, void 0, function* () {
  876. var instance = this;
  877. !this._chartBuilder && (this._chartBuilder = Analytics.Charts.ChartBuilder.Instance());
  878. var chartType = Unibase.Platform.Analytics.Charts.Enums.ChartType;
  879. if (instance.ChartTypeId != chartType.stackedBar && instance.ChartTypeId != chartType.stackedHorizontalBar) {
  880. instance.XaxisData = [], instance.XaxisStackData = [], instance.Dataset = [];
  881. instance.DataSetColors = [];
  882. var xaxisCols = instance.xaxisColumns;
  883. var yaxisCols = instance.yaxisColumns;
  884. if (yaxisCols.length > 0)
  885. instance.addyAxisColors(instance.ChartData, yaxisCols, instance.ChartAxis.Vertical);
  886. for (var x = 0; x < xaxisCols.length; x++) {
  887. var xColumn = xaxisCols[x];
  888. let AliasName = xColumn.DisplayText.toLowerCase();
  889. let ColumnName = xColumn.ColumnName.toLowerCase();
  890. let xColumnId = xColumn.ColumnId;
  891. if (instance.ChartData) {
  892. for (var i = 0; i < instance.ChartData.length; i++) {
  893. var XData = instance.ChartData[i][AliasName];
  894. XData = this.convertLabelToPascalCase((XData && XData.toString()) || "");
  895. instance.XaxisData.push(XData);
  896. }
  897. }
  898. }
  899. if (instance.groupColumns.length == 0 || instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.bubble) {
  900. for (var y = 0; y < yaxisCols.length; y++) {
  901. var yColumns = yaxisCols[y];
  902. let displayName = this.getReportColumnDisplayTextByAliasName(yColumns.AliasName);
  903. let AliasName = yColumns.AliasName.toLowerCase();
  904. instance._dataSetColors(AliasName);
  905. if (instance.ChartData) {
  906. for (var j = 0; j < instance.ChartData.length; j++) {
  907. var YData = instance.ChartData[j][AliasName];
  908. instance.YaxisData.push(YData);
  909. }
  910. }
  911. var Data = [];
  912. let chartType = Unibase.Platform.Analytics.Charts.Enums.ChartType;
  913. if (instance.ChartTypeId == chartType.bubble) {
  914. Data = instance.bubbleData();
  915. }
  916. else {
  917. Data = instance.YaxisData;
  918. }
  919. var color = instance.getDataSetColors();
  920. var ydata = {
  921. label: this.convertLabelToPascalCase(displayName || ""),
  922. data: Data,
  923. borderColor: color.boarderColor,
  924. backgroundColor: color.backgroundColor,
  925. borderWidth: 1,
  926. fill: instance.IsFill,
  927. };
  928. if (instance.ChartTypeId == chartType.barWithLine)
  929. ydata["type"] = "bar";
  930. if (instance.chartBaseColumns && instance.chartBaseColumns.length && instance.chartBaseColumns[0].AliasName) {
  931. ydata["base"] = instance.ChartData.map(x => x[instance.chartBaseColumns[0].AliasName])[0];
  932. this.chartBaseValue = ydata["base"];
  933. }
  934. else {
  935. this.chartBaseValue = 0;
  936. }
  937. instance.Dataset.push(ydata);
  938. instance.YaxisData = [];
  939. }
  940. }
  941. }
  942. let id = instance.ChartDivId ? instance.ChartDivId : 'myChart';
  943. instance.chartType(id);
  944. });
  945. }
  946. getDataSetColors() {
  947. var instance = this;
  948. var chartType = Unibase.Platform.Analytics.Charts.Enums.ChartType;
  949. let backgroundColor = [];
  950. if (instance.colorAppliedOn == Unibase.Platform.Analytics.Enums.ColorType.column)
  951. backgroundColor = instance.DataSetColors[0];
  952. else
  953. backgroundColor = instance.DataSetColors;
  954. if (instance.ChartTypeId == chartType.area) {
  955. instance.IsFill = true;
  956. backgroundColor = instance.DataSetColors;
  957. }
  958. else {
  959. instance.IsFill = false;
  960. }
  961. let boarderColor = 'white';
  962. if (instance.ChartTypeId == chartType.line || instance.ChartTypeId == chartType.barWithLine)
  963. boarderColor = backgroundColor;
  964. return { boarderColor: boarderColor, backgroundColor: backgroundColor };
  965. }
  966. pivotTable() {
  967. return __awaiter(this, void 0, void 0, function* () {
  968. var instance = this;
  969. if (instance._reportBuilder.reportid == 0) {
  970. yield instance._reportBuilder.load_data(instance._reportBuilder.table);
  971. }
  972. });
  973. }
  974. chartType(id) {
  975. var instance = this;
  976. let displayMode;
  977. var width = $(window).width();
  978. if (width <= 576) {
  979. displayMode = Analytics.Reports.Enums.DisplayModeType.Mobile;
  980. }
  981. else {
  982. displayMode = Analytics.Reports.Enums.DisplayModeType.DeskTop;
  983. }
  984. if (instance.xaxisColumns.length > 1) {
  985. if (displayMode == Analytics.Reports.Enums.DisplayModeType.DeskTop)
  986. instance.barThikness = 30;
  987. else
  988. instance.barThikness = 5;
  989. }
  990. else {
  991. if (displayMode == Analytics.Reports.Enums.DisplayModeType.DeskTop)
  992. instance.barThikness = 40;
  993. else
  994. instance.barThikness = 30;
  995. }
  996. if (instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.bar) {
  997. instance.ChartTypeName = 'bar';
  998. return instance.chart(id);
  999. }
  1000. else if (instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.horizontalBar) {
  1001. instance.ChartTypeName = 'horizontalBar';
  1002. return instance.chart(id);
  1003. }
  1004. else if (instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.area) {
  1005. instance.ChartTypeName = 'line';
  1006. return instance.chart(id);
  1007. }
  1008. else if (instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.doughnut) {
  1009. instance.ChartTypeName = 'doughnut';
  1010. return instance.pieanddoughnutchart(id);
  1011. }
  1012. else if (instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.line) {
  1013. instance.ChartTypeName = 'line';
  1014. return instance.chart(id);
  1015. }
  1016. else if (instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.pie) {
  1017. instance.ChartTypeName = 'pie';
  1018. return instance.pieanddoughnutchart(id);
  1019. }
  1020. else if (instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.stackedBar) {
  1021. instance.ChartTypeName = 'bar';
  1022. return instance.stackChart(id);
  1023. }
  1024. else if (instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.stackedHorizontalBar) {
  1025. instance.ChartTypeName = 'horizontalBar';
  1026. return instance.stackChart(id);
  1027. }
  1028. else if (instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.bubble) {
  1029. instance.ChartTypeName = 'bubble';
  1030. return instance.bubbleChart(id);
  1031. }
  1032. else if (instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.barWithLine) {
  1033. $("#linechart").removeClass("hidden");
  1034. instance.ChartTypeName = 'bar';
  1035. return instance.chart(id);
  1036. }
  1037. }
  1038. chart(id) {
  1039. return __awaiter(this, void 0, void 0, function* () {
  1040. var instance = this;
  1041. let DataSet;
  1042. let xaxisData;
  1043. let isStack = false;
  1044. let indexAxis = 'x';
  1045. this.updateDatasetForDataLabel();
  1046. if (instance.groupColumns.length != 0) {
  1047. if (instance._reportBuilder.pivot.ColumnName) {
  1048. yield instance.pivotTable();
  1049. instance.pivotDataSet();
  1050. }
  1051. else {
  1052. instance.groupedStackDataSet();
  1053. }
  1054. if (instance.PivotDataSet && instance.PivotDataSet.length != 0)
  1055. DataSet = JSON.stringify(instance.PivotDataSet);
  1056. xaxisData = JSON.stringify(instance.XaxisStackData);
  1057. }
  1058. else {
  1059. if (instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.barWithLine)
  1060. instance.barWithLine();
  1061. DataSet = JSON.stringify(instance.Dataset);
  1062. xaxisData = JSON.stringify(instance.XaxisData);
  1063. }
  1064. instance.clearChart(id);
  1065. if (instance.ChartTypeName == "horizontalBar") {
  1066. instance.ChartTypeName = 'bar';
  1067. indexAxis = 'y';
  1068. }
  1069. const horizontalDottedLine = {
  1070. id: 'horizontalDottedLine',
  1071. afterDraw: function (chart, args, options) {
  1072. const { ctx, _metasets, chartArea: { top, right, bottom, left, width, height }, scales: { xAxes, yAxes } } = chart;
  1073. if (instance.chartBaseColumns && instance.chartBaseColumns.length) {
  1074. let baseValue = Math.round(_metasets[0]._dataset.base);
  1075. ctx.save();
  1076. ctx.setLineDash([10, 10]);
  1077. ctx.strokeStyle = 'blue';
  1078. ctx.strokeRect(left, yAxes.getPixelForValue(baseValue), width, 0);
  1079. ctx.font = ctx.font;
  1080. ctx.fontStyle = _metasets[0]._dataset.borderColor;
  1081. ctx.textBaseLine = 'middle';
  1082. ctx.fillText(baseValue.toLocaleString('en'), right + 10, yAxes.getPixelForValue(baseValue) + 5);
  1083. ctx.restore();
  1084. }
  1085. }
  1086. };
  1087. const { isXAxisNumAbb, isYAxisNumAbb } = instance.isNumberAbbr();
  1088. let canvas = document.getElementById(id);
  1089. let ctx = canvas.getContext("2d");
  1090. var chart = `new Chart(ctx, {
  1091. type:'` + instance.ChartTypeName + `',
  1092. data: {
  1093. labels:` + xaxisData + `,
  1094. datasets:` + DataSet + `
  1095. },
  1096. options: {
  1097. layout:{
  1098. padding:{
  1099. right:${instance.chartBaseColumns && instance.chartBaseColumns.length ? 80 : instance.isDataLabel && 20},
  1100. top:${instance.isDataLabel && 20},
  1101. bottom:${instance.isDataLabel && 20},
  1102. },
  1103. },
  1104. plugins:{
  1105. tooltip: {
  1106. displayColors: false,
  1107. callbacks: {
  1108. label: function (tooltipItem, data) {
  1109. data = tooltipItem.dataset.data;
  1110. instance.toolTip();
  1111. var label = instance.toolTipDataItem(tooltipItem, data);
  1112. return label;
  1113. },
  1114. ${!instance.isTooltipHeader ? 'title: function() { }, ' : ''}
  1115. },
  1116. },
  1117. legend: {
  1118. display:` + instance.displayLegend + `,
  1119. position:'` + instance.legendType + `',
  1120. labels:{
  1121. boxWidth:13,
  1122. },
  1123. },
  1124. },
  1125. responsive: true,
  1126. maintainAspectRatio: false,
  1127. scales: {
  1128. yAxes: {
  1129. stacked: ` + isStack + `,
  1130. barPercentage:0.3,
  1131. categoryPercentage: 1,
  1132. ticks: {
  1133. beginAtZero: true,
  1134. callback: function(value, index, ticks) {
  1135. if (instance.tickLabelLength > 0){
  1136. if ('${indexAxis.toString().toLowerCase()}' == 'y' ){
  1137. var text = this.getLabelForValue(value);
  1138. ${instance.tickLabelLength ? 'return text && text.toString().slice(0,instance.tickLabelLength) || 0;' : 'return text;'}
  1139. }
  1140. else{
  1141. return value;
  1142. }
  1143. }else{
  1144. return instance.abbreviateNumber(value,this,isYAxisNumAbb);
  1145. }
  1146. },
  1147. }
  1148. },
  1149. xAxes: {
  1150. stacked: ` + isStack + `,
  1151. barPercentage:0.3,
  1152. categoryPercentage: 1,
  1153. ticks: {
  1154. beginAtZero: true,
  1155. callback: function(value, index, ticks) {
  1156. if (instance.tickLabelLength > 0){
  1157. if ('${indexAxis.toString().toLowerCase()}'== 'x' ){
  1158. var text = this.getLabelForValue(value);
  1159. ${instance.tickLabelLength ? 'return text && text.toString().slice(0,instance.tickLabelLength) || 0;' : 'return text;'}
  1160. }
  1161. else{
  1162. return value;
  1163. }
  1164. }else{
  1165. return instance.abbreviateNumber(value,this,isXAxisNumAbb);
  1166. }
  1167. },
  1168. }
  1169. }
  1170. },
  1171. onClick: onChartClick.bind(this),
  1172. indexAxis: '${indexAxis}',
  1173. },
  1174. plugins:[horizontalDottedLine ${instance.isDataLabel ? ',ChartDataLabels' : ''}],
  1175. })`;
  1176. var c = eval(chart);
  1177. function onChartClick(evt, items) {
  1178. this.onChartClickHandler(evt, items, c, false);
  1179. }
  1180. });
  1181. }
  1182. pieanddoughnutchart(id) {
  1183. return __awaiter(this, void 0, void 0, function* () {
  1184. var instance = this;
  1185. let DataSet;
  1186. let xaxisData;
  1187. this.updateDatasetForDataLabel();
  1188. if (instance.groupColumns.length != 0) {
  1189. if (instance._reportBuilder.pivot.ColumnName) {
  1190. yield instance.pivotTable();
  1191. instance.pivotDataSet();
  1192. }
  1193. else {
  1194. instance.groupedStackDataSet();
  1195. }
  1196. if (instance.PivotDataSet && instance.PivotDataSet.length != 0)
  1197. DataSet = JSON.stringify(instance.PivotDataSet);
  1198. xaxisData = JSON.stringify(instance.XaxisStackData);
  1199. }
  1200. else {
  1201. DataSet = JSON.stringify(instance.Dataset);
  1202. xaxisData = JSON.stringify(instance.XaxisData);
  1203. }
  1204. instance.clearChart(id);
  1205. let canvas = document.getElementById(id);
  1206. let ctx = canvas.getContext("2d");
  1207. var chart = `new Chart(ctx, {
  1208. type:'` + instance.ChartTypeName + `',
  1209. data: {
  1210. labels:` + xaxisData + `,
  1211. datasets:` + DataSet + `
  1212. },
  1213. options: {
  1214. layout:{
  1215. padding:${instance.isDataLabel && 20},
  1216. },
  1217. plugins:{
  1218. legend: {
  1219. display:` + instance.displayLegend + `,
  1220. position:'` + instance.legendType + `',
  1221. labels:{
  1222. boxWidth:13,
  1223. },
  1224. },
  1225. tooltip: {
  1226. displayColors: false,
  1227. callbacks: {
  1228. label: function (tooltipItem, data) {
  1229. data = tooltipItem.dataset.data;
  1230. instance.toolTip();
  1231. var label = instance.toolTipDataItem(tooltipItem, data);
  1232. return label;
  1233. },
  1234. ${!instance.isTooltipHeader ? 'title: function() { }, ' : ''}
  1235. },
  1236. },
  1237. },
  1238. responsive: true,
  1239. maintainAspectRatio: false,
  1240. onClick: onChartClick.bind(this),
  1241. },
  1242. ${instance.isDataLabel ? 'plugins:[ChartDataLabels],' : ''}
  1243. })`;
  1244. var c = eval(chart);
  1245. function onChartClick(evt, items) {
  1246. this.onChartClickHandler(evt, items, c, false, false);
  1247. }
  1248. return c;
  1249. });
  1250. }
  1251. onChartClickHandler(evt, items, c, isBubbleChart, isStackedChart) {
  1252. var activePoint = c.getElementsAtEventForMode(evt, 'index', { intersect: true }, false)[0];
  1253. if (activePoint) {
  1254. let rv_instance = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(this.chartContainerId);
  1255. if (this._reportBuilder.isEdit)
  1256. return "";
  1257. let reportInfo = rv_instance.reportResponse.result.ReportInfo;
  1258. let filters = [];
  1259. if (reportInfo.IsLinkReport) {
  1260. this._reportManager.getSubReports(reportInfo.ReportId).then((response) => {
  1261. if (response.status == Unibase.Data.Status.Success && response.result.length) {
  1262. let subReport = response.result[0];
  1263. var filters = [];
  1264. if (subReport.SubReportTypeId == Unibase.Platform.Analytics.Reports.Enums.SubReportType.Report) {
  1265. let subReportParams = JSON.parse(subReport.Filters);
  1266. for (var i = 0; i < subReportParams.length; i++) {
  1267. var param = subReportParams[i];
  1268. if (param.Isvalue) {
  1269. filters.push({ ParameterName: param.ParameterValue, ParameterValue: param.ParameterName, ExpOp: 1 });
  1270. }
  1271. else {
  1272. if (this.xaxisColumns[0] && this.xaxisColumns[0].AliasName == param.ParameterName) {
  1273. filters.push({ ParameterName: param.ParameterValue, ParameterValue: this.XaxisData[activePoint.index], ExpOp: 1 });
  1274. }
  1275. else {
  1276. if (rv_instance.reportResponse.result.ReportJsonData && rv_instance.reportResponse.result.ReportJsonData.Result.Data) {
  1277. var reportData = JSON.parse(rv_instance.reportResponse.result.ReportJsonData.Result.Data);
  1278. let idx = isBubbleChart ? activePoint.index - 1 : activePoint.index;
  1279. var rowData;
  1280. if (!isStackedChart) {
  1281. rowData = reportData.find(x => x[this.xaxisColumns[0].AliasName].toLowerCase() == this.XaxisData[idx].toLowerCase());
  1282. }
  1283. else {
  1284. rowData = reportData[items[0].datasetIndex];
  1285. }
  1286. if (rowData) {
  1287. if (rowData[param.ParameterValue]) {
  1288. filters.push({ ParameterName: param.ParameterValue, ParameterValue: rowData[param.ParameterValue].toString(), ExpOp: 1 });
  1289. }
  1290. }
  1291. }
  1292. }
  1293. }
  1294. }
  1295. this.linkReport(subReport.ChildReportId, filters, this.chartContainerId + "_viewall");
  1296. }
  1297. else {
  1298. if (rv_instance.reportResponse.result.ReportJsonData && rv_instance.reportResponse.result.ReportJsonData.Result.Data) {
  1299. var reportData = JSON.parse(rv_instance.reportResponse.result.ReportJsonData.Result.Data);
  1300. var rowData = reportData.find(x => x[this.xaxisColumns[0].AliasName] == this.XaxisData[activePoint.index]);
  1301. Unibase.Platform.Helpers.NavigationHelper.Instance().loadDetail(rowData[subReport.PrimaryKeyColumn], subReport.InstalledAppId, null, null);
  1302. }
  1303. }
  1304. }
  1305. });
  1306. }
  1307. }
  1308. }
  1309. barWithLine() {
  1310. var instance = this;
  1311. for (var l = 0; l < instance.lineChartColumns.length; l++) {
  1312. var lineCol = instance.lineChartColumns[l];
  1313. var data = [];
  1314. for (var bl = 0; bl < instance.ChartData.length; bl++) {
  1315. var bLData = instance.ChartData[bl][lineCol.AliasName];
  1316. data.push(bLData);
  1317. }
  1318. var color = instance.getDataSetColors();
  1319. var bldata = {
  1320. label: lineCol.AliasName,
  1321. data: data,
  1322. borderColor: color.boarderColor,
  1323. backgroundColor: color.backgroundColor,
  1324. borderWidth: 1,
  1325. fill: instance.IsFill,
  1326. type: "line"
  1327. };
  1328. instance.Dataset.push(bldata);
  1329. }
  1330. }
  1331. stackChart(id) {
  1332. return __awaiter(this, void 0, void 0, function* () {
  1333. var instance = this;
  1334. let indexAxis = 'x';
  1335. if (instance._reportBuilder.pivot.ColumnName) {
  1336. yield instance.pivotTable();
  1337. instance.pivotDataSet();
  1338. }
  1339. else {
  1340. instance.groupedStackDataSet();
  1341. }
  1342. this.updateDatasetForDataLabel();
  1343. instance.clearChart(id);
  1344. let canvas = document.getElementById(id);
  1345. let ctx = canvas.getContext("2d");
  1346. let legendItems = {};
  1347. if (instance.ChartTypeName == "horizontalBar") {
  1348. instance.ChartTypeName = 'bar';
  1349. indexAxis = 'y';
  1350. }
  1351. const { isXAxisNumAbb, isYAxisNumAbb } = instance.isNumberAbbr();
  1352. var chart = `new Chart(ctx, {
  1353. type:'` + instance.ChartTypeName + `',
  1354. data: {
  1355. labels:` + JSON.stringify(instance.XaxisStackData) + `,
  1356. datasets:` + JSON.stringify(instance.PivotDataSet) + `
  1357. },
  1358. options: {
  1359. layout:{
  1360. padding:${instance.isDataLabel && 20},
  1361. },
  1362. plugins: {
  1363. tooltip: {
  1364. displayColors: false,
  1365. callbacks: {
  1366. label: function (tooltipItem, data) {
  1367. data = tooltipItem.dataset.data;
  1368. instance.toolTip();
  1369. var label = instance.toolTipDataItem(tooltipItem, data);
  1370. return label;
  1371. },
  1372. ${!instance.isTooltipHeader ? 'title: function() { }, ' : ''}
  1373. },
  1374. },
  1375. legend: {
  1376. display:` + instance.displayLegend + `,
  1377. position:'` + instance.legendType + `',
  1378. onClick: legendClick,
  1379. align: 'center',
  1380. labels: {
  1381. boxWidth:13,
  1382. //filter: function(legendItem) {
  1383. // if(legendItems[legendItem.text] == undefined){
  1384. // legendItems[legendItem.text] = true;
  1385. // return legendItem.text;
  1386. // }
  1387. //}
  1388. },
  1389. },
  1390. },
  1391. responsive: true,
  1392. maintainAspectRatio: false,
  1393. indexAxis: '${indexAxis}',
  1394. scales: {
  1395. xAxes: {
  1396. barPercentage:0.3,
  1397. stacked: true,
  1398. ticks: {
  1399. callback: function(value) {
  1400. if (instance.tickLabelLength > 0){
  1401. if ('${indexAxis.toString().toLowerCase()}' == 'x'){
  1402. var value = instance.abbreviateNumber(value,this,isXAxisNumAbb);
  1403. ${instance.tickLabelLength ? 'value = value && typeof(value) ==\'string\' && value.toString().slice(0,instance.tickLabelLength);' : ''}
  1404. return value;
  1405. }
  1406. else{
  1407. return value;
  1408. }
  1409. }else{
  1410. return instance.abbreviateNumber(value,this,isXAxisNumAbb);
  1411. }
  1412. }
  1413. }
  1414. },
  1415. yAxes: {
  1416. barPercentage:0.3,
  1417. stacked: true,
  1418. ticks: {
  1419. beginAtZero: true,
  1420. callback: function(value) {
  1421. if (instance.tickLabelLength > 0){
  1422. if ('${indexAxis.toString().toLowerCase()}' == 'y'){
  1423. var value = instance.abbreviateNumber(value,this,isYAxisNumAbb);
  1424. ${instance.tickLabelLength ? 'value = value && typeof(value) ==\'string\' && value.toString().slice(0,instance.tickLabelLength);' : ''}
  1425. return value;
  1426. }
  1427. else{
  1428. return value;
  1429. }
  1430. }else{
  1431. return instance.abbreviateNumber(value,this,isYAxisNumAbb);
  1432. }
  1433. }
  1434. }
  1435. }
  1436. },
  1437. onClick: onChartClick.bind(instance),
  1438. legendCallback: legendCallBack,
  1439. onResize:function(){
  1440. legendItems = {};
  1441. },
  1442. },
  1443. ${instance.isDataLabel ? 'plugins:[ChartDataLabels],' : ''}
  1444. })`;
  1445. var c = eval(chart);
  1446. function legendCallBack(chart) {
  1447. var legendItems = [];
  1448. if (instance.legendTitleTypeId == Unibase.Platform.Analytics.Enums.LegendTitleType.Column && (instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.stackedBar || instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.stackedHorizontalBar)) {
  1449. legendItems = [];
  1450. for (var i = 0; i < instance.yaxisColumns.length; i++) {
  1451. if (chart.legend.legendItems[i]) {
  1452. chart.legend.legendItems[i].text = instance.yaxisColumns[i].AliasName;
  1453. legendItems.push(chart.legend.legendItems[i]);
  1454. }
  1455. }
  1456. chart.legend.legendItems = legendItems;
  1457. }
  1458. return chart.legend;
  1459. }
  1460. function legendClick(e, legendItem) {
  1461. var index = legendItem.datasetIndex;
  1462. var ci = this.chart;
  1463. var alreadyHidden = (ci.getDatasetMeta(index).hidden === null) ? false : ci.getDatasetMeta(index).hidden;
  1464. if (instance.legendTitleTypeId == Unibase.Platform.Analytics.Enums.LegendTitleType.Column) {
  1465. var legendItems = [];
  1466. instance.yaxisColumns.forEach(function (e, i) {
  1467. var meta = ci.getDatasetMeta(i);
  1468. if (e.AliasName == legendItem.text) {
  1469. if (!alreadyHidden)
  1470. meta.hidden = true;
  1471. else
  1472. meta.hidden = null;
  1473. }
  1474. });
  1475. ci.update();
  1476. if (instance.legendTitleTypeId == Unibase.Platform.Analytics.Enums.LegendTitleType.Column && (instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.stackedBar || instance.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.stackedHorizontalBar)) {
  1477. legendItems = [];
  1478. for (var i = 0; i < instance.yaxisColumns.length; i++) {
  1479. if (ci.legend.legendItems[i]) {
  1480. ci.legend.legendItems[i].text = instance.yaxisColumns[i].AliasName;
  1481. legendItems.push(ci.legend.legendItems[i]);
  1482. }
  1483. }
  1484. ci.legend.legendItems = legendItems;
  1485. }
  1486. return ci.legend;
  1487. }
  1488. else {
  1489. ci.data.datasets.forEach(function (e, i) {
  1490. var meta = ci.getDatasetMeta(i);
  1491. if (e.label == legendItem.text) {
  1492. if (!alreadyHidden)
  1493. meta.hidden = true;
  1494. else
  1495. meta.hidden = null;
  1496. }
  1497. });
  1498. ci.update();
  1499. }
  1500. }
  1501. function onChartClick(evt, items) {
  1502. this.onChartClickHandler(evt, items, c, false, true);
  1503. }
  1504. return c;
  1505. });
  1506. }
  1507. stackChart_old(id) {
  1508. return __awaiter(this, void 0, void 0, function* () {
  1509. var instance = this;
  1510. if (instance._reportBuilder.pivot.ColumnName) {
  1511. yield instance.pivotTable();
  1512. instance.pivotDataSet();
  1513. }
  1514. else {
  1515. instance.groupedStackDataSet();
  1516. }
  1517. instance.clearChart(id);
  1518. const { isXAxisNumAbb, isYAxisNumAbb } = instance.isNumberAbbr();
  1519. let canvas = document.getElementById(id);
  1520. let ctx = canvas.getContext("2d");
  1521. var chart = new Chart(ctx, {
  1522. type: instance.ChartTypeName,
  1523. data: {
  1524. labels: instance.XaxisStackData,
  1525. datasets: instance.PivotDataSet
  1526. },
  1527. options: {
  1528. tooltips: {
  1529. displayColors: false,
  1530. callbacks: {
  1531. label: function (tooltipItem, data) {
  1532. instance.toolTip();
  1533. var label = instance.toolTipDataItem(tooltipItem, data);
  1534. return label;
  1535. },
  1536. },
  1537. },
  1538. legend: {
  1539. display: instance.displayLegend,
  1540. position: instance.legendType,
  1541. labels: {
  1542. boxWidth: 13,
  1543. },
  1544. },
  1545. responsive: true,
  1546. maintainAspectRatio: false,
  1547. scales: {
  1548. xAxes: [{
  1549. stacked: true,
  1550. ticks: {
  1551. callback: function (value) {
  1552. return instance.abbreviateNumber(value, this, isXAxisNumAbb);
  1553. }
  1554. }
  1555. }],
  1556. yAxes: [{
  1557. stacked: true,
  1558. ticks: {
  1559. beginAtZero: true,
  1560. callback: function (value) {
  1561. return instance.abbreviateNumber(value, this, isYAxisNumAbb);
  1562. }
  1563. }
  1564. }]
  1565. }
  1566. }
  1567. });
  1568. return chart;
  1569. });
  1570. }
  1571. bubbleData() {
  1572. var instance = this;
  1573. var bubbleData = [];
  1574. let orginalIdx = -1;
  1575. this.xAxisLables = [];
  1576. instance.xAxisDataWithIndexes = [];
  1577. let index = 0;
  1578. instance.XaxisData.map(x => {
  1579. instance.xAxisDataWithIndexes.push({ Index: index, Name: instance.XaxisData[index] });
  1580. index++;
  1581. });
  1582. var xArray = instance.XaxisData;
  1583. var yArray = instance.YaxisData;
  1584. bubbleData.push({ x: 0, y: 0, r: 0 });
  1585. xArray.forEach(function (e, i) {
  1586. let idx = instance.xAxisDataWithIndexes[i].Index;
  1587. let existingData = instance.xAxisLables.find(x => x.toString().toLowerCase() == e.toString().toLowerCase());
  1588. if (existingData) {
  1589. idx = instance.xAxisLables.indexOf(existingData);
  1590. }
  1591. else {
  1592. idx = ++orginalIdx;
  1593. instance.xAxisLables.push(instance.xAxisDataWithIndexes[i].Name);
  1594. }
  1595. bubbleData.push({
  1596. x: idx + 1,
  1597. y: parseFloat(yArray[i]),
  1598. r: 6,
  1599. });
  1600. });
  1601. return bubbleData;
  1602. }
  1603. bubbleChart(id) {
  1604. var instance = this;
  1605. var rv_instance;
  1606. let containterid = id.split("-ch")[0];
  1607. this.updateDatasetForDataLabel();
  1608. if (Unibase.Platform.Helpers.NavigationHelper.reportViewerInstance.length > 0) {
  1609. let reportviewerInstance = Unibase.Platform.Helpers.NavigationHelper.reportViewerInstance.find(x => x.childcontainerid == containterid);
  1610. if (reportviewerInstance != undefined)
  1611. rv_instance = reportviewerInstance.instance;
  1612. }
  1613. instance.clearChart(id);
  1614. const { isXAxisNumAbb, isYAxisNumAbb } = instance.isNumberAbbr();
  1615. let canvas = document.getElementById(id);
  1616. let ctx = canvas.getContext("2d");
  1617. var chart_str = `new Chart(ctx, {
  1618. type: '${instance.ChartTypeName}',
  1619. data: {
  1620. datasets: ${JSON.stringify(instance.Dataset)},
  1621. },
  1622. options: {
  1623. responsive: true, // Instruct chart js to respond nicely.
  1624. maintainAspectRatio: false, // Add to prevent default behaviour of full-width/height
  1625. scaleShowValues: true,
  1626. layout:{
  1627. padding:${instance.isDataLabel && 20},
  1628. },
  1629. scales: { // options to replace x axis with strings
  1630. xAxes: {
  1631. beganAtZero: true,
  1632. ticks: {
  1633. callback: function (label, index, labels) {
  1634. if (!label) return "";
  1635. label = instance.xAxisLables[label-1];
  1636. ${instance.tickLabelLength ? 'label = label && typeof(label) == \'string\' && label.toString().slice(0, instance.tickLabelLength) || 0; ' : ''}
  1637. return label;
  1638. },
  1639. stepSize: 1,
  1640. }
  1641. },
  1642. yAxes: {
  1643. ticks: {
  1644. callback: function(value) {
  1645. return instance.abbreviateNumber(value,this,isYAxisNumAbb);
  1646. }
  1647. }
  1648. }
  1649. },
  1650. plugins: {
  1651. tooltip: {
  1652. displayColors: false,
  1653. callbacks: {
  1654. label: function (tooltipItem, data) {
  1655. data = tooltipItem.dataset.data;
  1656. instance.toolTip();
  1657. var label = instance.toolTipDataItem(tooltipItem, data);
  1658. return label;
  1659. },
  1660. ${!instance.isTooltipHeader ? 'title: function() { },' : ''}
  1661. },
  1662. },
  1663. legend: {
  1664. display: ${instance.displayLegend},
  1665. position: '${instance.legendType}',
  1666. labels: {
  1667. boxWidth: 13,
  1668. },
  1669. },
  1670. },
  1671. onClick: onChartClick.bind(instance),
  1672. },
  1673. ${instance.isDataLabel ? 'plugins:[ChartDataLabels],' : ''}
  1674. })`;
  1675. var chart = eval(chart_str);
  1676. function onChartClick(evt, items) {
  1677. this.onChartClickHandler(evt, items, chart, true);
  1678. }
  1679. return chart;
  1680. }
  1681. bubbleChart_old(id) {
  1682. var instance = this;
  1683. instance.clearChart(id);
  1684. let canvas = document.getElementById(id);
  1685. let ctx = canvas.getContext("2d");
  1686. var chart = new Chart(ctx, {
  1687. type: instance.ChartTypeName,
  1688. data: {
  1689. datasets: instance.Dataset,
  1690. },
  1691. options: {
  1692. scales: {
  1693. yAxes: [{
  1694. ticks: {
  1695. beginAtZero: true,
  1696. min: -30,
  1697. max: 30
  1698. }
  1699. }],
  1700. }
  1701. }
  1702. });
  1703. return chart;
  1704. }
  1705. tenureChart(id, reportid) {
  1706. return __awaiter(this, void 0, void 0, function* () {
  1707. var instance = this;
  1708. instance.Dataset = [];
  1709. instance.YaxisData = [];
  1710. var intervels = instance._reportBuilder.timeIntervels(instance._reportBuilder.tenureTimeIntervalCol);
  1711. instance.XaxisData = intervels;
  1712. var x = instance.XaxisData;
  1713. let tenureTableData;
  1714. if (reportid != 0 && instance.IsChartBuilder == false) {
  1715. instance._reportBuilder.tableData = "";
  1716. var repObj = {
  1717. ReportId: reportid,
  1718. IsJson: true
  1719. };
  1720. yield instance._reportManager.getReportViewerData(repObj).then(function (response) {
  1721. let res = JSON.parse(response.result);
  1722. tenureTableData = res.Data;
  1723. });
  1724. }
  1725. else {
  1726. tenureTableData = instance._reportBuilder.tableData;
  1727. }
  1728. if (tenureTableData) {
  1729. var j = JSON.parse(tenureTableData);
  1730. for (var i = 0; i < x.length; i++) {
  1731. let randomcolor = instance.getRandomColor();
  1732. instance.DataSetColors.push(randomcolor);
  1733. var a = x[i];
  1734. instance.YaxisData.push(j[0][a]);
  1735. }
  1736. var ydata = {
  1737. label: instance.XaxisData,
  1738. data: instance.YaxisData,
  1739. borderColor: 'white',
  1740. backgroundColor: instance.DataSetColors,
  1741. borderWidth: 1,
  1742. fill: instance.IsFill,
  1743. };
  1744. instance.Dataset.push(ydata);
  1745. instance.ChartTypeName = 'doughnut';
  1746. instance.ChartTypeId = Unibase.Platform.Analytics.Charts.Enums.ChartType.doughnut;
  1747. instance.chart(id);
  1748. }
  1749. });
  1750. }
  1751. clearSelectedChartFields() {
  1752. var instance = this;
  1753. instance.xaxisColumns = [], instance.yaxisColumns = [];
  1754. instance.groupColumns = [], instance.ChartData = [], instance.ChartSelectedColumns = [],
  1755. instance.SelectedValueColorColumns = [], instance.Dataset = [], instance.appliedColumnColor = [], instance.appliedColumnValueColor = [];
  1756. instance.Dataset = [], instance.YaxisData = [], instance.DataSetColors = [];
  1757. instance.defaultColor = false;
  1758. instance.toolTipArray = [];
  1759. instance._reportBuilder.ChartColumns = [];
  1760. instance._chartBuilder.SelectedValueColorColumns = [];
  1761. instance._reportBuilder.paletteId = 0;
  1762. instance._chartBuilder.colorAppliedOn = Unibase.Platform.Analytics.Enums.ColorType.column;
  1763. instance.paletteColors = [];
  1764. Unibase.Platform.Analytics.Components.LinkReport.Instance().linkreportid = 0;
  1765. }
  1766. getIndexByDisplayText(DisplayText, Select2Type) {
  1767. var instance = this;
  1768. if (Select2Type == instance.ChartAxis.Horizontal) {
  1769. return instance.xaxisColumns.findIndex(x => x.DisplayText == DisplayText);
  1770. }
  1771. else if (Select2Type == instance.ChartAxis.Vertical) {
  1772. return instance.yaxisColumns.findIndex(x => x.DisplayText == DisplayText);
  1773. }
  1774. else if (Select2Type == instance.ChartAxis.LineChart) {
  1775. return instance.lineChartColumns.findIndex(x => x.DisplayText == DisplayText);
  1776. }
  1777. else if (Select2Type == instance.ChartAxis.BaseColumn) {
  1778. return instance.chartBaseColumns.findIndex(x => x.DisplayText == DisplayText);
  1779. }
  1780. else {
  1781. return instance.groupColumns.findIndex(x => x.DisplayText == DisplayText);
  1782. }
  1783. }
  1784. getIndexByAliasName_ChartSelectedColumns(AliasName) {
  1785. var instance = this;
  1786. return instance.ChartSelectedColumns.findIndex(x => x.AliasName == AliasName);
  1787. }
  1788. getIndexByDisplayText_ChartSelectedColumns(DisplayText) {
  1789. var instance = this;
  1790. return instance.ChartSelectedColumns.findIndex(x => x.DisplayText == DisplayText);
  1791. }
  1792. getIndexByDisplayText_tooltipColumnsArray(AliasName) {
  1793. var instance = this;
  1794. return instance.toolTipArray.findIndex(x => x.AliasName == AliasName);
  1795. }
  1796. getIndexByDisplayText_BaseColumnsArray(AliasName) {
  1797. var instance = this;
  1798. return instance.chartBaseColumns.findIndex(x => x.AliasName == AliasName);
  1799. }
  1800. enableOrDisableChartIcons() {
  1801. let instance = this;
  1802. if (instance.groupColumns.length) {
  1803. $("#chart_type").find('.stackedbar-icon').closest('label').removeClass('in-active');
  1804. }
  1805. else {
  1806. $("#chart_type").find('.stackedbar-icon').closest('label').addClass('in-active');
  1807. }
  1808. }
  1809. loadSelectedLegend(id, ischartview) {
  1810. var instance = this;
  1811. instance.displayLegend = true;
  1812. if (id == 0)
  1813. id = Number($("#legend-select").val());
  1814. if (id == Unibase.Platform.Analytics.Enums.LegendType.top) {
  1815. instance.legendType = 'top';
  1816. }
  1817. else if (id == Unibase.Platform.Analytics.Enums.LegendType.right) {
  1818. instance.legendType = 'right';
  1819. }
  1820. else if (id == Unibase.Platform.Analytics.Enums.LegendType.bottom) {
  1821. instance.legendType = 'bottom';
  1822. }
  1823. else if (id == Unibase.Platform.Analytics.Enums.LegendType.left) {
  1824. instance.legendType = 'left';
  1825. }
  1826. else {
  1827. instance.displayLegend = false;
  1828. }
  1829. if (ischartview) {
  1830. if (instance._reportBuilder.TenureReport.length != 0) {
  1831. Unibase.Platform.Analytics.Reports.Tenure.Instance().CheckedTenure();
  1832. instance.tenureChart('myChart', instance._reportBuilder.reportid);
  1833. }
  1834. else {
  1835. instance.chart_dataSet();
  1836. }
  1837. }
  1838. }
  1839. loadPalettes() {
  1840. var instance = this;
  1841. instance.fileCacheHelper.loadJsFile("apps/crm/palettes/managers/palettemanager.js", function () {
  1842. let _pallettemanager = Bizgaze.Apps.Crm.Palettes.Managers.PaletteManager.Instance();
  1843. _pallettemanager.getPallettes().then(function (pallresponse) {
  1844. var pallettedata = [];
  1845. if (pallresponse.result) {
  1846. for (var p = 0; p < pallresponse.result.length; p++) {
  1847. pallettedata.push({ id: pallresponse.result[p].paletteid, text: pallresponse.result[p].name });
  1848. }
  1849. }
  1850. if (instance._reportBuilder.isEdit) {
  1851. let pallete = pallettedata.find(p => p.id == instance._reportBuilder.paletteId);
  1852. if (pallete) {
  1853. $("#pallettes_select").append("<option selected value=" + instance._reportBuilder.paletteId + ">" + pallete.text + "</option>");
  1854. }
  1855. }
  1856. $("#pallettes_select").off('select2:select').off('select2:unselect').off('select2:selecting');
  1857. $("#pallettes_select").select2({
  1858. placeholder: 'Select GroupBy columns',
  1859. data: pallettedata,
  1860. }).on('select2:select', function (e) {
  1861. }).on('select2:selecting', function (e) {
  1862. var data = e.params.args.data;
  1863. let id = Number(data.id);
  1864. instance.paletteColors = [];
  1865. instance._reportBuilder.paletteId = id;
  1866. instance.getpaletteColors(id, true);
  1867. });
  1868. });
  1869. });
  1870. }
  1871. getpaletteColors(id, ischartview) {
  1872. return __awaiter(this, void 0, void 0, function* () {
  1873. var instance = this;
  1874. let navigationhelper = Unibase.Platform.Helpers.NavigationHelper;
  1875. if (navigationhelper.palettes.length > 0) {
  1876. var pale = navigationhelper.palettes[id];
  1877. if (pale && pale.paletteColors) {
  1878. for (var p = 0; p < pale.paletteColors.length; p++) {
  1879. instance.paletteColors.push(pale.paletteColors[p].colorcode);
  1880. }
  1881. }
  1882. else {
  1883. yield instance.getColors(id, ischartview);
  1884. }
  1885. }
  1886. else {
  1887. yield instance.getColors(id, ischartview);
  1888. }
  1889. });
  1890. }
  1891. getColors(id, ischartview) {
  1892. return __awaiter(this, void 0, void 0, function* () {
  1893. var instance = this;
  1894. let navigationhelper = Unibase.Platform.Helpers.NavigationHelper;
  1895. let _pallettemanager = Bizgaze.Apps.Crm.Palettes.Managers.PaletteManager.Instance();
  1896. yield _pallettemanager.getPalletteColors(id).then(function (pcresponse) {
  1897. return __awaiter(this, void 0, void 0, function* () {
  1898. if (pcresponse.result && pcresponse.result.length) {
  1899. pcresponse.result.sort((x, y) => { return Number(x.paletteindex) - Number(y.paletteindex); });
  1900. var palette = navigationhelper.palettes[id] ? true : false;
  1901. if (!palette) {
  1902. navigationhelper.palettes[id] = { paletteColors: pcresponse.result };
  1903. var Values_len = navigationhelper.palettes.length;
  1904. navigationhelper.palettes.length = Values_len + 1;
  1905. }
  1906. for (var pc = 0; pc < pcresponse.result.length; pc++) {
  1907. let pcres = pcresponse.result[pc];
  1908. instance.paletteColors.push(pcres.colorcode);
  1909. }
  1910. if (ischartview) {
  1911. if (instance._reportBuilder.TenureReport.length != 0) {
  1912. Unibase.Platform.Analytics.Reports.Tenure.Instance().CheckedTenure();
  1913. instance.tenureChart('myChart', instance._reportBuilder.reportid);
  1914. }
  1915. else {
  1916. instance.chart_dataSet();
  1917. }
  1918. }
  1919. }
  1920. else {
  1921. var palette = navigationhelper.palettes[id];
  1922. if (!palette) {
  1923. navigationhelper.palettes[id] = { paletteColors: pcresponse.result };
  1924. var Values_len = navigationhelper.palettes.length;
  1925. navigationhelper.palettes.length = Values_len + 1;
  1926. }
  1927. }
  1928. });
  1929. });
  1930. });
  1931. }
  1932. linkReport(reportId, dynamicFilters, containerId) {
  1933. var instance = this;
  1934. if (reportId != 0) {
  1935. var rv_obj = Unibase.Platform.Analytics.Components.ReportViewer.Instance();
  1936. rv_obj.dynamicFilters = dynamicFilters;
  1937. rv_obj.isTable = true;
  1938. let reportViewerInstance = Unibase.Platform.Helpers.NavigationHelper.reportViewerInstance;
  1939. reportViewerInstance.push({
  1940. instance: rv_obj,
  1941. childcontainerid: containerId,
  1942. parentcontainerid: ""
  1943. });
  1944. instance.navigationHelper.popup(reportId, containerId, Unibase.Platform.Analytics.Components.ReportViewer.Instance(), function () {
  1945. rv_obj.reportViewAllCallBack(containerId);
  1946. }, Unibase.Platform.Helpers.Size.Large);
  1947. }
  1948. }
  1949. getReportColumnDisplayTextByAliasName(aliasName) {
  1950. if (this.chartContainerId) {
  1951. let rv_ins = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(this.chartContainerId);
  1952. let idx = rv_ins.reportColumns.findIndex(x => x.AliasName == aliasName);
  1953. if (idx > -1) {
  1954. return rv_ins.reportColumns[idx].DisplayText;
  1955. }
  1956. }
  1957. else {
  1958. let idx = this._reportBuilder.selectedColumns.findIndex(x => x.AliasName == aliasName);
  1959. if (idx > -1) {
  1960. return this._reportBuilder.selectedColumns[idx].DisplayText;
  1961. }
  1962. }
  1963. }
  1964. updateDatasetForDataLabel() {
  1965. if (this.isDataLabel && this.Dataset) {
  1966. let offset = 5;
  1967. let align = 'top';
  1968. if (this.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.horizontalBar || this.ChartTypeId == Unibase.Platform.Analytics.Charts.Enums.ChartType.pie || Unibase.Platform.Analytics.Charts.Enums.ChartType.doughnut) {
  1969. offset = 2;
  1970. align = 'end';
  1971. }
  1972. this.Dataset.forEach(dataset => dataset.datalabels = {
  1973. anchor: 'end',
  1974. align: align,
  1975. offset: offset,
  1976. });
  1977. }
  1978. }
  1979. convertLabelToPascalCase(name) {
  1980. if (name) {
  1981. let splited = name.split(" ");
  1982. for (var i = 0; i < splited.length; i++) {
  1983. splited[i] = this.converStringToPascalCase(splited[i]);
  1984. }
  1985. return splited.join(" ");
  1986. }
  1987. }
  1988. converStringToPascalCase(name) {
  1989. if (name) {
  1990. return name[0].toUpperCase() + name.slice(1);
  1991. }
  1992. }
  1993. getReportColumns() {
  1994. let cols;
  1995. if (this._reportBuilder.isEdit) {
  1996. cols = this._reportBuilder.res.ReportColumns;
  1997. }
  1998. else {
  1999. let rv_ins = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(this.chartContainerId);
  2000. cols = rv_ins.reportColumns;
  2001. }
  2002. return cols;
  2003. }
  2004. prepareAndBindToolTipColumns(ChartColumns) {
  2005. let tooltipColumns = ChartColumns.filter(x => x.IsToolTip);
  2006. let cols = this.getReportColumns();
  2007. var tCols = tooltipColumns.sort((x, y) => Number(x.ToolTipIndex) - Number(y.ToolTipIndex));
  2008. for (var i = 0; i < tCols.length; i++) {
  2009. let idx = cols.findIndex(x => x.AliasName == tooltipColumns[i].AliasName);
  2010. if (idx > -1) {
  2011. let col = cols[idx];
  2012. this.toolTipArray.push({ ColumnValue: col.ColumnValue, ColumnName: col.ReportColumnName, DisplayText: col.DisplayText, AliasName: col.AliasName, Index: tooltipColumns[i].ToolTipIndex });
  2013. if (this._reportBuilder.isEdit) {
  2014. var html = this._reportBuilderTemplate.loadToolTipColumn(col.ReportColumnId, col.AliasName, col.DataType, col.DisplayText);
  2015. $("#tab_tooltip #tooltip_selected_columns").append(html);
  2016. }
  2017. }
  2018. }
  2019. this.toolTipArray = this.toolTipArray.sort((x, y) => Number(x.Index) - Number(y.Index));
  2020. this._reportBuilder.setSelectOption("tooltip_select");
  2021. }
  2022. prepareYAxisColumnsForBinding(chartColumns) {
  2023. let yAxisCols;
  2024. let rpCols;
  2025. if (chartColumns) {
  2026. yAxisCols = chartColumns.filter((y) => y.IsYaxis);
  2027. }
  2028. rpCols = this.getReportColumns();
  2029. yAxisCols.forEach((col) => {
  2030. let idx = chartColumns.findIndex((x) => { return x.AliasName == col.AliasName; });
  2031. if (idx > -1) {
  2032. chartColumns.splice(idx, 1);
  2033. }
  2034. yAxisCols.forEach((col) => {
  2035. let idx = rpCols.findIndex(x => x.AliasName == col.AliasName);
  2036. if (idx > -1) {
  2037. col.Index = idx;
  2038. }
  2039. });
  2040. });
  2041. yAxisCols = yAxisCols.sort((x, y) => Number(x.Index) - Number(y.Index));
  2042. yAxisCols.forEach(x => delete x.Index);
  2043. return yAxisCols;
  2044. }
  2045. isNumberAbbr() {
  2046. const instance = this;
  2047. let isXAxisNumAbb = false;
  2048. let isYAxisNumAbb = false;
  2049. if (instance.xaxisColumns.length) {
  2050. for (let i = 0; i < instance.xaxisColumns.length; i++) {
  2051. if (instance.xaxisColumns[i].IsNumAbb) {
  2052. isXAxisNumAbb = true;
  2053. break;
  2054. }
  2055. }
  2056. }
  2057. if (instance.yaxisColumns.length) {
  2058. for (let i = 0; i < instance.yaxisColumns.length; i++) {
  2059. if (instance.yaxisColumns[i].IsNumAbb) {
  2060. isYAxisNumAbb = true;
  2061. break;
  2062. }
  2063. }
  2064. }
  2065. return { isXAxisNumAbb, isYAxisNumAbb };
  2066. }
  2067. abbreviateNumber(val, scaleObj, isNumAbb) {
  2068. const label = scaleObj.getLabelForValue(val) && scaleObj.getLabelForValue(val).toString().replaceAll(',', '');
  2069. if (isNumAbb && $.isNumeric(label)) {
  2070. val = +label;
  2071. if (val >= 10000000) {
  2072. val = (val / 10000000);
  2073. if (val % 1 != 0) {
  2074. val = val.toFixed(1);
  2075. }
  2076. val = val + 'Cr';
  2077. }
  2078. else if (val >= 100000) {
  2079. val = (val / 100000);
  2080. if (val % 1 != 0) {
  2081. val = val.toFixed(1);
  2082. }
  2083. val = val + 'L';
  2084. }
  2085. else if (val >= 1000) {
  2086. val = (val / 1000);
  2087. if (val % 1 != 0) {
  2088. val = val.toFixed(1);
  2089. }
  2090. val = val + 'K';
  2091. }
  2092. return val;
  2093. }
  2094. else {
  2095. return scaleObj.getLabelForValue(val);
  2096. }
  2097. }
  2098. }
  2099. Components._Chart = _Chart;
  2100. })(Components = Analytics.Components || (Analytics.Components = {}));
  2101. })(Analytics = Platform.Analytics || (Platform.Analytics = {}));
  2102. })(Platform = Unibase.Platform || (Unibase.Platform = {}));
  2103. })(Unibase || (Unibase = {}));