Built files from Bizgaze WebServer
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

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 = {}));