Built files from Bizgaze WebServer
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

tableviewer.js 146KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914
  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 filter = [];
  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. filter = filter.concat(dynamicFilters);
  1245. }
  1246. var filters = JSON.parse(subrpt.Filters);
  1247. for (var i = 0; i < filters.length; i++) {
  1248. let fill = filters[i];
  1249. let value = row_data[fill.ParameterName.trim()];
  1250. let expid = instance.getExpId(fill.Operator);
  1251. if (fill.Isvalue)
  1252. value = fill.ParameterName;
  1253. filter.push({
  1254. ParameterName: fill.ParameterValue.trim(),
  1255. ParameterValue: value.toString(),
  1256. ExpOp: expid, IsSubReportFilter: true
  1257. });
  1258. }
  1259. instance._reportViewer.dynamicFilters = filter.filter((f, i, a) => a.findIndex(f2 => (f.ParameterName === f2.ParameterName)) === i);
  1260. instance._reportViewer.isSubReport = true;
  1261. return instance._reportViewer.report_ViewAll(subrpt.ChildReportId, 0, "_linkedreport_" + subrpt.ChildReportId);
  1262. }
  1263. else {
  1264. return instance.generatesubtables(e, row, level, row.getPosition(false), true, mainreportid, subrpt.SubReportId, containerid + "_" + subrpt.SubReportId);
  1265. }
  1266. }
  1267. }
  1268. }
  1269. }
  1270. getExpId(Operator) {
  1271. var expid = Platform.Core.Enums.ExpressionOperator.Equals;
  1272. switch (Operator) {
  1273. case "Equals":
  1274. expid = Platform.Core.Enums.ExpressionOperator.Equals;
  1275. break;
  1276. case "NotEquals":
  1277. expid = Platform.Core.Enums.ExpressionOperator.NotEquals;
  1278. break;
  1279. case "GreaterThan":
  1280. expid = Platform.Core.Enums.ExpressionOperator.GreaterThan;
  1281. break;
  1282. case "GreaterThanOrEquals":
  1283. expid = Platform.Core.Enums.ExpressionOperator.GreaterThanOrEquals;
  1284. break;
  1285. case "LessThan":
  1286. expid = Platform.Core.Enums.ExpressionOperator.LessThan;
  1287. break;
  1288. case "LessThanOrEquals":
  1289. expid = Platform.Core.Enums.ExpressionOperator.LessThanOrEquals;
  1290. break;
  1291. case "EqualsColumn":
  1292. expid = Platform.Core.Enums.ExpressionOperator.EqualsColumn;
  1293. break;
  1294. case "NotEqualsColumn":
  1295. expid = Platform.Core.Enums.ExpressionOperator.NotEqualsColumn;
  1296. break;
  1297. case "LessThanColumn":
  1298. expid = Platform.Core.Enums.ExpressionOperator.LessThanColumn;
  1299. break;
  1300. case "LessThanOrEqualsColumn":
  1301. expid = Platform.Core.Enums.ExpressionOperator.LessThanOrEqualsColumn;
  1302. break;
  1303. case "GreaterThanColumn":
  1304. expid = Platform.Core.Enums.ExpressionOperator.GreaterThanColumn;
  1305. break;
  1306. case "GreaterThanOrEqualsColumn":
  1307. expid = Platform.Core.Enums.ExpressionOperator.GreaterThanOrEqualsColumn;
  1308. break;
  1309. }
  1310. return expid;
  1311. }
  1312. Export(reportid, reportname) {
  1313. let instance = this;
  1314. var obj = {
  1315. ReportId: Number(reportid)
  1316. };
  1317. $.when(instance.reportManager.getReportViewerData(obj)).done(function (response) {
  1318. if (response.Count >= 100) {
  1319. Unibase.Platform.Analytics.Managers.ReportManager.Instance().startDownloadLargeFile(obj).then(function (Response) {
  1320. });
  1321. }
  1322. else {
  1323. instance.exportdata = response;
  1324. Unibase.Platform.Analytics.Viewers.TableViewer.Instance().table.download("xlsx", "" + reportname + ".xlsx");
  1325. }
  1326. });
  1327. }
  1328. getTreeViewData(reportresponse) {
  1329. var instance = this;
  1330. if (reportresponse.result.ReportJsonData.Result.Data != "") {
  1331. let parentrecords = [];
  1332. let reportjsondata = JSON.parse(reportresponse.result.ReportJsonData.Result.Data);
  1333. parentrecords = reportjsondata.filter(function (col) {
  1334. return col.parentid == reportresponse.result.ReportInfo.PivotValue;
  1335. });
  1336. if (parentrecords.length == 0) {
  1337. parentrecords = reportjsondata;
  1338. }
  1339. for (var p = 0; p < parentrecords.length; p++) {
  1340. let childrecords = _children(parentrecords[p].childid);
  1341. if (childrecords != undefined) {
  1342. parentrecords[p]["_children"] = [];
  1343. parentrecords[p]._children = childrecords;
  1344. }
  1345. }
  1346. function _children(childid) {
  1347. let childrecords = instance.gettreeChildRecords(reportjsondata, childid);
  1348. if (childrecords.length > 0) {
  1349. for (var c = 0; c < childrecords.length; c++) {
  1350. let subchilds = _children(childrecords[c].childid);
  1351. if (subchilds != undefined) {
  1352. childrecords[c]["_children"] = [];
  1353. childrecords[c]._children = subchilds;
  1354. }
  1355. }
  1356. return childrecords;
  1357. }
  1358. }
  1359. return parentrecords;
  1360. }
  1361. }
  1362. gettreeChildRecords(reportjsondata, childid) {
  1363. return reportjsondata.filter(function (col) {
  1364. return col.parentid == childid;
  1365. });
  1366. }
  1367. loadPivotTable(reportid, containerid, reportresponse) {
  1368. return __awaiter(this, void 0, void 0, function* () {
  1369. var instance = this;
  1370. if (reportresponse.result != "") {
  1371. var maintabledata = reportresponse.result.ReportJsonData.Result;
  1372. if (maintabledata.Data != "") {
  1373. var rptData = JSON.parse(maintabledata.Data);
  1374. if (rptData != "") {
  1375. instance.fileCacheHelper.loadCssFile("libs/pivottable/css/pivot.css", function () {
  1376. instance.fileCacheHelper.loadJsFile("libs/pivottable/js/pivot.js", function () {
  1377. instance.pivotTable(reportid, containerid, rptData);
  1378. });
  1379. });
  1380. }
  1381. else {
  1382. instance.showPivotTableNoDataMsg(containerid);
  1383. }
  1384. }
  1385. else {
  1386. instance.showPivotTableNoDataMsg(containerid);
  1387. }
  1388. }
  1389. else {
  1390. instance.showPivotTableNoDataMsg(containerid);
  1391. }
  1392. });
  1393. }
  1394. showPivotTableNoDataMsg(containerid) {
  1395. $(`#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>`);
  1396. }
  1397. pivotTable(reportid, containerid, rptData) {
  1398. var instance = this;
  1399. let rv_instance = instance._reportViewer.getReportViewerInstance(containerid);
  1400. rv_instance.pivotTableRowCols = [];
  1401. rv_instance.pivotTableColumnCols = [];
  1402. if (rv_instance.reportColumns.length != 0) {
  1403. for (var p = 0; p < rv_instance.reportColumns.length; p++) {
  1404. if (rv_instance.reportColumns[p].Isvisible) {
  1405. if (rv_instance.reportColumns[p].IsPivotTableCol) {
  1406. rv_instance.pivotTableColumnCols.push("" + rv_instance.reportColumns[p].AliasName + "");
  1407. }
  1408. else {
  1409. rv_instance.pivotTableRowCols.push("" + rv_instance.reportColumns[p].AliasName + "");
  1410. }
  1411. }
  1412. if (rv_instance.reportColumns[p].IsPivotAggrColumn) {
  1413. rv_instance.pivotTableAggCol = rv_instance.reportColumns[p].AliasName;
  1414. rv_instance.pivotTableAgg = instance.getAggregation(rv_instance.reportColumns[p].AggrFuncId);
  1415. }
  1416. }
  1417. }
  1418. var pivotTableObj = {
  1419. Cols: rv_instance.pivotTableColumnCols,
  1420. Rows: rv_instance.pivotTableRowCols,
  1421. AggCol: rv_instance.pivotTableAggCol,
  1422. PivotTableAgg: rv_instance.pivotTableAgg,
  1423. EnablePTConfig: rv_instance.enablePivotTableConfig
  1424. };
  1425. instance.fileCacheHelper.loadJsFileAsync("platform/analytics/enums/pivottableaggregationtype.js", function () {
  1426. return __awaiter(this, void 0, void 0, function* () {
  1427. yield instance.pivotUI(reportid, containerid, rptData, pivotTableObj);
  1428. });
  1429. });
  1430. }
  1431. getAggregation(aggid) {
  1432. let aggrName = "";
  1433. switch (aggid) {
  1434. case Unibase.Platform.Analytics.Reports.Enums.AggregationType.sum:
  1435. aggrName = "Sum";
  1436. break;
  1437. }
  1438. return aggrName;
  1439. }
  1440. pivotUI(reportid, containerid, rptData, pivotTableObj) {
  1441. return __awaiter(this, void 0, void 0, function* () {
  1442. var instance = this;
  1443. let rv_instance = instance._reportViewer.getReportViewerInstance(containerid);
  1444. var pt_subreportdata = [];
  1445. var underlineCols = [];
  1446. yield instance.reportManager.getSubReports(reportid).then(function (response) {
  1447. return __awaiter(this, void 0, void 0, function* () {
  1448. if (response.status == Unibase.Data.Status.Success) {
  1449. pt_subreportdata = response.result;
  1450. for (var s = 0; s < pt_subreportdata.length; s++) {
  1451. var col = rv_instance.reportColumns.find(x => x.ReportColumnId == pt_subreportdata[s].ReportColumnId);
  1452. if (col) {
  1453. underlineCols.push(col.AliasName);
  1454. }
  1455. }
  1456. }
  1457. });
  1458. });
  1459. let viewerEl = $("#Viewer_" + containerid);
  1460. let viewerHeaderEl = $("#ViewerHeader_" + containerid);
  1461. const tpl = $.pivotUtilities.aggregatorTemplates;
  1462. let pivotAggrTypeId = 0;
  1463. let aggCol = [];
  1464. let agg = "Count";
  1465. if (rv_instance.reportColumns.length > 0) {
  1466. var rptCol = rv_instance.reportColumns.find(pt => pt.PivotTableAggrTypeId != 0);
  1467. if (rptCol != undefined && rptCol.PivotTableAggrTypeId != 0) {
  1468. pivotAggrTypeId = rptCol.PivotTableAggrTypeId;
  1469. aggCol = [rptCol.ReportColumnName];
  1470. }
  1471. }
  1472. if (pivotAggrTypeId == 0 && pivotTableObj.AggCol != "") {
  1473. aggCol = [pivotTableObj.AggCol];
  1474. agg = pivotTableObj.PivotTableAgg;
  1475. }
  1476. else {
  1477. var aggrtypeid = instance.getPivotTableAggregationType(pivotAggrTypeId);
  1478. agg = aggrtypeid;
  1479. }
  1480. viewerEl.pivotUI(rptData, {
  1481. cols: pivotTableObj.Cols,
  1482. rows: pivotTableObj.Rows,
  1483. vals: aggCol,
  1484. aggregatorName: agg,
  1485. rendererName: "Table",
  1486. rendererOptions: {
  1487. table: {
  1488. clickCallback: function (e, value, rowData, pivotData) {
  1489. for (var f = 0; f < pt_subreportdata.length; f++) {
  1490. var col = rv_instance.reportColumns.find(x => x.ReportColumnId == pt_subreportdata[f].ReportColumnId);
  1491. if (col) {
  1492. if (col.AliasName == pivotData.colAttrs[0]) {
  1493. var filter = [];
  1494. instance._reportViewer.dateFilters = [];
  1495. var filters = JSON.parse(pt_subreportdata[f].Filters);
  1496. for (var i = 0; i < filters.length; i++) {
  1497. let fill = filters[i];
  1498. let value = rowData[fill.ParameterName.trim()];
  1499. let expid = instance.getExpId(fill.Operator);
  1500. if (fill.Isvalue)
  1501. value = fill.ParameterName;
  1502. if (fill.ParameterValue.indexOf("date") > -1) {
  1503. var dt = new Date(value.split("/").reverse().join("-"));
  1504. var dd = dt.getDate();
  1505. var mm = dt.getMonth() + 1;
  1506. var yy = dt.getFullYear();
  1507. var date = yy + "/" + mm + "/" + dd;
  1508. instance._reportViewer.dateFilters.push({ ParameterName: fill.ParameterName, FromDate: date, ToDate: date });
  1509. }
  1510. else {
  1511. filter.push({
  1512. ParameterName: fill.ParameterValue.trim(),
  1513. ParameterValue: value.toString(),
  1514. ExpOp: expid
  1515. });
  1516. }
  1517. }
  1518. instance._reportViewer.dynamicFilters = filter;
  1519. return instance._reportViewer.report_ViewAll(pt_subreportdata[f].ChildReportId, 0, "_linkedreport_" + pt_subreportdata[f].ChildReportId);
  1520. }
  1521. }
  1522. }
  1523. }
  1524. }
  1525. },
  1526. onRefresh: function (config) {
  1527. const pvtTableEl = viewerEl.find('.pvtTable');
  1528. $(`#exportCSVBtn_${containerid}`).removeClass('d-none');
  1529. $(`#DownloadReport_${containerid}`).addClass('d-none');
  1530. underlineCols.forEach((column) => {
  1531. if (pvtTableEl.find(`.pvtAxisLabel:contains("${column}")`).siblings('.pvtColLabel').length > 0) {
  1532. pvtTableEl.find('.pvtVal[data-value!="null"]').addClass('text-underline');
  1533. return;
  1534. }
  1535. let colSpan = 0;
  1536. pvtTableEl.find(`.pvtAxisLabel:contains("${column}")`).prevAll('th[colspan]').each(function (i, e) {
  1537. if (Number($(e).attr("colspan")) > 0) {
  1538. colSpan += Number($(e).attr("colspan"));
  1539. }
  1540. });
  1541. if (pvtTableEl.find(`.pvtAxisLabel:contains("${column}")`).length) {
  1542. let columnIndex = pvtTableEl.find(`.pvtAxisLabel:contains("${column}")`).index() + colSpan;
  1543. pvtTableEl.find(`tbody tr`).each(function (i, e) {
  1544. $(e).find('.pvtRowLabel').eq(columnIndex).addClass('text-underline');
  1545. });
  1546. }
  1547. });
  1548. if (rv_instance.reportResponse.result.ReportInfo.Js != "") {
  1549. eval(rv_instance.reportResponse.result.ReportInfo.Js);
  1550. }
  1551. }
  1552. });
  1553. if (!pivotTableObj.EnablePTConfig) {
  1554. viewerEl.find('.pvtUiCell').addClass('d-none');
  1555. viewerEl.find('.pvtRendererArea').addClass('pa-0');
  1556. }
  1557. Unibase.Platform.Helpers.NavigationHelper.Instance().hideLoading();
  1558. viewerEl.addClass('pivot-ui-tableview');
  1559. viewerEl.find('button').each(function (i, e) {
  1560. if ($(e).text().toLowerCase().includes('cancel')) {
  1561. $(e).addClass('btn btn-outline-danger btn-sm');
  1562. }
  1563. else {
  1564. $(e).addClass('btn btn-primary btn-sm');
  1565. }
  1566. });
  1567. });
  1568. }
  1569. getPivotTableAggregationType(aggrTypeId) {
  1570. var aggrName = "";
  1571. switch (aggrTypeId) {
  1572. case Analytics.Reports.Enums.PivotTableAggregationType.Count:
  1573. aggrName = "Count";
  1574. break;
  1575. case Analytics.Reports.Enums.PivotTableAggregationType.ListUniqueValues:
  1576. aggrName = "List Unique Values";
  1577. break;
  1578. }
  1579. return aggrName;
  1580. }
  1581. pivotMoreButtonClick(containerid, reportid, rptData) {
  1582. var instance = this;
  1583. let rv_instance = instance._reportViewer.getReportViewerInstance(containerid);
  1584. $(".pvtUi").remove();
  1585. var pivotTableObj = {
  1586. Cols: rv_instance.pivotTableColumnCols,
  1587. Rows: rv_instance.pivotTableRowCols,
  1588. AggCol: rv_instance.pivotTableAggCol,
  1589. EnablePTConfig: rv_instance.enablePivotTableConfig
  1590. };
  1591. instance.pivotUI(reportid, containerid, rptData, pivotTableObj);
  1592. }
  1593. applySorting(ContainerId, AliasName, Order) {
  1594. let rv_ins = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(ContainerId);
  1595. let col = rv_ins.reportColumns.find(x => x.AliasName == AliasName);
  1596. if (col) {
  1597. if (typeof (rv_ins.sortColumn) == 'string')
  1598. rv_ins.sortColumn = JSON.parse(rv_ins.sortColumn);
  1599. let sortCol = rv_ins.sortColumn.find(x => x.Name == AliasName);
  1600. if (sortCol) {
  1601. sortCol.Order = Order;
  1602. }
  1603. else {
  1604. rv_ins.sortColumn = [{ Name: AliasName, Order: Order }];
  1605. }
  1606. rv_ins.getReportData(rv_ins.ReportId, ContainerId, "", "");
  1607. }
  1608. }
  1609. applyTableDynamicFiltering(ContainerId, AliasName) {
  1610. let rv_ins = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(ContainerId);
  1611. let dropDownElement = $("#" + ContainerId).find(`#dropdown_menu_${AliasName}`);
  1612. if (dropDownElement.length) {
  1613. let option1Val = dropDownElement.find(`#dynamic_filtering_${AliasName}_value1`).val();
  1614. let option2Val = dropDownElement.find(`#dynamic_filtering_${AliasName}_value2`).val();
  1615. let expOp1Text = dropDownElement.find(`#dynamic_filtering_${AliasName}_exp1`).find(":selected").text();
  1616. let expOp2Text = dropDownElement.find(`#dynamic_filtering_${AliasName}_exp2`).find(":selected").text();
  1617. let expOpJoinOp = Number(dropDownElement.find(`#dynamic_filtering_${AliasName}_operator`).val()) + 1;
  1618. if (option1Val) {
  1619. if (!rv_ins.tableDynamicFilters.find(x => x.Key == AliasName && x.Value == option1Val)) {
  1620. rv_ins.inputParameters.push({ Key: AliasName, Value: option1Val, ExpOp: this.getOperatorForTableDynamicFilter(expOp1Text) });
  1621. rv_ins.tableDynamicFilters.push({ Key: AliasName, Value: option1Val, ExpOp: this.getOperatorForTableDynamicFilter(expOp1Text) });
  1622. }
  1623. }
  1624. if (option2Val) {
  1625. if (!rv_ins.tableDynamicFilters.find(x => x.Key == AliasName && x.Value == option2Val)) {
  1626. rv_ins.inputParameters.push({ Key: AliasName, Value: option2Val, ExpOp: this.getOperatorForTableDynamicFilter(expOp2Text), ConjectiveOp: expOpJoinOp });
  1627. rv_ins.tableDynamicFilters.push({ Key: AliasName, Value: option2Val, ExpOp: this.getOperatorForTableDynamicFilter(expOp2Text), ConjectiveOp: expOpJoinOp });
  1628. }
  1629. }
  1630. rv_ins.loadFilteredReport(rv_ins.ReportId, 0, ContainerId);
  1631. }
  1632. }
  1633. clearTableDynamicFiltering(ContainerId, AliasName) {
  1634. let rv_ins = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(ContainerId);
  1635. let ipIdx = rv_ins.inputParameters.findIndex(x => x.Key == AliasName);
  1636. let tdfIdx = rv_ins.tableDynamicFilters.findIndex(x => x.Key == AliasName);
  1637. while (ipIdx > -1) {
  1638. rv_ins.inputParameters.splice(ipIdx, 1);
  1639. ipIdx = rv_ins.inputParameters.findIndex(x => x.Key == AliasName);
  1640. }
  1641. while (tdfIdx > -1) {
  1642. rv_ins.tableDynamicFilters.splice(tdfIdx, 1);
  1643. ipIdx = rv_ins.tableDynamicFilters.findIndex(x => x.Key == AliasName);
  1644. }
  1645. let dropDownElement = $("#" + ContainerId).find(`#dropdown_menu_${AliasName}`);
  1646. if (dropDownElement.length) {
  1647. dropDownElement.find(`#dynamic_filtering_${AliasName}_value1`).val("");
  1648. dropDownElement.find(`#dynamic_filtering_${AliasName}_value2`).val("");
  1649. dropDownElement.find(`#dynamic_filtering_${AliasName}_exp1`).val("0");
  1650. dropDownElement.find(`#dynamic_filtering_${AliasName}_exp2`).val("0");
  1651. dropDownElement.find(`#dynamic_filtering_${AliasName}_operator`).val("0");
  1652. }
  1653. rv_ins.loadFilteredReport(rv_ins.ReportId, 0, ContainerId);
  1654. }
  1655. getOperatorForTableDynamicFilter(OperatorName) {
  1656. let exp;
  1657. switch (OperatorName) {
  1658. case "is equal to":
  1659. exp = Platform.Core.Enums.ExpressionOperator.Equals;
  1660. break;
  1661. case "Is not equal to":
  1662. exp = Platform.Core.Enums.ExpressionOperator.NotEquals;
  1663. break;
  1664. case "Starts with":
  1665. exp = Platform.Core.Enums.ExpressionOperator.StartsWith;
  1666. break;
  1667. case "Contains":
  1668. exp = Platform.Core.Enums.ExpressionOperator.Contains;
  1669. break;
  1670. case "Does not contain":
  1671. exp = Platform.Core.Enums.ExpressionOperator.DoesNotContains;
  1672. break;
  1673. case "Ends with":
  1674. exp = Platform.Core.Enums.ExpressionOperator.EndsWith;
  1675. break;
  1676. case "Is null":
  1677. exp = Platform.Core.Enums.ExpressionOperator.IsNull;
  1678. break;
  1679. case "Is not null":
  1680. exp = Platform.Core.Enums.ExpressionOperator.IsNotNull;
  1681. break;
  1682. case "Is empty":
  1683. exp = Platform.Core.Enums.ExpressionOperator.Empty;
  1684. break;
  1685. case "Is not empty":
  1686. exp = Platform.Core.Enums.ExpressionOperator.NotEmpty;
  1687. break;
  1688. }
  1689. return exp;
  1690. }
  1691. bindTableDynamicfiltersIfExists(containerId) {
  1692. let rv_instance = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(containerId);
  1693. if (rv_instance && rv_instance.tableDynamicFilters && rv_instance.tableDynamicFilters.length) {
  1694. var fils = rv_instance.tableDynamicFilters;
  1695. for (var i = 0; i < fils.length; i++) {
  1696. let fil = fils[i];
  1697. let col = $(`[tabulator-field='${fil.Key}'].tabulator-col`);
  1698. if (fil.ConjectiveOp) {
  1699. col.find(`#dynamic_filtering_${fil.Key}_value2`).val(fil.Value);
  1700. col.find(`#dynamic_filtering_${fil.Key}_exp2`).val(fil.ExpOp - 1);
  1701. col.find(`#dynamic_filtering_${fil.Key}_operator`).val(fil.ConjectiveOp - 1);
  1702. }
  1703. else {
  1704. col.find(`#dynamic_filtering_${fil.Key}_value1`).val(fil.Value);
  1705. col.find(`#dynamic_filtering_${fil.Key}_exp1`).val(fil.ExpOp - 1);
  1706. }
  1707. }
  1708. }
  1709. }
  1710. bindWidgetConfigurations(containerid, rows) {
  1711. this.fileCacheHelper.loadJsFiles(["platform/forms/managers/formmanager.js", "platform/forms/components/formviewer/formviewer.js", "platform/core/helpers/token/tokenhelper.js"], () => {
  1712. let rv_instance = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(containerid);
  1713. if (rv_instance.js) {
  1714. let { jsToEval, statusconditions, widgetconditions } = this.getWidgetConfigsHtml(rv_instance.js, containerid);
  1715. if (jsToEval) {
  1716. var templateScript = Handlebars.compile(jsToEval);
  1717. for (var i = 0; i < rv_instance.table.rowManager.activeRows.length; i++) {
  1718. var rowElement = rv_instance.table.rowManager.activeRows[i].element;
  1719. var rowsData = rv_instance.table.rowManager.activeRows[i].data;
  1720. let compliedScript = templateScript(rowsData);
  1721. eval(compliedScript);
  1722. }
  1723. }
  1724. if (statusconditions) {
  1725. if (rows != null) {
  1726. for (var i = 0; i < rows.length; i++) {
  1727. var model = rows[i];
  1728. var condition = Unibase.Core.Helpers.TokenHelper.Instance().replace(statusconditions, model);
  1729. eval(condition);
  1730. }
  1731. }
  1732. }
  1733. if (widgetconditions) {
  1734. widgetconditions = widgetconditions.replaceAll("\\", "");
  1735. eval(widgetconditions);
  1736. }
  1737. }
  1738. });
  1739. }
  1740. getWidgetConfigsHtml(jsToEval, containerId) {
  1741. let rv_ins = Unibase.Platform.Analytics.Components.ReportViewer.Instance().getReportViewerInstance(containerId);
  1742. let _queryParser = Unibase.Platform.DataSources.Components.QueryParser.Instance();
  1743. let _templateViewer = Unibase.Platform.Analytics.Viewers.TemplateViewer.Instance();
  1744. var statusconditions = "";
  1745. var designhtml = '';
  1746. var widgetconditions = '';
  1747. var sub = '';
  1748. let portletWidgetId = Number(containerId.split("_")[2]);
  1749. let htmlIdx = jsToEval.indexOf("html(");
  1750. if (htmlIdx != -1) {
  1751. let htmlStartString = jsToEval.slice(htmlIdx + 5);
  1752. let closingIdx = _queryParser.getIndexOfCorrespondingCloseBracket(htmlStartString);
  1753. let widgetHtml = htmlStartString.substring(0, closingIdx - 1);
  1754. widgetHtml = widgetHtml.replaceAll("\\", "").replaceAll("`", "");
  1755. let TemplateText = HtmlHelper.getHelper().decode(widgetHtml);
  1756. let widgetitemid = $(TemplateText).find("#hf_widgetitem_Id").val();
  1757. if (TemplateText.indexOf('widgetitem_config') > -1) {
  1758. var detailsub = jsToEval.substring(jsToEval.indexOf('widgetitem_config') - 15, jsToEval.indexOf('widgetitem_config') + 40);
  1759. sub = detailsub.substring(detailsub.indexOf('<div'), detailsub.indexOf('</div>') + 6);
  1760. if (rv_ins.reportWidgetData != null) {
  1761. if (rv_ins.reportWidgetData.AppConfigurations.WidgetItemGrouped.length != 0) {
  1762. var widgetitemgrouped = rv_ins.reportWidgetData.AppConfigurations.WidgetItemGrouped;
  1763. 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'>`;
  1764. for (var i = 0; i < widgetitemgrouped.length; i++) {
  1765. var sname = widgetitemgrouped[i].SettingName.replace(/ /g, '');
  1766. var onlickurl = "";
  1767. let jsfunction1 = "";
  1768. if (widgetitemgrouped[i].JsFunction != null && widgetitemgrouped[i].JsFunction != "")
  1769. jsfunction1 = HtmlHelper.getHelper().decode(widgetitemgrouped[i].JsFunction);
  1770. if (widgetitemgrouped[i].SettingUrlType == 4) {
  1771. statusconditions += HtmlHelper.getHelper().decode(widgetitemgrouped[i].JsFunction);
  1772. var onclick = widgetitemgrouped[i].SettingUrl.replace(/ /g, '');
  1773. onlickurl = onclick;
  1774. }
  1775. else {
  1776. onlickurl = _templateViewer.load_appconfigurations(widgetitemgrouped[i], TemplateText, portletWidgetId);
  1777. if (jsfunction1 != null && jsfunction1 != "") {
  1778. if (jsfunction1.indexOf("{{") > -1 || jsfunction1.indexOf("}}") > -1) {
  1779. statusconditions += jsfunction1 + ";";
  1780. }
  1781. else {
  1782. widgetconditions += jsfunction1 + ";";
  1783. }
  1784. }
  1785. }
  1786. if (!Unibase.Themes.Compact.Components.Details.Instance().isSystemLock || (Unibase.Themes.Compact.Components.Details.Instance().isSystemLock && widgetitemgrouped[i].ExcludeFromLock)) {
  1787. designhtml += '<li id="li_' + containerId + '"><a class="dropdown-item" href="javascript:;" id="widgetconfig_' + widgetitemid + '_' + sname + '" onclick="' + onlickurl + '">' + widgetitemgrouped[i].SettingName + '</a></li>';
  1788. }
  1789. }
  1790. designhtml += "</li></ul></div>";
  1791. _templateViewer.autoFixConfigDpVisibility(containerId);
  1792. }
  1793. if (rv_ins.reportWidgetData.AppConfigurations.WidgetItemUnGrouped.length != 0) {
  1794. designhtml += "<div class='pull-right'>";
  1795. var WidgetItemUnGrouped = rv_ins.reportWidgetData.AppConfigurations.WidgetItemUnGrouped;
  1796. for (var i = 0; i < WidgetItemUnGrouped.length; i++) {
  1797. var sname = WidgetItemUnGrouped[i].SettingName.replace(/ /g, '');
  1798. let jsfunction2 = "";
  1799. if (WidgetItemUnGrouped[i].JsFunction != null && WidgetItemUnGrouped[i].JsFunction != "")
  1800. jsfunction2 = HtmlHelper.getHelper().decode(WidgetItemUnGrouped[i].JsFunction);
  1801. onlickurl = WidgetItemUnGrouped[i].SettingUrl;
  1802. if (jsfunction2 != null && jsfunction2 != "") {
  1803. if (jsfunction2.indexOf("{{") > -1 || jsfunction2.indexOf("}}") > -1) {
  1804. statusconditions += jsfunction2 + ";";
  1805. }
  1806. else {
  1807. widgetconditions += jsfunction2 + ";";
  1808. }
  1809. }
  1810. if (!Unibase.Themes.Compact.Components.Details.Instance().isSystemLock || (Unibase.Themes.Compact.Components.Details.Instance().isSystemLock && WidgetItemUnGrouped[i].ExcludeFromLock)) {
  1811. designhtml += ' <span class="mr-10"><a href="javascript:;" id="widgetconfig_' + widgetitemid + '_' + sname + '" onclick="' + onlickurl + '">' +
  1812. '<i class="' + WidgetItemUnGrouped[i].Icon + '"></i>' +
  1813. '</a> </span>';
  1814. }
  1815. }
  1816. designhtml += "</div>";
  1817. }
  1818. jsToEval = jsToEval.replace(sub, designhtml);
  1819. let iconhtml = "";
  1820. 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>';
  1821. if (rv_ins.reportWidgetData.AppConfigurations != null && rv_ins.reportWidgetData.Data.ReportId == rv_ins.ReportId) {
  1822. var widgetcreate = rv_ins.reportWidgetData.AppConfigurations.WidgetGrouped.filter(o => o.AppConfigType === 3);
  1823. if (widgetcreate.length > 0) {
  1824. var onlickurl_grouped = "";
  1825. for (var i = 0; i < widgetcreate.length; i++) {
  1826. var createjsfunction = "";
  1827. var settingdesignhtml = "";
  1828. if (widgetcreate[i].JsFunction != null && widgetcreate[i].JsFunction != "")
  1829. createjsfunction = HtmlHelper.getHelper().decode(widgetcreate[i].JsFunction);
  1830. if (widgetcreate[i].SettingDesignHtml != null && widgetcreate[i].SettingDesignHtml != "")
  1831. settingdesignhtml = HtmlHelper.getHelper().decode(widgetcreate[i].SettingDesignHtml);
  1832. onlickurl_grouped = _templateViewer.load_appconfigurations(widgetcreate[i], TemplateText, portletWidgetId);
  1833. if (!Unibase.Themes.Compact.Components.Details.Instance().isSystemLock || (Unibase.Themes.Compact.Components.Details.Instance().isSystemLock && widgetcreate[i].ExcludeFromLock)) {
  1834. let details_btn_p = 'pr-3';
  1835. if (Unibase.Platform.Membership.Infos.Identity.getCurrentUser().isAdmin) {
  1836. details_btn_p = '';
  1837. }
  1838. if ((widgetcreate[i].Icon == "null" || widgetcreate[i].Icon == "") && widgetcreate[i].SettingUrlType == 3) {
  1839. 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>';
  1840. }
  1841. else if ((widgetcreate[i].Icon == "null" || widgetcreate[i].Icon == "") && (widgetcreate[i].SettingUrlType == 10 || widgetcreate[i].SettingUrlType == 11)) {
  1842. 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>';
  1843. }
  1844. else {
  1845. 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>';
  1846. }
  1847. }
  1848. if (createjsfunction != null && createjsfunction != "") {
  1849. if (createjsfunction.indexOf("{{") > -1 || createjsfunction.indexOf("}}") > -1) {
  1850. statusconditions += createjsfunction + ";";
  1851. }
  1852. else {
  1853. widgetconditions += createjsfunction + ";";
  1854. }
  1855. }
  1856. }
  1857. $(".sp_widget_create_" + containerId + "").addClass('d-flex flex-row align-items-center');
  1858. $(".sp_widget_create_" + containerId + "").html(iconhtml);
  1859. }
  1860. let widgetUngrouped = rv_ins.reportWidgetData.AppConfigurations.WidgetUnGrouped.filter(function (o) { return o.AppConfigType === 3; });
  1861. if (widgetUngrouped.length > 0) {
  1862. $(".sp_widget_create_" + containerId).parent().addClass('align-items-center').append(threeDotsHtml);
  1863. let onlickurl_ungrouped = "", Ungroupedhtml = '';
  1864. for (var i = 0; i < widgetUngrouped.length; i++) {
  1865. var jsfunction = HtmlHelper.getHelper().decode(widgetUngrouped[i].JsFunction);
  1866. onlickurl_ungrouped = _templateViewer.load_appconfigurations(widgetUngrouped[i], TemplateText, portletWidgetId);
  1867. if (!Unibase.Themes.Compact.Components.Details.Instance().isSystemLock || (Unibase.Themes.Compact.Components.Details.Instance().isSystemLock && widgetcreate[i].ExcludeFromLock)) {
  1868. if (widgetUngrouped[i].Icon == "null" || widgetUngrouped[i].Icon == "" && widgetUngrouped[i].SettingUrlType == 3) {
  1869. 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>';
  1870. }
  1871. else {
  1872. 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>';
  1873. }
  1874. }
  1875. if (jsfunction != null && jsfunction != "") {
  1876. if (jsfunction.indexOf("{{") > -1 || jsfunction.indexOf("}}") > -1) {
  1877. statusconditions += jsfunction + ";";
  1878. }
  1879. else {
  1880. widgetconditions += jsfunction + ";";
  1881. }
  1882. }
  1883. }
  1884. $('.drop-Button_' + containerId).empty().append(Ungroupedhtml);
  1885. }
  1886. }
  1887. }
  1888. }
  1889. }
  1890. return { jsToEval, statusconditions, widgetconditions };
  1891. }
  1892. setGroupBy(rv_instance, containerid, rows) {
  1893. return __awaiter(this, void 0, void 0, function* () {
  1894. if (rv_instance.tblGroupedCols && rv_instance.tblGroupedCols.length) {
  1895. rv_instance.table.options.dataTree = false;
  1896. yield rv_instance.table.setGroupBy(rv_instance.tblGroupedCols);
  1897. }
  1898. if (rv_instance.js) {
  1899. this.bindWidgetConfigurations(containerid, rows);
  1900. }
  1901. });
  1902. }
  1903. static Instance() {
  1904. if (this._instance === undefined)
  1905. this._instance = new TableViewer();
  1906. return this._instance;
  1907. }
  1908. }
  1909. Viewers.TableViewer = TableViewer;
  1910. })(Viewers = Analytics.Viewers || (Analytics.Viewers = {}));
  1911. })(Analytics = Platform.Analytics || (Platform.Analytics = {}));
  1912. })(Platform = Unibase.Platform || (Unibase.Platform = {}));
  1913. })(Unibase || (Unibase = {}));