Built files from Bizgaze WebServer
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

duplicatereport.js 30KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  2. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  3. return new (P || (P = Promise))(function (resolve, reject) {
  4. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  5. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  6. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  7. step((generator = generator.apply(thisArg, _arguments || [])).next());
  8. });
  9. };
  10. var Unibase;
  11. (function (Unibase) {
  12. let Platform;
  13. (function (Platform) {
  14. let Analytics;
  15. (function (Analytics) {
  16. let Components;
  17. (function (Components) {
  18. class DuplicateReport extends Platform.Core.BaseComponent {
  19. constructor() {
  20. super(...arguments);
  21. this.excludeRoles = [];
  22. this.includeRoles = [];
  23. this.viewAll = false;
  24. this.subReports = [];
  25. }
  26. ;
  27. cssFiles() {
  28. return [];
  29. }
  30. jsFiles() {
  31. return [];
  32. }
  33. html(id, containerid) {
  34. return `<div class="header bg-white">
  35. <strong> Duplicate Report<span class="reportname"></span></strong>
  36. <div class="" id="duplicate_errormsg"></div>
  37. <a class="btn btn-sm ml-auto"><i class="ti-help-alt" title="help" href="javascript:;" target="_blank"></i></a>
  38. </div>
  39. <div class="scrollable bg-light" id="div_duplicatereport">
  40. <div class="wrapper">
  41. <div id="Bizgaze_ValidationSummary" class="clear m-b-sm">
  42. </div>
  43. <div class="card">
  44. <div class="card-body">
  45. <div class="form-row mb-10">
  46. <div class="form-group col-sm 12">
  47. <label> Duplicate Report Name </label>
  48. <input type="text" class="form-control" id="txt_reportname" placeholder="Report Name">
  49. </div>
  50. </div>
  51. <div class="row">
  52. <div class="col-sm-12">
  53. <strong class="Report">Everyone can view this report?</strong>
  54. <label class="switch pull-right">
  55. <input id="chkIsViewable" data-group="Viewable" checked onchange="Unibase.Platform.Analytics.Components.DuplicateReport.Instance().changeViewAllPermission()" type="checkbox">
  56. <span></span>
  57. </label>
  58. </div>
  59. </div>
  60. <div class="row" id="divViewRoles" style="display:none">
  61. <div class="col-sm-12 m-b">
  62. <label> Included roles that can view this report</label>
  63. <input type="hidden" id="hfViewRoles" />
  64. <select id="txtIncludeViewRoles" style="width:100%" class="b-a" value="" multiple="multiple"></select>
  65. </div>
  66. </div>
  67. <div class="row">
  68. <div class="col-sm-12 mb-0">
  69. <label>Excluded roles that can view this report</label>
  70. <input type="hidden" id="hfViewRoles" />
  71. <select id="txtExcludeViewRoles" style="width:100%" class="b-a" value="" placeholder="select role" multiple="multiple"></select>
  72. </div>
  73. </div>
  74. </div>
  75. </div>
  76. <div class="card mt-2">
  77. <div class="card-header border-bottom">Select Columns</div>
  78. <div class="card-body">
  79. <div class="report_Columns_Duplicate_Fields">
  80. <div class="dsl-block-wrap dd-list droppable-area1 connected-sortable" id="selectedColumns">
  81. </div>
  82. </div>
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. </div>
  88. <footer class="bg-white footer" style="position:absolute; bottom:0px;width:100%;">
  89. <a href="javascript:;" class="btn btn-light btn-sm mr-auto" id="btn_Close">Close</a>
  90. <a href="javascript:;" class="btn btn-primary btn-sm " id="btn_Save">Save</a>
  91. </footer>`;
  92. }
  93. load(reportid, containerid, callback) {
  94. let instance = this;
  95. this.reportId = reportid;
  96. this.excludeRoles = [];
  97. this.includeRoles = [];
  98. this.viewAll = false;
  99. this._reportBuilder = Unibase.Platform.Analytics.Reports.ReportBuilder.Instance();
  100. this._reportManager = Unibase.Platform.Analytics.Managers.ReportManager.Instance();
  101. $("#chkIsViewable").prop('checked', false);
  102. $('#divViewRoles').show();
  103. this.getAllRoles();
  104. $("#" + containerid + " #btn_Close").click(function () {
  105. instance._reportBuilder.selectedColumns = [];
  106. $('#' + containerid).modal('hide');
  107. $('#' + containerid).remove();
  108. });
  109. $("#btn_Save").click((e) => {
  110. this.saveDuplicateReport();
  111. });
  112. let previewscontainerid = Unibase.Platform.Helpers.NavigationHelper.ModalContainerIds[Unibase.Platform.Helpers.NavigationHelper.ModalContainerIds.length - 2];
  113. instance.getReportColumns(previewscontainerid, containerid);
  114. }
  115. getAllRoles() {
  116. Unibase.Platform.Permissions.Managers.PermissionManager.Instance().getRoles("").then((response) => {
  117. var widgetpermissions_AllRoles = response.result;
  118. this.bindSelect2();
  119. });
  120. }
  121. getReportColumns(previewscontainerid, containerid) {
  122. return __awaiter(this, void 0, void 0, function* () {
  123. let instance = this;
  124. let response = Components.ReportViewer.Instance().getReportViewerInstance(previewscontainerid);
  125. instance.reportInfo = response && response.reportResponse && response.reportResponse.result && response.reportResponse.result.ReportInfo;
  126. if (!instance.reportInfo) {
  127. let reportid = Number(Unibase.Themes.Providers.Detail_Settings.Instance().InputParameters.find(x => x.Key.endsWith("_reportid")).Value);
  128. yield this._reportManager.getFullReportInfo(reportid).then(response => {
  129. if (response.status == Unibase.Data.Status.Success) {
  130. if (!response.result)
  131. return MessageHelper.Instance().showError("Report data does not exists", "");
  132. instance.reportInfo = response.result;
  133. }
  134. else {
  135. return MessageHelper.Instance().showError(response.message, "");
  136. }
  137. });
  138. }
  139. instance._reportManager.getSubReports(instance.reportInfo.ReportId).then(function (response) {
  140. if (response.status == Unibase.Data.Status.Success && response.result && response.result.length) {
  141. response.result.map(x => { x.SubReportId = 0; x.ReportId = 0; });
  142. instance.subReports = response.result;
  143. }
  144. });
  145. instance.reportColumns = instance.reportInfo.ReportColumns;
  146. let html = '';
  147. for (let i = 0; i <= instance.reportColumns.length - 1; i++) {
  148. let data = instance.reportColumns[i];
  149. let columnname = data.DisplayText;
  150. let columnaliasname = data.AliasName;
  151. let reportcolumnid = data.ReportColumnId;
  152. let columnindex = data.ColumnIndex;
  153. let tablecolumname = data.ReportColumnName.replace(/\s/g, '');
  154. const visibleIconHtml = `<a href="javascript:;" class="btn btn-icon btn-flush-biz-theme btn-rounded flush-soft-hover d-30 column-visible-icon" id="columnVisibleIcon_${reportcolumnid}" onclick="Unibase.Platform.Analytics.Components.DuplicateReport.Instance().showOrHideColumn('${columnaliasname}')">
  155. <span class="btn-icon-wrap">
  156. <i class="las ${data.Isvisible ? 'la-eye' : 'la-eye-slash'} font-18 eye-icon" ></i>
  157. </span>
  158. </a>`;
  159. tablecolumname = tablecolumname.replace(/\s/g, '');
  160. let htmlli = `<li class="list-group-item biz-highlight-bg-color ui_list_sorting ui-sortable-handle"
  161. data-ReportColumnId="${reportcolumnid}" id="dsl_column_${columnaliasname}"> <input type="hidden"
  162. id="hfStageid" class="ListColumnIndexInput" value=' ${columnindex}'>
  163. <div class="row align-items-center">
  164. <div class="col-sm-1"><span class="pull-left media-xs mr-30 align-items-center d-flex">
  165. <i class="fa fa-sort text-muted fa mr-10"></i><span class="ListColumnIndex"> ${columnindex}</span>
  166. </div>
  167. <div class="col-sm-9"><span class="block columnname" id="">${columnname}</span></div>
  168. <div class="col-sm-2 d-flex gap-10 justify-content-end">${visibleIconHtml}
  169. <a class="btn btn-icon btn-flush-biz-theme btn-rounded flush-soft-hover d-30 column-visible-icon"
  170. href="javascript:;" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  171. <span class="btn-icon-wrap">
  172. <i class="fa fa-ellipsis-h ellipsis-hover-1 " aria-hidden="true"></i></span>
  173. </a>
  174. <div class="dropdown-menu z-index-10">
  175. <input type="textbox" id="txtAliasName_${columnname}" value="${columnname}"
  176. onchange="Unibase.Platform.Analytics.Components.DuplicateReport.Instance().changeDisplayText('${columnaliasname}')"
  177. class="mx-2 w-90" placeholder="displaytext">
  178. <a href="javascript:;" class="dropdown-item"
  179. onclick="Unibase.Platform.Analytics.Components.DuplicateReport.Instance().linkreport('${tablecolumname}')">Link
  180. Report</a>
  181. <a href="javascript:;" class="dropdown-item text-danger"
  182. onclick="Unibase.Platform.Analytics.Components.DuplicateReport.Instance().removeColumn('${columnaliasname}')">Remove
  183. Column</a>
  184. </div>
  185. </div>
  186. </li>`;
  187. html += htmlli;
  188. }
  189. $("#" + containerid).find("#selectedColumns").html(html);
  190. instance.sortSelectedColums(previewscontainerid, containerid);
  191. $('#selectedColumns').find(".btn-flush-biz-theme").click(function () {
  192. $(".list-group-item").removeClass("z-index-10");
  193. $(this).parents(".list-group-item").addClass("z-index-10");
  194. });
  195. $('#selectedColumns').find(".column-visible-icon").click(function () {
  196. const isVisible = $(this).find(".eye-icon").hasClass("la-eye");
  197. if (isVisible) {
  198. $(this).find(".eye-icon").removeClass("la-eye").addClass("la-eye-slash");
  199. }
  200. else {
  201. $(this).find(".eye-icon").removeClass("la-eye-slash").addClass("la-eye");
  202. }
  203. });
  204. });
  205. }
  206. updatestageindex() {
  207. var instance = this;
  208. $(".report_Columns_Duplicate_Fields #selectedColumns").find(".list-group-item").each(function (i, e) {
  209. $(this).find(".ListColumnIndex").html(`${i}`);
  210. $(this).find(".ListColumnIndexInput").val(`${i}`);
  211. });
  212. instance.updateIndexBasedOnSorting();
  213. }
  214. sortSelectedColums(previewscontainerid, containerid) {
  215. var instance = this;
  216. let list = $('#selectedColumns');
  217. if (!list)
  218. return;
  219. list.sortable({
  220. connectWith: "#selectedColumns",
  221. cursor: 'move',
  222. update: function (event, ui) {
  223. instance.updatestageindex();
  224. }
  225. });
  226. }
  227. updateIndexBasedOnSorting() {
  228. var instance = this;
  229. let ui_updated_array = [];
  230. $(".ui_list_sorting").each(function () {
  231. var ColumnIndex = $(this).find(".ListColumnIndexInput").val();
  232. var DisplayText = $(this).find(".columnname").text();
  233. var ReportColumnId = $(this).attr("data-ReportColumnId");
  234. ui_updated_array.push({ ReportColumnId, ColumnIndex, DisplayText });
  235. });
  236. ui_updated_array = ui_updated_array.reverse();
  237. function mapOrder(array, order, key) {
  238. array.sort(function (a, b) {
  239. var A = a[key], B = b[key];
  240. if (order.indexOf(A) > order.indexOf(B)) {
  241. return 1;
  242. }
  243. else {
  244. return -1;
  245. }
  246. });
  247. return array;
  248. }
  249. ;
  250. let ordered_array = mapOrder(instance.reportColumns, ui_updated_array, 'ReportColumnId');
  251. console.log(ordered_array.reverse());
  252. }
  253. bindSelect2() {
  254. var ViewRoleElementId = "txtIncludeViewRoles";
  255. var ExcludeRoleElementId = "txtExcludeViewRoles";
  256. var userinfo = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  257. var url = _appsettings.server_url() + '/apis/v4/unibase/platform/roles/getroles';
  258. url = url + "/term/";
  259. url = url.replace('#', '');
  260. $("#" + ViewRoleElementId).select2({
  261. multiple: true,
  262. allowClear: false,
  263. data: [],
  264. placeholder: 'Select Role',
  265. ajax: {
  266. url: (request) => {
  267. var reqUrl = url;
  268. var term = request.term;
  269. if (term == undefined || term == "")
  270. reqUrl = reqUrl + term + "/authtoken/" + userinfo.sessionId;
  271. else
  272. reqUrl = reqUrl + term + "/authtoken/" + userinfo.sessionId;
  273. return reqUrl;
  274. },
  275. beforeSend: (xhr) => {
  276. if (userinfo !== undefined && userinfo !== null) {
  277. xhr.setRequestHeader("Authorization", "Basic " + userinfo.sessionId);
  278. xhr.setRequestHeader('geoposition', userinfo.latd + ':' + userinfo.lgId);
  279. }
  280. },
  281. delay: 250,
  282. dataType: 'json',
  283. processResults: function (data) {
  284. var selectData = [];
  285. var Data = JSON.parse(data.result);
  286. for (var i = 0; i < Data.length; i++) {
  287. selectData.push({
  288. id: Data[i].Value,
  289. text: Data[i].SelectText
  290. });
  291. }
  292. ;
  293. return { results: selectData };
  294. }
  295. },
  296. templateResult: function (item) { return item.text; },
  297. templateSelection: function (item) { return item.text; },
  298. });
  299. $("#" + ViewRoleElementId).val("").trigger('change');
  300. $('#txtIncludeViewRoles').on('select2:select', (e) => {
  301. let result = e.params.data;
  302. if (Number(result.id) != 0) {
  303. var roleId = result.id;
  304. this.addViewRole(this.reportId, roleId, true, false);
  305. }
  306. });
  307. $('#txtIncludeViewRoles').on('select2:unselect', (e) => {
  308. let result = e.params.data;
  309. var roleId = Number(result.id);
  310. if (roleId != 0) {
  311. let idx = this.includeRoles.findIndex(x => x.RoleId == roleId);
  312. if (idx != -1) {
  313. this.includeRoles.splice(idx, 1);
  314. let ids = this.excludeRoles.map(x => x.RoleId);
  315. $("#txtExcludeViewRoles").val(ids).trigger('change');
  316. }
  317. }
  318. });
  319. $("#" + ExcludeRoleElementId).select2({
  320. multiple: true,
  321. allowClear: false,
  322. data: [],
  323. placeholder: 'Select Role',
  324. ajax: {
  325. url: function (request) {
  326. var reqUrl = url;
  327. var term = request.term;
  328. if (term == undefined || term == "")
  329. reqUrl = reqUrl + term + "/authtoken/" + userinfo.sessionId;
  330. else
  331. reqUrl = reqUrl + term + "/authtoken/" + userinfo.sessionId;
  332. return reqUrl;
  333. },
  334. beforeSend: function (xhr) {
  335. if (userinfo !== undefined && userinfo !== null) {
  336. xhr.setRequestHeader("Authorization", "Basic " + userinfo.sessionId);
  337. xhr.setRequestHeader('geoposition', userinfo.latd + ':' + userinfo.lgId);
  338. }
  339. },
  340. delay: 250,
  341. dataType: 'json',
  342. processResults: function (data) {
  343. var selectData = [];
  344. var Data = JSON.parse(data.result);
  345. for (var i = 0; i < Data.length; i++) {
  346. selectData.push({
  347. id: Data[i].Value,
  348. text: Data[i].SelectText
  349. });
  350. }
  351. ;
  352. return { results: selectData };
  353. }
  354. },
  355. templateResult: function (item) { return item.text; },
  356. templateSelection: function (item) { return item.text; },
  357. });
  358. jQuery("#" + ExcludeRoleElementId).val("").trigger('change');
  359. $('.select2-search__field').css("width", "100%");
  360. $('#txtExcludeViewRoles').on('select2:select', (e) => {
  361. let result = e.params.data;
  362. if (Number(result.id) != 0) {
  363. var roleId = result.id;
  364. this.addViewRole(this.reportId, roleId, false, true);
  365. let includeRoleIdx = this.includeRoles.findIndex(x => x.RoleId == Number(roleId));
  366. if (includeRoleIdx != -1) {
  367. this.includeRoles.splice(includeRoleIdx, 1);
  368. let ids = this.includeRoles.map(x => x.RoleId);
  369. $("#txtIncludeViewRoles").val(ids).trigger('change');
  370. }
  371. }
  372. });
  373. $('#txtExcludeViewRoles').on('select2:unselect', (e) => {
  374. let result = e.params.data;
  375. var roleId = Number(result.id);
  376. if (roleId != 0) {
  377. let idx = this.excludeRoles.findIndex(x => x.RoleId == roleId);
  378. if (idx != -1) {
  379. this.excludeRoles.splice(idx, 1);
  380. }
  381. }
  382. });
  383. }
  384. changeViewAllPermission() {
  385. var viewable = $("#chkIsViewable").prop('checked');
  386. this.viewAll = viewable;
  387. if (viewable) {
  388. $('#divViewRoles').hide();
  389. }
  390. else
  391. $('#divViewRoles').show();
  392. }
  393. addViewRole(reportId, roleId, IsView, IsExclude) {
  394. let listOfRoles;
  395. if (IsView) {
  396. listOfRoles = this.includeRoles;
  397. }
  398. else {
  399. listOfRoles = this.excludeRoles;
  400. }
  401. let idx = listOfRoles.findIndex(x => x.RoleId == roleId);
  402. if (idx == -1) {
  403. let reqObj = new Unibase.Platform.Analytics.Requests.ReportRole();
  404. reqObj.ReportId = reportId;
  405. reqObj.RoleId = Number(roleId);
  406. reqObj.ViewReport = IsView;
  407. reqObj.ExcludeViewReport = IsExclude;
  408. listOfRoles.push(reqObj);
  409. }
  410. }
  411. removeReportRole(reportId, roleId, IsView, IsExclude) {
  412. let listOfRoles;
  413. if (IsView) {
  414. listOfRoles = this.includeRoles;
  415. }
  416. else {
  417. listOfRoles = this.excludeRoles;
  418. }
  419. let idx = listOfRoles.findIndex(x => x.RoleId == roleId);
  420. if (idx != -1) {
  421. listOfRoles.splice(idx, 1);
  422. }
  423. }
  424. saveDuplicateReport() {
  425. for (var i = 0; i < this.reportColumns.length; i++) {
  426. this._reportBuilder.reportColumns_Array(this.reportColumns[i]);
  427. }
  428. let model = new Analytics.Requests.DuplicateReport();
  429. model.ReportId = this.reportId;
  430. model.ReportName = $("#txt_reportname").val();
  431. model.ReportRoles = this.excludeRoles.concat(this.includeRoles);
  432. model.ViewAll = this.viewAll;
  433. model.ReportColumns = this.reportColumns;
  434. model.SubReports = this.subReports;
  435. Unibase.Platform.Analytics.Managers.ReportManager.Instance().duplicateReport(model).then((res) => {
  436. if (res.status == Unibase.Data.Status.Success) {
  437. MessageHelper.Instance().showSuccess("Report duplicate sucessfully created", "duplicate_errormsg");
  438. return $("#btn_Close").click();
  439. }
  440. else {
  441. return MessageHelper.Instance().showError(res.message, "duplicate_errormsg");
  442. }
  443. });
  444. }
  445. changeDisplayText(aliasName) {
  446. let column = this.getReportColumn(aliasName);
  447. if (column) {
  448. column.DisplayText = $("#txtAliasName_" + aliasName).val();
  449. }
  450. }
  451. showOrHideColumn(aliasName) {
  452. let column = this.getReportColumn(aliasName);
  453. if (column) {
  454. column.Isvisible = !column.Isvisible;
  455. }
  456. }
  457. removeColumn(aliasName) {
  458. var sortColumns = JSON.parse(this.reportInfo.SortColumns);
  459. var index = sortColumns.findIndex(x => x.Name == aliasName);
  460. if (index > -1) {
  461. return MessageHelper.Instance().showError("Current column is used as sort column in main report", "duplicate_errormsg");
  462. }
  463. let idx = this.getReportColumnIndex(aliasName);
  464. if (idx > -1) {
  465. this.reportColumns.splice(idx, 1);
  466. $("#dsl_column_" + aliasName).remove();
  467. this.updatestageindex();
  468. }
  469. }
  470. getReportColumnIndex(aliasName) {
  471. return this.reportColumns.findIndex(x => x.AliasName == aliasName);
  472. }
  473. getReportColumn(aliasName) {
  474. return this.reportColumns.find(x => x.AliasName == aliasName);
  475. }
  476. linkreport(aliasname) {
  477. this._reportBuilder.selectedColumns = this.reportInfo.ReportColumns;
  478. this._reportBuilder.res = this.reportInfo;
  479. let sr = Unibase.Platform.Analytics.Reports.SubReport.Instance();
  480. sr.isReportDuplicate = true;
  481. sr.linkreport(aliasname);
  482. }
  483. static Instance() {
  484. if (this.instance === undefined) {
  485. this.instance = new DuplicateReport();
  486. }
  487. return this.instance;
  488. }
  489. }
  490. Components.DuplicateReport = DuplicateReport;
  491. })(Components = Analytics.Components || (Analytics.Components = {}));
  492. })(Analytics = Platform.Analytics || (Platform.Analytics = {}));
  493. })(Platform = Unibase.Platform || (Unibase.Platform = {}));
  494. })(Unibase || (Unibase = {}));