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

tasksummary.js 27KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. var Bizgaze;
  2. (function (Bizgaze) {
  3. let Apps;
  4. (function (Apps) {
  5. let PM;
  6. (function (PM) {
  7. let Components;
  8. (function (Components) {
  9. class TaskSummary extends Unibase.Platform.Core.BaseComponent {
  10. constructor() {
  11. super(...arguments);
  12. this.serverFormat = "YYYY/MM/DD";
  13. }
  14. cssFiles() {
  15. return [];
  16. }
  17. jsFiles() {
  18. return ['apps/pm/managers/taskmanager.js'];
  19. }
  20. html(id, containerid) {
  21. let html = `<div id="divTaskSummary">
  22. </div>
  23. <form id="frm_TaskSummaryProjectFilter" method="post" data-validate="parsley" class="hidden">
  24. <header class="b-b bg-white modal-header">
  25. <strong class="text-dark titlename">Project</strong>
  26. <div class="btn-group ml-auto"> <a class="btn btn-sm"><i class="ti-help-alt" title="help" href="" target="_blank"></i></a></div>
  27. </header>
  28. <div style="overflow-x:hidden;" class="scrollable">
  29. <div id="bizgaze_CreateProjectErrorMessages" class="clear"></div>
  30. <div class="card">
  31. <div class="card-body">
  32. <div class="row" style="overflow-x:hidden;">
  33. <div class="row col-sm-12">
  34. <div class="col-sm-12">
  35. <div class="floating-label-form-group floating-label-form-group-with-value" style="border-bottom:0;">
  36. <label for="txtTaskSummary_ProjectId">Project<span class="text-danger"> *</span></label>
  37. <select id="txtTaskSummary_ProjectId" style="width:100%" placeholder="Select Project*" class="txtTaskSummary_ProjectId form-control floating-label-control" data-placeholder="Select Project" data-label="Project*" />
  38. <input id="hfTaskSummaryAutoCompleteId_ProjectId" class="hfTaskSummaryAutoComplete_ProjectId" type="hidden">
  39. </div>
  40. </div>
  41. </div>
  42. </div>
  43. </div>
  44. </div>
  45. </div>
  46. <footer class="bg-white modal-footer" style="position:absolute; bottom:0px;width:100%;">
  47. <a href="javascript:;" id="btn_TaskSummaryProjectClose" class="btn btn-light btn-sm mr-auto "> Close</a>
  48. <a href="javascript:;" id="btn_TaskSummaryProjectApply" class="btn btn-primary btn-sm">Apply</a>
  49. </footer>
  50. </form>`;
  51. return html;
  52. }
  53. load(id, containerid, callback) {
  54. var instance = this;
  55. Bizgaze.Apps.PM.Components.TaskSummary.Instance().defaultData();
  56. Bizgaze.Apps.PM.Components.TaskSummary.Instance().loadProjects();
  57. Bizgaze.Apps.PM.Components.TaskSummary.Instance().SummaryGetWidgetData();
  58. $("#tasksummaryExport").click(function () {
  59. instance.exportData();
  60. });
  61. $("#tasksummaryprojectfilter").click(function () {
  62. var theHtml = $("#frm_TaskSummaryProjectFilter").html();
  63. Unibase.Platform.Helpers.NavigationHelper.Instance().popupHtml(theHtml, Unibase.Platform.Helpers.Size.Medium, function () {
  64. $(document).on('click', '#btn_TaskSummaryProjectClose', function () {
  65. var panel = $("#_bizgaze_modal").prev('.modal')[0].getAttribute('id');
  66. $('#' + panel).modal('hide');
  67. $('#' + panel).remove();
  68. });
  69. var oldvalue = Number($("#txtTaskSummary_ProjectId").val());
  70. $('#txtTaskSummary_ProjectId option[value=' + oldvalue + ']').removeAttr("selected");
  71. $(document).on('change', '#txtTaskSummary_ProjectId', function () {
  72. $("#txtTaskSummary_ProjectId").val(Number($(this).val()));
  73. $('#txtTaskSummary_ProjectId option[value=' + $(this).val() + ']').attr("selected", 'true');
  74. $(document).on('click', '#btn_TaskSummaryProjectApply', function () {
  75. Unibase.Platform.Helpers.NavigationHelper.Instance().closePopUp();
  76. Bizgaze.Apps.PM.Components.TaskSummary.Instance().SummaryGetWidgetData();
  77. });
  78. });
  79. });
  80. });
  81. $('#TaskSummaryList_search').on('input', function () {
  82. Bizgaze.Apps.PM.Components.TaskSummary.Instance().SummaryGetWidgetData();
  83. });
  84. }
  85. init(containerid) {
  86. var instance = this;
  87. instance.fileCacheHelper.loadJsFiles(["apps/pm/components/tasksummary.js"], function () {
  88. instance.navigationHelper.loadSection(0, containerid, Bizgaze.Apps.PM.Components.TaskSummary.Instance(), null, null);
  89. });
  90. }
  91. defaultData() {
  92. var html = '<div id="tasksummary_lists" class="card shadow-hover">' +
  93. '<div class="card-header card-header-action">' +
  94. '<span id="hf_widget_title" class="ml-10">Employee Task Summary</span></a>' +
  95. '<div class="d-flex align-items-center card-action-wrap">' +
  96. '<span class="pull-right badge badge-light badge-pill badge-outline mr-10 span_TaskSummaryListsearch_count">0</span>' +
  97. '<a id="tasksummaryExport" class="mr-15" href="javascript:void(0);"><i class="fa fa-download" aria-hidden="true"></i></a>' +
  98. '<a id="tasksummaryprojectfilter" class="" href="javascript:void(0);"><i class="ti-filter"></i></a>' +
  99. '<div class="d-flex" id="div_List_addnew">' +
  100. '</div>' +
  101. '</div>' +
  102. '</div>' +
  103. '<div class="card-body pa-0">' +
  104. '<div class="Dynamic-ListSearch"><div class="col-sm-12 mb-10"><div class="floating-label-form-group" id="div_Listsearch">' +
  105. '<input type="text" maxlength="50" class="form-control floating-label-control" id="TaskSummaryList_search" value="" data-isdynamic="false" ' +
  106. 'placeholder="Search" data-placeholder="Search" data-label="Search"><span id="TaskSummaryclearSearch" class="hidden" ' +
  107. 'style="right: 20px; cursor: pointer; float: right; margin-top: -35px; position: absolute; color: rgb(50, 65, 72);">x</span></div></div></div>' +
  108. '<div class="font-14 d-none d-md-block card-header bg-cyan-light-5 listwidget_headertext" id="listwidget_headertext">' +
  109. '<div class="row"><div class="col-10"><div class="row"><div class="col-sm-4"><strong>Employee Name</strong></div><div class="col-sm-2"><strong>Upcoming Tasks</strong></div>' +
  110. '<div class="col-sm-2" ><strong> Inpro.Tasks</strong></div><div class="col-sm-2"><strong>Testing Inpro.Tasks</strong></div><div class="col-sm-2"><strong>Closed Tasks</strong></div></div></div>' +
  111. '<div class="col-sm-2"><strong>Reopened Tasks</strong></div></div > ' +
  112. '</div>' +
  113. '<div>' +
  114. '<ul class="list-group list-group-flush tasksummary_lists font-14" id="tasksummary_lists_container">' +
  115. '<li><div class="text-center"><i class="fa fa-spinner fa-spin font-20 mt-40"></i></div></li>' +
  116. '</ul>' +
  117. '</div>' +
  118. '</div>' +
  119. '<div id="pagination-footer">' +
  120. '<div class="card-footer text-muted Div_pagination mb-12">' +
  121. '<div class="col-12 row">' +
  122. '<div class="col-sm-2 pl-0">' +
  123. '<span style="font-weight:bold" id="GrandTotaltext" class="text-dark">Grand Total</span>' +
  124. '</div>' +
  125. '<div class="col-sm-2">' +
  126. '<span style="font-weight:bold" id="UpcomingTaskstext" class="text-dark"></span>' +
  127. '</div>' +
  128. '<div class="col-sm-2 text-right">' +
  129. '<span style="font-weight:bold" id="InproTaskstext" class="text-dark"></span>' +
  130. '</div>' +
  131. '<div class="col-sm-2 text-right">' +
  132. '<span style="font-weight:bold" id="TestingInproTaskstext" class="text-dark"></span>' +
  133. '</div>' +
  134. '<div class="col-sm-2 text-right">' +
  135. '<span style="font-weight:bold" id="ClosedTaskstext" class="text-dark"></span>' +
  136. '</div>' +
  137. '<div class="col-sm-2 text-right">' +
  138. '<span style="font-weight:bold" id="ReopenedTaskstext" class="text-dark"></span>' +
  139. '<input type="hidden" id="hfportletwidgetid" />' +
  140. '</div>' +
  141. '</div>' +
  142. '</div>' +
  143. '</div>' +
  144. '</div>' +
  145. '</div>';
  146. $("#divTaskSummary").html(html);
  147. }
  148. loadProjects() {
  149. Bizgaze.Apps.PM.Managers.TaskManager.Instance().getProjects().then(function (response) {
  150. var selectedProject = new Option("All", "0");
  151. $("#txtTaskSummary_ProjectId").append(selectedProject);
  152. if (response.result != "") {
  153. var data = response.result;
  154. for (let i = 0; i < data.length; i++) {
  155. var selectedProject = new Option(data[i].ProjectName, data[i].ProjectId);
  156. $("#txtTaskSummary_ProjectId").append(selectedProject);
  157. }
  158. $("#hfTaskSummaryAutoCompleteId_ProjectId").val(Number($("#txtTaskSummary_ProjectId").val()));
  159. $("#txtTaskSummary_ProjectId").val($("#txtTaskSummary_ProjectId option:eq(1)").val());
  160. $('#txtTaskSummary_ProjectId option:eq(1)').attr('selected', 'selected');
  161. Bizgaze.Apps.PM.Components.TaskSummary.Instance().SummaryGetWidgetData();
  162. }
  163. });
  164. }
  165. SummaryGetWidgetData() {
  166. var instance = this;
  167. let FromDate;
  168. let ToDate;
  169. FromDate = $('.CommonFilter_FromDate').val();
  170. ToDate = $('.CommonFilter_ToDate').val();
  171. if (FromDate == undefined && ToDate == undefined) {
  172. let fdate = [moment().subtract(29, 'days'), moment()][0];
  173. let tdate = [moment().subtract(29, 'days'), moment()][1];
  174. FromDate = fdate.format(instance.serverFormat);
  175. ToDate = tdate.format(instance.serverFormat);
  176. }
  177. let reportObj = {
  178. FromDate: FromDate,
  179. ToDate: ToDate,
  180. WidgetId: Number($("#txtTaskSummary_ProjectId").val()),
  181. Title: $("#TaskSummaryList_search").val()
  182. };
  183. Bizgaze.Apps.PM.Managers.TaskManager.Instance().getTaskSummaryData(reportObj).then(function (response) {
  184. var newData = JSON.parse(JSON.stringify(response));
  185. var upcomingcount = 0;
  186. var inprocount = 0;
  187. var testingcount = 0;
  188. var closedcount = 0;
  189. var reopenedcount = 0;
  190. var html = '';
  191. if (newData != "") {
  192. var result = JSON.parse(newData);
  193. $('#div_TeamMembers_Details_NoData').remove();
  194. $("#pagination-footer").removeClass("hidden");
  195. $(".span_TaskSummaryListsearch_count").text(result.length + ' Resources');
  196. for (let i = 0; i < result.length; i++) {
  197. var data = result[i];
  198. upcomingcount += data.upcomingtaskcount;
  199. inprocount += data.inprotaskcount;
  200. testingcount += data.testinprotaskcount;
  201. closedcount += data.closedtaskcount;
  202. reopenedcount += data.reopenedtaskcount;
  203. html += '<li class="list-group-item employee-item added-employee-item employee-task-duration"><input type="hidden">' +
  204. '<div class="row"><div class="col-10"><div class="row"><div class="col-sm-4"><span>' +
  205. '<a style="text-decoration:underline;" class="font-bold" href="#"><span>' + data.employeename + '</span></a></span><span>(' + data.projectname + ')</span></div>' +
  206. '<div class="col-sm-2"><span class="upcoming">' + data.upcomingtasks + '</span><span style="background-color:#00ffcc" class="upcomingcount btn-xs ml-5 pl-10 pr-10">' + data.upcomingtaskcount + '</span></div>' +
  207. '<div class="col-sm-2"><span class="inprogress">' + data.inprotasks + '</span>' +
  208. '<span style="background-color:#f5b48c" class="inprogresscount btn-xs ml-5 pl-10 pr-10">' + data.inprotaskcount + '</span></div>' +
  209. '<div class="col-sm-2"><span class="testinprogress">' + data.testinprotasks + '</span><span style="background-color:skyblue" class="testinprogresscount btn-xs ml-5 pl-10 pr-10">' + data.testinprotaskcount + '</span></div>' +
  210. '<div class="col-sm-2"><span class="closed">' + data.closedprotasks + '</span><span style="background-color:#f5b48c" class="closedtaskcount btn-xs ml-5 pl-10 pr-10">' + data.closedtaskcount + '</span></div>' +
  211. '</div></div>' +
  212. '<div class="col-sm-2"><span class="reopened">' + data.reopenedtasks + '</span>' +
  213. '<span style="background-color:#c4a6a1;color:black" class="reopenedcount btn-xs ml-5 pl-10 pr-10">' + data.reopenedtaskcount + '</span></div></div></li>';
  214. }
  215. $("#tasksummary_lists_container").html(html);
  216. Bizgaze.Apps.PM.Components.TaskSummary.Instance().calculateGrandTotal('upcoming', upcomingcount);
  217. Bizgaze.Apps.PM.Components.TaskSummary.Instance().calculateGrandTotal('inprogress', inprocount);
  218. Bizgaze.Apps.PM.Components.TaskSummary.Instance().calculateGrandTotal('testinprogress', testingcount);
  219. Bizgaze.Apps.PM.Components.TaskSummary.Instance().calculateGrandTotal('closed', closedcount);
  220. Bizgaze.Apps.PM.Components.TaskSummary.Instance().calculateGrandTotal('reopened', reopenedcount);
  221. }
  222. else {
  223. $(".employee-task-duration").remove();
  224. $('#div_TeamMembers_Details_NoData').remove();
  225. $("#pagination-footer").addClass("hidden");
  226. $('#listwidget_headertext').after('<div class="alert alert-info ma-0" id="div_TeamMembers_Details_NoData">There is no Data</div>');
  227. }
  228. });
  229. }
  230. calculateGrandTotal(cls, count) {
  231. var totalh = 0;
  232. var totalm = 0;
  233. $('.' + cls).each(function () {
  234. if (($(this).text())) {
  235. var val = $(this).text();
  236. if (val.indexOf(":") >= 0) {
  237. val.replace('h', '');
  238. val.replace('m', '');
  239. var h = parseInt((val).split(':')[0]);
  240. var m = parseInt((val).split(':')[1]);
  241. totalh += h;
  242. totalm += m;
  243. }
  244. else if ($(this).text().indexOf("h") >= 0) {
  245. val.replace('h', '');
  246. var h = parseInt(val);
  247. totalh += h;
  248. }
  249. else if (val.indexOf("m") >= 0) {
  250. val.replace('m', '');
  251. var m = parseInt(val);
  252. totalm += m;
  253. }
  254. }
  255. });
  256. totalh += Math.floor(totalm / 60);
  257. totalm = totalm % 60;
  258. if (cls == "upcoming")
  259. $('#UpcomingTaskstext').text((totalh < 10 ? '0' : '') + totalh.toString() + 'h:' + (totalm < 10 ? '0' : '') + totalm.toString() + 'm' + '(' + count + ')' + '');
  260. else if (cls == "inprogress")
  261. $('#InproTaskstext').text((totalh < 10 ? '0' : '') + totalh.toString() + 'h:' + (totalm < 10 ? '0' : '') + totalm.toString() + 'm' + '(' + count + ')' + '');
  262. else if (cls == "testinprogress")
  263. $('#TestingInproTaskstext').text((totalh < 10 ? '0' : '') + totalh.toString() + 'h:' + (totalm < 10 ? '0' : '') + totalm.toString() + 'm' + '(' + count + ')' + '');
  264. else if (cls == "closed")
  265. $('#ClosedTaskstext').text((totalh < 10 ? '0' : '') + totalh.toString() + 'h:' + (totalm < 10 ? '0' : '') + totalm.toString() + 'm' + '(' + count + ')' + '');
  266. else if (cls == "reopened")
  267. $('#ReopenedTaskstext').text((totalh < 10 ? '0' : '') + totalh.toString() + 'h:' + (totalm < 10 ? '0' : '') + totalm.toString() + 'm' + '(' + count + ')' + '');
  268. }
  269. exportData() {
  270. var instance = this;
  271. let FromDate;
  272. let ToDate;
  273. FromDate = $('.CommonFilter_FromDate').val();
  274. ToDate = $('.CommonFilter_ToDate').val();
  275. if (FromDate == undefined && ToDate == undefined) {
  276. let fdate = [moment().subtract(29, 'days'), moment()][0];
  277. let tdate = [moment().subtract(29, 'days'), moment()][1];
  278. FromDate = fdate.format(instance.serverFormat);
  279. ToDate = tdate.format(instance.serverFormat);
  280. }
  281. var postData = {
  282. FromDate: FromDate,
  283. ToDate: ToDate,
  284. WidgetId: Number($("#txtTaskSummary_ProjectId").val())
  285. };
  286. Bizgaze.Apps.PM.Managers.TaskManager.Instance().getTaskSummaryData(postData).then(function (response) {
  287. var newData = JSON.parse(JSON.stringify(response));
  288. var rows = new Array();
  289. var upcomingtaskcount = 0;
  290. var inprotaskcount = 0;
  291. var testinginprotaskcount = 0;
  292. var closedcount = 0;
  293. var reopenedtaskcount = 0;
  294. if (newData != "") {
  295. var result = JSON.parse(newData);
  296. for (var i = 0; i < result.length; i++) {
  297. var data = result[i];
  298. var cell = new Array();
  299. cell.push(data.employeename);
  300. cell.push(data.upcomingtasks);
  301. cell.push(data.upcomingtaskcount);
  302. cell.push(data.inprotasks);
  303. cell.push(data.inprotaskcount);
  304. cell.push(data.testinprotasks);
  305. cell.push(data.testinprotaskcount);
  306. cell.push(data.closedprotasks);
  307. cell.push(data.closedtaskcount);
  308. cell.push(data.reopenedtasks);
  309. cell.push(data.reopenedtaskcount);
  310. rows.push({ Id: i, cell: cell });
  311. upcomingtaskcount += data.upcomingtaskcount;
  312. inprotaskcount += data.inprotaskcount;
  313. testinginprotaskcount += data.testinprotaskcount;
  314. closedcount += parseInt(data.closedtaskcount);
  315. reopenedtaskcount += parseInt(data.reopenedtaskcount);
  316. }
  317. var totalcell = new Array();
  318. var upcomingtasks = $("#UpcomingTaskstext").text().replace(/ *\([^)]*\) */g, "");
  319. var inprotasks = $("#InproTaskstext").text().replace(/ *\([^)]*\) */g, "");
  320. var testinginprotasks = $("#TestingInproTaskstext").text().replace(/ *\([^)]*\) */g, "");
  321. var closedtasks = $("#ClosedTaskstext").text().replace(/ *\([^)]*\) */g, "");
  322. var reopenedtasks = $("#ReopenedTaskstext").text().replace(/ *\([^)]*\) */g, "");
  323. totalcell.push("GrandTotal");
  324. totalcell.push(upcomingtasks);
  325. totalcell.push(upcomingtaskcount);
  326. totalcell.push(inprotasks);
  327. totalcell.push(inprotaskcount);
  328. totalcell.push(testinginprotasks);
  329. totalcell.push(testinginprotaskcount);
  330. totalcell.push(closedtasks);
  331. totalcell.push(closedcount);
  332. totalcell.push(reopenedtasks);
  333. totalcell.push(reopenedtaskcount);
  334. rows.push({ Id: i + 1, cell: totalcell });
  335. var columns = [
  336. { ColumnName: "EmployeeName" },
  337. { ColumnName: "UpcomingTasks" },
  338. { ColumnName: "UpcomingTaskCount" },
  339. { ColumnName: "InprogressTasks" },
  340. { ColumnName: "InprogressTaskcount" },
  341. { ColumnName: "TestingInProgress" },
  342. { ColumnName: "TestingInProgressCount" },
  343. { ColumnName: "ClosedTasks" },
  344. { ColumnName: "ClosedTasksCount" },
  345. { ColumnName: "ReopenedTasks" },
  346. { ColumnName: "ReopenedTaskCount" }
  347. ];
  348. result.columns = columns;
  349. result.rows = rows;
  350. Bizgaze.Apps.PM.Components.TaskSummary.Instance().exportToExcel(result, "export");
  351. }
  352. });
  353. }
  354. exportToExcel(pagedList, filename) {
  355. var finalVal = "data:text/csv;charset=utf-8,";
  356. for (var i = 0; i < pagedList.columns.length; i++) {
  357. var cvalue = pagedList.columns[i];
  358. var innerValue = cvalue === null ? '' : cvalue.ColumnName.toString();
  359. var result = innerValue.replace(/"/g, '""');
  360. if (result.search(/("|,|\n)/g) >= 0)
  361. result = '"' + result + '"';
  362. if (i > 0)
  363. finalVal += ',';
  364. finalVal += result;
  365. }
  366. finalVal += '\n';
  367. for (var i = 0; i < pagedList.rows.length; i++) {
  368. var value = pagedList.rows[i].cell;
  369. for (var j = 0; j < value.length; j++) {
  370. var innerValue = value[j] === null ? '' : value[j].toString();
  371. var result = innerValue.replace(/"/g, '""');
  372. if (result.search(/("|,|\n)/g) >= 0)
  373. result = '"' + result + '"';
  374. if (j > 0)
  375. finalVal += ',';
  376. finalVal += result;
  377. }
  378. finalVal += '\n';
  379. }
  380. var encodedUri = encodeURI(finalVal);
  381. var link = document.createElement("a");
  382. document.body.appendChild(link);
  383. link.setAttribute("href", encodedUri);
  384. link.setAttribute("download", "my_data.csv");
  385. link.click();
  386. }
  387. static Instance() {
  388. if (this.instance === undefined) {
  389. this.instance = new TaskSummary();
  390. }
  391. return this.instance;
  392. }
  393. }
  394. Components.TaskSummary = TaskSummary;
  395. })(Components = PM.Components || (PM.Components = {}));
  396. })(PM = Apps.PM || (Apps.PM = {}));
  397. })(Apps = Bizgaze.Apps || (Bizgaze.Apps = {}));
  398. })(Bizgaze || (Bizgaze = {}));