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.

tableviewer.js 146KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915
  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 Viewers;
  17. (function (Viewers) {
  18. class TableViewer extends Platform.Core.BaseComponent {
  19. constructor() {
  20. super();
  21. this.IsTenure = false;
  22. this.CommonFilter = [];
  23. this.Filter = [];
  24. this.subreportpagination = [];
  25. this._lists_default_index = 0;
  26. this.IsSelectable = false;
  27. this.IdColumn = null;
  28. this.TextColumn = null;
  29. this.dataListId = 0;
  30. this.subreportResponse = "";
  31. this.widgetHeightNum = Unibase.Themes.Compact.Components.Index.Instance().widgetHeightNum;
  32. this.isTouchScreen = Unibase.Themes.Compact.Components.Index.Instance().isTouchScreen;
  33. this.reportManager = Analytics.Managers.ReportManager.Instance();
  34. this._reportBuilder = Analytics.Reports.ReportBuilder.Instance();
  35. this._reportViewer = Analytics.Components.ReportViewer.Instance();
  36. this.ListSearchTerm = "";
  37. }
  38. loadView(reportresponse, reportid, viewerid, page, pageSize, containerid, ViewerSettings, callback, reportwidgetdata) {
  39. var instance = this;
  40. let rv_instance = instance._reportViewer.getReportViewerInstance(containerid);
  41. var pivotdata;
  42. let portletWidgetId = 0;
  43. if (containerid.indexOf("div_portletwidget") > -1) {
  44. portletWidgetId = Number(containerid.split("_")[2]);
  45. if (containerid.indexOf("viewall") == -1)
  46. instance._reportViewer.IsPortletWidget = true;
  47. }
  48. else {
  49. $(".report-search").addClass("d-sm-flex");
  50. $('.search_icon').removeClass("hidden");
  51. }
  52. instance._reportViewer.toggleGroupByAndShowAllBtn(containerid, true);
  53. if (ViewerSettings.InstalledAppId != 0)
  54. Unibase.Platform.Analytics.Reports.ReportBuilder.Instance().appConfigType = Unibase.Platform.Apps.Enums.AppConfigeType.Details;
  55. if (rv_instance.pivotTypeId == Analytics.Reports.Enums.PivotType.PivotTable) {
  56. return instance.loadPivotTable(reportid, containerid, reportresponse);
  57. }
  58. instance.initTable(reportresponse, containerid, reportid, null, reportwidgetdata);
  59. Unibase.Platform.Helpers.NavigationHelper.Instance().hideLoading();
  60. }
  61. initTable(reportresponse, containerid, reportid, filters, reportwidgetdata) {
  62. return __awaiter(this, void 0, void 0, function* () {
  63. var subuniquearray = [];
  64. var instance = this;
  65. let rv_instance = instance._reportViewer.getReportViewerInstance(containerid);
  66. var data;
  67. let level = 0;
  68. const isPivotTree = reportresponse.result.ReportInfo.IsPivotTree;
  69. var radioIcon = function (cell, formatterParams, onRendered) {
  70. var Selected = "";
  71. if ($("#" + Unibase.Platform.Analytics.Viewers.TableViewer.Instance().AutoCompleteElement).val() == cell.getRow().getData()[Unibase.Platform.Analytics.Viewers.TableViewer.Instance().IdColumn]) {
  72. Selected = " checked";
  73. }
  74. var textdata = cell.getRow().getData()[Unibase.Platform.Analytics.Viewers.TableViewer.Instance().TextColumn];
  75. var iddata = cell.getRow().getData()[Unibase.Platform.Analytics.Viewers.TableViewer.Instance().IdColumn];
  76. return '<input type="radio" name="select" onclick="Unibase.Forms.Controls.AutoComplete.Instance().reportOnClick(' + "'" + textdata + "'," + iddata + ",'" + Unibase.Platform.Analytics.Viewers.TableViewer.Instance().AutoCompleteElement + "'" + ');" ' + Selected + ' />';
  77. };
  78. var groupBy = [];
  79. var autoNumFormatter = function (cell) {
  80. if (!isPivotTree) {
  81. var row = cell.getRow();
  82. var rowIndex = row.getPosition(false);
  83. return (rowIndex + 1);
  84. }
  85. else {
  86. return;
  87. }
  88. };
  89. var tableresponse = reportresponse.result.ReportJsonData;
  90. var maintabledata = reportresponse.result.ReportJsonData.Result;
  91. let user = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  92. var columnresponse;
  93. let postData = [];
  94. let parentEl = $("#Viewer_" + containerid);
  95. let height = "100%";
  96. let viewerMarginWidth = parseInt(parentEl.css('margin-left')) + parseInt(parentEl.css('margin-right'));
  97. parentEl.css({ "max-width": `calc(100% - ${viewerMarginWidth}px)`, 'max-height': '' });
  98. if (instance._reportViewer.IsPortletWidget) {
  99. let widgetHeight = instance.widgetHeightNum;
  100. height = widgetHeight;
  101. parentEl.css({ "overflow": "auto", "height": "100%", "max-height": `${widgetHeight}px` });
  102. }
  103. if (containerid.includes('div_dashboardportletwidget')) {
  104. let portletWidgetHeight = $(`#${containerid}`).siblings('.hf_portletwidgetheight').val();
  105. portletWidgetHeight = parseInt(portletWidgetHeight);
  106. if (portletWidgetHeight <= 0) {
  107. height = "100%";
  108. }
  109. else {
  110. height = portletWidgetHeight + 48;
  111. }
  112. }
  113. var res;
  114. res = reportresponse.result.ReportInfo.ReportColumns;
  115. var res = res.filter(x => x.Isvisible == true);
  116. let IsPivotColumn = res.filter(function (o) { return o.IsPivotColumn === true; });
  117. if (IsPivotColumn.length > 0 || reportresponse.result.ReportInfo.IsPivotTree) {
  118. instance._reportViewer.ispivottable = true;
  119. }
  120. instance._reportViewer.table = new Tabulator("#Viewer_" + containerid, {
  121. placeholder: "<div class='alert alert-primary text-center mb-0 border-0 w-100 font-14 rounded-0'>No data available</div>",
  122. downloadDataFormatter: function (data) {
  123. return data;
  124. },
  125. columnCalcs: "both",
  126. dataTree: instance._reportViewer.ispivottable,
  127. dataTreeStartExpanded: reportresponse.result.ReportInfo.IsTreeExpand,
  128. dataTreeRowExpanded: function (row, level) {
  129. if (!reportresponse.result.ReportInfo.IsTreeExpand) {
  130. instance._reportBuilder.datatreeIndex_Width = (instance._reportBuilder.datatreeIndex_Width) ? instance._reportBuilder.datatreeIndex_Width : 70;
  131. if (instance._reportBuilder.datatreeIndex_Width / 70 <= level) {
  132. instance._reportBuilder.datatreeIndex_Width = instance._reportBuilder.datatreeIndex_Width + 70;
  133. }
  134. Unibase.Platform.Analytics.Reports.ReportBuilder.Instance().tabulatorColumns[0].width = instance._reportBuilder.datatreeIndex_Width;
  135. Unibase.Platform.Analytics.Reports.ReportBuilder.Instance().tabulatorColumns[0].minWidth = instance._reportBuilder.datatreeIndex_Width;
  136. const id = (eval("row.getData()." + instance._reportViewer.pivotparentcolumn[0].ReportColumnName + ""));
  137. let { fromDate, toDate } = instance._reportViewer.checkForReportDatePicker(reportid, containerid);
  138. if (rv_instance.fromDate && rv_instance.toDate) {
  139. fromDate = rv_instance.fromDate;
  140. toDate = rv_instance.toDate;
  141. }
  142. var postdata = {
  143. ReportId: reportid,
  144. page: 1,
  145. pageSize: 0,
  146. IsPivot: true,
  147. PivotId: Number(id),
  148. FromDate: fromDate,
  149. ToDate: toDate,
  150. IsJson: true,
  151. InputParameters: rv_instance.inputParameters,
  152. Filter: rv_instance.dynamicFilters
  153. };
  154. instance._reportBuilder.dataTreeRowExpandedColumn.push({ Level: level });
  155. $.when(instance.reportManager.getReportViewerData(postdata)).done(function (response1) {
  156. let res = JSON.parse(response1.result);
  157. var pivotdata = JSON.parse(res.Data);
  158. var hasChild = pivotdata.filter(x => x.haschild == true).forEach(c => c["_children"] = []);
  159. row.getData()._children = pivotdata;
  160. return row.update(row.getData());
  161. });
  162. }
  163. },
  164. cellClick: function (e, cell) {
  165. if (instance.subreportResponse && instance.subreportResponse.length) {
  166. let cellAliasName = cell._cell.column.field;
  167. let subRpt = instance.subreportResponse.find(x => x.AliasName == cellAliasName);
  168. if (subRpt) {
  169. return instance.tableCellClick(e, cell, level, reportid, instance.subreportResponse, containerid);
  170. }
  171. }
  172. var row = cell.getRow();
  173. let onclick = rv_instance.ViewerSettings.OnClick.trim();
  174. let InstalledAppId = rv_instance.ViewerSettings.InstalledAppId;
  175. if (onclick) {
  176. onclick = onclick.replace("{{appinstalledappid}}", InstalledAppId.toString());
  177. let row_data = row.getData();
  178. var templateScript = Handlebars.compile(onclick);
  179. onclick = templateScript(row_data);
  180. eval(onclick);
  181. }
  182. },
  183. ajaxProgressiveLoadScrollMargin: 500,
  184. ajaxError: function (errortabletable1, error) {
  185. let id;
  186. id = eval('postmethod1(parameters)');
  187. var userinfo = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  188. id.then(function (res) {
  189. var report = JSON.parse(JSON.parse(res.result).Result.Data);
  190. let column = new PaginationObject();
  191. column.last_page = 1;
  192. column.data = report;
  193. error.setData(column.data);
  194. $('#Viewer_pagintion' + containerid).html(Math.ceil(JSON.parse(JSON.parse(res.result).Result.Data).length) + ' ' + 'of' + ' ' + JSON.parse(res.result).Result.Count);
  195. if (JSON.parse(res.result).Result.Count > 20) {
  196. $(error.element.childNodes[1]).append(`<div class="text-center text-white mt-10-removed mb-20-removed my-2 bg-white-removed"> <a class="btn btn-success m-b btn-list-load-more btn-list-load-more_${containerid} btncount_2" id="btn-list-load-more_${containerid}">More</a></div>`);
  197. $(".btn-list-load-more_" + containerid).unbind().click(function () {
  198. let listsearch = $("#" + containerid).find("#ListSearch").val();
  199. var page = error.element.childNodes[1].lastChild.lastChild.classList[5].match(/\d+/g).map(Number)[0];
  200. let isdynamicfilters = instance._reportViewer.isIdentityFilter(rv_instance.dynamicFilters);
  201. let repObj = new Report();
  202. repObj.ReportId = Number(reportid);
  203. repObj.page = Number(page);
  204. repObj.Filter = rv_instance.dynamicFilters;
  205. repObj.DateFilter = rv_instance.dateFilters;
  206. repObj.InputParameters = rv_instance.inputParameters;
  207. repObj.FilterId = rv_instance.filterId;
  208. repObj.pageSize = instance._reportViewer.PageSize;
  209. repObj.SearchTerm = listsearch ? $("#" + containerid).find("#ListSearch").val().toString() : null;
  210. repObj.IsDynamicFilterApplied = isdynamicfilters;
  211. let method;
  212. method = eval('postmethod1(parameters)');
  213. method.then(function (res) {
  214. error.addData(JSON.parse(res.result).Result.Data, false);
  215. error.element.childNodes[1].lastChild.lastChild.classList.remove('btncount_' + page + '');
  216. error.element.childNodes[1].lastChild.lastChild.classList.add('btncount_' + (page + 1) + '');
  217. let datalength = (error.getDataCount());
  218. if (datalength >= JSON.parse(res.result).Result.Count) {
  219. if (JSON.parse(res.result).Result.Count != 0) {
  220. $("#btn-list-load-more_" + containerid).addClass('hidden');
  221. }
  222. $('#Viewer_pagintion' + containerid).html(JSON.parse(res.result).Result.Count + ' ' + 'of' + ' ' + JSON.parse(res.result).Result.Count);
  223. }
  224. else {
  225. $('#Viewer_pagintion' + containerid).html(Math.ceil(datalength) + ' ' + 'of' + ' ' + JSON.parse(res.result).Result.Count);
  226. }
  227. });
  228. });
  229. }
  230. });
  231. },
  232. ajaxResponse: function (url, params, response) {
  233. var editeditems = {};
  234. var _children = [];
  235. var data = [];
  236. let column = new PaginationObject();
  237. if (response.length > 0) {
  238. var report = JSON.parse(JSON.parse(response.result).Result.Data);
  239. if (instance._reportViewer.ispivottable == true) {
  240. for (let i = 0; i < report.length; i++) {
  241. editeditems = report[i];
  242. if (report[i].haschild == true) {
  243. editeditems["_children"] = [];
  244. }
  245. data.push(editeditems);
  246. }
  247. column.data = data;
  248. }
  249. else if (instance.IsTenure == true) {
  250. column.data = report;
  251. }
  252. else {
  253. column.data = report;
  254. }
  255. let datalength = (instance._reportViewer.table.getDataCount() + JSON.parse(JSON.parse(response.result).Result.Data).length);
  256. $('#Viewer_pagintion' + containerid).html(Math.ceil(datalength) + ' ' + 'of' + ' ' + JSON.parse(response.result).Result.Count);
  257. column.last_page = Math.ceil(JSON.parse(response.result).Result.Count / 20);
  258. return column;
  259. }
  260. },
  261. height: height,
  262. layout: "fitDataFill",
  263. resizableColumns: !instance.isTouchScreen ? true : 'header',
  264. columns: [
  265. { title: "", formatter: autoNumFormatter, frozen: true, minWidth: 40, width: 40 }
  266. ],
  267. rowTap: function (e, row) {
  268. let id = $(row.getTable().element).attr('id').replace(/Viewer_/g, '');
  269. $('.portletwidget-item').attr('data-mobileSwipe', 'false');
  270. $('#' + id).parents('.portletwidget-item').attr('data-mobileSwipe', 'true');
  271. },
  272. dataSorting: function (sorters) {
  273. if (sorters.length > 0) {
  274. var sort = [];
  275. if (rv_instance.sortColumn) {
  276. var Sort;
  277. if (typeof (rv_instance.sortColumn) == 'string') {
  278. Sort = JSON.parse(rv_instance.sortColumn);
  279. }
  280. else {
  281. Sort = rv_instance.sortColumn;
  282. }
  283. var sortCol = Sort.find(s => s.Name == sorters[0].field);
  284. if (sortCol) {
  285. let order = (sortCol.Order.toLowerCase() == "asc") ? "Desc" : "Asc";
  286. sort.push({ "Order": order, "Name": sorters[0].field });
  287. }
  288. else
  289. sort.push({ "Order": sorters[0].dir, "Name": sorters[0].field });
  290. }
  291. else
  292. sort.push({ "Order": sorters[0].dir, "Name": sorters[0].field });
  293. rv_instance.sortColumn = sort;
  294. instance._reportViewer.getReportData(reportid, containerid, reportwidgetdata, null);
  295. }
  296. },
  297. virtualDom: rv_instance.virtualDom,
  298. layoutColumnsOnNewData: true,
  299. dataLoaded: rows => {
  300. if (rows.length && rv_instance.js) {
  301. this.bindWidgetConfigurations(containerid, rows);
  302. }
  303. instance.setTableHolderHeight(containerid);
  304. },
  305. });
  306. rv_instance.table = instance._reportViewer.table;
  307. if (maintabledata.Data == "") {
  308. $(".tabulator-loader").remove();
  309. }
  310. if (filters != null) {
  311. if (tableresponse.TotalRecords == 0) {
  312. $("#Viewer_" + containerid).css("height", "100");
  313. }
  314. else {
  315. $("#Viewer_" + containerid).css("height", "88%");
  316. let calWidth = "67%";
  317. if (window.innerWidth <= 575) {
  318. calWidth = "100%";
  319. }
  320. $("#Viewer_" + containerid).next('.modal-footer').css({ 'position': 'fixed', 'bottom': '0px', 'width': calWidth });
  321. }
  322. }
  323. var len = 0;
  324. if (maintabledata.Data != "") {
  325. len = JSON.parse(maintabledata.Data).length;
  326. if (len >= 5 && instance._reportViewer.IsPortletWidget) {
  327. const viewAllHtml = instance._reportViewer.getViewAllHtml(containerid, 'mobile', reportid);
  328. $(`#Viewer_${containerid}`).find('.tabulator-tableHolder').append(viewAllHtml);
  329. $(`#lnkViewAll_${containerid}`).removeClass("hidden");
  330. }
  331. }
  332. if (instance._reportViewer.IsPortletWidget) {
  333. $("#WidgetTitleLink_" + containerid).addClass('widget-title-link');
  334. $("#ViewerHeader_" + containerid).attr('data-toggle', 'collapse').attr('data-target', "#Viewer_" + containerid);
  335. $("#Viewer_" + containerid).addClass('collapse');
  336. if (reportwidgetdata != "undefined" && reportwidgetdata != null) {
  337. if (reportwidgetdata != 0) {
  338. if (reportwidgetdata.Data.CssProperty != null && reportwidgetdata.Data.CssProperty != undefined && reportwidgetdata.Data.CssProperty != "") {
  339. if (JSON.parse(reportwidgetdata.Data.CssProperty)[0].ReportCollapase != undefined && rv_instance.ViewerSettings.defaultViewerTypeId == Unibase.Platform.Analytics.Reports.Enums.ReportType.Table) {
  340. if (reportwidgetdata.Data.PortletWidgetCss == undefined) {
  341. if (JSON.parse(reportwidgetdata.Data.CssProperty)[0].ReportCollapase == true) {
  342. $("#Viewer_" + containerid).addClass('show');
  343. $("#ViewerHeader_" + containerid).attr('aria-expanded', 'true');
  344. }
  345. else {
  346. $("#Viewer_" + containerid).removeClass('show');
  347. $("#ViewerHeader_" + containerid).attr('aria-expanded', 'false');
  348. $("#Viewer_" + containerid).on('shown.bs.collapse', function () {
  349. if (rv_instance.table)
  350. rv_instance.table.redraw(true);
  351. });
  352. }
  353. }
  354. if (reportwidgetdata.Data.PortletWidgetCss != undefined) {
  355. if (reportwidgetdata.Data.portletWidgetIsCollapse == true) {
  356. $("#Viewer_" + containerid).addClass('show');
  357. $("#ViewerHeader_" + containerid).attr('aria-expanded', 'true');
  358. }
  359. else {
  360. $("#Viewer_" + containerid).removeClass('show');
  361. $("#ViewerHeader_" + containerid).attr('aria-expanded', 'false');
  362. $(`#Viewer_${containerid}`).on('shown.bs.collapse', function () {
  363. if (rv_instance.table)
  364. rv_instance.table.redraw(true);
  365. });
  366. }
  367. }
  368. $("#Viewer_" + containerid).attr('data-iscollapseapplied', 'true');
  369. }
  370. }
  371. }
  372. }
  373. let widgetHeight = instance.widgetHeightNum - Math.abs($("#Viewer_" + containerid).find(".tabulator-header").height());
  374. $("#Viewer_" + containerid).css({ "overflow": "auto", "height": "100%", "max-height": "" + widgetHeight + "px" });
  375. instance._reportViewer.appendWidgetNoDataIcon(maintabledata, containerid);
  376. if (maintabledata.Data === '') {
  377. $("#Viewer_" + containerid).off('shown.bs.collapse').on('shown.bs.collapse', function () {
  378. rv_instance.table.redraw(true);
  379. });
  380. }
  381. }
  382. else {
  383. var checkcontainerid = "#Viewer_" + containerid;
  384. var checkcontainer = checkcontainerid.includes('div_dashboardportletwidget');
  385. let countHtml = '';
  386. const isCountVisible = instance._reportViewer.tabMode && (!checkcontainer || instance.navigationHelper.isReportPopup(containerid));
  387. if (isCountVisible && maintabledata.Data != "") {
  388. countHtml = `<div class="text-center text-white bg-white-removed report-viewer-footer ${isCountVisible ? 'footer-count-wrap' : ''}"><div class="reportCountWrap_${containerid} text-right report-count-wrap font-14"><span class="biz-highlight-bg-color" id="visibleReportCountWrap_${containerid}"><span id="visibleReportCount_${containerid}">0</span> of </span><a href="javascript:;" class="rpt-Count${containerid} biz-highlight-bg-color text-underline" onclick="Unibase.Platform.Analytics.Components.ReportViewer.Instance().getCount(${rv_instance.ReportId}, ${rv_instance.InstalledAppId},'${containerid}');">Get count</a><span class="biz-highlight-bg-color hidden" id="Viewer_pagintion${containerid}">0 of 0</span>
  389. </div>`;
  390. }
  391. else {
  392. countHtml = '<div class="text-center text-white bg-white-removed report-viewer-footer">';
  393. }
  394. const btnHtml = `<div class="btn-group btn-group-sm btn-list-load-more more-btn-group" id="btn-list-load-more_${containerid}">
  395. <a class="btn btn-outline-primary load-more-list-btn btncount_2 rounded-left" id="loadMoreListBtn_${containerid}">More</a>
  396. <button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split rounded-right px-10"
  397. data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  398. <span class="sr-only">Toggle Dropdown</span>
  399. </button>
  400. <div class="dropdown-menu p-1" id="moreBtnDpMenu_${containerid}">
  401. <a class="dropdown-item d-flex align-items-center c-gap-5 showall-link" href="javascript:;" id="showAllLink_${containerid}" onclick="Unibase.Platform.Analytics.Components.ReportViewer.Instance().showAllData(${rv_instance.ReportId}, ${rv_instance.InstalledAppId},'${containerid}');">Next <span class="showall-count" id="showAllCount_${containerid}">500</span><input class="showall-input w-100 ml-1 hidden" id="showAllInput_${containerid}" pattern="[0-9]+"></a>
  402. </div>
  403. </div>`;
  404. if (checkcontainer == true) {
  405. if (tableresponse.TotalRecords > 5 || !reportresponse.result.ReportInfo.IsEnableCount) {
  406. countHtml += btnHtml;
  407. }
  408. }
  409. else {
  410. if (tableresponse.TotalRecords > 15 || !reportresponse.result.ReportInfo.IsEnableCount) {
  411. countHtml += btnHtml;
  412. }
  413. }
  414. countHtml += '</div>';
  415. $(instance._reportViewer.table.element).find('.tabulator-tableHolder').append(countHtml);
  416. instance._reportViewer.bindShowAllCountChangeEvents(containerid);
  417. }
  418. rv_instance.reportDatalength = len;
  419. $(`#visibleReportCount_${containerid}`).text(len);
  420. $('#Viewer_pagintion' + containerid).html(len + ' ' + 'of' + ' ' + tableresponse.TotalRecords);
  421. if ((!containerid.includes('div_dashboardportletwidget') && !instance._reportViewer.IsPortletWidget) || instance.navigationHelper.isReportPopup(containerid)) {
  422. $("#Viewer_" + containerid).find('.tabulator-tableHolder').addClass('pb-10');
  423. }
  424. if (tableresponse.TotalRecords == 0) {
  425. if (tableresponse.Result.Data == "") {
  426. $("#btn-list-load-more_" + containerid).addClass('hidden');
  427. }
  428. else if (instance._reportViewer.PageSize == JSON.parse(tableresponse.Result.Data).length && !reportresponse.result.ReportInfo.IsEnableCount) {
  429. $("#btn-list-load-more_" + containerid).removeClass('hidden');
  430. }
  431. else if (JSON.parse(tableresponse.Result.Data).length < instance._reportViewer.PageSize || JSON.parse(tableresponse.Result.Data).length == 0) {
  432. $("#btn-list-load-more_" + containerid).addClass('hidden');
  433. }
  434. }
  435. else {
  436. if (tableresponse.Result.Data != "") {
  437. if (reportresponse.result.ReportJsonData.TotalRecords == JSON.parse(tableresponse.Result.Data).length)
  438. $("#btn-list-load-more_" + containerid).addClass('hidden');
  439. }
  440. $(`#visibleReportCountWrap_${containerid}`).addClass('d-none');
  441. $(`.reportCountWrap_${containerid} .rpt-Count${containerid}`).addClass("hidden");
  442. $(`#Viewer_pagintion${containerid}`).removeClass('hidden');
  443. }
  444. if (rv_instance.isShowAll && tableresponse.Result.Data != "" && JSON.parse(tableresponse.Result.Data).length < rv_instance.PageSize) {
  445. $("#btn-list-load-more_" + containerid).addClass('hidden');
  446. }
  447. $(`#loadMoreListBtn_${containerid}`).off('click').click(function () {
  448. instance.moreButtonClick(containerid, reportid);
  449. });
  450. var col = [];
  451. columnresponse = res;
  452. if (Unibase.Platform.Analytics.Viewers.TableViewer.Instance().IsSelectable) {
  453. col.push({ title: "", formatter: autoNumFormatter, frozen: true, minWidth: 70, width: 70 }, { title: "", formatter: radioIcon, frozen: true, minWidth: 40, width: 40 });
  454. }
  455. else {
  456. let hozAlign = 'right';
  457. if (isPivotTree) {
  458. hozAlign = 'center';
  459. }
  460. col.push({ title: "", formatter: autoNumFormatter, minWidth: 40, hozAlign: hozAlign, headerHozAlign: hozAlign });
  461. }
  462. if (rv_instance.pivotTypeId != Analytics.Reports.Enums.PivotType.Pivot && reportresponse.result.ReportInfo.PivotTypeId != Analytics.Reports.Enums.PivotType.PivotTreeView) {
  463. let data = instance.setColumns(reportresponse, col);
  464. if (data && data.length) {
  465. maintabledata.Data = data;
  466. }
  467. }
  468. instance._reportViewer.table.redraw(true);
  469. if (rv_instance.pivotTypeId != 0 && !reportresponse.result.ReportInfo.IsTreeExpand) {
  470. res.forEach(c => !c.IsPivotAggrColumn && col.push({ title: c.DisplayText, field: c.AliasName.toLowerCase() }));
  471. instance.pivotReport(containerid, reportresponse, maintabledata, reportresponse.result.ReportInfo.ReportColumns, col, IsPivotColumn, reportid);
  472. yield instance._reportViewer.table.setData(maintabledata.Data).then((rows) => __awaiter(this, void 0, void 0, function* () {
  473. instance._reportViewer.table.redraw(true);
  474. yield instance.setGroupBy(rv_instance, containerid, rows);
  475. }));
  476. }
  477. else if (reportresponse.result.ReportInfo.IsTreeExpand) {
  478. let treedata = instance.getTreeViewData(reportresponse);
  479. yield rv_instance.table.setData(treedata).then((rows) => __awaiter(this, void 0, void 0, function* () {
  480. instance._reportViewer.table.redraw(true);
  481. yield instance.setGroupBy(rv_instance, containerid, treedata);
  482. }));
  483. }
  484. else {
  485. if (maintabledata.Data != "") {
  486. yield rv_instance.table.setData(maintabledata.Data).then((rows) => __awaiter(this, void 0, void 0, function* () {
  487. instance._reportViewer.table.redraw(true);
  488. yield instance.setGroupBy(rv_instance, containerid, maintabledata.Data ? JSON.parse(maintabledata.Data) : []);
  489. }));
  490. }
  491. else {
  492. if (rv_instance.reportResponse && rv_instance.reportResponse.result && !rv_instance.reportResponse.result.ReportInfo.IsAutoData && !rv_instance.dynamicFilters.length && !rv_instance.dateFilters.length) {
  493. $("#" + containerid).find(".tabulator-placeholder").children().children().text("Please select the filter to show data");
  494. }
  495. instance._reportViewer.table.redraw(true);
  496. yield instance.setGroupBy(rv_instance, containerid, maintabledata.Data ? JSON.parse(maintabledata.Data) : []);
  497. }
  498. }
  499. Unibase.Platform.Analytics.Viewers.TableViewer.Instance().table = instance._reportViewer.table;
  500. rv_instance.table = instance._reportViewer.table;
  501. instance.reportManager.getSubReports(reportid).then(function (response) {
  502. return __awaiter(this, void 0, void 0, function* () {
  503. if (response.status == Unibase.Data.Status.Success) {
  504. var subreportdata = response.result;
  505. instance.subreportResponse = subreportdata;
  506. data = subreportdata;
  507. if (subreportdata.length > 0) {
  508. var subdata = subreportdata.find(s => s.RowClick == true);
  509. if (subdata) {
  510. if (subdata.RowClick) {
  511. var hideIcon = function (cell, formatterParams, onRendered) {
  512. $(cell.getElement()).addClass('clickable-cell');
  513. return "<i class='fa fa-plus'></i>";
  514. };
  515. instance._reportViewer.table.addColumn({ formatter: hideIcon, width: 5, title: "", headerSort: false }, true);
  516. }
  517. }
  518. subreportdata.forEach(function (subreport) {
  519. if (subreport.AliasName && instance._reportViewer.table.getColumn(subreport.AliasName)) {
  520. instance._reportViewer.table.getColumn(subreport.AliasName).getCells().forEach(function (cell) {
  521. $(cell.getElement()).addClass("text-underline clickable-cell");
  522. });
  523. }
  524. });
  525. }
  526. yield instance.reportManager.getColumns(reportid).then(function (response) {
  527. instance._reportViewer.pivotparentcolumn = response.result.filter(function (o) { return o.IsPivotParentColumn === true; });
  528. var result = response.result.filter(x => x.GroupByCategory == true);
  529. if (result.length != 0) {
  530. for (var i = 0; i < result.length; i++) {
  531. groupBy.push(result[i].ReportColumnName);
  532. }
  533. }
  534. });
  535. }
  536. });
  537. });
  538. instance.tabulatorColumnHeaderMenu(containerid, res);
  539. if (tableresponse.Result.Data == "") {
  540. instance._reportViewer.table.redraw(true);
  541. }
  542. if (rv_instance.tblGroupedCols && rv_instance.tblGroupedCols.length > 0) {
  543. rv_instance.tblGroupedCols.forEach(function (tg) {
  544. rv_instance.table.hideColumn(tg);
  545. });
  546. }
  547. return instance._reportViewer.table;
  548. });
  549. }
  550. setTableHolderHeight(containerid) {
  551. let deductHeight = 0;
  552. const viewerEl = $("#Viewer_" + containerid);
  553. deductHeight += viewerEl.find('.tabulator-header').prop('scrollHeight');
  554. deductHeight += viewerEl.find('.tabulator-footer').outerHeight(true) || 0;
  555. viewerEl.find(".tabulator-tableHolder").addClass("h-100").css({ "max-height": `calc(100% - ${deductHeight}px)` });
  556. }
  557. setColumnDpMenuPosition(event, id, colId, AliasName) {
  558. event.stopPropagation();
  559. const targetEl = $(event.currentTarget);
  560. if (targetEl.siblings('.column-dp-menu').hasClass('show')) {
  561. targetEl.siblings('.column-dp-menu').removeClass('show');
  562. }
  563. else {
  564. $('#Viewer_' + id + ' .tabulator-header').find('.column-dp-menu.show').removeClass('show');
  565. const elLeftPos = targetEl.offset().left - $('#Viewer_' + id).offset().left;
  566. const headerHeight = $('#Viewer_' + id + ' .tabulator-header').outerHeight(true);
  567. targetEl.siblings('.dropdown-menu_' + colId).css({ position: 'fixed', top: headerHeight, left: elLeftPos }).addClass('show').attr('onclick', 'event.stopPropagation();');
  568. if ($('#Viewer_' + id).width() < (targetEl.offset().left + 200)) {
  569. $('.dropdown-menu_' + colId).find('.sub-dropdown-menu .dropdown-menu').addClass('open-left-side');
  570. }
  571. else {
  572. $('.dropdown-menu_' + colId).find('.sub-dropdown-menu .dropdown-menu').addClass('open-right-side');
  573. }
  574. }
  575. }
  576. tabulatorColumnHeaderMenu(containerId, reportColumns) {
  577. const instance = this;
  578. const selectedColumns = reportColumns;
  579. let reportId = reportColumns[0].ReportId;
  580. var len = selectedColumns.length;
  581. for (var i = 0; i < len; i++) {
  582. let colId = selectedColumns[i].ReportColumnId;
  583. let aliasName = selectedColumns[i].AliasName.replace(" ", "");
  584. let colName = selectedColumns[i].ColumnName;
  585. let html = `<div class="dropdown column-dropdown"><span class="dropdown-toggle no-caret column-dpmenu-icon" onClick="Unibase.Platform.Analytics.Viewers.TableViewer.Instance().setColumnDpMenuPosition(event, '${containerId}', ${colId},'${aliasName}');"><span
  586. class="tabulator-header-menu-button px-0"><i class="las la-ellipsis-v"></i></span></span>
  587. <div class="dropdown-menu column-dp-menu dropdown-radio dropdown-menu-right dropdown-menu_` + colId + `" style="position:relative;">
  588. <div><a class="dropdown-item d-flex align-items-center" href="javascript:;" onclick='Unibase.Platform.Analytics.Viewers.TableViewer.Instance().applySorting("${containerId}","${aliasName}","Asc")'><span class="mr-2"><i class="fa fa-sort-asc" style=" vertical-align: bottom;"></span></i><span>Sort Ascending</span></a></div>
  589. <div><a class="dropdown-item d-flex align-items-center" href="javascript:;" onclick = 'Unibase.Platform.Analytics.Viewers.TableViewer.Instance().applySorting("${containerId}","${aliasName}","Desc")'><span class="mr-2"><i class="fa fa-sort-desc" style=" vertical-align: top;"></i></span><span>Sort Descending</span></a></div>
  590. <div class="dropdown-divider"></div>
  591. <div>
  592. <div class="sub-dropdown-menu show-on-hover">
  593. <a class="dropdown-item" href="javascript:;"><i class="fa fa-filter mr-2"></i><span>Filter</span></a>
  594. <div class="dropdown-menu dropdown-radio" id="dropdown_menu_${aliasName}">
  595. <p class="px-2 mb-2 font-weight-normal text-dark">Show items with value that :</p>
  596. <select class="dropdown-item p-1 coulmn-dp-select border-0 cursor-pointer" id="dynamic_filtering_${aliasName}_exp1" style="outline: none;">
  597. <option selected value="0">is equal to</option>
  598. <option value="1">Is not equal to</option>
  599. <option value="2">Starts with</option>
  600. <option value="3">Contains</option>
  601. <option value="4">Does not contain</option>
  602. <option value="5">Ends with</option>
  603. <option value="6">Is null</option>
  604. <option value="7">Is not null</option>
  605. <option value="8">Is empty</option>
  606. <option value="9">Is not empty</option>
  607. </select>
  608. <a class="dropdown-item p-1" href="javascript:;"><span>
  609. <input type="text" id="dynamic_filtering_${aliasName}_value1" class="border"></span></a>
  610. <select class="dropdown-item p-1 coulmn-dp-select cursor-pointer" id="dynamic_filtering_${aliasName}_operator" style="outline: none;">
  611. <option selected value="0">And</option>
  612. <option value="1">Or</option>
  613. </select>
  614. <select class="dropdown-item p-1 coulmn-dp-select border-0 cursor-pointer" id="dynamic_filtering_${aliasName}_exp2" style="outline: none;">
  615. <option selected value="0">is equal to</option>
  616. <option value="1">Is not equal to</option>
  617. <option value="2">Starts with</option>
  618. <option value="3">Contains</option>
  619. <option value="4">Does not contain</option>
  620. <option value="5">Ends with</option>
  621. <option value="6">Is null</option>
  622. <option value="7">Is not null</option>
  623. <option value="8">Is empty</option>
  624. <option value="9">Is not empty</option>
  625. </select>
  626. <a class="dropdown-item p-1" href="javascript:;"><span>
  627. <input type="text" class="border" id="dynamic_filtering_${aliasName}_value2"></span></a>
  628. <div class="d-flex align-items-center justify-content-between p-1 pt-2">
  629. <a href="javascript:;" class="btn btn-sm btn-outline-primary" onclick='Unibase.Platform.Analytics.Viewers.TableViewer.Instance().applyTableDynamicFiltering("${containerId}","${aliasName}")'>Filter</a>
  630. <a href="javascript:;" class="btn btn-sm btn-outline-danger" onclick='Unibase.Platform.Analytics.Viewers.TableViewer.Instance().clearTableDynamicFiltering("${containerId}","${aliasName}")'>Clear</a></div>
  631. </div>
  632. </div>
  633. </div>
  634. </div>
  635. </div>`;
  636. $("#Viewer_" + containerId).find("[tabulator-field='" + aliasName.toLocaleLowerCase() + "']").find(".tabulator-col-title-holder").prepend(html);
  637. $("#Viewer_" + containerId).find(".tabulator-col-title-holder").addClass('flex-center');
  638. }
  639. this.bindTableDynamicfiltersIfExists(containerId);
  640. }
  641. moreButtonClick(containerid, reportid) {
  642. var instance = this;
  643. let rv_instance = instance._reportViewer.getReportViewerInstance(containerid);
  644. let listsearch = $("#" + containerid).find("#ListSearch").val();
  645. let pagesize = rv_instance.PageSize == 500 ? rv_instance.PageSize : instance._reportViewer.PageSize;
  646. var page = 0;
  647. if (rv_instance.pivotTypeId == Analytics.Reports.Enums.PivotType.PivotTable) {
  648. var pivotTotalRecords = Number($(".pvtTable").attr("data-numrows"));
  649. if (pagesize * rv_instance.Page == pivotTotalRecords) {
  650. rv_instance.Page = rv_instance.Page + 1;
  651. page = rv_instance.Page;
  652. }
  653. }
  654. else {
  655. page = +$(`#loadMoreListBtn_${containerid}`).attr('class').match(/btncount_\d+/)[0].split('_').pop();
  656. }
  657. let { fromDate, toDate } = this._reportViewer.checkForReportDatePicker(reportid, containerid);
  658. if (rv_instance.fromDate && rv_instance.toDate) {
  659. fromDate = rv_instance.fromDate;
  660. toDate = rv_instance.toDate;
  661. }
  662. rv_instance.Page = Number(page);
  663. let isdynamicfilters = instance._reportViewer.isIdentityFilter(rv_instance.dynamicFilters);
  664. let repObj = new Report();
  665. repObj.ReportId = Number(reportid);
  666. repObj.page = rv_instance.Page;
  667. repObj.FilterId = rv_instance.filterId;
  668. repObj.Filter = rv_instance.dynamicFilters;
  669. repObj.InputParameters = rv_instance.inputParameters;
  670. repObj.DateFilter = rv_instance.dateFilters;
  671. repObj.pageSize = pagesize;
  672. repObj.SearchTerm = listsearch ? $("#" + containerid).find("#ListSearch").val().toString() : null;
  673. repObj.IsEnableCount = rv_instance.isEnableCount;
  674. repObj.IsJson = true;
  675. repObj.FromDate = fromDate;
  676. repObj.ToDate = toDate;
  677. repObj.IsDynamicFilterApplied = isdynamicfilters;
  678. let { stringifiedSortColumns } = rv_instance.getStringfySortColsAlongWithGrpByCols(containerid, rv_instance);
  679. if (stringifiedSortColumns) {
  680. repObj.SortColumn = stringifiedSortColumns;
  681. }
  682. if (rv_instance.pivotTypeId != Analytics.Reports.Enums.PivotType.PivotTable) {
  683. $(`#loadMoreListBtn_${containerid}`).addClass(`btncount_${page + 1}`).removeClass(`btncount_${page}`);
  684. }
  685. instance.reportManager.getReportViewerData(repObj).then(function (response) {
  686. if (response.status == Unibase.Data.Status.Success) {
  687. var rptRes = JSON.parse(response.result);
  688. if (rptRes.Data != "") {
  689. let tableData = JSON.parse(rptRes.Data);
  690. let prevData = rv_instance.reportData;
  691. rv_instance.reportData = $.merge(prevData, tableData);
  692. rv_instance.reportDatalength = rv_instance.reportData.length;
  693. if (rv_instance.pivotTypeId == Analytics.Reports.Enums.PivotType.PivotTable) {
  694. return instance.pivotMoreButtonClick(containerid, reportid, rv_instance.reportData);
  695. }
  696. if (rv_instance.pivotTypeId == Analytics.Reports.Enums.PivotType.PivotTreeView) {
  697. for (var i = 0; i < tableData.length; i++) {
  698. if (tableData[i].haschild == true) {
  699. tableData[i]["_children"] = [];
  700. }
  701. }
  702. }
  703. let tableDataJson = JSON.stringify(tableData);
  704. var tabulatorHolder = $("#" + containerid).find(".tabulator-tableHolder");
  705. var scroll = tabulatorHolder.scrollTop();
  706. let { hasImageUrl, data } = instance.checkForImageUrlAndUpdateTableData(rv_instance.reportColumns, tableData);
  707. if (hasImageUrl)
  708. tableDataJson = data;
  709. instance._reportViewer.table.redraw(true);
  710. instance._reportViewer.table.addData(tableDataJson).then((rows) => {
  711. instance._reportViewer.table.redraw(true);
  712. rows = rows.map(x => x._row);
  713. instance.bindWidgetConfigurations(containerid, rows);
  714. tabulatorHolder.scrollTop(scroll);
  715. });
  716. let datalength = (instance._reportViewer.table.getDataCount());
  717. if (datalength >= response.totalRecords) {
  718. if (response.totalRecords != 0)
  719. $("#btn-list-load-more_" + containerid).addClass('hidden');
  720. $('#Viewer_pagintion' + containerid).html(response.totalRecords + ' ' + 'of' + ' ' + response.totalRecords);
  721. }
  722. else {
  723. $('#Viewer_pagintion' + containerid).html(Math.ceil(datalength) + ' ' + 'of' + ' ' + response.totalRecords);
  724. }
  725. rv_instance.reportDatalength = datalength;
  726. $(`#visibleReportCount_${containerid}`).text(datalength);
  727. }
  728. else {
  729. $("#btn-list-load-more_" + containerid).addClass('hidden');
  730. }
  731. }
  732. else {
  733. $(`#loadMoreListBtn_${containerid}`).removeClass(`btncount_${page + 1}`).addClass(`btncount_${page}`);
  734. }
  735. });
  736. }
  737. pivotReport(containerid, reportresponse, maintabledata, res, col, pivotColumn, reportid) {
  738. var res;
  739. return __awaiter(this, void 0, void 0, function* () {
  740. var instance = this;
  741. let reportInfo = reportresponse.result.ReportInfo;
  742. var pivotcol = [];
  743. var pivotreportcoulmn;
  744. var pivotaggrcolumn;
  745. if (pivotColumn.length > 0) {
  746. pivotreportcoulmn = res.filter(function (o) { return o.IsPivotColumn === true; })[0].ReportColumnName;
  747. }
  748. let IsPivotRow = res.filter(function (o) { return o.IsPivotRow === true; });
  749. if (IsPivotRow.length > 0) {
  750. if (instance._reportBuilder.DataSourceId == 0 || instance._reportBuilder.DataSourceId == Platform.DataSources.Enums.DataSource.Sql || instance._reportBuilder.DataSourceId == Platform.DataSources.Enums.DataSource.MySql) {
  751. IsPivotRow.forEach(c => pivotcol.push({ title: c.DisplayText, field: c.ReportColumnName.toLowerCase(), bottomCalc: instance._reportBuilder.getAggregationName(c.TableAggrTypeId) }));
  752. }
  753. else {
  754. IsPivotRow.forEach(c => pivotcol.push({ title: c.DisplayText, field: c.ReportColumnName, bottomCalc: instance._reportBuilder.getAggregationName(c.TableAggrTypeId) }));
  755. }
  756. let pivotarry = {
  757. title: pivotreportcoulmn,
  758. columns: pivotcol
  759. };
  760. col.push(pivotarry);
  761. instance._reportBuilder.tabulatorColumns = col;
  762. instance._reportViewer.table.setColumns(col);
  763. }
  764. if (reportInfo.PivotTypeId == Analytics.Reports.Enums.PivotType.Pivot) {
  765. instance.pivoting(reportInfo.DataListId, pivotColumn, pivotreportcoulmn, col);
  766. }
  767. else if (reportInfo.PivotTypeId == Analytics.Reports.Enums.PivotType.TreeView) {
  768. var pivotdata = instance.treeView_Children(maintabledata);
  769. maintabledata.Data = pivotdata;
  770. }
  771. else if (reportInfo.PivotTypeId == Analytics.Reports.Enums.PivotType.PivotTreeView) {
  772. instance.pivoting(reportInfo.DataListId, pivotColumn, pivotreportcoulmn, col);
  773. var pivotdata = instance.treeView_Children(maintabledata);
  774. maintabledata.Data = pivotdata;
  775. }
  776. else if (reportInfo.PivotTypeId == Analytics.Reports.Enums.PivotType.TimeInterval) {
  777. let tenurearr = instance.tenureReport(res);
  778. col.push(tenurearr);
  779. instance._reportViewer.table.setColumns(col);
  780. }
  781. });
  782. }
  783. treeView_Children(maintabledata) {
  784. var instance = this;
  785. var pivotdata = [];
  786. var editeditems = {};
  787. if (instance._reportViewer.ispivottable == true) {
  788. var TableData = [];
  789. if (maintabledata.Data != "" && maintabledata.Data != "") {
  790. TableData = JSON.parse(maintabledata.Data);
  791. }
  792. for (let i = 0; i < TableData.length; i++) {
  793. editeditems = TableData[i];
  794. if (TableData[i].haschild == true) {
  795. editeditems["_children"] = [];
  796. }
  797. pivotdata.push(editeditems);
  798. }
  799. }
  800. return pivotdata;
  801. }
  802. pivoting(datalistid, pivot, pivotcoulmn, col) {
  803. var instance = this;
  804. var pobj = {
  805. pivotColumnId: pivot[0].ReportColumnId,
  806. pivotColumnName: pivot[0].ReportColumnName,
  807. pivotDataType: pivot[0].PivotDateType,
  808. pivotAggregationColumnName: pivotcoulmn
  809. };
  810. instance.pivot_PivotRows(pobj, datalistid, pivotcoulmn, col);
  811. }
  812. pivot_PivotRows(pobj, dataListId, pivotcoulmn, col) {
  813. return __awaiter(this, void 0, void 0, function* () {
  814. var instance = this;
  815. var pivotcol = [];
  816. var AggrFuncId = 0;
  817. if (pobj.pivotDataType == Analytics.Reports.Enums.AggregationType.year) {
  818. AggrFuncId = Analytics.Reports.Enums.AggregationType.year;
  819. }
  820. else if (pobj.pivotDataType == Analytics.Reports.Enums.AggregationType.month) {
  821. AggrFuncId = Analytics.Reports.Enums.AggregationType.month;
  822. }
  823. instance.dataListId = dataListId;
  824. instance.pivotColumns = new PivotColumns();
  825. yield instance.getDistinctData(pobj.pivotColumnId, pobj.pivotColumnName, AggrFuncId);
  826. if (instance.pivotColumns.PivotRows) {
  827. instance.pivotColumns.PivotRows.forEach(c => pivotcol.push({ title: c, field: c }));
  828. var pivotCol_Index = col.findIndex(function (c) { return (c.title === pivotcoulmn); });
  829. if (pivotCol_Index > -1) {
  830. col.splice(pivotCol_Index, 1, ...pivotcol);
  831. }
  832. instance._reportBuilder.tabulatorColumns = col;
  833. instance._reportViewer.table.setColumns(col);
  834. }
  835. });
  836. }
  837. tenureReport(res) {
  838. let TenureReportColumn = res.filter(function (o) { return o.IsPivotColumn === true; })[0].ReportColumnName;
  839. var timeInterval = res.filter(function (o) { return o.IsPivotColumn === true; })[0].TimeInterval.split(',');
  840. var tenure = [];
  841. for (var t = 0; t < timeInterval.length; t++) {
  842. var start = 0;
  843. if (t != timeInterval.length - 1) {
  844. if (t == 0) {
  845. start = Number(timeInterval[t]);
  846. }
  847. else {
  848. start = Number(timeInterval[t]) + 1;
  849. }
  850. var end = timeInterval[t + 1];
  851. tenure.push(start + "-" + end);
  852. }
  853. else {
  854. tenure.push(">" + timeInterval[t]);
  855. }
  856. }
  857. let TenureCol = [];
  858. for (var t = 0; t < tenure.length; t++) {
  859. TenureCol.push({ title: tenure[t], field: tenure[t], visible: true });
  860. }
  861. let tenureArray = {
  862. title: TenureReportColumn,
  863. columns: TenureCol
  864. };
  865. return tenureArray;
  866. }
  867. setColumns(reportresponse, col) {
  868. var instance = this;
  869. var rptInfo = reportresponse.result.ReportInfo;
  870. var rptCols = reportresponse.result.ReportInfo.ReportColumns;
  871. var maintabledata = reportresponse.result.ReportJsonData.Result;
  872. rptCols = rptCols.filter(x => x.Isvisible == true);
  873. const underlineFormatter = function (cell) {
  874. if (instance.subreportResponse.length) {
  875. instance.subreportResponse.forEach(function (subreport) {
  876. if (subreport.AliasName == cell.getField()) {
  877. $(cell.getElement()).addClass("text-underline");
  878. return false;
  879. }
  880. });
  881. }
  882. return cell.getValue();
  883. };
  884. if (rptInfo.DataSourceId == 0 || rptInfo.DataSourceId == Platform.DataSources.Enums.DataSource.Sql || rptInfo.DataSourceId == Platform.DataSources.Enums.DataSource.MySql) {
  885. rptCols.forEach((c) => {
  886. const colHozAlign = instance.getColHorizontalAlign(c);
  887. col.push({ title: c.DisplayText, field: c.AliasName.toLowerCase(), bottomCalc: instance._reportBuilder.getAggregationName(c.TableAggrTypeId), bottomCalcParams: { precision: 2 }, hozAlign: colHozAlign, headerHozAlign: colHozAlign, formatter: underlineFormatter, visible: true });
  888. });
  889. }
  890. else {
  891. rptCols.forEach((c) => {
  892. const colHozAlign = instance.getColHorizontalAlign(c);
  893. col.push({ title: c.DisplayText, field: c.ReportColumnName, bottomCalc: instance._reportBuilder.getAggregationName(c.TableAggrTypeId), bottomCalcParams: { precision: 2 }, hozAlign: colHozAlign, headerHozAlign: colHozAlign, formatter: underlineFormatter, visible: true });
  894. });
  895. }
  896. let isRowTotal = rptCols.find(rt => rt.IsRowTotal == true) ? true : false;
  897. if (isRowTotal) {
  898. col.push({ title: "Total", field: "total", bottomCalc: "none", bottomCalcParams: { precision: 2 }, headerHozAlign: "right", hozAlign: "right", visible: true, cssClass: "font-weight-600" });
  899. }
  900. if (maintabledata.Data) {
  901. let { hasImageUrl, data, tabulatorColumns } = instance.checkForImgUrlAndUpdateTableDataAndTabuCols(rptCols, JSON.parse(maintabledata.Data), col);
  902. if (hasImageUrl)
  903. col = tabulatorColumns;
  904. instance._reportBuilder.tabulatorColumns = col;
  905. instance._reportViewer.table.setColumns(col);
  906. if (hasImageUrl)
  907. return data;
  908. }
  909. else {
  910. instance._reportBuilder.tabulatorColumns = col;
  911. instance._reportViewer.table.setColumns(col);
  912. }
  913. }
  914. checkForImgUrlAndUpdateTableDataAndTabuCols(reportColumns, tableData, tabulatorColumns) {
  915. let hasImageUrl;
  916. let imageUrlRows = reportColumns.filter(function (x) { return x.IsImageUrl; });
  917. if (tableData && tableData.length) {
  918. for (var i = 0; i < imageUrlRows.length; i++) {
  919. let idx = tabulatorColumns.findIndex(x => x.field == imageUrlRows[i].AliasName.toLowerCase());
  920. if (idx > -1) {
  921. tabulatorColumns[idx]["formatter"] = "image";
  922. tabulatorColumns[idx]["formatterParams"] = {
  923. height: "50px",
  924. width: "50px",
  925. };
  926. hasImageUrl = true;
  927. }
  928. tableData.forEach((row) => row[imageUrlRows[i].AliasName] = _appsettings.asset_url() + "/" + row[imageUrlRows[i].AliasName]);
  929. }
  930. }
  931. return { data: JSON.stringify(tableData), tabulatorColumns: tabulatorColumns, hasImageUrl: hasImageUrl };
  932. }
  933. checkForImageUrlAndUpdateTableData(reportColumns, tableData) {
  934. let hasImageUrl;
  935. let imageUrlRows = reportColumns.filter(function (x) { return x.IsImageUrl; });
  936. if (tableData) {
  937. for (var i = 0; i < imageUrlRows.length; i++) {
  938. hasImageUrl = true;
  939. tableData.forEach((row) => row[imageUrlRows[i].AliasName] = _appsettings.asset_url() + "/" + row[imageUrlRows[i].AliasName]);
  940. }
  941. }
  942. return { data: JSON.stringify(tableData), hasImageUrl: hasImageUrl };
  943. }
  944. getColHorizontalAlign(col) {
  945. let colHozAlign = '';
  946. if (col.DataType == Analytics.Reports.Enums.DataType.decimal || col.DataType == Analytics.Reports.Enums.DataType.int32 || col.DataType == Analytics.Reports.Enums.DataType.int64) {
  947. colHozAlign = 'right';
  948. }
  949. else if (col.DataType == Analytics.Reports.Enums.DataType.date || col.DataType == Analytics.Reports.Enums.DataType.dateTime) {
  950. colHozAlign = 'center';
  951. }
  952. else {
  953. colHozAlign = 'left';
  954. }
  955. return colHozAlign;
  956. }
  957. isPivot(reportresponse) {
  958. var instance = this;
  959. var pivotdata = reportresponse.result.filter(function (o) { return o.IsPivotAggrColumn === true; });
  960. if (pivotdata.length > 0) {
  961. instance._reportViewer.ispivottable = true;
  962. }
  963. }
  964. isTenure(reportresponse) {
  965. var instance = this;
  966. var tenure = reportresponse.result.filter(function (o) { return o.IsTenureApplied === true; });
  967. if (tenure.length > 0) {
  968. instance.IsTenure = true;
  969. }
  970. }
  971. getDistinctData(colId, colName, AggrFuncId) {
  972. return __awaiter(this, void 0, void 0, function* () {
  973. var instance = this;
  974. instance.pivotColumns.ColumnName = "";
  975. var cf_fromDate = btoa(Unibase.Platform.Helpers.NavigationHelper.commonFilter_FromDate);
  976. var cf_toDate = btoa(Unibase.Platform.Helpers.NavigationHelper.commonFilter_ToDate);
  977. yield Unibase.Platform.Analytics.Managers.ReportManager.Instance().getDistinctColumnData(instance.dataListId, colName, AggrFuncId, cf_fromDate, cf_toDate).then(function (response) {
  978. if (response != "") {
  979. let PivotRows = [];
  980. instance.pivotColumns.ColumnName = colName;
  981. for (var i = 0; i < response.length; i++) {
  982. PivotRows.push(response[i][colName]);
  983. }
  984. if ($("#PivotRows_Select2").is(":visible")) {
  985. $("#PivotRows_Select2").select2({
  986. placeholder: 'Select Pivot Rows',
  987. data: PivotRows
  988. });
  989. }
  990. instance.pivotColumns.PivotRows = PivotRows;
  991. }
  992. });
  993. });
  994. }
  995. generatesubtables(e, row, level, rowposition, isfirstlevel, mainreportid, subreportid, containerid) {
  996. var instance = this;
  997. function subtablesArray(subarray, e, row, level, rowpostion) {
  998. return __awaiter(this, void 0, void 0, function* () {
  999. if (row._row.cells[0].element == e.target || row._row.cells[0].element == e.target.parentElement) {
  1000. if ($(row._row.element.children[0]).find('i').eq(0).hasClass('fa-plus')) {
  1001. $(row._row.element.children[0]).find('i').eq(0).removeClass('fa-plus').addClass('fa-minus');
  1002. }
  1003. else {
  1004. $(row._row.element.children[0]).find('i').eq(0).removeClass('fa-minus').addClass('fa-plus');
  1005. }
  1006. }
  1007. else {
  1008. $(row._row.element.children[0]).find('i').eq(0).removeClass('fa-minus').addClass('fa-plus');
  1009. }
  1010. if (typeof (subarray) == 'string') {
  1011. subarray = JSON.parse(subarray);
  1012. }
  1013. if (subarray.length > 0) {
  1014. for (const item of subarray) {
  1015. if ($(row._row.getElement()).find(`#subTable_sub_${rowposition}_${item.ChildReportId}_${item.SubReportId}_${subreportid[1]}`).length > 0) {
  1016. const subTableEl = $(`#subTable_sub_${rowposition}_${item.ChildReportId}_${item.SubReportId}_${subreportid[1]}`);
  1017. if (subTableEl.is(':visible')) {
  1018. subTableEl.hide();
  1019. continue;
  1020. }
  1021. else {
  1022. $(row._row.getElement()).find('.subtable').hide();
  1023. subTableEl.show();
  1024. }
  1025. }
  1026. $(row._row.getElement()).find('.subtable').hide();
  1027. instance.reportManager.getSubReports(item.ChildReportId).then(function (subresponse) {
  1028. const contanierId = instance.navigationHelper.getLastContainerId();
  1029. let parentcontainerid = contanierId + "_" + mainreportid;
  1030. const rv_instance_parentreport = instance._reportViewer.getReportViewerInstance(parentcontainerid);
  1031. const rv_instance = instance._reportViewer.getReportViewerInstance(contanierId);
  1032. const datetimeIns = Unibase.Platform.Helpers.DateTimeHelper.Instance();
  1033. var subReportFilters = [];
  1034. if (rv_instance && rv_instance.dynamicFilters && rv_instance.dynamicFilters.length) {
  1035. subReportFilters = subReportFilters.concat(rv_instance.dynamicFilters);
  1036. }
  1037. subReportFilters = subReportFilters.filter((f, i, a) => a.findIndex(f2 => (f.ParameterName === f2.ParameterName)) === i);
  1038. var filters = JSON.parse(item.Filters);
  1039. var value = 0;
  1040. for (var i = 0; i < filters.length; i++) {
  1041. let fill = filters[i];
  1042. let paramValCol = (fill.ParameterValue.trim()).replace('@', '');
  1043. if (!fill.Isvalue)
  1044. value = (eval("row.getData()." + fill.ParameterName + ""));
  1045. else
  1046. value = fill.ParameterName;
  1047. let expid = instance.getExpId(fill.Operator);
  1048. subReportFilters.push({
  1049. ParameterName: paramValCol.trim(),
  1050. ParameterValue: value.toString(),
  1051. ExpOp: expid
  1052. });
  1053. }
  1054. var fromDate = "";
  1055. var toDate = "";
  1056. var cf_fromDate = Unibase.Platform.Helpers.NavigationHelper.commonFilter_FromDate;
  1057. var cf_toDate = Unibase.Platform.Helpers.NavigationHelper.commonFilter_ToDate;
  1058. if (cf_fromDate != null && cf_toDate != null) {
  1059. fromDate = cf_fromDate.toString();
  1060. toDate = cf_toDate.toString();
  1061. }
  1062. else {
  1063. fromDate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateformat(new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().currentDate()), "YYYY/MM/DD");
  1064. toDate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateformat(new Date(Unibase.Platform.Helpers.DateTimeHelper.Instance().currentDate()), "YYYY/MM/DD");
  1065. }
  1066. if (rv_instance && rv_instance.reportResponse && rv_instance.reportResponse.result && rv_instance.reportResponse.result.ReportInfo && rv_instance.reportResponse.result.ReportInfo.IsEnableGlobalDatepicker) {
  1067. let dyFilDate = $("#dynamic-filters" + containerid).find("#report-daterange" + containerid + "-1").val();
  1068. if (dyFilDate) {
  1069. cf_fromDate = datetimeIns.formatLocalDateformat(cf_fromDate, "DD/MM/YYYY");
  1070. cf_toDate = datetimeIns.formatLocalDateformat(cf_toDate, "DD/MM/YYYY");
  1071. if (dyFilDate != cf_fromDate + " - " + cf_toDate) {
  1072. fromDate = dyFilDate.split("-")[0].trim();
  1073. toDate = dyFilDate.split("-")[1].trim();
  1074. }
  1075. }
  1076. }
  1077. let subrpt_PostData = {
  1078. ReportId: item.ChildReportId,
  1079. Filter: subReportFilters,
  1080. LinkSubReport: true,
  1081. pageSize: instance._reportViewer.PageSize,
  1082. page: 0,
  1083. IsJson: true,
  1084. FromDate: fromDate,
  1085. ToDate: toDate,
  1086. viewerTypeId: rv_instance && rv_instance.ViewerSettings && rv_instance.ViewerSettings.selectedViewerTypeId,
  1087. DisplayModeTypeId: instance._reportViewer.getDisplayModeTypeId(),
  1088. IsDynamicFilterApplied: rv_instance_parentreport && rv_instance_parentreport.IsDynamicFilterApplied
  1089. };
  1090. instance.reportManager.getReportInfo(subrpt_PostData).then(function (subrpt_response) {
  1091. if (subrpt_response.status == Unibase.Data.Status.Error) {
  1092. return MessageHelper.Instance().showError(subrpt_response.message, rv_instance.parentContainerId + " #div_ErrorMessage");
  1093. }
  1094. if (subrpt_response.result.ReportJsonData.Status == Unibase.Data.Status.Error) {
  1095. return MessageHelper.Instance().showError(subrpt_response.result.ReportJsonData.Message, "div_ErrorMessage", "." + contanierId);
  1096. }
  1097. else {
  1098. var holderEl = document.createElement("div");
  1099. var tableEl = document.createElement("div");
  1100. holderEl.style.boxSizing = "border-box";
  1101. holderEl.style.padding = "10px 10px 10px 10px";
  1102. holderEl.style.borderTop = "1px solid #333";
  1103. holderEl.style.borderBottom = "1px solid #333";
  1104. holderEl.style.background = "#ddd";
  1105. holderEl.setAttribute('id', "subTable_sub_" + (rowposition) + "_" + item.ChildReportId + "_" + item.SubReportId + "_" + subreportid[1] + "");
  1106. holderEl.setAttribute('class', "subTable_sub_" + level + "_" + (value + 1) + " subtable");
  1107. tableEl.style.border = "1px solid #333";
  1108. tableEl.setAttribute('class', "subTable_sub" + (value + 1) + "");
  1109. tableEl.setAttribute('id', "subTable_sub" + item.ChildReportId + "_" + subreportid[1] + "");
  1110. holderEl.appendChild(tableEl);
  1111. row.getElement().appendChild(holderEl);
  1112. var subTable = new Tabulator(tableEl, {
  1113. layout: "fitColumns",
  1114. virtualDom: true,
  1115. virtualDomBuffer: 300,
  1116. columnMinWidth: 120,
  1117. movableRows: true,
  1118. tooltips: true,
  1119. movableColumns: true,
  1120. resizableColumns: !instance.isTouchScreen ? true : 'header',
  1121. cellClick: function (e, cell) {
  1122. var subres = JSON.parse(subresponse.result.toString());
  1123. instance.tableCellClick(e, cell, level, mainreportid, subres, containerid);
  1124. }
  1125. });
  1126. let cols = [];
  1127. var subrptCols = subrpt_response.result.ReportInfo.ReportColumns;
  1128. subrptCols = subrptCols.filter(x => x.Isvisible == true);
  1129. subrptCols.forEach((c) => {
  1130. const colHozAlign = instance.getColHorizontalAlign(c);
  1131. if (subrpt_response.result.DataSourceId == Number(Platform.DataSources.Enums.DataSource.MongoDB)) {
  1132. cols.push({ title: c.DisplayText, field: c.AliasName, hozAlign: colHozAlign, headerHozAlign: colHozAlign });
  1133. }
  1134. else {
  1135. cols.push({ title: c.DisplayText, field: c.AliasName.toLowerCase(), hozAlign: colHozAlign, headerHozAlign: colHozAlign });
  1136. }
  1137. });
  1138. var subreportdata = subrpt_response.result.ReportJsonData && subrpt_response.result.ReportJsonData.Result && subrpt_response.result.ReportJsonData.Result.Data;
  1139. if (subreportdata && typeof (subreportdata) == 'string') {
  1140. subreportdata = JSON.parse(subreportdata);
  1141. }
  1142. if (subreportdata && subreportdata.length) {
  1143. let { hasImageUrl, data, tabulatorColumns } = instance.checkForImgUrlAndUpdateTableDataAndTabuCols(subrptCols, subreportdata, cols);
  1144. if (hasImageUrl) {
  1145. subreportdata = JSON.parse(data);
  1146. cols = tabulatorColumns;
  1147. }
  1148. }
  1149. subTable.setColumns(cols);
  1150. if (subreportdata && subreportdata.length) {
  1151. var subfill = subreportdata.find(s => s.RowClick == true);
  1152. if (subfill) {
  1153. var hideIcon = function (cell, formatterParams, onRendered) {
  1154. $(cell.getElement()).addClass('clickable-cell');
  1155. return "<i class='fa fa-plus' id=" + item.ChildReportId + "></i>";
  1156. };
  1157. subTable.addColumn({ formatter: hideIcon, width: 5, title: "Icon", headerSort: false }, true);
  1158. }
  1159. }
  1160. else {
  1161. $(holderEl).find(".tabulator-tableHolder").html(`<div class='alert alert-primary text-center mb-0 border-0 w-100 font-14 rounded-0'>No data available</div>`);
  1162. }
  1163. if (subrpt_response.result.ReportJsonData.TotalRecords > 15) {
  1164. subTable.element.childNodes[1].insertAdjacentHTML('beforeend', `<div class="text-center text-white my-10 bg-white-removed"> <a class="btn btn-success m-b btn-list-load-more btn-list-load-more_` + containerid + ` btncount_2" id = "btn-list-load-more_` + containerid + ` " pagination=` + containerid + `>More<i class=""> </i></a></div>`);
  1165. $(".btn-list-load-more_" + containerid).unbind().click(function (ele) {
  1166. let listsearch = $("#" + containerid).find("#ListSearch").val();
  1167. var containr = $(ele.currentTarget).attr("pagination");
  1168. var page = subTable.element.childNodes[1].lastChild.lastChild.classList[5].match(/\d+/g).map(Number)[0];
  1169. let isdynamicfilters = instance._reportViewer.isIdentityFilter(rv_instance.dynamicFilters);
  1170. let repObj = new ReportObject();
  1171. repObj.ReportId = item.ChildReportId;
  1172. repObj.Filter = subReportFilters;
  1173. repObj.LinkSubReport = true;
  1174. repObj.pageSize = instance._reportViewer.PageSize;
  1175. repObj.page = page;
  1176. repObj.IsJson = true;
  1177. repObj.FromDate = fromDate;
  1178. repObj.ToDate = toDate;
  1179. repObj.IsDynamicFilterApplied = isdynamicfilters;
  1180. instance.reportManager.getReportViewerData(repObj).then(function (res) {
  1181. var subres = JSON.parse(res.result);
  1182. subTable.addData(subres.Data, false);
  1183. subTable.element.childNodes[1].lastChild.lastChild.classList.remove('btncount_' + page + '');
  1184. subTable.element.childNodes[1].lastChild.lastChild.classList.add('btncount_' + (page + 1) + '');
  1185. let datalength = (subTable.getDataCount());
  1186. if (datalength >= subres.totalRecords) {
  1187. $("#btn-list-load-more_" + containr + "").addClass('hidden');
  1188. }
  1189. });
  1190. });
  1191. }
  1192. if (subreportdata && subreportdata.length) {
  1193. subTable.setData(subreportdata);
  1194. let tableHeaderWidth = $("#Viewer_" + containerid + ' .tabulator-headers').width();
  1195. let viewAllTableHeaderWidth = $("#Viewer_" + containerid + '_viewall .tabulator-headers').width();
  1196. $("#Viewer_" + containerid + ' .subtable').css('width', tableHeaderWidth - 18);
  1197. $("#Viewer_" + containerid + '_viewall .subtable').css('width', viewAllTableHeaderWidth - 18);
  1198. }
  1199. }
  1200. });
  1201. });
  1202. }
  1203. }
  1204. });
  1205. }
  1206. if (!e1)
  1207. var e1 = window.event;
  1208. e1.cancelBubble = true;
  1209. if (e1.stopPropagation)
  1210. e1.stopPropagation();
  1211. instance.reportManager.getSubReportById(subreportid).then(function (response) {
  1212. if (response.status == Unibase.Data.Status.Success && response.result.length) {
  1213. var subreportdata = response.result;
  1214. if (subreportdata.length > 0) {
  1215. subtablesArray(subreportdata, e, row, level, rowposition);
  1216. }
  1217. }
  1218. });
  1219. }
  1220. tableCellClick(e, cell, level, mainreportid, subres, containerid) {
  1221. var instance = this;
  1222. var appliedFilters = [];
  1223. if (subres.length != 0) {
  1224. var subrpt = subres.find(s => s.AliasName == cell["_cell"].column.definition.field);
  1225. if (subrpt) {
  1226. var row = cell.getRow();
  1227. let row_data = row.getData();
  1228. if (subrpt.SubReportTypeId == Unibase.Platform.Analytics.Reports.Enums.SubReportType.Detail) {
  1229. var onclick = `Unibase.Platform.Helpers.NavigationHelper.Instance().loadDetail({{${subrpt.PrimaryKeyColumn}}},{{appinstalledappid}},null,null);`;
  1230. onclick = onclick.replace("{{appinstalledappid}}", subrpt.InstalledAppId);
  1231. onclick = onclick.replace("{{" + subrpt.PrimaryKeyColumn + "}}", row_data[subrpt.PrimaryKeyColumn]);
  1232. var templateScript = Handlebars.compile(onclick);
  1233. onclick = templateScript(row_data);
  1234. eval(onclick);
  1235. }
  1236. else {
  1237. if (!subrpt.Inline) {
  1238. const rv_instance = instance._reportViewer.getReportViewerInstance(containerid);
  1239. if (rv_instance && rv_instance.dynamicFilters && rv_instance.dynamicFilters.length) {
  1240. const dynamicFilters = $.extend(true, [], rv_instance.dynamicFilters);
  1241. dynamicFilters.forEach(filter => {
  1242. filter.IsSubReportFilter = true;
  1243. });
  1244. appliedFilters = appliedFilters.concat(dynamicFilters);
  1245. }
  1246. var subRepFilters = JSON.parse(subrpt.Filters);
  1247. subRepFilters = subRepFilters.filter(item1 => appliedFilters.some(item2 => item1.ParameterName === item2.ParameterName));
  1248. for (var i = 0; i < subRepFilters.length; i++) {
  1249. let fill = subRepFilters[i];
  1250. let value = row_data[fill.ParameterName.trim()];
  1251. let expid = instance.getExpId(fill.Operator);
  1252. if (fill.Isvalue)
  1253. value = fill.ParameterName;
  1254. appliedFilters.push({
  1255. ParameterName: fill.ParameterValue.trim(),
  1256. ParameterValue: value.toString(),
  1257. ExpOp: expid, IsSubReportFilter: true
  1258. });
  1259. }
  1260. instance._reportViewer.dynamicFilters = appliedFilters.filter((f, i, a) => a.findIndex(f2 => (f.ParameterName === f2.ParameterName)) === i);
  1261. instance._reportViewer.isSubReport = true;
  1262. return instance._reportViewer.report_ViewAll(subrpt.ChildReportId, 0, "_linkedreport_" + subrpt.ChildReportId);
  1263. }
  1264. else {
  1265. return instance.generatesubtables(e, row, level, row.getPosition(false), true, mainreportid, subrpt.SubReportId, containerid + "_" + subrpt.SubReportId);
  1266. }
  1267. }
  1268. }
  1269. }
  1270. }
  1271. getExpId(Operator) {
  1272. var expid = Platform.Core.Enums.ExpressionOperator.Equals;
  1273. switch (Operator) {
  1274. case "Equals":
  1275. expid = Platform.Core.Enums.ExpressionOperator.Equals;
  1276. break;
  1277. case "NotEquals":
  1278. expid = Platform.Core.Enums.ExpressionOperator.NotEquals;
  1279. break;
  1280. case "GreaterThan":
  1281. expid = Platform.Core.Enums.ExpressionOperator.GreaterThan;
  1282. break;
  1283. case "GreaterThanOrEquals":
  1284. expid = Platform.Core.Enums.ExpressionOperator.GreaterThanOrEquals;
  1285. break;
  1286. case "LessThan":
  1287. expid = Platform.Core.Enums.ExpressionOperator.LessThan;
  1288. break;
  1289. case "LessThanOrEquals":
  1290. expid = Platform.Core.Enums.ExpressionOperator.LessThanOrEquals;
  1291. break;
  1292. case "EqualsColumn":
  1293. expid = Platform.Core.Enums.ExpressionOperator.EqualsColumn;
  1294. break;
  1295. case "NotEqualsColumn":
  1296. expid = Platform.Core.Enums.ExpressionOperator.NotEqualsColumn;
  1297. break;
  1298. case "LessThanColumn":
  1299. expid = Platform.Core.Enums.ExpressionOperator.LessThanColumn;
  1300. break;
  1301. case "LessThanOrEqualsColumn":
  1302. expid = Platform.Core.Enums.ExpressionOperator.LessThanOrEqualsColumn;
  1303. break;
  1304. case "GreaterThanColumn":
  1305. expid = Platform.Core.Enums.ExpressionOperator.GreaterThanColumn;
  1306. break;
  1307. case "GreaterThanOrEqualsColumn":
  1308. expid = Platform.Core.Enums.ExpressionOperator.GreaterThanOrEqualsColumn;
  1309. break;
  1310. }
  1311. return expid;
  1312. }
  1313. Export(reportid, reportname) {
  1314. let instance = this;
  1315. var obj = {
  1316. ReportId: Number(reportid)
  1317. };
  1318. $.when(instance.reportManager.getReportViewerData(obj)).done(function (response) {
  1319. if (response.Count >= 100) {
  1320. Unibase.Platform.Analytics.Managers.ReportManager.Instance().startDownloadLargeFile(obj).then(function (Response) {
  1321. });
  1322. }
  1323. else {
  1324. instance.exportdata = response;
  1325. Unibase.Platform.Analytics.Viewers.TableViewer.Instance().table.download("xlsx", "" + reportname + ".xlsx");
  1326. }
  1327. });
  1328. }
  1329. getTreeViewData(reportresponse) {
  1330. var instance = this;
  1331. if (reportresponse.result.ReportJsonData.Result.Data != "") {
  1332. let parentrecords = [];
  1333. let reportjsondata = JSON.parse(reportresponse.result.ReportJsonData.Result.Data);
  1334. parentrecords = reportjsondata.filter(function (col) {
  1335. return col.parentid == reportresponse.result.ReportInfo.PivotValue;
  1336. });
  1337. if (parentrecords.length == 0) {
  1338. parentrecords = reportjsondata;
  1339. }
  1340. for (var p = 0; p < parentrecords.length; p++) {
  1341. let childrecords = _children(parentrecords[p].childid);
  1342. if (childrecords != undefined) {
  1343. parentrecords[p]["_children"] = [];
  1344. parentrecords[p]._children = childrecords;
  1345. }
  1346. }
  1347. function _children(childid) {
  1348. let childrecords = instance.gettreeChildRecords(reportjsondata, childid);
  1349. if (childrecords.length > 0) {
  1350. for (var c = 0; c < childrecords.length; c++) {
  1351. let subchilds = _children(childrecords[c].childid);
  1352. if (subchilds != undefined) {
  1353. childrecords[c]["_children"] = [];
  1354. childrecords[c]._children = subchilds;
  1355. }
  1356. }
  1357. return childrecords;
  1358. }
  1359. }
  1360. return parentrecords;
  1361. }
  1362. }
  1363. gettreeChildRecords(reportjsondata, childid) {
  1364. return reportjsondata.filter(function (col) {
  1365. return col.parentid == childid;
  1366. });
  1367. }
  1368. loadPivotTable(reportid, containerid, reportresponse) {
  1369. return __awaiter(this, void 0, void 0, function* () {
  1370. var instance = this;
  1371. if (reportresponse.result != "") {
  1372. var maintabledata = reportresponse.result.ReportJsonData.Result;
  1373. if (maintabledata.Data != "") {
  1374. var rptData = JSON.parse(maintabledata.Data);
  1375. if (rptData != "") {
  1376. instance.fileCacheHelper.loadCssFile("libs/pivottable/css/pivot.css", function () {
  1377. instance.fileCacheHelper.loadJsFile("libs/pivottable/js/pivot.js", function () {
  1378. instance.pivotTable(reportid, containerid, rptData);
  1379. });
  1380. });
  1381. }
  1382. else {
  1383. instance.showPivotTableNoDataMsg(containerid);
  1384. }
  1385. }
  1386. else {
  1387. instance.showPivotTableNoDataMsg(containerid);
  1388. }
  1389. }
  1390. else {
  1391. instance.showPivotTableNoDataMsg(containerid);
  1392. }
  1393. });
  1394. }
  1395. showPivotTableNoDataMsg(containerid) {
  1396. $(`#Viewer_${containerid}`).html(`<div class="biz-custom-scrollbar templateviewer-body h-100"><div class="alert alert-primary text-center mb-0 border-0 rounded-0 w-100 font-14 font-weight-500">No data available</div></div>`);
  1397. }
  1398. pivotTable(reportid, containerid, rptData) {
  1399. var instance = this;
  1400. let rv_instance = instance._reportViewer.getReportViewerInstance(containerid);
  1401. rv_instance.pivotTableRowCols = [];
  1402. rv_instance.pivotTableColumnCols = [];
  1403. if (rv_instance.reportColumns.length != 0) {
  1404. for (var p = 0; p < rv_instance.reportColumns.length; p++) {
  1405. if (rv_instance.reportColumns[p].Isvisible) {
  1406. if (rv_instance.reportColumns[p].IsPivotTableCol) {
  1407. rv_instance.pivotTableColumnCols.push("" + rv_instance.reportColumns[p].AliasName + "");
  1408. }
  1409. else {
  1410. rv_instance.pivotTableRowCols.push("" + rv_instance.reportColumns[p].AliasName + "");
  1411. }
  1412. }
  1413. if (rv_instance.reportColumns[p].IsPivotAggrColumn) {
  1414. rv_instance.pivotTableAggCol = rv_instance.reportColumns[p].AliasName;
  1415. rv_instance.pivotTableAgg = instance.getAggregation(rv_instance.reportColumns[p].AggrFuncId);
  1416. }
  1417. }
  1418. }
  1419. var pivotTableObj = {
  1420. Cols: rv_instance.pivotTableColumnCols,
  1421. Rows: rv_instance.pivotTableRowCols,
  1422. AggCol: rv_instance.pivotTableAggCol,
  1423. PivotTableAgg: rv_instance.pivotTableAgg,
  1424. EnablePTConfig: rv_instance.enablePivotTableConfig
  1425. };
  1426. instance.fileCacheHelper.loadJsFileAsync("platform/analytics/enums/pivottableaggregationtype.js", function () {
  1427. return __awaiter(this, void 0, void 0, function* () {
  1428. yield instance.pivotUI(reportid, containerid, rptData, pivotTableObj);
  1429. });
  1430. });
  1431. }
  1432. getAggregation(aggid) {
  1433. let aggrName = "";
  1434. switch (aggid) {
  1435. case Unibase.Platform.Analytics.Reports.Enums.AggregationType.sum:
  1436. aggrName = "Sum";
  1437. break;
  1438. }
  1439. return aggrName;
  1440. }
  1441. pivotUI(reportid, containerid, rptData, pivotTableObj) {
  1442. return __awaiter(this, void 0, void 0, function* () {
  1443. var instance = this;
  1444. let rv_instance = instance._reportViewer.getReportViewerInstance(containerid);
  1445. var pt_subreportdata = [];
  1446. var underlineCols = [];
  1447. yield instance.reportManager.getSubReports(reportid).then(function (response) {
  1448. return __awaiter(this, void 0, void 0, function* () {
  1449. if (response.status == Unibase.Data.Status.Success) {
  1450. pt_subreportdata = response.result;
  1451. for (var s = 0; s < pt_subreportdata.length; s++) {
  1452. var col = rv_instance.reportColumns.find(x => x.ReportColumnId == pt_subreportdata[s].ReportColumnId);
  1453. if (col) {
  1454. underlineCols.push(col.AliasName);
  1455. }
  1456. }
  1457. }
  1458. });
  1459. });
  1460. let viewerEl = $("#Viewer_" + containerid);
  1461. let viewerHeaderEl = $("#ViewerHeader_" + containerid);
  1462. const tpl = $.pivotUtilities.aggregatorTemplates;
  1463. let pivotAggrTypeId = 0;
  1464. let aggCol = [];
  1465. let agg = "Count";
  1466. if (rv_instance.reportColumns.length > 0) {
  1467. var rptCol = rv_instance.reportColumns.find(pt => pt.PivotTableAggrTypeId != 0);
  1468. if (rptCol != undefined && rptCol.PivotTableAggrTypeId != 0) {
  1469. pivotAggrTypeId = rptCol.PivotTableAggrTypeId;
  1470. aggCol = [rptCol.ReportColumnName];
  1471. }
  1472. }
  1473. if (pivotAggrTypeId == 0 && pivotTableObj.AggCol != "") {
  1474. aggCol = [pivotTableObj.AggCol];
  1475. agg = pivotTableObj.PivotTableAgg;
  1476. }
  1477. else {
  1478. var aggrtypeid = instance.getPivotTableAggregationType(pivotAggrTypeId);
  1479. agg = aggrtypeid;
  1480. }
  1481. viewerEl.pivotUI(rptData, {
  1482. cols: pivotTableObj.Cols,
  1483. rows: pivotTableObj.Rows,
  1484. vals: aggCol,
  1485. aggregatorName: agg,
  1486. rendererName: "Table",
  1487. rendererOptions: {
  1488. table: {
  1489. clickCallback: function (e, value, rowData, pivotData) {
  1490. for (var f = 0; f < pt_subreportdata.length; f++) {
  1491. var col = rv_instance.reportColumns.find(x => x.ReportColumnId == pt_subreportdata[f].ReportColumnId);
  1492. if (col) {
  1493. if (col.AliasName == pivotData.colAttrs[0]) {
  1494. var filter = [];
  1495. instance._reportViewer.dateFilters = [];
  1496. var filters = JSON.parse(pt_subreportdata[f].Filters);
  1497. for (var i = 0; i < filters.length; i++) {
  1498. let fill = filters[i];
  1499. let value = rowData[fill.ParameterName.trim()];
  1500. let expid = instance.getExpId(fill.Operator);
  1501. if (fill.Isvalue)
  1502. value = fill.ParameterName;
  1503. if (fill.ParameterValue.indexOf("date") > -1) {
  1504. var dt = new Date(value.split("/").reverse().join("-"));
  1505. var dd = dt.getDate();
  1506. var mm = dt.getMonth() + 1;
  1507. var yy = dt.getFullYear();
  1508. var date = yy + "/" + mm + "/" + dd;
  1509. instance._reportViewer.dateFilters.push({ ParameterName: fill.ParameterName, FromDate: date, ToDate: date });
  1510. }
  1511. else {
  1512. filter.push({
  1513. ParameterName: fill.ParameterValue.trim(),
  1514. ParameterValue: value.toString(),
  1515. ExpOp: expid
  1516. });
  1517. }
  1518. }
  1519. instance._reportViewer.dynamicFilters = filter;
  1520. return instance._reportViewer.report_ViewAll(pt_subreportdata[f].ChildReportId, 0, "_linkedreport_" + pt_subreportdata[f].ChildReportId);
  1521. }
  1522. }
  1523. }
  1524. }
  1525. }
  1526. },
  1527. onRefresh: function (config) {
  1528. const pvtTableEl = viewerEl.find('.pvtTable');
  1529. $(`#exportCSVBtn_${containerid}`).removeClass('d-none');
  1530. $(`#DownloadReport_${containerid}`).addClass('d-none');
  1531. underlineCols.forEach((column) => {
  1532. if (pvtTableEl.find(`.pvtAxisLabel:contains("${column}")`).siblings('.pvtColLabel').length > 0) {
  1533. pvtTableEl.find('.pvtVal[data-value!="null"]').addClass('text-underline');
  1534. return;
  1535. }
  1536. let colSpan = 0;
  1537. pvtTableEl.find(`.pvtAxisLabel:contains("${column}")`).prevAll('th[colspan]').each(function (i, e) {
  1538. if (Number($(e).attr("colspan")) > 0) {
  1539. colSpan += Number($(e).attr("colspan"));
  1540. }
  1541. });
  1542. if (pvtTableEl.find(`.pvtAxisLabel:contains("${column}")`).length) {
  1543. let columnIndex = pvtTableEl.find(`.pvtAxisLabel:contains("${column}")`).index() + colSpan;
  1544. pvtTableEl.find(`tbody tr`).each(function (i, e) {
  1545. $(e).find('.pvtRowLabel').eq(columnIndex).addClass('text-underline');
  1546. });
  1547. }
  1548. });
  1549. if (rv_instance.reportResponse.result.ReportInfo.Js != "") {
  1550. eval(rv_instance.reportResponse.result.ReportInfo.Js);
  1551. }
  1552. }
  1553. });
  1554. if (!pivotTableObj.EnablePTConfig) {
  1555. viewerEl.find('.pvtUiCell').addClass('d-none');
  1556. viewerEl.find('.pvtRendererArea').addClass('pa-0');
  1557. }
  1558. Unibase.Platform.Helpers.NavigationHelper.Instance().hideLoading();
  1559. viewerEl.addClass('pivot-ui-tableview');
  1560. viewerEl.find('button').each(function (i, e) {
  1561. if ($(e).text().toLowerCase().includes('cancel')) {
  1562. $(e).addClass('btn btn-outline-danger btn-sm');
  1563. }
  1564. else {
  1565. $(e).addClass('btn btn-primary btn-sm');
  1566. }
  1567. });
  1568. });
  1569. }
  1570. getPivotTableAggregationType(aggrTypeId) {
  1571. var aggrName = "";
  1572. switch (aggrTypeId) {
  1573. case Analytics.Reports.Enums.PivotTableAggregationType.Count:
  1574. aggrName = "Count";
  1575. break;
  1576. case Analytics.Reports.Enums.PivotTableAggregationType.ListUniqueValues:
  1577. aggrName = "List Unique Values";
  1578. break;
  1579. }
  1580. return aggrName;
  1581. }
  1582. pivotMoreButtonClick(containerid, reportid, rptData) {
  1583. var instance = this;
  1584. let rv_instance = instance._reportViewer.getReportViewerInstance(containerid);
  1585. $(".pvtUi").remove();
  1586. var pivotTableObj = {
  1587. Cols: rv_instance.pivotTableColumnCols,
  1588. Rows: rv_instance.pivotTableRowCols,
  1589. AggCol: rv_instance.pivotTableAggCol,
  1590. EnablePTConfig: rv_instance.enablePivotTableConfig
  1591. };
  1592. instance.pivotUI(reportid, containerid, rptData, pivotTableObj);
  1593. }
  1594. applySorting(ContainerId, AliasName, Order) {
  1595. let rv_ins = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(ContainerId);
  1596. let col = rv_ins.reportColumns.find(x => x.AliasName == AliasName);
  1597. if (col) {
  1598. if (typeof (rv_ins.sortColumn) == 'string')
  1599. rv_ins.sortColumn = JSON.parse(rv_ins.sortColumn);
  1600. let sortCol = rv_ins.sortColumn.find(x => x.Name == AliasName);
  1601. if (sortCol) {
  1602. sortCol.Order = Order;
  1603. }
  1604. else {
  1605. rv_ins.sortColumn = [{ Name: AliasName, Order: Order }];
  1606. }
  1607. rv_ins.getReportData(rv_ins.ReportId, ContainerId, "", "");
  1608. }
  1609. }
  1610. applyTableDynamicFiltering(ContainerId, AliasName) {
  1611. let rv_ins = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(ContainerId);
  1612. let dropDownElement = $("#" + ContainerId).find(`#dropdown_menu_${AliasName}`);
  1613. if (dropDownElement.length) {
  1614. let option1Val = dropDownElement.find(`#dynamic_filtering_${AliasName}_value1`).val();
  1615. let option2Val = dropDownElement.find(`#dynamic_filtering_${AliasName}_value2`).val();
  1616. let expOp1Text = dropDownElement.find(`#dynamic_filtering_${AliasName}_exp1`).find(":selected").text();
  1617. let expOp2Text = dropDownElement.find(`#dynamic_filtering_${AliasName}_exp2`).find(":selected").text();
  1618. let expOpJoinOp = Number(dropDownElement.find(`#dynamic_filtering_${AliasName}_operator`).val()) + 1;
  1619. if (option1Val) {
  1620. if (!rv_ins.tableDynamicFilters.find(x => x.Key == AliasName && x.Value == option1Val)) {
  1621. rv_ins.inputParameters.push({ Key: AliasName, Value: option1Val, ExpOp: this.getOperatorForTableDynamicFilter(expOp1Text) });
  1622. rv_ins.tableDynamicFilters.push({ Key: AliasName, Value: option1Val, ExpOp: this.getOperatorForTableDynamicFilter(expOp1Text) });
  1623. }
  1624. }
  1625. if (option2Val) {
  1626. if (!rv_ins.tableDynamicFilters.find(x => x.Key == AliasName && x.Value == option2Val)) {
  1627. rv_ins.inputParameters.push({ Key: AliasName, Value: option2Val, ExpOp: this.getOperatorForTableDynamicFilter(expOp2Text), ConjectiveOp: expOpJoinOp });
  1628. rv_ins.tableDynamicFilters.push({ Key: AliasName, Value: option2Val, ExpOp: this.getOperatorForTableDynamicFilter(expOp2Text), ConjectiveOp: expOpJoinOp });
  1629. }
  1630. }
  1631. rv_ins.loadFilteredReport(rv_ins.ReportId, 0, ContainerId);
  1632. }
  1633. }
  1634. clearTableDynamicFiltering(ContainerId, AliasName) {
  1635. let rv_ins = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(ContainerId);
  1636. let ipIdx = rv_ins.inputParameters.findIndex(x => x.Key == AliasName);
  1637. let tdfIdx = rv_ins.tableDynamicFilters.findIndex(x => x.Key == AliasName);
  1638. while (ipIdx > -1) {
  1639. rv_ins.inputParameters.splice(ipIdx, 1);
  1640. ipIdx = rv_ins.inputParameters.findIndex(x => x.Key == AliasName);
  1641. }
  1642. while (tdfIdx > -1) {
  1643. rv_ins.tableDynamicFilters.splice(tdfIdx, 1);
  1644. ipIdx = rv_ins.tableDynamicFilters.findIndex(x => x.Key == AliasName);
  1645. }
  1646. let dropDownElement = $("#" + ContainerId).find(`#dropdown_menu_${AliasName}`);
  1647. if (dropDownElement.length) {
  1648. dropDownElement.find(`#dynamic_filtering_${AliasName}_value1`).val("");
  1649. dropDownElement.find(`#dynamic_filtering_${AliasName}_value2`).val("");
  1650. dropDownElement.find(`#dynamic_filtering_${AliasName}_exp1`).val("0");
  1651. dropDownElement.find(`#dynamic_filtering_${AliasName}_exp2`).val("0");
  1652. dropDownElement.find(`#dynamic_filtering_${AliasName}_operator`).val("0");
  1653. }
  1654. rv_ins.loadFilteredReport(rv_ins.ReportId, 0, ContainerId);
  1655. }
  1656. getOperatorForTableDynamicFilter(OperatorName) {
  1657. let exp;
  1658. switch (OperatorName) {
  1659. case "is equal to":
  1660. exp = Platform.Core.Enums.ExpressionOperator.Equals;
  1661. break;
  1662. case "Is not equal to":
  1663. exp = Platform.Core.Enums.ExpressionOperator.NotEquals;
  1664. break;
  1665. case "Starts with":
  1666. exp = Platform.Core.Enums.ExpressionOperator.StartsWith;
  1667. break;
  1668. case "Contains":
  1669. exp = Platform.Core.Enums.ExpressionOperator.Contains;
  1670. break;
  1671. case "Does not contain":
  1672. exp = Platform.Core.Enums.ExpressionOperator.DoesNotContains;
  1673. break;
  1674. case "Ends with":
  1675. exp = Platform.Core.Enums.ExpressionOperator.EndsWith;
  1676. break;
  1677. case "Is null":
  1678. exp = Platform.Core.Enums.ExpressionOperator.IsNull;
  1679. break;
  1680. case "Is not null":
  1681. exp = Platform.Core.Enums.ExpressionOperator.IsNotNull;
  1682. break;
  1683. case "Is empty":
  1684. exp = Platform.Core.Enums.ExpressionOperator.Empty;
  1685. break;
  1686. case "Is not empty":
  1687. exp = Platform.Core.Enums.ExpressionOperator.NotEmpty;
  1688. break;
  1689. }
  1690. return exp;
  1691. }
  1692. bindTableDynamicfiltersIfExists(containerId) {
  1693. let rv_instance = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(containerId);
  1694. if (rv_instance && rv_instance.tableDynamicFilters && rv_instance.tableDynamicFilters.length) {
  1695. var fils = rv_instance.tableDynamicFilters;
  1696. for (var i = 0; i < fils.length; i++) {
  1697. let fil = fils[i];
  1698. let col = $(`[tabulator-field='${fil.Key}'].tabulator-col`);
  1699. if (fil.ConjectiveOp) {
  1700. col.find(`#dynamic_filtering_${fil.Key}_value2`).val(fil.Value);
  1701. col.find(`#dynamic_filtering_${fil.Key}_exp2`).val(fil.ExpOp - 1);
  1702. col.find(`#dynamic_filtering_${fil.Key}_operator`).val(fil.ConjectiveOp - 1);
  1703. }
  1704. else {
  1705. col.find(`#dynamic_filtering_${fil.Key}_value1`).val(fil.Value);
  1706. col.find(`#dynamic_filtering_${fil.Key}_exp1`).val(fil.ExpOp - 1);
  1707. }
  1708. }
  1709. }
  1710. }
  1711. bindWidgetConfigurations(containerid, rows) {
  1712. this.fileCacheHelper.loadJsFiles(["platform/forms/managers/formmanager.js", "platform/forms/components/formviewer/formviewer.js", "platform/core/helpers/token/tokenhelper.js"], () => {
  1713. let rv_instance = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(containerid);
  1714. if (rv_instance.js) {
  1715. let { jsToEval, statusconditions, widgetconditions } = this.getWidgetConfigsHtml(rv_instance.js, containerid);
  1716. if (jsToEval) {
  1717. var templateScript = Handlebars.compile(jsToEval);
  1718. for (var i = 0; i < rv_instance.table.rowManager.activeRows.length; i++) {
  1719. var rowElement = rv_instance.table.rowManager.activeRows[i].element;
  1720. var rowsData = rv_instance.table.rowManager.activeRows[i].data;
  1721. let compliedScript = templateScript(rowsData);
  1722. eval(compliedScript);
  1723. }
  1724. }
  1725. if (statusconditions) {
  1726. if (rows != null) {
  1727. for (var i = 0; i < rows.length; i++) {
  1728. var model = rows[i];
  1729. var condition = Unibase.Core.Helpers.TokenHelper.Instance().replace(statusconditions, model);
  1730. eval(condition);
  1731. }
  1732. }
  1733. }
  1734. if (widgetconditions) {
  1735. widgetconditions = widgetconditions.replaceAll("\\", "");
  1736. eval(widgetconditions);
  1737. }
  1738. }
  1739. });
  1740. }
  1741. getWidgetConfigsHtml(jsToEval, containerId) {
  1742. let rv_ins = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(containerId);
  1743. let _queryParser = Unibase.Platform.DataSources.Components.QueryParser.Instance();
  1744. let _templateViewer = Unibase.Platform.Analytics.Viewers.TemplateViewer.Instance();
  1745. var statusconditions = "";
  1746. var designhtml = '';
  1747. var widgetconditions = '';
  1748. var sub = '';
  1749. let portletWidgetId = Number(containerId.split("_")[2]);
  1750. let htmlIdx = jsToEval.indexOf("html(");
  1751. if (htmlIdx != -1) {
  1752. let htmlStartString = jsToEval.slice(htmlIdx + 5);
  1753. let closingIdx = _queryParser.getIndexOfCorrespondingCloseBracket(htmlStartString);
  1754. let widgetHtml = htmlStartString.substring(0, closingIdx - 1);
  1755. widgetHtml = widgetHtml.replaceAll("\\", "").replaceAll("`", "");
  1756. let TemplateText = HtmlHelper.getHelper().decode(widgetHtml);
  1757. let widgetitemid = $(TemplateText).find("#hf_widgetitem_Id").val();
  1758. if (TemplateText.indexOf('widgetitem_config') > -1) {
  1759. var detailsub = jsToEval.substring(jsToEval.indexOf('widgetitem_config') - 15, jsToEval.indexOf('widgetitem_config') + 40);
  1760. sub = detailsub.substring(detailsub.indexOf('<div'), detailsub.indexOf('</div>') + 6);
  1761. if (rv_ins.reportWidgetData != null) {
  1762. if (rv_ins.reportWidgetData.AppConfigurations.WidgetItemGrouped.length != 0) {
  1763. var widgetitemgrouped = rv_ins.reportWidgetData.AppConfigurations.WidgetItemGrouped;
  1764. designhtml = `<div class='dropdown widget-item-config-dp'><a href='javascript:;' class='no-caret pull-right dropdown-link btn btn-icon btn-flush-biz-theme btn-rounded flush-soft-hover w-25p h-25p' data-toggle='dropdown'><span class="btn-icon-wrap"><i class='fa fa-ellipsis-h dropdown-icon text-dark'></i></span></a><ul class='dropdown-menu pull-right clearfix'><li class='dropdown-menu-item hidden'>`;
  1765. for (var i = 0; i < widgetitemgrouped.length; i++) {
  1766. var sname = widgetitemgrouped[i].SettingName.replace(/ /g, '');
  1767. var onlickurl = "";
  1768. let jsfunction1 = "";
  1769. if (widgetitemgrouped[i].JsFunction != null && widgetitemgrouped[i].JsFunction != "")
  1770. jsfunction1 = HtmlHelper.getHelper().decode(widgetitemgrouped[i].JsFunction);
  1771. if (widgetitemgrouped[i].SettingUrlType == 4) {
  1772. statusconditions += HtmlHelper.getHelper().decode(widgetitemgrouped[i].JsFunction);
  1773. var onclick = widgetitemgrouped[i].SettingUrl.replace(/ /g, '');
  1774. onlickurl = onclick;
  1775. }
  1776. else {
  1777. onlickurl = _templateViewer.load_appconfigurations(widgetitemgrouped[i], TemplateText, portletWidgetId);
  1778. if (jsfunction1 != null && jsfunction1 != "") {
  1779. if (jsfunction1.indexOf("{{") > -1 || jsfunction1.indexOf("}}") > -1) {
  1780. statusconditions += jsfunction1 + ";";
  1781. }
  1782. else {
  1783. widgetconditions += jsfunction1 + ";";
  1784. }
  1785. }
  1786. }
  1787. if (!Unibase.Themes.Compact.Components.Details.Instance().isSystemLock || (Unibase.Themes.Compact.Components.Details.Instance().isSystemLock && widgetitemgrouped[i].ExcludeFromLock)) {
  1788. designhtml += '<li id="li_' + containerId + '"><a class="dropdown-item" href="javascript:;" id="widgetconfig_' + widgetitemid + '_' + sname + '" onclick="' + onlickurl + '">' + widgetitemgrouped[i].SettingName + '</a></li>';
  1789. }
  1790. }
  1791. designhtml += "</li></ul></div>";
  1792. _templateViewer.autoFixConfigDpVisibility(containerId);
  1793. }
  1794. if (rv_ins.reportWidgetData.AppConfigurations.WidgetItemUnGrouped.length != 0) {
  1795. designhtml += "<div class='pull-right'>";
  1796. var WidgetItemUnGrouped = rv_ins.reportWidgetData.AppConfigurations.WidgetItemUnGrouped;
  1797. for (var i = 0; i < WidgetItemUnGrouped.length; i++) {
  1798. var sname = WidgetItemUnGrouped[i].SettingName.replace(/ /g, '');
  1799. let jsfunction2 = "";
  1800. if (WidgetItemUnGrouped[i].JsFunction != null && WidgetItemUnGrouped[i].JsFunction != "")
  1801. jsfunction2 = HtmlHelper.getHelper().decode(WidgetItemUnGrouped[i].JsFunction);
  1802. onlickurl = WidgetItemUnGrouped[i].SettingUrl;
  1803. if (jsfunction2 != null && jsfunction2 != "") {
  1804. if (jsfunction2.indexOf("{{") > -1 || jsfunction2.indexOf("}}") > -1) {
  1805. statusconditions += jsfunction2 + ";";
  1806. }
  1807. else {
  1808. widgetconditions += jsfunction2 + ";";
  1809. }
  1810. }
  1811. if (!Unibase.Themes.Compact.Components.Details.Instance().isSystemLock || (Unibase.Themes.Compact.Components.Details.Instance().isSystemLock && WidgetItemUnGrouped[i].ExcludeFromLock)) {
  1812. designhtml += ' <span class="mr-10"><a href="javascript:;" id="widgetconfig_' + widgetitemid + '_' + sname + '" onclick="' + onlickurl + '">' +
  1813. '<i class="' + WidgetItemUnGrouped[i].Icon + '"></i>' +
  1814. '</a> </span>';
  1815. }
  1816. }
  1817. designhtml += "</div>";
  1818. }
  1819. jsToEval = jsToEval.replace(sub, designhtml);
  1820. let iconhtml = "";
  1821. let threeDotsHtml = '<div class="mx-2 my-auto"><a href="javascript:void(0);" id="dropdownMenuButton_' + containerId + '" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-ellipsis-v"></i></a><div class="dropdown-menu drop-Button_' + containerId + '" aria-labelledby="dropdownMenuButton_"' + containerId + '></div></div>';
  1822. if (rv_ins.reportWidgetData.AppConfigurations != null && rv_ins.reportWidgetData.Data.ReportId == rv_ins.ReportId) {
  1823. var widgetcreate = rv_ins.reportWidgetData.AppConfigurations.WidgetGrouped.filter(o => o.AppConfigType === 3);
  1824. if (widgetcreate.length > 0) {
  1825. var onlickurl_grouped = "";
  1826. for (var i = 0; i < widgetcreate.length; i++) {
  1827. var createjsfunction = "";
  1828. var settingdesignhtml = "";
  1829. if (widgetcreate[i].JsFunction != null && widgetcreate[i].JsFunction != "")
  1830. createjsfunction = HtmlHelper.getHelper().decode(widgetcreate[i].JsFunction);
  1831. if (widgetcreate[i].SettingDesignHtml != null && widgetcreate[i].SettingDesignHtml != "")
  1832. settingdesignhtml = HtmlHelper.getHelper().decode(widgetcreate[i].SettingDesignHtml);
  1833. onlickurl_grouped = _templateViewer.load_appconfigurations(widgetcreate[i], TemplateText, portletWidgetId);
  1834. if (!Unibase.Themes.Compact.Components.Details.Instance().isSystemLock || (Unibase.Themes.Compact.Components.Details.Instance().isSystemLock && widgetcreate[i].ExcludeFromLock)) {
  1835. let details_btn_p = 'pr-3';
  1836. if (Unibase.Platform.Membership.Infos.Identity.getCurrentUser().isAdmin) {
  1837. details_btn_p = '';
  1838. }
  1839. if ((widgetcreate[i].Icon == "null" || widgetcreate[i].Icon == "") && widgetcreate[i].SettingUrlType == 3) {
  1840. iconhtml += '<span class="' + details_btn_p + '"><a href="javascript:;" class="nav-link biz-highlight-bg-color" id="LinkButton" title="' + widgetcreate[i].SettingName + '" onclick="' + onlickurl_grouped + '"><i class=""></i>' + settingdesignhtml + '</a></span>';
  1841. }
  1842. else if ((widgetcreate[i].Icon == "null" || widgetcreate[i].Icon == "") && (widgetcreate[i].SettingUrlType == 10 || widgetcreate[i].SettingUrlType == 11)) {
  1843. iconhtml += '<span class="' + details_btn_p + '"><a href="javascript:;" class="nav-link biz-highlight-bg-color btn btn-sm btn-outline-primary" id="LinkButton" title="' + widgetcreate[i].SettingName + '" onclick="' + onlickurl_grouped + '">' + widgetcreate[i].SettingName + '</a></span>';
  1844. }
  1845. else {
  1846. iconhtml += '<span class="' + details_btn_p + '"><a href="javascript:;" class="nav-link biz-highlight-bg-color" id="LinkButton" title="' + widgetcreate[i].SettingName + '" onclick="' + onlickurl_grouped + '"><i class="' + widgetcreate[i].Icon + '"></i></a></span>';
  1847. }
  1848. }
  1849. if (createjsfunction != null && createjsfunction != "") {
  1850. if (createjsfunction.indexOf("{{") > -1 || createjsfunction.indexOf("}}") > -1) {
  1851. statusconditions += createjsfunction + ";";
  1852. }
  1853. else {
  1854. widgetconditions += createjsfunction + ";";
  1855. }
  1856. }
  1857. }
  1858. $(".sp_widget_create_" + containerId + "").addClass('d-flex flex-row align-items-center');
  1859. $(".sp_widget_create_" + containerId + "").html(iconhtml);
  1860. }
  1861. let widgetUngrouped = rv_ins.reportWidgetData.AppConfigurations.WidgetUnGrouped.filter(function (o) { return o.AppConfigType === 3; });
  1862. if (widgetUngrouped.length > 0) {
  1863. $(".sp_widget_create_" + containerId).parent().addClass('align-items-center').append(threeDotsHtml);
  1864. let onlickurl_ungrouped = "", Ungroupedhtml = '';
  1865. for (var i = 0; i < widgetUngrouped.length; i++) {
  1866. var jsfunction = HtmlHelper.getHelper().decode(widgetUngrouped[i].JsFunction);
  1867. onlickurl_ungrouped = _templateViewer.load_appconfigurations(widgetUngrouped[i], TemplateText, portletWidgetId);
  1868. if (!Unibase.Themes.Compact.Components.Details.Instance().isSystemLock || (Unibase.Themes.Compact.Components.Details.Instance().isSystemLock && widgetcreate[i].ExcludeFromLock)) {
  1869. if (widgetUngrouped[i].Icon == "null" || widgetUngrouped[i].Icon == "" && widgetUngrouped[i].SettingUrlType == 3) {
  1870. Ungroupedhtml += '<a href="javascript:;" class="nav-link biz-highlight-bg-color" id="LinkButton" title="' + widgetUngrouped[i].SettingName + '" onclick="' + onlickurl_ungrouped + '"><i class=""></i>' + HtmlHelper.getHelper().decode(widgetUngrouped[i].SettingDesignHtml) + '</a>';
  1871. }
  1872. else {
  1873. Ungroupedhtml += '<a href="javascript:;" class="nav-link d-flex flex-row" id="LinkButton" title="' + widgetUngrouped[i].SettingName + '" onclick="' + onlickurl_ungrouped + '"><span>' + widgetUngrouped[i].SettingName + '</span><i class="ml-auto my-auto font-14 ' + widgetUngrouped[i].Icon + '"></i></a>';
  1874. }
  1875. }
  1876. if (jsfunction != null && jsfunction != "") {
  1877. if (jsfunction.indexOf("{{") > -1 || jsfunction.indexOf("}}") > -1) {
  1878. statusconditions += jsfunction + ";";
  1879. }
  1880. else {
  1881. widgetconditions += jsfunction + ";";
  1882. }
  1883. }
  1884. }
  1885. $('.drop-Button_' + containerId).empty().append(Ungroupedhtml);
  1886. }
  1887. }
  1888. }
  1889. }
  1890. }
  1891. return { jsToEval, statusconditions, widgetconditions };
  1892. }
  1893. setGroupBy(rv_instance, containerid, rows) {
  1894. return __awaiter(this, void 0, void 0, function* () {
  1895. if (rv_instance.tblGroupedCols && rv_instance.tblGroupedCols.length) {
  1896. rv_instance.table.options.dataTree = false;
  1897. yield rv_instance.table.setGroupBy(rv_instance.tblGroupedCols);
  1898. }
  1899. if (rv_instance.js) {
  1900. this.bindWidgetConfigurations(containerid, rows);
  1901. }
  1902. });
  1903. }
  1904. static Instance() {
  1905. if (this._instance === undefined)
  1906. this._instance = new TableViewer();
  1907. return this._instance;
  1908. }
  1909. }
  1910. Viewers.TableViewer = TableViewer;
  1911. })(Viewers = Analytics.Viewers || (Analytics.Viewers = {}));
  1912. })(Analytics = Platform.Analytics || (Platform.Analytics = {}));
  1913. })(Platform = Unibase.Platform || (Unibase.Platform = {}));
  1914. })(Unibase || (Unibase = {}));